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 1weCC0-004dCX-03 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 13:38:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1weCBy-003L1l-2x for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2026 13:38:30 +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 1weCBx-003L1H-2n for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 13:38:30 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1weCBt-00000000lOU-3yjd for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2026 13:38:28 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-c0efc7ef797so567638566b.2 for ; Mon, 29 Jun 2026 06:38:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782740304; cv=none; d=google.com; s=arc-20260327; b=qhZgoJmzTcPBWopDqaBTDLUT71/E4Y00b3r9oSOd6Lg0Y2F+8c/8E8H7W9EQbihY4n ZSRwtXoSJlt38MQoTlmYKsP9eBqAzSYPCcHRBe+L3N0fAUuH0vUjVTYXMJFzeRIF1w0R Tr98nIaXJRhqFYHR1TxwzQKzZri46Kws88u75EhT5sBXz32W4+CJ/GtO5D/iaCbPK546 vf2YAHcy2YwRTyQe117Teuz2pyHTkKLmym/EMu0asUXmMoWO90JjK/Or51Bvn7pwbm8B Cr1KX+szRb3VuT0C3Mbu99h+fDzwyd3JVLRMgma2jbfbHomOWxjS6xrgO7O+8TAjjrNO YfMA== 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=7gs+buWjhZggKj8OsIvhpQLqp9Bmj0c8dBKtQdlNv0U=; fh=voMueszrVpFqnJJtWzMp0Najac8EkXZQAsLylYWD2Uk=; b=MSa7o7ir/wU5buBvW+hpk/5iPCUHR9MH+TmN1L0El34vFcgwkrSwFWx9WZU47O8qfF QwrcrH28BJNIyjGeuV5SYwQWwDdhVeQdwUgRmqa2nlAk+XjjSkROqSPYQNOLeV0k+oyI XwTCKaztcCciFX0qs4mysvIiTxSPbfgyVKWgUcJzHd+rT7OJBbSygDSqJoIfuCssQAHi tgMg9Pf7ao5T7uu+7fyIeGPxy7PRUk6uZyZ4bt+zQFJNccOkW1IosYETV+Gzru+blvUD rl4bJdnUnsoQcm8nQ1RciDqwa7ZuIyc07vJL1RMQNWvR3NGnbjio+DLoiZc8png+/lJv BdAA==; 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=1782740304; x=1783345104; 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=7gs+buWjhZggKj8OsIvhpQLqp9Bmj0c8dBKtQdlNv0U=; b=U9uLbMynKYf4e8mmMlgpvRyXSkJDlRTxisA2zlTL8L6FGaV3b0H0JokDPn7M5l7b/L LeZSwtfRlh0apjxINPnxlP7gYK5mTtIcwcXOeK5kgj+fDPtXAyh3Y+49pkp1ROimWmMh YuiYQynxPUhNYbkknm9MsTqzLBSTtfW18n9Z2H0Yj4RsbbPG6UrkPcWtN8a0LBHIc9TC 9dHvy0qxTHd0yDpt9kQ+/BeglpLr8ClBSMImGuF/MqM83OlH0nGwhMZQTzCw2bJUE1Vg D+IHuvhZx8hOIsngM/MumDO5szi54WGIMt8g+KxMQFibhXGOuj5ZwsQXpikf+kehLUvL rL0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782740304; x=1783345104; 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=7gs+buWjhZggKj8OsIvhpQLqp9Bmj0c8dBKtQdlNv0U=; b=EoScW0CqBNf02F0FwVyOffKXFAtcv4xJjlBJkvib27m1FUDjTeoQJQFUSPThAkMMQW bz96ldfFniEvOHhOg3iP+dplKxrS2P7lgkHXOrjtgY2O0O8GASrDYMhpZtniH0xusg/f YlF4EcKp2CsPGDPILL1AUqWrPRxoIrtcYx7KHPdxQ7S2mj964gEXxEGpBJHEtMWLhLAF z4WlVhziTS1ouERF3/ctX7wL8qqn4MnXh0+UR03w31Q644hB98QMLYCyEw+lGHTHXBSM niKMG/dWFuoATTBZnLmE4JiI2WfNKd+2iq2GuZTs6eXY4hloKAFtO9wp+dtQjWqEdGuh /Ihg== X-Gm-Message-State: AOJu0YwhONmmT0YdzbBnRMTfp4+757WJbiBydm58qhreZ4FNHQk3I7dS KTTNP5wvv7Ox6MidEe4zOMQ75PISypMnaSMNCmk8p7oiKD1s0W13IBmxrclXlF/9XOt7Dv2TtYH tE9Bx594oduLPMZDlscX7/G0uU/VCdyLpUNKVjccr X-Gm-Gg: AfdE7clXdADVhU2LCjM4p/kwwGyBhrjVkvC2SFR6qH5Du5VQDzt0Le62xQV324uz3KT RFDXjkq+cj6tf0bkoVuZebSS8D5UB1DFACxP4ftNq9yV08mkT4p2OK/IPFK44fmvqlLawn4TwQW 5CGZJIqAR1QH8EA9xHa6bt4ZRhsk3Y/MLAl4ImWxQY3yc5faQ216GTpAaBhzHNLy/Qz7z+j9x5F cnCkrG20KL5JSzz3GGOCWDHbmY0qRGZRfFOgMJP6BhY1BG5zWMJsN+Hz2EP9cVaCUmDR5rapw== X-Received: by 2002:a17:906:9f8f:b0:c12:7f25:cc59 with SMTP id a640c23a62f3a-c127f25cde3mr58714766b.16.1782740303932; Mon, 29 Jun 2026 06:38:23 -0700 (PDT) MIME-Version: 1.0 References: <983C7B03-D9C3-4F15-8913-7616EC5E6414@gmail.com> <20260623.162104.775158751399277188.horikyota.ntt@gmail.com> In-Reply-To: From: Akshay Joshi Date: Mon, 29 Jun 2026 19:08:11 +0530 X-Gm-Features: AVVi8CctW1CTo6hH5nhNGMNnWkaEZCruRmf45EPlnCpugylP9CovsLpsTeIE-sA Message-ID: Subject: Re: [PATCH] Add pg_get_table_ddl() to reconstruct CREATE TABLE statements To: Rui Zhao Cc: pgsql-hackers@lists.postgresql.org, marcos@f10.com.br, horikyota.ntt@gmail.com, li.evan.chao@gmail.com, Zsolt Parragi Content-Type: multipart/mixed; boundary="0000000000008b6d290655649298" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008b6d290655649298 Content-Type: multipart/alternative; boundary="0000000000008b6d280655649296" --0000000000008b6d280655649296 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Fixed some compiler warnings. The *v13* patch is ready for review/test. On Mon, Jun 29, 2026 at 4:10=E2=80=AFPM Akshay Joshi wrote: > > > On Sun, Jun 28, 2026 at 10:14=E2=80=AFPM Rui Zhao = wrote: > >> Hi Akshay, >> >> Nice patch -- server-side CREATE TABLE reconstruction is something we >> want in >> production. I tested v11 on current master and it round-trips correctly >> across the documented coverage, including the recent grammar (VIRTUAL >> columns, NOT ENFORCED, temporal WITHOUT OVERLAPS / PERIOD) and state set >> later via ALTER. A few comments: >> >> 1. Real bug in schema_qualified =3D> false. strip_schema_prefix() strips= the >> base prefix anywhere in code position with no token-boundary check, so a >> cross-schema name whose schema ends with the base schema's name gets >> mangled: >> >> postgres=3D# CREATE SCHEMA xs; >> CREATE SCHEMA >> postgres=3D# CREATE TABLE xs.reftbl(id int PRIMARY KEY); >> CREATE TABLE >> postgres=3D# CREATE SCHEMA s; >> CREATE SCHEMA >> postgres=3D# CREATE TABLE s.orders(id int PRIMARY KEY, ref int >> REFERENCES xs.reftbl(id)); >> CREATE TABLE >> postgres=3D# SELECT d FROM >> pg_get_table_ddl('s.orders'::regclass,'schema_qualified','false') d; >> d >> >> ------------------------------------------------------------------------= --------------------- >> CREATE TABLE orders (id integer NOT NULL, ref integer); >> ALTER TABLE orders OWNER TO postgres; >> ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY (id); >> ALTER TABLE orders ADD CONSTRAINT orders_ref_fkey FOREIGN KEY (ref) >> REFERENCES xreftbl(id); >> (4 rows) >> >> The last FK line says REFERENCES xreftbl(id); it should be xs.reftbl(id)= , >> and the result doesn't replay. Gating the match on a token boundary fixe= s >> it -- though see (2), which would remove this code path (and the bug) >> entirely. >> > > Fixed. > >> >> 2. Bigger picture: is schema_qualified needed at all? None of the existi= ng >> pg_get_*def / pg_get_*ddl functions have such a knob, so this would be t= he >> lone exception. The established convention is to let search_path decide >> (generate_relation_name): pg_get_viewdef and pg_get_constraintdef alread= y >> work that way, and pg_get_indexdef supports it too via >> pg_get_indexdef(idx, 0, true) (the PRETTYFLAG_SCHEMA code path). It is >> genuinely what we want in production -- the caller >> controls qualification through search_path. Set it to the table's schema >> for >> unqualified output, or to pg_catalog (or '') for fully-qualified >> schema.table; pg_dump itself dumps under an empty search_path >> (ALWAYS_SECURE_SEARCH_PATH_SQL) for exactly this reason. Following the >> convention would also drop the option and the strip_schema_prefix code >> (and >> this bug). >> >> That last point matters: there's no robust way to strip a schema prefix >> out >> of already-generated SQL by text processing. Doing it safely means >> re-tokenizing arbitrary SQL (string literals, quoted identifiers, dollar >> quotes, comments, casts, operators, ...), and strip_schema_prefix is a >> hand-rolled partial scanner of exactly that. It shows -- it has already >> needed several over-stripping fixes during review (the base name appeari= ng >> inside a string literal, and inside a quoted identifier), and the >> token-boundary case in (1) is yet another. Deciding qualification at >> generation time (generate_relation_name) avoids the whole class: the >> backend's real deparser already gets this right, rather than a post-hoc >> string pass trying to re-derive it. >> > > Done. strip_schema_prefix and append_stripped_stmt are gone. Instead of > post-processing, I added four thin wrappers in ruleutils.c. Let the > deparser decide qualification at generation time: > - pg_get_indexdef_ddl passes PRETTYFLAG_SCHEMA to the worker, enabling > generate_relation_name instead of generate_qualified_relation_name. > - pg_get_ruledef_ddl =E2=80=94 same flag. > - pg_get_constraintdef_body =E2=80=94 returns body only (FK targets alrea= dy use > generate_relation_name); emit_local_constraints now builds the ALTER TABL= E > ctx->qualname ADD CONSTRAINT prefix itself. > - pg_get_statisticsobjdef_ddl =E2=80=94 uses StatisticsObjIsVisible() to = qualify > the statistics object name > *The schema_qualified=3Dfalse path still narrows search_path to the base > schema, which is what makes all four helpers emit unqualified names for > same-schema objects. The option is kept for per-call convenience.* > >> 3. typedefs.list is missing TableDdlContext and LocalNotNullEntry, so >> pgindent leaves the "Type * var" pointer spacing in ~30 places -- for >> example the forward declarations at ddlutils.c:226-237: >> >> static void append_stmt(TableDdlContext * ctx); >> >> There is also a stale comment at ddlutils.c:1830 in append_column_defs()= : >> inherited columns are described as "emitted by the INHERITS clause (once >> implemented)", but INHERITS is implemented now. >> >> 4. Related to (2): a temporary table's default output qualifies it with >> the >> session-private pg_temp_NN schema (e.g. CREATE TEMPORARY TABLE pg_temp_3= .t >> ...), which won't replay anywhere else. A reconstructed temp table shoul= d >> just be CREATE TEMPORARY TABLE t (...) -- the TEMPORARY keyword already >> puts >> it in pg_temp, so the schema name should never be emitted. This also fal= ls >> out for free under the search_path convention in (2): pg_temp is always = in >> the effective search_path, so the table is visible and wouldn't be >> qualified >> in the first place. >> >> 5. The commit message is out of sync with the code and func-info.sgml on >> the >> option interface: it still says "include and exclude" and lists plural >> kind >> names (indexes, foreign_keys, triggers, policies, partitions), whereas t= he >> code and docs use only/except and singular names (index, foreign_key, >> trigger, policy, partition). Looks like a leftover from the >> include/exclude -> only/except rename. (FWIW on the naming itself, >> include/exclude is the more common convention for this kind of list >> parameter -- pg_dump has --exclude-table/-schema/-extension, etc. -- whi= le >> only/except reads more like the SQL keywords.) >> > > Fixed 3, 4 and 5. > > The v12 patch is ready for review/test. > >> >> Otherwise it looks good. >> >> Thanks, >> Rui >> > --0000000000008b6d280655649296 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Fixed some compiler warnings. The v13 patch is read= y for review/test.

On Mon, Jun 29, 2026 at 4:10=E2=80= =AFPM Akshay Joshi <aks= hay.joshi@enterprisedb.com> wrote:


<= div class=3D"gmail_quote">
On Sun, Jun= 28, 2026 at 10:14=E2=80=AFPM Rui Zhao <zhaorui126@gmail.com> wrote:
Hi Akshay,

Nice patch -- server-side CREATE TABLE reconstruction is something we want = in
production. I tested v11 on current master and it round-trips correctly
across the documented coverage, including the recent grammar (VIRTUAL
columns, NOT ENFORCED, temporal WITHOUT OVERLAPS / PERIOD) and state set later via ALTER. A few comments:

1. Real bug in schema_qualified =3D> false. strip_schema_prefix() strips= the
base prefix anywhere in code position with no token-boundary check, so a cross-schema name whose schema ends with the base schema's name gets mangled:

postgres=3D# CREATE SCHEMA xs;
CREATE SCHEMA
postgres=3D# CREATE TABLE xs.reftbl(id int PRIMARY KEY);
CREATE TABLE
postgres=3D# CREATE SCHEMA s;
CREATE SCHEMA
postgres=3D# CREATE TABLE s.orders(id int PRIMARY KEY, ref int
REFERENCES xs.reftbl(id));
CREATE TABLE
postgres=3D# SELECT d FROM
pg_get_table_ddl('s.orders'::regclass,'schema_qualified',&#= 39;false') d;
=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 d
---------------------------------------------------------------------------= ------------------
=C2=A0CREATE TABLE orders (id integer NOT NULL, ref integer);
=C2=A0ALTER TABLE orders OWNER TO postgres;
=C2=A0ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY (id);
=C2=A0ALTER TABLE orders ADD CONSTRAINT orders_ref_fkey FOREIGN KEY (ref) REFERENCES xreftbl(id);
(4 rows)

The last FK line says REFERENCES xreftbl(id); it should be xs.reftbl(id), and the result doesn't replay. Gating the match on a token boundary fix= es
it -- though see (2), which would remove this code path (and the bug) entir= ely.

=C2=A0 =C2=A0Fixed.=C2=A0

2. Bigger picture: is schema_qualified needed at all? None of the existing<= br> pg_get_*def / pg_get_*ddl functions have such a knob, so this would be the<= br> lone exception. The established convention is to let search_path decide
(generate_relation_name): pg_get_viewdef and pg_get_constraintdef already work that way, and pg_get_indexdef supports it too via
pg_get_indexdef(idx, 0, true) (the PRETTYFLAG_SCHEMA code path). It is
genuinely what we want in production -- the caller
controls qualification through search_path. Set it to the table's schem= a for
unqualified output, or to pg_catalog (or '') for fully-qualified schema.table; pg_dump itself dumps under an empty search_path
(ALWAYS_SECURE_SEARCH_PATH_SQL) for exactly this reason. Following the
convention would also drop the option and the strip_schema_prefix code (and=
this bug).

That last point matters: there's no robust way to strip a schema prefix= out
of already-generated SQL by text processing. Doing it safely means
re-tokenizing arbitrary SQL (string literals, quoted identifiers, dollar quotes, comments, casts, operators, ...), and strip_schema_prefix is a
hand-rolled partial scanner of exactly that. It shows -- it has already
needed several over-stripping fixes during review (the base name appearing<= br> inside a string literal, and inside a quoted identifier), and the
token-boundary case in (1) is yet another. Deciding qualification at
generation time (generate_relation_name) avoids the whole class: the
backend's real deparser already gets this right, rather than a post-hoc=
string pass trying to re-derive it.

=C2= =A0Done. strip_schema_prefix a= nd append_stripped_stmt are gone. Instead of post-processing, I added four = thin wrappers in ruleutils.c. Let the deparser decide qualification at gene= ration time:=C2=A0
- pg_get_indexdef_ddl passes PRETTYFLAG_SCHEMA to the worker, = enabling generate_relation_name instead of generate_qualified_relation_name= .
- pg_get_ruledef_ddl =E2=80=94 same flag.
- pg_get_co= nstraintdef_body =E2=80=94 returns body only (FK targets already use genera= te_relation_name); emit_local_constraints now builds the ALTER TABLE ctx-&g= t;qualname ADD CONSTRAINT prefix itself.
- pg_get_statisticsobjde= f_ddl =E2=80=94 uses StatisticsObjIsVisible() to qualify the statistics obj= ect name =C2=A0 =C2=A0=C2=A0
The schema_qualified=3Dfalse path= still narrows search_path to the base schema, which is what makes all four= helpers emit unqualified names for same-schema objects. The option is kept= for per-call convenience.
3. typedefs.list is missing TableDdlContext and LocalNotNullEntry, so
pgindent leaves the "Type * var" pointer spacing in ~30 places --= for
example the forward declarations at ddlutils.c:226-237:

=C2=A0 =C2=A0 static void append_stmt(TableDdlContext * ctx);

There is also a stale comment at ddlutils.c:1830 in append_column_defs(): inherited columns are described as "emitted by the INHERITS clause (on= ce
implemented)", but INHERITS is implemented now.

4. Related to (2): a temporary table's default output qualifies it with= the
session-private pg_temp_NN schema (e.g. CREATE TEMPORARY TABLE pg_temp_3.t<= br> ...), which won't replay anywhere else. A reconstructed temp table shou= ld
just be CREATE TEMPORARY TABLE t (...) -- the TEMPORARY keyword already put= s
it in pg_temp, so the schema name should never be emitted. This also falls<= br> out for free under the search_path convention in (2): pg_temp is always in<= br> the effective search_path, so the table is visible and wouldn't be qual= ified
in the first place.

5. The commit message is out of sync with the code and func-info.sgml on th= e
option interface: it still says "include and exclude" and lists p= lural kind
names (indexes, foreign_keys, triggers, policies, partitions), whereas the<= br> code and docs use only/except and singular names (index, foreign_key,
trigger, policy, partition). Looks like a leftover from the
include/exclude -> only/except rename. (FWIW on the naming itself,
include/exclude is the more common convention for this kind of list
parameter -- pg_dump has --exclude-table/-schema/-extension, etc. -- while<= br> only/except reads more like the SQL keywords.)

=C2=A0 =C2=A0Fixed 3, 4 and 5.=C2=A0

=C2=A0 =C2= =A0The v12 patch is ready for review/test.

Otherwise it looks good.

Thanks,
Rui
--0000000000008b6d280655649296-- --0000000000008b6d290655649298 Content-Type: application/octet-stream; name="v13-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Disposition: attachment; filename="v13-0001-Add-pg_get_table_ddl-to-reconstruct-CREATE-TABLE.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqz9jdz00 RnJvbSBiZmY5YjU3OWI5ZTdkNzBiOWI2ZmNhNTk4Y2Y3YTYyNzRhNTEyNTQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBUdWUsIDIgSnVuIDIwMjYgMTQ6MTg6NDAgKzA1MzAKU3ViamVjdDogW1BB VENIIHYxM10gQWRkIHBnX2dldF90YWJsZV9kZGwoKSB0byByZWNvbnN0cnVjdCBDUkVBVEUgVEFC TEUKIHN0YXRlbWVudHMKClRoZSBmdW5jdGlvbiByZWNvbnN0cnVjdHMgdGhlIENSRUFURSBUQUJM RSBzdGF0ZW1lbnQgZm9yIGFuIG9yZGluYXJ5IG9yCnBhcnRpdGlvbmVkIHRhYmxlLCBmb2xsb3dl ZCBieSB0aGUgQUxURVIgVEFCTEUgLyBDUkVBVEUgSU5ERVggLwpDUkVBVEUgUlVMRSAvIENSRUFU RSBTVEFUSVNUSUNTIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlc3RvcmUgaXRzIGZ1bGwKZGVmaW5p dGlvbi4gIEVhY2ggc3RhdGVtZW50IGlzIHJldHVybmVkIGFzIGEgc2VwYXJhdGUgcm93LgoKU3Vw cG9ydGVkIHBlci1jb2x1bW4gZmVhdHVyZXM6IGRhdGEgdHlwZSB3aXRoIHR5cGUgbW9kaWZpZXJz LCBDT0xMQVRFLApTVE9SQUdFLCBDT01QUkVTU0lPTiAocGdseiAvIGx6NCksIEdFTkVSQVRFRCBB TFdBWVMgQVMgKGV4cHIpClNUT1JFRC9WSVJUVUFMLCBHRU5FUkFURUQgQUxXQVlTfEJZIERFRkFV TFQgQVMgSURFTlRJVFkgKHdpdGggc2VxdWVuY2UKb3B0aW9ucyksIERFRkFVTFQsIE5PVCBOVUxM LCBhbmQgcGVyLWNvbHVtbiBhdHRvcHRpb25zIGVtaXR0ZWQgYXMKQUxURVIgQ09MVU1OIFNFVCAo Li4uKS4KClN1cHBvcnRlZCB0YWJsZS1sZXZlbCBmZWF0dXJlczogVU5MT0dHRUQsIElOSEVSSVRT LCBQQVJUSVRJT04gQlkgKFJBTkdFCi8gTElTVCAvIEhBU0ggcGFyZW50cyksIFBBUlRJVElPTiBP RiBwYXJlbnQgRk9SIFZBTFVFUyAoRlJPTS9UTywgV0lUSAptb2R1bHVzL3JlbWFpbmRlciwgREVG QVVMVCksIFVTSU5HIHRhYmxlIGFjY2VzcyBtZXRob2QsIFdJVEgKKHJlbG9wdGlvbnMpLCBUQUJM RVNQQUNFLCBhbmQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzIGluIHRoZQpDUkVBVEUgVEFCTEUg Ym9keS4KClN1cHBvcnRlZCBzdWItb2JqZWN0cyAocmUtdXNpbmcgZXhpc3RpbmcgZGVwYXJzZSBo ZWxwZXJzIGZyb20KcnVsZXV0aWxzLmMpOiBpbmRleGVzIHZpYSBwZ19nZXRfaW5kZXhkZWZfZGRs LCBjb25zdHJhaW50cwooUFJJTUFSWSBLRVksIFVOSVFVRSwgRk9SRUlHTiBLRVksIEVYQ0xVREUs IG5hbWVkIE5PVCBOVUxMKSB2aWEKcGdfZ2V0X2NvbnN0cmFpbnRkZWZfYm9keSwgcnVsZXMgdmlh IHBnX2dldF9ydWxlZGVmX2RkbCwgZXh0ZW5kZWQKc3RhdGlzdGljcyB2aWEgcGdfZ2V0X3N0YXRp c3RpY3NvYmpkZWZfZGRsLCBSRVBMSUNBIElERU5USVRZCk5PVEhJTkcvRlVMTC9VU0lORyBJTkRF WCwgQUxURVIgVEFCTEUgRU5BQkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWSwKYW5kIGNoaWxk LWxvY2FsIERFRkFVTFQgb3ZlcnJpZGVzIG9uIGluaGVyaXRhbmNlL3BhcnRpdGlvbiBjaGlsZHJl bi4KRERMIGZvciBwYXJ0aXRpb24gY2hpbGRyZW4gb2YgYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJl bnQgaXMgYXBwZW5kZWQKYWZ0ZXIgdGhlIHBhcmVudCBieSBkZWZhdWx0LgoKT3B0aW9ucyBhcmUg cGFzc2VkIGFzIHZhcmlhZGljIG5hbWUvdmFsdWUgcGFpcnMuICBGb3JtYXR0aW5nIG9wdGlvbnMK YXJlIHByZXR0eSAoYm9vbGVhbiksIG93bmVyIChib29sZWFuLCBjb250cm9scyB0aGUKQUxURVIg VEFCTEUgLi4uIE9XTkVSIFRPIGxpbmUpLCB0YWJsZXNwYWNlIChib29sZWFuLCBjb250cm9scyB0 aGUKVEFCTEVTUEFDRSBjbGF1c2UpLCBhbmQgc2NoZW1hX3F1YWxpZmllZCAoYm9vbGVhbiwgY29u dHJvbHMgd2hldGhlcgp0aGUgdGFyZ2V0IHRhYmxlIGFuZCBzYW1lLXNjaGVtYSBzaWJsaW5nIHJl ZmVyZW5jZXMgYXJlIGVtaXR0ZWQgd2l0aAp0aGVpciBzY2hlbWEgcHJlZml4KS4gIFRlbXBvcmFy eSB0YWJsZXMgYXJlIG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQKcmVnYXJkbGVzcyBvZiBzY2hlbWFf cXVhbGlmaWVkOiB0aGUgVEVNUE9SQVJZIGtleXdvcmQgYWxyZWFkeSBwbGFjZXMKdGhlbSBpbiBw Z190ZW1wLCBhbmQgZW1pdHRpbmcgcGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIGJlCm5vbi1yZXBs YXlhYmxlLiAgT2JqZWN0LWNsYXNzIGZpbHRlcmluZyBpcyBleHByZXNzZWQgdGhyb3VnaCB0d28K bXV0dWFsbHktZXhjbHVzaXZlIG9wdGlvbnMsIG9ubHkgYW5kIGV4Y2VwdCwgZWFjaCB0YWtpbmcg YQpjb21tYS1zZXBhcmF0ZWQgbGlzdCBkcmF3biBmcm9tIHRoZSBraW5kIHZvY2FidWxhcnkKe3Rh YmxlLCBpbmRleCwgcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hlY2ssIGZvcmVpZ25fa2V5LCBleGNs dXNpb24sCnJ1bGUsIHN0YXRpc3RpY3MsIHRyaWdnZXIsIHBvbGljeSwgcmxzLCByZXBsaWNhX2lk ZW50aXR5LCBwYXJ0aXRpb259LgpXaGVuIG9ubHkgaXMgc2V0LCBvbmx5IHRoZSBsaXN0ZWQga2lu ZHMgYXJlIGVtaXR0ZWQ7IHdoZW4gZXhjZXB0IGlzCnNldCwgZXZlcnkga2luZCBleGNlcHQgdGhl IGxpc3RlZCBvbmVzIGlzIGVtaXR0ZWQ7IHdoZW4gbmVpdGhlciBpcwpzZXQsIGV2ZXJ5IGtpbmQg aXMgZW1pdHRlZC4gIFVua25vd24ga2luZCBuYW1lcyByYWlzZSBhbiBlcnJvciBhdApwYXJzZSB0 aW1lLiAgTk9UIE5VTEwgaXMgZGVsaWJlcmF0ZWx5IG5vdCBwYXJ0IG9mIHRoZSB2b2NhYnVsYXJ5 IC0gaXQKaXMgYWx3YXlzIGVtaXR0ZWQgdG8gcHJldmVudCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0 IHNpbGVudGx5IGFjY2VwdApOVUxMcyB0aGUgc291cmNlIHdvdWxkIGhhdmUgcmVqZWN0ZWQuICBF eGNsdWRpbmcgcHJpbWFyeV9rZXkgb24gYQp0YWJsZSB3aG9zZSBSRVBMSUNBIElERU5USVRZIGlz IFVTSU5HIElOREVYIG9mIHRoZSBwcmltYXJ5IGtleSBpcwpyZWplY3RlZCB1bmxlc3MgcmVwbGlj YV9pZGVudGl0eSBpcyBhbHNvIGV4Y2x1ZGVkLCBzbyB0aGUgZW1pdHRlZCBEREwKbmV2ZXIgcmVm ZXJlbmNlcyBhbiBpbmRleCBpdCBqdXN0IGRyb3BwZWQuCgpEZWZhdWx0IG9taXNzaW9uIGNvbnZl bnRpb246IGV2ZXJ5IG9wdGlvbmFsIGNsYXVzZSBpcyBkcm9wcGVkIHdoZW4gaXRzCnZhbHVlIGVx dWFscyB3aGF0IHRoZSBzeXN0ZW0gd291bGQgcmVhcHBseSBvbiByb3VuZC10cmlwLCBpbmNsdWRp bmcKdHlwZS1kZWZhdWx0IENPTExBVEUsIHBlci10eXBlIFNUT1JBR0UsIHRoZSBhdXRvLWdlbmVy YXRlZCBpZGVudGl0eQpzZXF1ZW5jZSBuYW1lIGFuZCBwYXJhbWV0ZXIgZGVmYXVsdHMsIGhlYXAg YWNjZXNzIG1ldGhvZCwgZGVmYXVsdApSRVBMSUNBIElERU5USVRZLCBkaXNhYmxlZCBSTFMgdG9n Z2xlcywgZW1wdHkgcmVsb3B0aW9ucywgYW5kIHRoZQpkZWZhdWx0IHRhYmxlc3BhY2UuCgpBdXRo b3I6IEFrc2hheSBKb3NoaSA8YWtzaGF5Lmpvc2hpQGVudGVycHJpc2VkYi5jb20+ClJldmlld2Vk LWJ5OiBNYXJjb3MgUGVnb3Jhcm8gPG1hcmNvc0BmMTAuY29tLmJyPgpSZXZpZXdlZC1ieTogWnNv bHQgUGFycmFnaSA8enNvbHQucGFycmFnaUBwZXJjb25hLmNvbT4KUmV2aWV3ZWQtYnk6IEt5b3Rh cm8gSG9yaWd1Y2hpIDxob3Jpa3lvdGEubnR0QGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8g TGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBSdWkgWmhhbyA8emhhb3J1 aTEyNkBnbWFpbC5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwgICAg ICAgICAgICAgIHwgIDEyNCArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgICAg ICAgICAgICAgfCAgIDkzICsKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jICAgICAg ICAgICAgICB8ICAgMzAgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jICAgICAg ICAgICAgICB8IDIxNTIgKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYyAgICAgICAgICAgICB8ICAgODcgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdf aW5oZXJpdHMuaCAgICAgICAgICAgICB8ICAgIDEgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdCAgICAgICAgICAgICAgIHwgICAgNyArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy90YWJs ZWNtZHMuaCAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGls cy5oICAgICAgICAgICAgICAgICB8ICAgIDQgKwogLi4uL3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0 X3RhYmxlX2RkbC5vdXQgICAgIHwgMTI2NSArKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3Bh cmFsbGVsX3NjaGVkdWxlICAgICAgICAgICAgfCAgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9wZ19nZXRfdGFibGVfZGRsLnNxbCAgICAgfCAgNzQxICsrKysrKwogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgICAgIHwgICAgMiArCiAxMyBmaWxlcyBjaGFuZ2Vk LCA0NDk3IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGdfZ2V0X3RhYmxlX2RkbC5vdXQKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wZ19nZXRfdGFibGVfZGRsLnNxbAoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21sIGIvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy1pbmZvLnNnbWwKaW5kZXggNjllZjM4NTdjZmEuLjNhNmFkNjNjNjM0IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvZnVuYy9mdW5jLWluZm8uc2dtbApAQCAtMzk2MCw2ICszOTYwLDEzMCBAQCBhY2wgICAgICB8 IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgaXMg ZmFsc2UsIHRoZSA8bGl0ZXJhbD5PV05FUjwvbGl0ZXJhbD4gY2xhdXNlIGlzIG9taXR0ZWQuCiAg ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KKyAgICAgIDxyb3c+CisgICAgICAg PGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJl Ij4KKyAgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2dldF90YWJsZV9k ZGw8L3ByaW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdf Z2V0X3RhYmxlX2RkbDwvZnVuY3Rpb24+CisgICAgICAgICggPHBhcmFtZXRlcj50YWJsZTwvcGFy YW1ldGVyPiA8dHlwZT5yZWdjbGFzczwvdHlwZT4KKyAgICAgICAgPG9wdGlvbmFsPiwgPGxpdGVy YWw+VkFSSUFESUM8L2xpdGVyYWw+IDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVyPgorICAg ICAgICA8dHlwZT50ZXh0W108L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAgICAgICAgPHJldHVybnZh bHVlPnNldG9mIHRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFCTEU8L2NvbW1h bmQ+IHN0YXRlbWVudCBmb3IgdGhlCisgICAgICAgIHNwZWNpZmllZCBvcmRpbmFyeSBvciBwYXJ0 aXRpb25lZCB0YWJsZSwgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRB QkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAgICAg PGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQgPGNvbW1hbmQ+Q1JFQVRFIFNUQVRJ U1RJQ1M8L2NvbW1hbmQ+CisgICAgICAgIHN0YXRlbWVudHMgbmVlZGVkIHRvIHJlY3JlYXRlIHRo ZSB0YWJsZSdzIGNvbHVtbnMsIGNvbnN0cmFpbnRzLAorICAgICAgICBpbmRleGVzLCBydWxlcywg ZXh0ZW5kZWQgc3RhdGlzdGljcywgYW5kIHJvdy1sZXZlbCBzZWN1cml0eSBmbGFncy4KKyAgICAg ICAgSW5oZXJpdGVkIGNvbHVtbnMgYW5kIGNvbnN0cmFpbnRzIGFyZSBlbWl0dGVkIGJ5IHRoZSBw YXJlbnQgdGFibGUncworICAgICAgICBEREwgYW5kIGFyZSBub3QgZHVwbGljYXRlZCBvbiBpbmhl cml0YW5jZSBjaGlsZHJlbiBvciBwYXJ0aXRpb25zLgorICAgICAgICBFYWNoIHN0YXRlbWVudCBp cyByZXR1cm5lZCBhcyBhIHNlcGFyYXRlIHJvdy4KKyAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRp b25zIGFyZSBzdXBwb3J0ZWQ6CisgICAgICAgIDxsaXRlcmFsPnByZXR0eTwvbGl0ZXJhbD4gKGJv b2xlYW4pIGZvciBmb3JtYXR0ZWQgb3V0cHV0LAorICAgICAgICA8bGl0ZXJhbD5vd25lcjwvbGl0 ZXJhbD4gKGJvb2xlYW4pIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIDxjb21tYW5kPkFMVEVSIFRB QkxFIC4uLiBPV05FUiBUTzwvY29tbWFuZD4gc3RhdGVtZW50LAorICAgICAgICA8bGl0ZXJhbD50 YWJsZXNwYWNlPC9saXRlcmFsPiAoYm9vbGVhbikgdG8gaW5jbHVkZSB0aGUKKyAgICAgICAgPGxp dGVyYWw+VEFCTEVTUEFDRTwvbGl0ZXJhbD4gY2xhdXNlIG9uIHRoZQorICAgICAgICA8Y29tbWFu ZD5DUkVBVEUgVEFCTEU8L2NvbW1hbmQ+IHN0YXRlbWVudCwgYW5kIHRoZQorICAgICAgICA8bGl0 ZXJhbD5vbmx5PC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ZXhjZXB0PC9saXRlcmFsPgorICAgICAg ICBvcHRpb25zIGRlc2NyaWJlZCBiZWxvdyBmb3IgZmlsdGVyaW5nIHdoaWNoIG9iamVjdCBjbGFz c2VzIGFyZQorICAgICAgICBlbWl0dGVkLgorICAgICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgVGhlIDxsaXRlcmFsPm9ubHk8L2xpdGVyYWw+IGFuZCA8bGl0ZXJhbD5leGNlcHQ8 L2xpdGVyYWw+CisgICAgICAgIG9wdGlvbnMgZWFjaCB0YWtlIGEgY29tbWEtc2VwYXJhdGVkIGxp c3Qgb2Ygb2JqZWN0LWNsYXNzIGtpbmQKKyAgICAgICAgbmFtZXMgYW5kIGFyZSBtdXR1YWxseSBl eGNsdXNpdmUgKHNwZWNpZnlpbmcgYm90aCByYWlzZXMgYW4KKyAgICAgICAgZXJyb3IpLiAgV2hl biA8bGl0ZXJhbD5vbmx5PC9saXRlcmFsPiBpcyBzZXQsIG9ubHkgdGhlCisgICAgICAgIGxpc3Rl ZCBraW5kcyBhcmUgZW1pdHRlZDsgd2hlbiA8bGl0ZXJhbD5leGNlcHQ8L2xpdGVyYWw+IGlzCisg ICAgICAgIHNldCwgZXZlcnkga2luZCA8ZW1waGFzaXM+ZXhjZXB0PC9lbXBoYXNpcz4gdGhlIGxp c3RlZCBvbmVzIGlzCisgICAgICAgIGVtaXR0ZWQuICBXaGVuIG5laXRoZXIgaXMgc2V0ICh0aGUg ZGVmYXVsdCksIGV2ZXJ5IGtpbmQgaXMKKyAgICAgICAgZW1pdHRlZC4gIFdoaXRlc3BhY2UgYXJv dW5kIGVhY2ggZW50cnkgaXMgaWdub3JlZCBhbmQgbWF0Y2hpbmcKKyAgICAgICAgaXMgY2FzZS1p bnNlbnNpdGl2ZTsgYW4gdW5yZWNvZ25pemVkIGtpbmQgbmFtZSByYWlzZXMgYW4gZXJyb3IuCisg ICAgICAgIFRoZSBraW5kIHZvY2FidWxhcnkgaXMKKyAgICAgICAgPGxpdGVyYWw+dGFibGU8L2xp dGVyYWw+LAorICAgICAgICA8bGl0ZXJhbD5pbmRleDwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRl cmFsPnByaW1hcnlfa2V5PC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dW5pcXVlPC9saXRl cmFsPiwKKyAgICAgICAgPGxpdGVyYWw+Y2hlY2s8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5mb3JlaWduX2tleTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0 ZXJhbD4sCisgICAgICAgIDxsaXRlcmFsPnJ1bGU8L2xpdGVyYWw+LAorICAgICAgICA8bGl0ZXJh bD5zdGF0aXN0aWNzPC9saXRlcmFsPiwKKyAgICAgICAgPGxpdGVyYWw+dHJpZ2dlcjwvbGl0ZXJh bD4sCisgICAgICAgIDxsaXRlcmFsPnBvbGljeTwvbGl0ZXJhbD4sCisgICAgICAgIDxsaXRlcmFs PnJsczwvbGl0ZXJhbD4gKHRoZQorICAgICAgICA8Y29tbWFuZD5FTkFCTEU8L2NvbW1hbmQ+Lzxj b21tYW5kPkZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTwvY29tbWFuZD4KKyAgICAgICAgdG9nZ2xl cyksCisgICAgICAgIDxsaXRlcmFsPnJlcGxpY2FfaWRlbnRpdHk8L2xpdGVyYWw+LCBhbmQKKyAg ICAgICAgPGxpdGVyYWw+cGFydGl0aW9uPC9saXRlcmFsPiAodGhlIERETCBmb3IgZWFjaCBkaXJl Y3QKKyAgICAgICAgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFibGUgcGFyZW50 KS4gIFRoZQorICAgICAgICA8bGl0ZXJhbD50YWJsZTwvbGl0ZXJhbD4ga2luZCBncm91cHMgdGhl CisgICAgICAgIDxjb21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gc3RhdGVtZW50IHRvZ2V0 aGVyIHdpdGggdGhlCisgICAgICAgIHJlbGF0ZWQgcGVyLXRhYmxlIDxjb21tYW5kPkFMVEVSIFRB QkxFPC9jb21tYW5kPiBwYXNzZXM6CisgICAgICAgIDxjb21tYW5kPk9XTkVSIFRPPC9jb21tYW5k PiwgY2hpbGQtZGVmYXVsdAorICAgICAgICA8Y29tbWFuZD5TRVQgREVGQVVMVDwvY29tbWFuZD4s IGFuZCBwZXItY29sdW1uCisgICAgICAgIDxjb21tYW5kPlNFVCAoPHJlcGxhY2VhYmxlPmF0dG9w dGlvbnM8L3JlcGxhY2VhYmxlPik8L2NvbW1hbmQ+LgorICAgICAgICA8bGl0ZXJhbD5OT1QgTlVM TDwvbGl0ZXJhbD4gY29uc3RyYWludHMgYXJlIG5vdCBwYXJ0IG9mIHRoZQorICAgICAgICB2b2Nh YnVsYXJ5OyB0aGV5IGFyZSBhbHdheXMgZW1pdHRlZCBhcyBwYXJ0IG9mIHRoZSB0YWJsZSB0bwor ICAgICAgICBhdm9pZCBwcm9kdWNpbmcgc2NoZW1hcyB0aGF0IHNpbGVudGx5IGFjY2VwdAorICAg ICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPiB2YWx1ZXMgdGhlIHNvdXJjZSB3b3VsZCBoYXZl IHJlamVjdGVkLgorICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZCBwYXNzIG9mIGEgdHdv LXBhc3Mgc2NoZW1hIGNsb25lIHRoYXQKKyAgICAgICAgYWRkcyBjcm9zcy10YWJsZSBmb3JlaWdu IGtleXMgYWZ0ZXIgZGF0YSBoYXMgbG9hZGVkIGNhbiBiZQorICAgICAgICB3cml0dGVuIGFzCisg ICAgICAgIDxsaXRlcmFsPm9ubHkgPT4gJ2ZvcmVpZ25fa2V5JzwvbGl0ZXJhbD4sIGFuZCB0aGUK KyAgICAgICAgcHViL3N1Yi1zdHlsZSBjbG9uZSB0aGF0IGtlZXBzIGEgcHJpbWFyeSBrZXkgYnV0 IGRyb3BzIGV2ZXJ5CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnQgY2FuIGJlIHdyaXR0ZW4gYXMK KyAgICAgICAgPGxpdGVyYWw+ZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhj bHVzaW9uJzwvbGl0ZXJhbD4uCisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAg ICBXaGVuIHRoZSB0YWJsZSBoYXMKKyAgICAgICAgPGxpdGVyYWw+UkVQTElDQSBJREVOVElUWSBV U0lORyBJTkRFWDwvbGl0ZXJhbD4gYW5kIHRoZQorICAgICAgICA8bGl0ZXJhbD5yZXBsaWNhX2lk ZW50aXR5PC9saXRlcmFsPiBraW5kIGlzIGluIHRoZSBhY3RpdmUKKyAgICAgICAgZmlsdGVyLCB0 aGUga2luZCB0aGF0IGVtaXRzIHRoZSByZWZlcmVuY2VkIGluZGV4CisgICAgICAgICg8bGl0ZXJh bD5wcmltYXJ5X2tleTwvbGl0ZXJhbD4sIDxsaXRlcmFsPnVuaXF1ZTwvbGl0ZXJhbD4sCisgICAg ICAgIDxsaXRlcmFsPmV4Y2x1c2lvbjwvbGl0ZXJhbD4sIG9yIDxsaXRlcmFsPmluZGV4PC9saXRl cmFsPikgbXVzdAorICAgICAgICBhbHNvIGJlIGluIHRoZSBmaWx0ZXIuICBPdGhlcndpc2UgdGhl IGVtaXR0ZWQKKyAgICAgICAgPGNvbW1hbmQ+QUxURVIgVEFCTEUgLi4uIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVg8L2NvbW1hbmQ+CisgICAgICAgIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRl eCB0aGUgc2FtZSBEREwgbmV2ZXIgcHJvZHVjZWQsIGFuZCB0aGUKKyAgICAgICAgZnVuY3Rpb24g cmVwb3J0cyBhbiBlcnJvciBiZWZvcmUgZW1pdHRpbmcgYW55IHN0YXRlbWVudHMuCisgICAgICAg PC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGxpdGVyYWw+c2NoZW1hX3F1YWxp ZmllZDwvbGl0ZXJhbD4gb3B0aW9uIChib29sZWFuLCBkZWZhdWx0CisgICAgICAgIDxsaXRlcmFs PnRydWU8L2xpdGVyYWw+KSBjb250cm9scyB3aGV0aGVyIHRoZSB0YXJnZXQgdGFibGUncyBvd24K KyAgICAgICAgc2NoZW1hIGlzIGluY2x1ZGVkIGluIHRoZSBnZW5lcmF0ZWQgRERMLiAgV2hlbiBz ZXQgdG8KKyAgICAgICAgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+LCB0aGUgdGFibGUgbmFtZSBp cyBlbWl0dGVkIHVucXVhbGlmaWVkCisgICAgICAgIGluIHRoZSA8Y29tbWFuZD5DUkVBVEUgVEFC TEU8L2NvbW1hbmQ+IGFuZCBldmVyeSBzdWJzZXF1ZW50CisgICAgICAgIDxjb21tYW5kPkFMVEVS IFRBQkxFPC9jb21tYW5kPiwgPGNvbW1hbmQ+Q1JFQVRFIElOREVYPC9jb21tYW5kPiwKKyAgICAg ICAgPGNvbW1hbmQ+Q1JFQVRFIFJVTEU8L2NvbW1hbmQ+LCBhbmQKKyAgICAgICAgPGNvbW1hbmQ+ Q1JFQVRFIFNUQVRJU1RJQ1M8L2NvbW1hbmQ+IHN0YXRlbWVudC4gIFJlZmVyZW5jZXMgdG8KKyAg ICAgICAgb2JqZWN0cyBpbiB0aGUgc2FtZSBzY2hlbWEgYXMgdGhlIHRhcmdldCB0YWJsZSAoaW5o ZXJpdGFuY2UKKyAgICAgICAgcGFyZW50cywgcGFydGl0aW9uIHBhcmVudHMsIGlkZW50aXR5IHNl cXVlbmNlcywgYW5kIGFueQorICAgICAgICBzYW1lLXNjaGVtYSBvYmplY3QgdGhlIGRlcGFyc2Ug aGVscGVycyBoYXBwZW4gdG8gbWVudGlvbikgYXJlCisgICAgICAgIGFsc28gZW1pdHRlZCB1bnF1 YWxpZmllZCwgc28gdGhlIHNjcmlwdCBjYW4gYmUgcmVwbGF5ZWQgdW5kZXIgYQorICAgICAgICBk aWZmZXJlbnQgPHZhcm5hbWU+c2VhcmNoX3BhdGg8L3Zhcm5hbWU+IHRvIHJlY3JlYXRlIHRoZSB0 YWJsZQorICAgICAgICBpbiBhbm90aGVyIHNjaGVtYS4gIENyb3NzLXNjaGVtYSByZWZlcmVuY2Vz IChmb3IgZXhhbXBsZSBhCisgICAgICAgIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhIGRpZmZlcmVu dCBzY2hlbWEpIHJlbWFpbiBxdWFsaWZpZWQgZm9yCisgICAgICAgIGNvcnJlY3RuZXNzLgorICAg ICAgIDwvcGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgQWxsIHRocmVlIGZvcm1zIG9mIDxj b21tYW5kPkNSRUFURSBUQUJMRTwvY29tbWFuZD4gYXJlIHN1cHBvcnRlZDoKKyAgICAgICAgdGhl IG9yZGluYXJ5IGNvbHVtbi1saXN0IGZvcm0sIHRoZSB0eXBlZC10YWJsZSBmb3JtCisgICAgICAg ICg8bGl0ZXJhbD5PRiA8cmVwbGFjZWFibGU+dHlwZV9uYW1lPC9yZXBsYWNlYWJsZT48L2xpdGVy YWw+LCB3aXRoCisgICAgICAgIHBlci1jb2x1bW4gPGxpdGVyYWw+V0lUSCBPUFRJT05TPC9saXRl cmFsPiBvdmVycmlkZXMgZm9yIGxvY2FsCisgICAgICAgIGRlZmF1bHRzLCA8bGl0ZXJhbD5OT1Qg TlVMTDwvbGl0ZXJhbD4sIGFuZCA8bGl0ZXJhbD5DSEVDSzwvbGl0ZXJhbD4KKyAgICAgICAgY29u c3RyYWludHMpLCBhbmQgdGhlIDxsaXRlcmFsPlBBUlRJVElPTiBPRjwvbGl0ZXJhbD4gZm9ybS4K KyAgICAgICAgPGxpdGVyYWw+VEVNUE9SQVJZPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+VU5MT0dH RUQ8L2xpdGVyYWw+CisgICAgICAgIHBlcnNpc3RlbmNlIG1vZGVzIGFyZSBlbWl0dGVkIGZyb20K KyAgICAgICAgPHN0cnVjdGZpZWxkPnJlbHBlcnNpc3RlbmNlPC9zdHJ1Y3RmaWVsZD4uICBGb3Ig dGVtcG9yYXJ5IHRhYmxlcworICAgICAgICByZWdpc3RlcmVkIGluIHRoZSBjdXJyZW50IHNlc3Np b24sIHRoZQorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgREVMRVRFIFJPV1M8L2xpdGVyYWw+ IGFuZAorICAgICAgICA8bGl0ZXJhbD5PTiBDT01NSVQgRFJPUDwvbGl0ZXJhbD4gY2xhdXNlcyBh cmUgZW1pdHRlZDsgdGhlIGRlZmF1bHQKKyAgICAgICAgPGxpdGVyYWw+T04gQ09NTUlUIFBSRVNF UlZFIFJPV1M8L2xpdGVyYWw+IGlzIG9taXR0ZWQuCisgICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgICA8L3Jvdz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKaW5kZXggNGI5ODAyYWFmY2MuLjg5NzE1MWJkNmQxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCkBAIC0yMzYsNiArMjM2LDk5IEBAIGZpbmRfaW5o ZXJpdGFuY2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0 YWNoZWQsCiB9CiAKIAorLyoKKyAqIGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cworICoKKyAqIFJl dHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIE9JRHMgb2YgYWxsIHJlbGF0aW9ucyB0aGF0IHRo ZSByZWxhdGlvbiB3aXRoCisgKiBPSUQgJ3JlbGlkJyBpbmhlcml0cyAqZGlyZWN0bHkqIGZyb20s IGluIGluaHNlcW5vIG9yZGVyICh0aGUgb3JkZXIgaW4gd2hpY2gKKyAqIHRoZXkgc2hvdWxkIGFw cGVhciBpbiBhbiBJTkhFUklUUyBjbGF1c2UpLgorICoKKyAqIFRoZSBzcGVjaWZpZWQgbG9jayB0 eXBlIGlzIGFjcXVpcmVkIG9uIGVhY2ggcGFyZW50IHJlbGF0aW9uIChidXQgbm90IG9uIHRoZQor ICogZ2l2ZW4gcmVsOyBjYWxsZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBsb2NrZWQgaXQpLiAgSWYg bG9ja21vZGUgaXMgTm9Mb2NrCisgKiB0aGVuIG5vIGxvY2tzIGFyZSBhY3F1aXJlZCwgYnV0IGNh bGxlciBtdXN0IGJld2FyZSBvZiByYWNlIGNvbmRpdGlvbnMKKyAqIGFnYWluc3QgcG9zc2libGUg RFJPUHMgb2YgcGFyZW50IHJlbGF0aW9ucy4KKyAqCisgKiBQYXJ0aXRpb24gY2hpbGRyZW4gYWxz byBoYXZlIGEgcGdfaW5oZXJpdHMgZW50cnkgcG9pbnRpbmcgdG8gdGhlCisgKiBwYXJ0aXRpb25l ZCBwYXJlbnQ7IGNhbGxlcnMgdGhhdCBkaXN0aW5ndWlzaCBJTkhFUklUUyBmcm9tIFBBUlRJVElP TiBPRgorICogbXVzdCBjaGVjayByZWxpc3BhcnRpdGlvbiB0aGVtc2VsdmVzLgorICovCitMaXN0 ICoKK2ZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhPaWQgcmVsaWQsIExPQ0tNT0RFIGxvY2ttb2Rl KQoreworCUxpc3QJICAgKmxpc3QgPSBOSUw7CisJUmVsYXRpb24JcmVsYXRpb247CisJU3lzU2Nh bkRlc2Mgc2NhbjsKKwlTY2FuS2V5RGF0YSBrZXlbMV07CisJSGVhcFR1cGxlCWluaGVyaXRzVHVw bGU7CisJT2lkCQkJaW5ocGFyZW50OworCU9pZAkJICAgKm9pZGFycjsKKwlpbnQJCQltYXhvaWRz LAorCQkJCW51bW9pZHMsCisJCQkJaTsKKworCS8qCisJICogU2NhbiBwZ19pbmhlcml0cyB2aWEg dGhlIChpbmhyZWxpZCwgaW5oc2Vxbm8pIGluZGV4IHNvIHRoYXQgdGhlIHJvd3MKKwkgKiBjb21l IG91dCBpbiBpbmhzZXFubyBvcmRlciwgd2hpY2ggaXMgdGhlIG9yZGVyIHJlcXVpcmVkIGZvciB0 aGUKKwkgKiBJTkhFUklUUyBjbGF1c2UuCisJICovCisJbWF4b2lkcyA9IDg7CisJb2lkYXJyID0g KE9pZCAqKSBwYWxsb2MobWF4b2lkcyAqIHNpemVvZihPaWQpKTsKKwludW1vaWRzID0gMDsKKwor CXJlbGF0aW9uID0gdGFibGVfb3BlbihJbmhlcml0c1JlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9j ayk7CisKKwlTY2FuS2V5SW5pdCgma2V5WzBdLAorCQkJCUFudW1fcGdfaW5oZXJpdHNfaW5ocmVs aWQsCisJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0 RGF0dW0ocmVsaWQpKTsKKworCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsYXRpb24sIElu aGVyaXRzUmVsaWRTZXFub0luZGV4SWQsIHRydWUsCisJCQkJCQkJICBOVUxMLCAxLCBrZXkpOwor CisJd2hpbGUgKChpbmhlcml0c1R1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkgIT0gTlVM TCkKKwl7CisJCWluaHBhcmVudCA9ICgoRm9ybV9wZ19pbmhlcml0cykgR0VUU1RSVUNUKGluaGVy aXRzVHVwbGUpKS0+aW5ocGFyZW50OworCQlpZiAobnVtb2lkcyA+PSBtYXhvaWRzKQorCQl7CisJ CQltYXhvaWRzICo9IDI7CisJCQlvaWRhcnIgPSAoT2lkICopIHJlcGFsbG9jKG9pZGFyciwgbWF4 b2lkcyAqIHNpemVvZihPaWQpKTsKKwkJfQorCQlvaWRhcnJbbnVtb2lkcysrXSA9IGluaHBhcmVu dDsKKwl9CisKKwlzeXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCisJdGFibGVfY2xvc2UocmVsYXRp b24sIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIEFjcXVpcmUgbG9ja3MgYW5kIGJ1aWxk IHRoZSByZXN1bHQgbGlzdC4gIFVubGlrZQorCSAqIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4g d2UgZG8gKm5vdCogc29ydCBieSBPSUQ6IGNhbGxlcnMgbmVlZCB0aGUKKwkgKiBzZXFuby1vcmRl cmVkIHRyYXZlcnNhbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtb2lkczsgaSsrKQorCXsK KwkJaW5ocGFyZW50ID0gb2lkYXJyW2ldOworCisJCWlmIChsb2NrbW9kZSAhPSBOb0xvY2spCisJ CXsKKwkJCUxvY2tSZWxhdGlvbk9pZChpbmhwYXJlbnQsIGxvY2ttb2RlKTsKKworCQkJaWYgKCFT ZWFyY2hTeXNDYWNoZUV4aXN0czEoUkVMT0lELCBPYmplY3RJZEdldERhdHVtKGluaHBhcmVudCkp KQorCQkJeworCQkJCVVubG9ja1JlbGF0aW9uT2lkKGluaHBhcmVudCwgbG9ja21vZGUpOworCQkJ CWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJbGlzdCA9IGxhcHBlbmRfb2lkKGxpc3QsIGluaHBh cmVudCk7CisJfQorCisJcGZyZWUob2lkYXJyKTsKKworCXJldHVybiBsaXN0OworfQorCisKIC8q CiAgKiBmaW5kX2FsbF9pbmhlcml0b3JzIC0KICAqCQlSZXR1cm5zIGEgbGlzdCBvZiByZWxhdGlv biBPSURzIGluY2x1ZGluZyB0aGUgZ2l2ZW4gcmVsIHBsdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKaW5kZXggNDcyZGIxMTJmYTcuLjJlMTA4NTY0ZGUwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwpAQCAtNzQ2LDcgKzc0Niw2IEBAIHN0YXRpYyBPYmplY3RBZGRyZXNzIEFURXhlY1NldENv bXByZXNzaW9uKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKmNvbHVtbiwg Tm9kZSAqbmV3VmFsdWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKIAogc3RhdGljIHZvaWQgaW5kZXhf Y29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0b3IgbmV3cmxvY2F0b3IpOwotc3Rh dGljIGNvbnN0IGNoYXIgKnN0b3JhZ2VfbmFtZShjaGFyIGMpOwogCiBzdGF0aWMgdm9pZCBSYW5n ZVZhckNhbGxiYWNrRm9yRHJvcFJlbGF0aW9uKGNvbnN0IFJhbmdlVmFyICpyZWwsIE9pZCByZWxP aWQsCiAJCQkJCQkJCQkJCU9pZCBvbGRSZWxPaWQsIHZvaWQgKmFyZyk7CkBAIC0yNTIyLDcgKzI1 MjEsNyBAQCB0cnVuY2F0ZV9jaGVja19hY3Rpdml0eShSZWxhdGlvbiByZWwpCiAgKiBzdG9yYWdl X25hbWUKICAqCSAgcmV0dXJucyB0aGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGEgdHlwc3RvcmFn ZS9hdHRzdG9yYWdlIGVudW0gdmFsdWUKICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3Qg Y2hhciAqCiBzdG9yYWdlX25hbWUoY2hhciBjKQogewogCXN3aXRjaCAoYykKQEAgLTE5Nzc2LDYg KzE5Nzc1LDMzIEBAIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKIAl9CiB9CiAK Ky8qCisgKiBMb29rIHVwIHRoZSByZWdpc3RlcmVkIE9OIENPTU1JVCBhY3Rpb24gZm9yIGEgcmVs YXRpb24uCisgKgorICogUmV0dXJucyBPTkNPTU1JVF9OT09QIHdoZW4gbm90aGluZyB3YXMgcmVn aXN0ZXJlZCwgd2hpY2ggYWxzbyBjb3ZlcnMKKyAqIHRlbXBvcmFyeSB0YWJsZXMgY3JlYXRlZCB3 aXRoIHRoZSBkZWZhdWx0IE9OIENPTU1JVCBQUkVTRVJWRSBST1dTCisgKiBiZWhhdmlvciAocmVn aXN0ZXJfb25fY29tbWl0X2FjdGlvbigpIHNraXBzIHRob3NlLCBzaW5jZSBubyBhY3Rpb24gaXMK KyAqIG5lZWRlZCBhdCBjb21taXQpLiAgRW50cmllcyBtYXJrZWQgZm9yIGRlbGV0aW9uIGluIHRo ZSBjdXJyZW50CisgKiB0cmFuc2FjdGlvbiBhcmUgaWdub3JlZC4KKyAqLworT25Db21taXRBY3Rp b24KK2dldF9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCkKK3sKKwlMaXN0Q2VsbCAgICpsOwor CisJZm9yZWFjaChsLCBvbl9jb21taXRzKQorCXsKKwkJT25Db21taXRJdGVtICpvYyA9IChPbkNv bW1pdEl0ZW0gKikgbGZpcnN0KGwpOworCisJCWlmIChvYy0+cmVsaWQgIT0gcmVsaWQpCisJCQlj b250aW51ZTsKKwkJaWYgKG9jLT5kZWxldGluZ19zdWJpZCAhPSBJbnZhbGlkU3ViVHJhbnNhY3Rp b25JZCkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gb2MtPm9uY29tbWl0OworCX0KKwlyZXR1cm4g T05DT01NSVRfTk9PUDsKK30KKwogLyoKICAqIFBlcmZvcm0gT04gQ09NTUlUIGFjdGlvbnMuCiAg KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2RkbHV0aWxzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9hZHQvZGRsdXRpbHMuYwppbmRleCBhNzBmMWMyODY1NS4uYjJlMTUzODRiMmEg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9kZGx1dGlscy5jCkBAIC0yMSwxNyArMjEsMzEgQEAKICNpbmNsdWRl ICJhY2Nlc3MvZ2VuYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5j bHVkZSAiYWNjZXNzL3RhYmxlLmgiCisjaW5jbHVkZSAiYWNjZXNzL3RvYXN0X2NvbXByZXNzaW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJjYXRhbG9nL3Bh cnRpdGlvbi5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRhbG9n L3BnX2F1dGhfbWVtYmVycy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5j bHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9u LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCiAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kYXRhYmFzZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGJfcm9sZV9zZXR0aW5nLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9wZ19pbmhlcml0cy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdf cG9saWN5LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19zZXF1ZW5jZS5oIgorI2luY2x1ZGUgImNh dGFsb2cvcGdfc3RhdGlzdGljX2V4dC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFj ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgorI2luY2x1ZGUgImNvbW1hbmRz L2RlZnJlbS5oIgorI2luY2x1ZGUgImNvbW1hbmRzL3RhYmxlY21kcy5oIgogI2luY2x1ZGUgImNv bW1hbmRzL3RhYmxlc3BhY2UuaCIKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL25vZGVzLmgiCiAjaW5jbHVkZSAidXRpbHMvYWNsLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXRldGltZS5o IgpAQCAtNDUsNiArNTksODIgQEAKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKICNpbmNs dWRlICJ1dGlscy92YXJsZW5hLmgiCiAKKy8qIE9wdGlvbiB2YWx1ZSB0eXBlcyBmb3IgRERMIG9w dGlvbiBwYXJzaW5nICovCit0eXBlZGVmIGVudW0KK3sKKwlERExfT1BUX0JPT0wsCisJRERMX09Q VF9URVhULAorCURETF9PUFRfSU5ULAorfSBEZGxPcHRUeXBlOworCisvKgorICogQSBzaW5nbGUg RERMIG9wdGlvbiBkZXNjcmlwdG9yOiBjYWxsZXIgZmlsbHMgaW4gbmFtZSBhbmQgdHlwZSwKKyAq IHBhcnNlX2RkbF9vcHRpb25zIGZpbGxzIGluIGlzc2V0ICsgdGhlIGFwcHJvcHJpYXRlIHZhbHVl IGZpZWxkLgorICovCit0eXBlZGVmIHN0cnVjdCBEZGxPcHRpb24KK3sKKwljb25zdCBjaGFyICpu YW1lOwkJCS8qIG9wdGlvbiBuYW1lIChjYXNlLWluc2Vuc2l0aXZlIG1hdGNoKSAqLworCURkbE9w dFR5cGUJdHlwZTsJCQkvKiBleHBlY3RlZCB2YWx1ZSB0eXBlICovCisJYm9vbAkJaXNzZXQ7CQkJ LyogdHJ1ZSBpZiBjYWxsZXIgc3VwcGxpZWQgdGhpcyBvcHRpb24gKi8KKwkvKiBmaWVsZHMgZm9y IHNwZWNpZmljIG9wdGlvbiB0eXBlcyAqLworCXVuaW9uCisJeworCQlib29sCQlib29sdmFsOwkv KiBmaWxsZWQgaW4gZm9yIERETF9PUFRfQk9PTCAqLworCQljaGFyCSAgICp0ZXh0dmFsOwkvKiBm aWxsZWQgaW4gZm9yIERETF9PUFRfVEVYVCAocGFsbG9jJ2QpICovCisJCWludAkJCWludHZhbDsJ CS8qIGZpbGxlZCBpbiBmb3IgRERMX09QVF9JTlQgKi8KKwl9OworfSBEZGxPcHRpb247CisKKwor LyoKKyAqIE9iamVjdC1jbGFzcyBraW5kcyB0aGF0IHRoZSBvbmx5IC8gZXhjZXB0IG9wdGlvbnMg b24KKyAqIHBnX2dldF90YWJsZV9kZGwgY2FuIGZpbHRlciBvbi4gIE1lbWJlcnMgYXJlIHN0b3Jl ZCBhcyBpbnRlZ2VycyBpbiBhCisgKiBCaXRtYXBzZXQgb24gVGFibGVEZGxDb250ZXh0LiAgS2Vl cCB0YWJsZV9kZGxfa2luZF9uYW1lc1tdIGluIHN5bmMKKyAqIHdpdGggdGhlIG9yZGVyIG9mIGFk ZGl0aW9ucyBoZXJlLgorICovCit0eXBlZGVmIGVudW0gVGFibGVEZGxLaW5kCit7CisJVEFCTEVf RERMX0tJTkRfVEFCTEUsCisJVEFCTEVfRERMX0tJTkRfSU5ERVgsCisJVEFCTEVfRERMX0tJTkRf UFJJTUFSWV9LRVksCisJVEFCTEVfRERMX0tJTkRfVU5JUVVFLAorCVRBQkxFX0RETF9LSU5EX0NI RUNLLAorCVRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZLAorCVRBQkxFX0RETF9LSU5EX0VYQ0xV U0lPTiwKKwlUQUJMRV9ERExfS0lORF9SVUxFLAorCVRBQkxFX0RETF9LSU5EX1NUQVRJU1RJQ1Ms CisJVEFCTEVfRERMX0tJTkRfVFJJR0dFUiwKKwlUQUJMRV9ERExfS0lORF9QT0xJQ1ksCisJVEFC TEVfRERMX0tJTkRfUkxTLAorCVRBQkxFX0RETF9LSU5EX1JFUExJQ0FfSURFTlRJVFksCisJVEFC TEVfRERMX0tJTkRfUEFSVElUSU9OLAorfQkJCVRhYmxlRGRsS2luZDsKKworc3RhdGljIGNvbnN0 IHN0cnVjdAoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJVGFibGVEZGxLaW5kIGtpbmQ7Cit9CQkJ dGFibGVfZGRsX2tpbmRfbmFtZXNbXSA9Cit7CisJeyJ0YWJsZSIsIFRBQkxFX0RETF9LSU5EX1RB QkxFfSwKKwl7ImluZGV4IiwgVEFCTEVfRERMX0tJTkRfSU5ERVh9LAorCXsicHJpbWFyeV9rZXki LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWX0sCisJeyJ1bmlxdWUiLCBUQUJMRV9ERExfS0lO RF9VTklRVUV9LAorCXsiY2hlY2siLCBUQUJMRV9ERExfS0lORF9DSEVDS30sCisJeyJmb3JlaWdu X2tleSIsIFRBQkxFX0RETF9LSU5EX0ZPUkVJR05fS0VZfSwKKwl7ImV4Y2x1c2lvbiIsIFRBQkxF X0RETF9LSU5EX0VYQ0xVU0lPTn0sCisJeyJydWxlIiwgVEFCTEVfRERMX0tJTkRfUlVMRX0sCisJ eyJzdGF0aXN0aWNzIiwgVEFCTEVfRERMX0tJTkRfU1RBVElTVElDU30sCisJeyJ0cmlnZ2VyIiwg VEFCTEVfRERMX0tJTkRfVFJJR0dFUn0sCisJeyJwb2xpY3kiLCBUQUJMRV9ERExfS0lORF9QT0xJ Q1l9LAorCXsicmxzIiwgVEFCTEVfRERMX0tJTkRfUkxTfSwKKwl7InJlcGxpY2FfaWRlbnRpdHki LCBUQUJMRV9ERExfS0lORF9SRVBMSUNBX0lERU5USVRZfSwKKwl7InBhcnRpdGlvbiIsIFRBQkxF X0RETF9LSU5EX1BBUlRJVElPTn0sCit9OworCitzdGF0aWMgdm9pZCBwYXJzZV9kZGxfb3B0aW9u cyhGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgaW50IHZhcmlhZGljX3N0YXJ0LAorCQkJCQkJCSAg RGRsT3B0aW9uICpvcHRzLCBpbnQgbm9wdHMpOworc3RhdGljIEJpdG1hcHNldCAqcGFyc2Vfa2lu ZF9saXN0KGNvbnN0IGNoYXIgKm9wdG5hbWUsIGNvbnN0IGNoYXIgKmxpc3QpOwogc3RhdGljIHZv aWQgYXBwZW5kX2RkbF9vcHRpb24oU3RyaW5nSW5mbyBidWYsIGJvb2wgcHJldHR5LCBpbnQgaW5k ZW50LAogCQkJCQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiAJCQlwZ19hdHRyaWJ1dGVfcHJp bnRmKDQsIDUpOwpAQCAtNTcsNiArMTQ3LDM0MSBAQCBzdGF0aWMgRGF0dW0gcGdfZ2V0X3RhYmxl c3BhY2VfZGRsX3NyZihGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbywgT2lkIHRzaWQpOwogc3RhdGlj IExpc3QgKnBnX2dldF9kYXRhYmFzZV9kZGxfaW50ZXJuYWwoT2lkIGRiaWQsIGJvb2wgcHJldHR5 LAogCQkJCQkJCQkJCSAgYm9vbCBub19vd25lciwgYm9vbCBub190YWJsZXNwYWNlKTsKIAorLyoK KyAqIFBlci1jb2x1bW4gY2FjaGUgb2YgbG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBjb25zdHJh aW50cy4gIEJ1aWx0IG9uY2UKKyAqIGJ5IGNvbGxlY3RfbG9jYWxfbm90X251bGwoKSBhbmQgY29u c3VsdGVkIGJ5IHRoZSBjb2x1bW4tZW1pdCBoZWxwZXJzCisgKiBhbmQgdGhlIHBvc3QtQ1JFQVRF IGNvbnN0cmFpbnQgbG9vcC4gIEVudHJpZXMgd2l0aCBjb25vaWQgPT0gSW52YWxpZE9pZAorICog bWVhbiB0aGUgY29sdW1uIGhhcyBubyBsb2NhbCBOT1QgTlVMTCBjb25zdHJhaW50IHJvdyBpbiBw Z19jb25zdHJhaW50CisgKiAodGhlIGNvbHVtbiBtYXkgc3RpbGwgaGF2ZSBhdHRub3RudWxsPXRy dWUgb24gYSBwcmUtUEctMTgtdXBncmFkZWQKKyAqIGNhdGFsb2csIGluIHdoaWNoIGNhc2UgZW1p dCBwbGFpbiBpbmxpbmUgTk9UIE5VTEwpLgorICovCit0eXBlZGVmIHN0cnVjdCBMb2NhbE5vdE51 bGxFbnRyeQoreworCU9pZAkJCWNvbm9pZDsKKwljaGFyCSAgICpuYW1lOworCWJvb2wJCWlzX2F1 dG87CQkvKiBtYXRjaGVzICI8dGFibGU+Xzxjb2w+X25vdF9udWxsIiAqLworCWJvb2wJCW5vX2lu aGVyaXQ7Cit9CQkJTG9jYWxOb3ROdWxsRW50cnk7CisKKy8qCisgKiBXb3JraW5nIGNvbnRleHQg dGhyZWFkZWQgdGhyb3VnaCB0aGUgcGVyLXBhc3MgaGVscGVycyBiZWxvdy4gIElucHV0cworICog KGNhbGxlci1wcm92aWRlZCBvcHRpb24gZmxhZ3MpIGFyZSBmaWxsZWQgaW4gb25jZSBhdCB0aGUg dG9wIG9mCisgKiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsIGFuZCB0cmVhdGVkIGFzIHJlYWQt b25seSB0aGVyZWFmdGVyLiAgRGVyaXZlZAorICogZmllbGRzIChxdWFsbmFtZSwgbm5fZW50cmll cywgc2tpcF9ub3RudWxsX29pZHMpIGFyZSBjb21wdXRlZCBvbmNlCisgKiBkdXJpbmcgc2V0dXAu ICBFYWNoIHBhc3MgYXBwZW5kcyB0byBjdHgtPmJ1ZiBhbmQgcHVzaGVzIHRoZSBmaW5pc2hlZAor ICogc3RhdGVtZW50IG9udG8gY3R4LT5zdGF0ZW1lbnRzIHZpYSBhcHBlbmRfc3RtdCgpLgorICov Cit0eXBlZGVmIHN0cnVjdCBUYWJsZURkbENvbnRleHQKK3sKKwlSZWxhdGlvbglyZWw7CisJT2lk CQkJcmVsaWQ7CisJYm9vbAkJcHJldHR5OworCWJvb2wJCW5vX293bmVyOworCWJvb2wJCW5vX3Rh Ymxlc3BhY2U7CisJYm9vbAkJc2NoZW1hX3F1YWxpZmllZDsKKworCS8qCisJICogT2JqZWN0LWNs YXNzIGZpbHRlcmluZy4gIElmIG9ubHlfa2luZHMgaXMgbm9uLU5VTEwsIG9ubHkgdGhlCisJICog a2luZHMgaW4gdGhhdCBzZXQgYXJlIGVtaXR0ZWQ7IGlmIGV4Y2VwdF9raW5kcyBpcyBub24tTlVM TCwgYWxsCisJICoga2luZHMgKmV4Y2VwdCogdGhvc2UgaW4gdGhhdCBzZXQgYXJlIGVtaXR0ZWQ7 IGlmIGJvdGggYXJlIE5VTEwsCisJICogZXZlcnkga2luZCBpcyBlbWl0dGVkICh0aGUgZGVmYXVs dCkuICBUaGUgdHdvIGFyZSBtdXR1YWxseQorCSAqIGV4Y2x1c2l2ZSBhdCB0aGUgdXNlci1mYWNp bmcgbGF5ZXIgKHRoZSBTUkYgZW50cnkgcmVqZWN0cworCSAqIHNwZWNpZnlpbmcgYm90aCkuCisJ ICovCisJQml0bWFwc2V0ICAqb25seV9raW5kczsKKwlCaXRtYXBzZXQgICpleGNlcHRfa2luZHM7 CisKKwkvKiBEZXJpdmVkIGR1cmluZyBzZXR1cCAqLworCU9pZAkJCWJhc2VfbmFtZXNwYWNlOwor CWNoYXIJICAgKnF1YWxuYW1lOworCWludAkJCXNhdmVfbmVzdGxldmVsOyAvKiA+PSAwIGlmIHdl IG5hcnJvd2VkIHNlYXJjaF9wYXRoICovCisJTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXM7 CisJTGlzdAkgICAqc2tpcF9ub3RudWxsX29pZHM7CisKKwkvKiBNdXRhYmxlIHdvcmtpbmcgc3Rh dGUgKi8KKwlTdHJpbmdJbmZvRGF0YSBidWY7CisJTGlzdAkgICAqc3RhdGVtZW50czsKK30JCQlU YWJsZURkbENvbnRleHQ7CisKK3N0YXRpYyBMaXN0ICpwZ19nZXRfdGFibGVfZGRsX2ludGVybmFs KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyBib29sIGlzX2tpbmRfaW5jbHVkZWQoY29u c3QgVGFibGVEZGxDb250ZXh0ICpjdHgsIFRhYmxlRGRsS2luZCBraW5kKTsKK3N0YXRpYyB2b2lk IGFwcGVuZF9jb2x1bW5fZGVmcyhTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBib29sIHBy ZXR0eSwKKwkJCQkJCQkgICBib29sIGluY2x1ZGVfY2hlY2ssCisJCQkJCQkJICAgYm9vbCBzY2hl bWFfcXVhbGlmaWVkLAorCQkJCQkJCSAgIExvY2FsTm90TnVsbEVudHJ5ICpubl9lbnRyaWVzKTsK K3N0YXRpYyB2b2lkIGFwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJICBib29sIHByZXR0eSwgYm9vbCBpbmNsdWRlX2No ZWNrLAorCQkJCQkJCQkJCSAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpOworc3RhdGlj IHZvaWQgYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsLAorCQkJCQkJCQkJCQlib29sIHByZXR0eSwgYm9vbCAqZmlyc3QpOworc3RhdGlj IGNoYXIgKmZpbmRfYXR0cmRlZl90ZXh0KFJlbGF0aW9uIHJlbCwgQXR0ck51bWJlciBhdHRudW0s CisJCQkJCQkJICAgTGlzdCAqKmRwY29udGV4dCk7CitzdGF0aWMgY2hhciAqbG9va3VwX3JlbG5h bWVfZm9yX2VtaXQoT2lkIHJlbGlkLCBib29sIHNjaGVtYV9xdWFsaWZpZWQsCisJCQkJCQkJCQkg T2lkIGJhc2VfbmFtZXNwYWNlKTsKK3N0YXRpYyBMb2NhbE5vdE51bGxFbnRyeSAqY29sbGVjdF9s b2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsCisJCQkJCQkJCQkJCQkgIExpc3QgKipza2lwX29p ZHMpOworCitzdGF0aWMgdm9pZCBhcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KTsK K3N0YXRpYyB2b2lkIGVtaXRfb3duZXJfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0 aWMgdm9pZCBlbWl0X2NoaWxkX2RlZmF1bHRfb3ZlcnJpZGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4 KTsKK3N0YXRpYyB2b2lkIGVtaXRfYXR0b3B0aW9ucyhUYWJsZURkbENvbnRleHQgKmN0eCk7Citz dGF0aWMgdm9pZCBlbWl0X2luZGV4ZXMoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZv aWQgZW1pdF9sb2NhbF9jb25zdHJhaW50cyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMg dm9pZCBlbWl0X3J1bGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KTsKK3N0YXRpYyB2b2lkIGVtaXRf c3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3JlcGxp Y2FfaWRlbnRpdHkoVGFibGVEZGxDb250ZXh0ICpjdHgpOworc3RhdGljIHZvaWQgZW1pdF9ybHNf dG9nZ2xlcyhUYWJsZURkbENvbnRleHQgKmN0eCk7CitzdGF0aWMgdm9pZCBlbWl0X3BhcnRpdGlv bl9jaGlsZHJlbihUYWJsZURkbENvbnRleHQgKmN0eCk7CisKKworLyoKKyAqIHBhcnNlX2RkbF9v cHRpb25zCisgKiAJCVBhcnNlIHZhcmlhZGljIG5hbWUvdmFsdWUgb3B0aW9uIHBhaXJzCisgKgor ICogT3B0aW9ucyBhcmUgcGFzc2VkIGFzIGFsdGVybmF0aW5nIGtleS92YWx1ZSB0ZXh0IHBhaXJz LiAgVGhlIGNhbGxlcgorICogcHJvdmlkZXMgYW4gYXJyYXkgb2YgRGRsT3B0aW9uIGRlc2NyaXB0 b3JzIHNwZWNpZnlpbmcgdGhlIGFjY2VwdGVkCisgKiBvcHRpb24gbmFtZXMgYW5kIHRoZWlyIHR5 cGVzOyB0aGlzIGZ1bmN0aW9uIG1hdGNoZXMgZWFjaCBzdXBwbGllZAorICogcGFpciBhZ2FpbnN0 IHRoZSBhcnJheSwgdmFsaWRhdGVzIHRoZSB2YWx1ZSwgYW5kIGZpbGxzIGluIHRoZQorICogcmVz dWx0IGZpZWxkcy4KKyAqLworc3RhdGljIHZvaWQKK3BhcnNlX2RkbF9vcHRpb25zKEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQsCisJCQkJICBEZGxPcHRpb24gKm9w dHMsIGludCBub3B0cykKK3sKKwlEYXR1bQkgICAqYXJnczsKKwlib29sCSAgICpudWxsczsKKwlP aWQJCSAgICp0eXBlczsKKwlpbnQJCQluYXJnczsKKworCS8qIENsZWFyIGFsbCBvdXRwdXQgZmll bGRzICovCisJZm9yIChpbnQgaSA9IDA7IGkgPCBub3B0czsgaSsrKQorCXsKKwkJb3B0c1tpXS5p c3NldCA9IGZhbHNlOworCQlzd2l0Y2ggKG9wdHNbaV0udHlwZSkKKwkJeworCQkJY2FzZSBERExf T1BUX0JPT0w6CisJCQkJb3B0c1tpXS5ib29sdmFsID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQlj YXNlIERETF9PUFRfVEVYVDoKKwkJCQlvcHRzW2ldLnRleHR2YWwgPSBOVUxMOworCQkJCWJyZWFr OworCQkJY2FzZSBERExfT1BUX0lOVDoKKwkJCQlvcHRzW2ldLmludHZhbCA9IDA7CisJCQkJYnJl YWs7CisJCX0KKwl9CisKKwluYXJncyA9IGV4dHJhY3RfdmFyaWFkaWNfYXJncyhmY2luZm8sIHZh cmlhZGljX3N0YXJ0LCB0cnVlLAorCQkJCQkJCQkgICZhcmdzLCAmdHlwZXMsICZudWxscyk7CisK KwlpZiAobmFyZ3MgPD0gMCkKKwkJcmV0dXJuOworCisJLyogSGFuZGxlIERFRkFVTFQgTlVMTCBj YXNlICovCisJaWYgKG5hcmdzID09IDEgJiYgbnVsbHNbMF0pCisJCXJldHVybjsKKworCWlmIChu YXJncyAlIDIgIT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lO VkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJ2YXJpYWRpYyBhcmd1bWVudHMg bXVzdCBiZSBuYW1lL3ZhbHVlIHBhaXJzIiksCisJCQkJIGVycmhpbnQoIlByb3ZpZGUgYW4gZXZl biBudW1iZXIgb2YgdmFyaWFkaWMgYXJndW1lbnRzIHRoYXQgY2FuIGJlIGRpdmlkZWQgaW50byBw YWlycy4iKSkpOworCisJLyoKKwkgKiBGb3IgZWFjaCBvcHRpb24gbmFtZS92YWx1ZSBwYWlyLCBm aW5kIGNvcnJlc3BvbmRpbmcgcG9zaXRpb25hbCBvcHRpb24KKwkgKiBmb3IgdGhlIG9wdGlvbiBu YW1lLCBhbmQgYXNzaWduIHRoZSBvcHRpb24gdmFsdWUuCisJICovCisJZm9yIChpbnQgaSA9IDA7 IGkgPCBuYXJnczsgaSArPSAyKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJY2hhcgkgICAqdmFs c3RyOworCQlEZGxPcHRpb24gICpvcHQgPSBOVUxMOworCisJCWlmIChudWxsc1tpXSkKKwkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkgZXJybXNnKCJvcHRpb24gbmFtZSBhdCB2YXJpYWRpYyBwb3NpdGlvbiAlZCBp cyBudWxsIiwgaSArIDEpKSk7CisKKwkJbmFtZSA9IFRleHREYXR1bUdldENTdHJpbmcoYXJnc1tp XSk7CisKKwkJaWYgKG51bGxzW2kgKyAxXSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJ2YWx1 ZSBmb3Igb3B0aW9uIFwiJXNcIiBtdXN0IG5vdCBiZSBudWxsIiwgbmFtZSkpKTsKKworCQkvKiBG aW5kIG1hdGNoaW5nIG9wdGlvbiBkZXNjcmlwdG9yICovCisJCWZvciAoaW50IGogPSAwOyBqIDwg bm9wdHM7IGorKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAobmFtZSwgb3B0c1tqXS5uYW1l KSA9PSAwKQorCQkJeworCQkJCW9wdCA9ICZvcHRzW2pdOworCQkJCWJyZWFrOworCQkJfQorCQl9 CisKKwkJaWYgKG9wdCA9PSBOVUxMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUo RVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coInVucmVjb2du aXplZCBvcHRpb246IFwiJXNcIiIsIG5hbWUpKSk7CisKKwkJaWYgKG9wdC0+aXNzZXQpCisJCQll cmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJIGVycm1zZygib3B0aW9uIFwiJXNcIiBpcyBzcGVjaWZpZWQgbW9yZSB0aGFu IG9uY2UiLAorCQkJCQkJCW5hbWUpKSk7CisKKwkJdmFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmlu ZyhhcmdzW2kgKyAxXSk7CisKKwkJc3dpdGNoIChvcHQtPnR5cGUpCisJCXsKKwkJCWNhc2UgRERM X09QVF9CT09MOgorCQkJCWlmICghcGFyc2VfYm9vbCh2YWxzdHIsICZvcHQtPmJvb2x2YWwpKQor CQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAorCQkJCQkJCSBlcnJtc2coImludmFsaWQgdmFsdWUgZm9yIGJvb2xlYW4g b3B0aW9uIFwiJXNcIjogJXMiLAorCQkJCQkJCQkJbmFtZSwgdmFsc3RyKSkpOworCQkJCWJyZWFr OworCisJCQljYXNlIERETF9PUFRfVEVYVDoKKwkJCQlvcHQtPnRleHR2YWwgPSB2YWxzdHI7CisJ CQkJdmFsc3RyID0gTlVMTDsJLyogZG9uJ3QgcGZyZWUgYmVsb3cgKi8KKwkJCQlicmVhazsKKwor CQkJY2FzZSBERExfT1BUX0lOVDoKKwkJCQl7CisJCQkJCWNoYXIJICAgKmVuZHA7CisJCQkJCWxv bmcJCXZhbDsKKworCQkJCQllcnJubyA9IDA7CisJCQkJCXZhbCA9IHN0cnRvbCh2YWxzdHIsICZl bmRwLCAxMCk7CisJCQkJCWlmICgqZW5kcCAhPSAnXDAnIHx8IGVycm5vID09IEVSQU5HRSB8fAor CQkJCQkJdmFsIDwgUEdfSU5UMzJfTUlOIHx8IHZhbCA+IFBHX0lOVDMyX01BWCkKKwkJCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHZhbHVlIGZvciBpbnRlZ2VyIG9wdGlv biBcIiVzXCI6ICVzIiwKKwkJCQkJCQkJCQluYW1lLCB2YWxzdHIpKSk7CisJCQkJCW9wdC0+aW50 dmFsID0gKGludCkgdmFsOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCisJCW9wdC0+aXNzZXQg PSB0cnVlOworCisJCWlmICh2YWxzdHIpCisJCQlwZnJlZSh2YWxzdHIpOworCQlwZnJlZShuYW1l KTsKKwl9Cit9CisKKy8qCisgKiBwYXJzZV9raW5kX2xpc3QKKyAqCQlQYXJzZSBhIGNvbW1hLXNl cGFyYXRlZCBsaXN0IG9mIG9iamVjdC1jbGFzcyBraW5kIG5hbWVzIGludG8gYQorICoJCUJpdG1h cHNldCBvZiBUYWJsZURkbEtpbmQgdmFsdWVzLgorICoKKyAqIFdoaXRlc3BhY2UgYXJvdW5kIGVh Y2ggZW50cnkgaXMgdHJpbW1lZC4gIEVtcHR5IGVudHJpZXMgKGUuZy4gImEsLGIiIG9yIGEKKyAq IHRyYWlsaW5nIGNvbW1hKSBhcmUgcmVqZWN0ZWQuICBVbmtub3duIGtpbmQgbmFtZXMgcmFpc2Ug YW4gZXJyb3IgY2l0aW5nCisgKiB0aGUgc3VwcGxpZWQgb3B0aW9uIG5hbWUgc28gdGhlIG1lc3Nh Z2UgcG9pbnRzIGF0IHRoZSBvZmZlbmRpbmcgb3B0aW9uLgorICogUmV0dXJucyBOVUxMIG9ubHkg d2hlbiB0aGUgbGlzdCBpcyBzdHJ1Y3R1cmFsbHkgZW1wdHk7IGNhbGxlcnMgc2hvdWxkCisgKiB0 cmVhdCBhbiBhbGwtd2hpdGVzcGFjZSBsaXN0IGFzIGFuIGVycm9yIHJhdGhlciB0aGFuIGVxdWl2 YWxlbnQgdG8gTlVMTC4KKyAqLworc3RhdGljIEJpdG1hcHNldCAqCitwYXJzZV9raW5kX2xpc3Qo Y29uc3QgY2hhciAqb3B0bmFtZSwgY29uc3QgY2hhciAqbGlzdCkKK3sKKwlCaXRtYXBzZXQgICpy ZXN1bHQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnAgPSBsaXN0OworCisJd2hpbGUgKCpwKQorCXsK KwkJY29uc3QgY2hhciAqc3RhcnQ7CisJCWNvbnN0IGNoYXIgKmVuZDsKKwkJY2hhcgkgICAqdG9r ZW47CisJCWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJLyogU2tpcCBsZWFkaW5nIHdoaXRlc3Bh Y2UuICovCisJCXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKKwkJCXArKzsKKworCQlp ZiAoKnAgPT0gJywnIHx8ICpwID09ICdcMCcpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJy Y29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiZW1w dHkgZW50cnkgaW4gb3B0aW9uIFwiJXNcIiIsIG9wdG5hbWUpKSk7CisKKwkJc3RhcnQgPSBwOwor CQl3aGlsZSAoKnAgJiYgKnAgIT0gJywnICYmICpwICE9ICcgJyAmJiAqcCAhPSAnXHQnKQorCQkJ cCsrOworCQllbmQgPSBwOworCisJCS8qIFNraXAgdHJhaWxpbmcgd2hpdGVzcGFjZS4gKi8KKwkJ d2hpbGUgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnKQorCQkJcCsrOworCisJCWlmICgqcCAhPSAn XDAnICYmICpwICE9ICcsJykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJpbnZhbGlkIGNoYXJh Y3RlciBpbiBvcHRpb24gXCIlc1wiIiwgb3B0bmFtZSkpKTsKKworCQlpZiAoKnAgPT0gJywnKQor CQl7CisJCQlwKys7CisJCQkvKgorCQkJICogQSBjb21tYSBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFu b3RoZXIgZW50cnkuICBXaXRob3V0IHRoaXMKKwkJCSAqIGNoZWNrIGEgdHJhaWxpbmcgY29tbWEg bGlrZSAiaW5kZXgsIiB3b3VsZCBiZSBzaWxlbnRseQorCQkJICogYWNjZXB0ZWQgYXMgImluZGV4 Iiwgd2hpbGUgIixpbmRleCIgYW5kICJpbmRleCwscnVsZSIgYXJlCisJCQkgKiBhbHJlYWR5IHJl amVjdGVkIGFzICJlbXB0eSBlbnRyeSIgLSB0aGlzIGd1YXJkIG1ha2VzIHRoZQorCQkJICogdGhy ZWUgZm9ybXMgY29uc2lzdGVudC4KKwkJCSAqLworCQkJaWYgKCpwID09ICdcMCcpCisJCQkJZXJl cG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCQkJIGVycm1zZygiZW1wdHkgZW50cnkgaW4gb3B0aW9uIFwiJXNcIiIsIG9wdG5h bWUpKSk7CisJCX0KKworCQl0b2tlbiA9IHBuc3RyZHVwKHN0YXJ0LCBlbmQgLSBzdGFydCk7CisK KwkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGhvZih0YWJsZV9kZGxfa2luZF9uYW1lcyk7 IGkrKykKKwkJeworCQkJaWYgKHBnX3N0cmNhc2VjbXAodG9rZW4sIHRhYmxlX2RkbF9raW5kX25h bWVzW2ldLm5hbWUpID09IDApCisJCQl7CisJCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1iZXIocmVz dWx0LAorCQkJCQkJCQkJCShpbnQpIHRhYmxlX2RkbF9raW5kX25hbWVzW2ldLmtpbmQpOworCQkJ CWZvdW5kID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghZm91bmQpCisJ CQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVS X1ZBTFVFKSwKKwkJCQkJIGVycm1zZygidW5yZWNvZ25pemVkIGtpbmQgXCIlc1wiIGluIG9wdGlv biBcIiVzXCIiLAorCQkJCQkJCXRva2VuLCBvcHRuYW1lKSkpOworCisJCXBmcmVlKHRva2VuKTsK Kwl9CisKKwlpZiAocmVzdWx0ID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJIGVycm1zZygib3B0aW9u IFwiJXNcIiBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGtpbmQiLAorCQkJCQkJb3B0bmFtZSkp KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBpc19raW5kX2luY2x1ZGVkCisgKgkJ RGV0ZXJtaW5lIHdoZXRoZXIgRERMIGZvciB0aGUgZ2l2ZW4gb2JqZWN0LWNsYXNzIGtpbmQgc2hv dWxkIGJlCisgKgkJZW1pdHRlZCB1bmRlciB0aGUgY3VycmVudCBvcHRpb25zLgorICovCitzdGF0 aWMgYm9vbAoraXNfa2luZF9pbmNsdWRlZChjb25zdCBUYWJsZURkbENvbnRleHQgKmN0eCwgVGFi bGVEZGxLaW5kIGtpbmQpCit7CisJaWYgKGN0eC0+b25seV9raW5kcyAhPSBOVUxMKQorCQlyZXR1 cm4gYm1zX2lzX21lbWJlcigoaW50KSBraW5kLCBjdHgtPm9ubHlfa2luZHMpOworCWlmIChjdHgt PmV4Y2VwdF9raW5kcyAhPSBOVUxMKQorCQlyZXR1cm4gIWJtc19pc19tZW1iZXIoKGludCkga2lu ZCwgY3R4LT5leGNlcHRfa2luZHMpOworCXJldHVybiB0cnVlOworfQogCiAvKgogICogSGVscGVy IHRvIGFwcGVuZCBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aCBvcHRpb25hbCBwcmV0dHktcHJpbnRp bmcuCkBAIC05NzUsMyArMTQwMCwxNzMwIEBAIHBnX2dldF9kYXRhYmFzZV9kZGwoUEdfRlVOQ1RJ T05fQVJHUykKIAkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOwogCX0KIH0KKworLyoKKyAqIGxv b2t1cF9yZWxuYW1lX2Zvcl9lbWl0CisgKgkJUmV0dXJuIGVpdGhlciB0aGUgc2NoZW1hLXF1YWxp ZmllZCBvciB0aGUgYmFyZSBxdW90ZWQgbmFtZSBvZiBhCisgKgkJcmVsYXRpb24sIGRlcGVuZGlu ZyBvbiB0aGUgc2NoZW1hX3F1YWxpZmllZCBmbGFnLgorICoKKyAqIFRlbXBvcmFyeSByZWxhdGlv bnMgYXJlIG5ldmVyIHNjaGVtYS1xdWFsaWZpZWQgcmVnYXJkbGVzcyBvZgorICogc2NoZW1hX3F1 YWxpZmllZDogdGhlIFRFTVBPUkFSWSBrZXl3b3JkIGluIENSRUFURSBURU1QT1JBUlkgVEFCTEUK KyAqIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiB0aGUgc2Vzc2lvbidzIHRlbXAgc2NoZW1h LCBzbyBlbWl0dGluZworICogcGdfdGVtcF9OTi5yZWxuYW1lIHdvdWxkIHByb2R1Y2UgRERMIHRo YXQgY2Fubm90IGJlIHJlcGxheWVkLgorICoKKyAqIFdoZW4gc2NoZW1hX3F1YWxpZmllZCBpcyB0 cnVlIHRoZSBzY2hlbWEtcXVhbGlmaWVkIG5hbWUgaXMgYWx3YXlzCisgKiByZXR1cm5lZCBmb3Ig bm9uLXRlbXBvcmFyeSByZWxhdGlvbnMuICBXaGVuIGZhbHNlLCB0aGUgYmFyZSByZWxuYW1lCisg KiBpcyByZXR1cm5lZCBvbmx5IGlmIHRoZSB0YXJnZXQgcmVsYXRpb24gbGl2ZXMgaW4gYmFzZV9u YW1lc3BhY2UgKHRoZQorICogbmFtZXNwYWNlIG9mIHRoZSB0YWJsZSB3aG9zZSBEREwgaXMgYmVp bmcgZ2VuZXJhdGVkKTsgb3RoZXJ3aXNlIHRoZQorICogc2NoZW1hLXF1YWxpZmllZCBmb3JtIGlz IHJldHVybmVkLCBiZWNhdXNlIGNyb3NzLXNjaGVtYSByZWZlcmVuY2VzCisgKiAoZm9yIGV4YW1w bGUgYW4gaW5oZXJpdGFuY2UgcGFyZW50IG9yIGZvcmVpZ24ga2V5IHRhcmdldCBpbiBhCisgKiBk aWZmZXJlbnQgc2NoZW1hKSBhcmUgbm90IHNhZmUgdG8gb21pdC4KKyAqCisgKiBUaGlzIHJlcGxh Y2VzIHRoZSB1bnNhZmUgcGF0dGVybgorICoJICBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihn ZXRfbmFtZXNwYWNlX25hbWUoZ2V0X3JlbF9uYW1lc3BhY2Uob2lkKSksCisgKgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdldF9yZWxfbmFtZShvaWQpKQorICogd2hpY2ggZGVyZWZlcmVu Y2VzIE5VTEwgd2hlbiBhIGNvbmN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzIGRyb3BwZWQgdGhlCisg KiByZWZlcmVuY2VkIHJlbGF0aW9uIChvciBpdHMgc2NoZW1hKSBiZXR3ZWVuIHdoZW4gd2UgY2Fj aGVkIGl0cyBPSUQgYW5kCisgKiB3aGVuIHdlIGFzayB0aGUgc3lzY2FjaGUgZm9yIGl0cyBuYW1l LiAgSG9sZGluZyBBY2Nlc3NTaGFyZUxvY2sgb24gYQorICogZGVwZW5kZW50IHJlbGF0aW9uIG1h a2VzIHRoaXMgcmFjZSB2YW5pc2hpbmdseSB1bmxpa2VseSBpbiBwcmFjdGljZSwgYnV0CisgKiB3 ZSBzdGlsbCBkZWZlbmQgYWdhaW5zdCBpdCBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBpcyBhIFNJ R1NFR1YuCisgKgorICogQ2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwZnJlZSgpaW5nIHRoZSBy ZXN1bHQuCisgKi8KK3N0YXRpYyBjaGFyICoKK2xvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KE9pZCBy ZWxpZCwgYm9vbCBzY2hlbWFfcXVhbGlmaWVkLCBPaWQgYmFzZV9uYW1lc3BhY2UpCit7CisJSGVh cFR1cGxlCXRwOworCUZvcm1fcGdfY2xhc3MgcmVsdHVwOworCWNoYXIJICAgKm5zcG5hbWU7CisJ Y2hhcgkgICAqcmVzdWx0OworCisJdHAgPSBTZWFyY2hTeXNDYWNoZTEoUkVMT0lELCBPYmplY3RJ ZEdldERhdHVtKHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHRwKSkKKwkJZXJlcG9y dChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCSBl cnJtc2coInJlbGF0aW9uIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwgcmVsaWQpLAorCQkJ CSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikpKTsK KworCXJlbHR1cCA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QodHApOworCisJLyoKKwkgKiBU ZW1wb3JhcnkgcmVsYXRpb25zIGFyZSBuZXZlciBzY2hlbWEtcXVhbGlmaWVkOiB0aGUgVEVNUE9S QVJZIGtleXdvcmQKKwkgKiBhbHJlYWR5IHBsYWNlcyB0aGVtIGluIHBnX3RlbXAsIGFuZCBwZ190 ZW1wX05OLnJlbG5hbWUgY2Fubm90IGJlCisJICogcmVwbGF5ZWQgaW4gYW55IG90aGVyIHNlc3Np b24uCisJICovCisJaWYgKGlzVGVtcE5hbWVzcGFjZShyZWx0dXAtPnJlbG5hbWVzcGFjZSkpCisJ eworCQlyZXN1bHQgPSBwc3RyZHVwKHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihyZWx0dXAtPnJl bG5hbWUpKSk7CisJCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisJCXJldHVybiByZXN1bHQ7CisJfQor CisJLyogQmFyZSBuYW1lIG9ubHkgd2hlbiBjYWxsZXIgYXNrZWQgYW5kIHRhcmdldCBpcyBpbiB0 aGUgYmFzZSBuYW1lc3BhY2UuICovCisJaWYgKCFzY2hlbWFfcXVhbGlmaWVkICYmIHJlbHR1cC0+ cmVsbmFtZXNwYWNlID09IGJhc2VfbmFtZXNwYWNlKQorCXsKKwkJcmVzdWx0ID0gcHN0cmR1cChx dW90ZV9pZGVudGlmaWVyKE5hbWVTdHIocmVsdHVwLT5yZWxuYW1lKSkpOworCQlSZWxlYXNlU3lz Q2FjaGUodHApOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCW5zcG5hbWUgPSBnZXRfbmFtZXNw YWNlX25hbWUocmVsdHVwLT5yZWxuYW1lc3BhY2UpOworCWlmIChuc3BuYW1lID09IE5VTEwpCisJ eworCQlPaWQJCQluc3BvaWQgPSByZWx0dXAtPnJlbG5hbWVzcGFjZTsKKworCQlSZWxlYXNlU3lz Q2FjaGUodHApOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJ TkVEX09CSkVDVCksCisJCQkJIGVycm1zZygic2NoZW1hIHdpdGggT0lEICV1IGRvZXMgbm90IGV4 aXN0IiwgbnNwb2lkKSwKKwkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJl bnRseSBkcm9wcGVkLiIpKSk7CisJfQorCisJcmVzdWx0ID0gcXVvdGVfcXVhbGlmaWVkX2lkZW50 aWZpZXIobnNwbmFtZSwgTmFtZVN0cihyZWx0dXAtPnJlbG5hbWUpKTsKKworCXBmcmVlKG5zcG5h bWUpOworCVJlbGVhc2VTeXNDYWNoZSh0cCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgor ICogY29sbGVjdF9sb2NhbF9ub3RfbnVsbAorICoJCVNjYW4gcGdfY29uc3RyYWludCBvbmNlIGZv ciBsb2NhbGx5LWRlY2xhcmVkIE5PVCBOVUxMIGNvbnN0cmFpbnRzCisgKgkJb24gcmVsLCByZXR1 cm5pbmcgYSBwYWxsb2MnZCBhcnJheSBpbmRleGVkIGJ5IGF0dG51bSAoMS4ubmF0dHMpLgorICoK KyAqIEVudHJpZXMgd2l0aCBjb25vaWQ9PUludmFsaWRPaWQgbWVhbiAibm8gbG9jYWwgTk9UIE5V TEwgcm93IGZvciB0aGlzCisgKiBjb2x1bW4iLiAgV2hlbiB0aGUgY29uc3RyYWludCBuYW1lIGRv ZXMgbm90IG1hdGNoIHRoZSBhdXRvLWdlbmVyYXRlZAorICogcGF0dGVybiAiPHRhYmxlbmFtZT5f PGNvbHVtbm5hbWU+X25vdF9udWxsIiwgdGhlIGNvbnN0cmFpbnQgT0lEIGlzCisgKiBhcHBlbmRl ZCB0byAqc2tpcF9vaWRzIHNvIHRoZSBwb3N0LUNSRUFURSBjb25zdHJhaW50IGxvb3AgY2FuIGF2 b2lkCisgKiByZS1lbWl0dGluZyBpdCBhcyBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg LSB0aGUgY29sdW1uLWVtaXQKKyAqIHBhc3Mgd2lsbCBwcm9kdWNlIGl0IGlubGluZSBhcyAiQ09O U1RSQUlOVCBuYW1lIE5PVCBOVUxMIiBpbnN0ZWFkLgorICovCitzdGF0aWMgTG9jYWxOb3ROdWxs RW50cnkgKgorY29sbGVjdF9sb2NhbF9ub3RfbnVsbChSZWxhdGlvbiByZWwsIExpc3QgKipza2lw X29pZHMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJ aW50CQkJbmF0dHMgPSB0dXBkZXNjLT5uYXR0czsKKwlMb2NhbE5vdE51bGxFbnRyeSAqZW50cmll czsKKwljb25zdCBjaGFyICpyZWxuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKTsK KwlSZWxhdGlvbgljb25SZWw7CisJU3lzU2NhbkRlc2MgY29uU2NhbjsKKwlTY2FuS2V5RGF0YSBj b25LZXk7CisJSGVhcFR1cGxlCWNvblR1cDsKKworCWVudHJpZXMgPSAoTG9jYWxOb3ROdWxsRW50 cnkgKikgcGFsbG9jMChzaXplb2YoTG9jYWxOb3ROdWxsRW50cnkpICoKKwkJCQkJCQkJCQkJKG5h dHRzICsgMSkpOworCisJY29uUmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRpb25JZCwg QWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgmY29uS2V5LAorCQkJCUFudW1fcGdfY29u c3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJ CQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbCkpKTsKKwljb25TY2FuID0g c3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlwaWROYW1lSW5kZXhJ ZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hpbGUgKEhlYXBUdXBs ZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkpCisJeworCQlGb3Jt X3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1 cCk7CisJCURhdHVtCQljb25rZXlEYXQ7CisJCWJvb2wJCWNvbmtleU51bGw7CisJCUFycmF5VHlw ZSAgKmNvbmtleUFycjsKKwkJaW50MTYJICAgKmNvbmtleVZhbHM7CisJCWludAkJCWF0dG51bTsK KwkJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0OworCQljaGFyCQlhdXRvbmFtZVtOQU1FREFUQUxFTl07 CisKKwkJaWYgKGNvbi0+Y29udHlwZSAhPSBDT05TVFJBSU5UX05PVE5VTEwpCisJCQljb250aW51 ZTsKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQljb25rZXlEYXQg PSBoZWFwX2dldGF0dHIoY29uVHVwLCBBbnVtX3BnX2NvbnN0cmFpbnRfY29ua2V5LAorCQkJCQkJ CQkgUmVsYXRpb25HZXREZXNjcihjb25SZWwpLCAmY29ua2V5TnVsbCk7CisJCWlmIChjb25rZXlO dWxsKQorCQkJY29udGludWU7CisJCWNvbmtleUFyciA9IERhdHVtR2V0QXJyYXlUeXBlUChjb25r ZXlEYXQpOworCisJCS8qCisJCSAqIERlZmVuZCBhZ2FpbnN0IGEgbWFsZm9ybWVkIGNvbmtleTog YSBOT1QgTlVMTCBjb25zdHJhaW50IGlzIGFsd2F5cworCQkgKiBhIHNpbmdsZS1jb2x1bW4gMS1E IGludDIgYXJyYXksIGJ1dCBhIGNvcnJ1cHRlZCBjYXRhbG9nIG9yIGEgZnV0dXJlCisJCSAqIHBh dGNoIHRoYXQgc3RvcmVzIHdpZGVyIGNvbmtleXMgbXVzdG4ndCB0cmlwIHVzIGludG8gcmVhZGlu ZyBwYXN0CisJCSAqIHRoZSBhcnJheSBoZWFkZXIuCisJCSAqLworCQlpZiAoQVJSX05ESU0oY29u a2V5QXJyKSAhPSAxIHx8CisJCQlBUlJfRElNUyhjb25rZXlBcnIpWzBdIDwgMSB8fAorCQkJQVJS X0hBU05VTEwoY29ua2V5QXJyKSB8fAorCQkJQVJSX0VMRU1UWVBFKGNvbmtleUFycikgIT0gSU5U Mk9JRCkKKwkJCWNvbnRpbnVlOworCisJCWNvbmtleVZhbHMgPSAoaW50MTYgKikgQVJSX0RBVEFf UFRSKGNvbmtleUFycik7CisJCWF0dG51bSA9IGNvbmtleVZhbHNbMF07CisJCWlmIChhdHRudW0g PCAxIHx8IGF0dG51bSA+IG5hdHRzKQorCQkJY29udGludWU7CisKKwkJYXR0ID0gVHVwbGVEZXNj QXR0cih0dXBkZXNjLCBhdHRudW0gLSAxKTsKKwkJc25wcmludGYoYXV0b25hbWUsIHNpemVvZihh dXRvbmFtZSksICIlc18lc19ub3RfbnVsbCIsCisJCQkJIHJlbG5hbWUsIE5hbWVTdHIoYXR0LT5h dHRuYW1lKSk7CisKKwkJZW50cmllc1thdHRudW1dLmNvbm9pZCA9IGNvbi0+b2lkOworCQllbnRy aWVzW2F0dG51bV0ubmFtZSA9IHBzdHJkdXAoTmFtZVN0cihjb24tPmNvbm5hbWUpKTsKKwkJZW50 cmllc1thdHRudW1dLmlzX2F1dG8gPSAoc3RyY21wKE5hbWVTdHIoY29uLT5jb25uYW1lKSwgYXV0 b25hbWUpID09IDApOworCQllbnRyaWVzW2F0dG51bV0ubm9faW5oZXJpdCA9IGNvbi0+Y29ubm9p bmhlcml0OworCisJCS8qCisJCSAqIElubGluZSBlbWlzc2lvbiBvZiBOT1QgTlVMTCBvbmx5IGhh cHBlbnMgZm9yIGNvbHVtbnMgdGhhdCB0aGUKKwkJICogY29sdW1uIGxpc3QgYWN0dWFsbHkgZW1p dHMsIGkuZS4gYXR0aXNsb2NhbCBjb2x1bW5zLiAgRm9yIHRob3NlCisJCSAqIHRoZSBpbmxpbmUg cGFzcyBhbHJlYWR5IG1hdGVyaWFsaXplcyB0aGUgY29uc3RyYWludCAoZWl0aGVyIGFzCisJCSAq ICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIGZvciB1c2VyLW5hbWVkLCBvciBhcyBhIGJhcmUK KwkJICogIk5PVCBOVUxMIiB0aGF0IFBHIHJlLWNyZWF0ZXMgdW5kZXIgdGhlIGF1dG8tbmFtZSBw YXR0ZXJuKSwgc28KKwkJICogdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFpbnQgbG9vcCBtdXN0IG5v dCBlbWl0IGEgc2Vjb25kCisJCSAqIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBmb3Ig dGhlIHNhbWUgY29sdW1uIC0gUEcgb25seQorCQkgKiBhbGxvd3Mgb25lIE5PVCBOVUxMIGNvbnN0 cmFpbnQgcGVyIGNvbHVtbiBhbmQgcmVqZWN0cyB0aGUKKwkJICogc2Vjb25kIHdpdGggYSBuYW1l IG1pc21hdGNoIHdoZW5ldmVyIHRoZSBzYXZlZCBhdXRvLW5hbWUgbm8KKwkJICogbG9uZ2VyIG1h dGNoZXMgdGhlIGN1cnJlbnQgdGFibGUgbmFtZSAoZS5nLiBhZnRlciBhIHJlbmFtZSwgb3IKKwkJ ICogd2hlbiBDUkVBVEUgVEFCTEUgdW5pcXVpZmllcyB0aGUgYXV0by1uYW1lIHRvIGRvZGdlIGEg c2VxdWVuY2UKKwkJICogY29sbGlzaW9uKS4gIEZvciBhIGxvY2FsbHktZGVjbGFyZWQgTk9UIE5V TEwgc2l0dGluZyBvbiBhbgorCQkgKiBpbmhlcml0ZWQgKG5vbi1sb2NhbCkgY29sdW1uIHRoZSBp bmxpbmUgcGF0aCBuZXZlciBmaXJlcywgc28KKwkJICogbGVhdmUgdGhlIE9JRCBvdXQgb2Ygc2tp cF9vaWRzIGFuZCBsZXQgdGhlIHBvc3QtQ1JFQVRFIGxvb3AKKwkJICogZW1pdCBBTFRFUiBUQUJM RSAuLi4gQUREIENPTlNUUkFJTlQuCisJCSAqLworCQlpZiAoYXR0LT5hdHRpc2xvY2FsICYmIHNr aXBfb2lkcyAhPSBOVUxMKQorCQkJKnNraXBfb2lkcyA9IGxhcHBlbmRfb2lkKCpza2lwX29pZHMs IGNvbi0+b2lkKTsKKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9z ZShjb25SZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gZW50cmllczsKK30KKworLyoK KyAqIGZpbmRfYXR0cmRlZl90ZXh0CisgKgkJUmV0dXJuIHRoZSBkZXBhcnNlZCBERUZBVUxUL0dF TkVSQVRFRCBleHByZXNzaW9uIGZvciBhdHRudW0gb24gcmVsLAorICoJCW9yIE5VTEwgaWYgbm8g ZW50cnkgZXhpc3RzIGluIFR1cGxlQ29uc3RyLT5kZWZ2YWwuCisgKgorICogVGhlIGNhbGxlciBw YXNzZXMgYSBMaXN0ICoqIHNvIHRoYXQgdGhlIGRlcGFyc2UgY29udGV4dCBpcyBidWlsdCBsYXpp bHkKKyAqIGFuZCByZXVzZWQgYWNyb3NzIGNhbGxzIChkZXBhcnNlX2NvbnRleHRfZm9yIGlzIG5v dCBjaGVhcCkuICBSZXR1cm5lZAorICogc3RyaW5nIGlzIHBhbGxvYydkIGluIHRoZSBjdXJyZW50 IG1lbW9yeSBjb250ZXh0OyBjYWxsZXIgcGZyZWUncyBpdC4KKyAqLworc3RhdGljIGNoYXIgKgor ZmluZF9hdHRyZGVmX3RleHQoUmVsYXRpb24gcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwgTGlzdCAq KmRwY29udGV4dCkKK3sKKwlUdXBsZUNvbnN0ciAqY29uc3RyID0gUmVsYXRpb25HZXREZXNjcihy ZWwpLT5jb25zdHI7CisKKwlpZiAoY29uc3RyID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJ Zm9yIChpbnQgaiA9IDA7IGogPCBjb25zdHItPm51bV9kZWZ2YWw7IGorKykKKwl7CisJCWlmIChj b25zdHItPmRlZnZhbFtqXS5hZG51bSAhPSBhdHRudW0pCisJCQljb250aW51ZTsKKworCQlpZiAo KmRwY29udGV4dCA9PSBOSUwpCisJCQkqZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihS ZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkgUmVsYXRpb25HZXRSZWxp ZChyZWwpKTsKKworCQlyZXR1cm4gZGVwYXJzZV9leHByZXNzaW9uKHN0cmluZ1RvTm9kZShjb25z dHItPmRlZnZhbFtqXS5hZGJpbiksCisJCQkJCQkJCSAgKmRwY29udGV4dCwgZmFsc2UsIGZhbHNl KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBhcHBlbmRfaW5saW5lX2NoZWNrX2Nv bnN0cmFpbnRzCisgKgkJRW1pdCBlYWNoIGxvY2FsbHktZGVjbGFyZWQgQ0hFQ0sgY29uc3RyYWlu dCBvbiByZWwgYXMKKyAqCQkiQ09OU1RSQUlOVCBuYW1lIDxwZ19nZXRfY29uc3RyYWludGRlZj4i LCBzZXBhcmF0ZWQgYnkgJywnIGZyb20gYW55CisgKgkJcHJldmlvdXNseS1lbWl0dGVkIGNvbHVt biBvciBjb25zdHJhaW50LgorICoKKyAqICpmaXJzdCB0cmFja3Mgd2hldGhlciBhbnl0aGluZyBo YXMgYmVlbiBlbWl0dGVkIG9uIHRoaXMgbGlzdCB5ZXQsIHNvIHRoZQorICogY2FsbGVyIGNhbiBj aGFpbiBjb2x1bW4gZW1pc3Npb24gYW5kIGNvbnN0cmFpbnQgZW1pc3Npb24gdGhyb3VnaCB0aGUg c2FtZQorICogYnVmZmVyLiAgSW5oZXJpdGVkIENIRUNLIGNvbnN0cmFpbnRzICghY29uaXNsb2Nh bCkgY29tZSBmcm9tIHRoZSBwYXJlbnQncworICogRERMIGFuZCBhcmVuJ3QgcmVwZWF0ZWQgaGVy ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGVuZF9pbmxpbmVfY2hlY2tfY29uc3RyYWludHMoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBwcmV0dHksCisJCQkJCQkJCWJvb2wgKmZp cnN0KQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTeXNTY2FuRGVzYyBjb25TY2FuOworCVNjYW5L ZXlEYXRhIGNvbktleTsKKwlIZWFwVHVwbGUJY29uVHVwOworCisJY29uUmVsID0gdGFibGVfb3Bl bihDb25zdHJhaW50UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgm Y29uS2V5LAorCQkJCUFudW1fcGdfY29uc3RyYWludF9jb25yZWxpZCwKKwkJCQlCVEVxdWFsU3Ry YXRlZ3lOdW1iZXIsIEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJl bGlkKHJlbCkpKTsKKwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3Ry YWludFJlbGlkVHlwaWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25L ZXkpOworCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4 dChjb25TY2FuKSkpCisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29u c3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisJCURhdHVtCQlkZWZEYXR1bTsKKwkJY2hhcgkg ICAqZGVmYm9keTsKKworCQlpZiAoY29uLT5jb250eXBlICE9IENPTlNUUkFJTlRfQ0hFQ0spCisJ CQljb250aW51ZTsKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsKKworCQlp ZiAoISpmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJywnKTsKKwkJaWYgKHBy ZXR0eSkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gICAgIik7CisJCWVsc2Ug aWYgKCEqZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCSpmaXJz dCA9IGZhbHNlOworCisJCWRlZkRhdHVtID0gT2lkRnVuY3Rpb25DYWxsMShGX1BHX0dFVF9DT05T VFJBSU5UREVGX09JRCwKKwkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0oY29uLT5vaWQpKTsKKwkJ ZGVmYm9keSA9IFRleHREYXR1bUdldENTdHJpbmcoZGVmRGF0dW0pOworCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIkNPTlNUUkFJTlQgJXMgJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFt ZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCSBkZWZib2R5KTsKKwkJcGZyZWUoZGVmYm9keSk7 CisJfQorCXN5c3RhYmxlX2VuZHNjYW4oY29uU2Nhbik7CisJdGFibGVfY2xvc2UoY29uUmVsLCBB Y2Nlc3NTaGFyZUxvY2spOworfQorCisvKgorICogYXBwZW5kX2NvbHVtbl9kZWZzCisgKgkJQXBw ZW5kIHRoZSBjb21tYS1zZXBhcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gbGlzdCBmb3IgYSB0YWJs ZS4KKyAqCisgKiBFbWl0cyBlYWNoIG5vbi1kcm9wcGVkLCBsb2NhbGx5LWRlY2xhcmVkIGNvbHVt biBhcworICoJCW5hbWUgdHlwZSBbQ09MTEFURSB4XSBbU1RPUkFHRSBzXSBbQ09NUFJFU1NJT04g Y10KKyAqCQlbR0VORVJBVEVEIC4uLiB8IERFRkFVTFQgZV0gW05PVCBOVUxMXQorICogZm9sbG93 ZWQgYnkgYW55IGxvY2FsbHktZGVjbGFyZWQgaW5saW5lIENIRUNLIGNvbnN0cmFpbnRzLiAgT3B0 aW9uYWwKKyAqIGNsYXVzZXMgYXJlIG9taXR0ZWQgd2hlbiB0aGVpciB2YWx1ZSBtYXRjaGVzIHdo YXQgdGhlIHN5c3RlbSB3b3VsZAorICogcmVhcHBseSBvbiByb3VuZC10cmlwIChlLmcuIHR5cGUt ZGVmYXVsdCBDT0xMQVRFLCB0eXBlLWRlZmF1bHQgU1RPUkFHRSkuCisgKi8KK3N0YXRpYyB2b2lk CithcHBlbmRfY29sdW1uX2RlZnMoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgYm9vbCBw cmV0dHksCisJCQkJICAgYm9vbCBpbmNsdWRlX2NoZWNrLAorCQkJCSAgIGJvb2wgc2NoZW1hX3F1 YWxpZmllZCwKKwkJCQkgICBMb2NhbE5vdE51bGxFbnRyeSAqbm5fZW50cmllcykKK3sKKwlUdXBs ZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKKwlPaWQJCQliYXNlX25hbWVz cGFjZSA9IFJlbGF0aW9uR2V0TmFtZXNwYWNlKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0g TklMOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVz Yy0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0 dHIodHVwZGVzYywgaSk7CisJCWNoYXIJICAgKnR5cHN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ry b3BwZWQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDb2x1bW5zIGluaGVyaXRlZCBmcm9t IGEgcGFyZW50IGFyZSBjb3ZlcmVkIGJ5IHRoZSBJTkhFUklUUyBjbGF1c2UsCisJCSAqIG5vdCB0 aGUgY29sdW1uIGxpc3QsIHVubGVzcyB0aGUgY2hpbGQgcmVkZWNsYXJlZCB0aGVtIGxvY2FsbHkK KwkJICogKGF0dGlzbG9jYWw9dHJ1ZSkuCisJCSAqLworCQlpZiAoIWF0dC0+YXR0aXNsb2NhbCkK KwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcsJyk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg IlxuICAgICIpOworCQllbHNlIGlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihi dWYsICcgJyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWFwcGVuZFN0 cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKworCQl0eXBzdHIgPSBmb3JtYXRfdHlwZV93aXRoX3R5 cGVtb2QoYXR0LT5hdHR0eXBpZCwgYXR0LT5hdHR0eXBtb2QpOworCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgdHlwc3RyKTsKKwkJcGZyZWUodHlwc3RyKTsKKworCQkvKiBDT0xMQVRFIGNs YXVzZSwgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlp ZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikgJiYKKwkJCWF0dC0+YXR0Y29sbGF0aW9u ICE9IGdldF90eXBjb2xsYXRpb24oYXR0LT5hdHR0eXBpZCkpCisJCQlhcHBlbmRTdHJpbmdJbmZv KGJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJCQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoYXR0 LT5hdHRjb2xsYXRpb24pKTsKKworCQkvKiBTVE9SQUdFIGNsYXVzZSwgb25seSBpZiBpdCBkaWZm ZXJzIGZyb20gdGhlIHR5cGUncyBkZWZhdWx0LiAqLworCQlpZiAoYXR0LT5hdHRzdG9yYWdlICE9 IGdldF90eXBzdG9yYWdlKGF0dC0+YXR0dHlwaWQpKQorCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICIgU1RPUkFHRSAlcyIsIHN0b3JhZ2VfbmFtZShhdHQtPmF0dHN0b3JhZ2UpKTsKKworCQkvKiBD T01QUkVTU0lPTiBjbGF1c2UsIG9ubHkgaWYgZXhwbGljaXRseSBzZXQgb24gdGhlIGNvbHVtbi4g Ki8KKwkJaWYgKENvbXByZXNzaW9uTWV0aG9kSXNWYWxpZChhdHQtPmF0dGNvbXByZXNzaW9uKSkK KwkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIENPTVBSRVNTSU9OICVzIiwKKwkJCQkJCQkgR2V0 Q29tcHJlc3Npb25NZXRob2ROYW1lKGF0dC0+YXR0Y29tcHJlc3Npb24pKTsKKworCQkvKgorCQkg KiBMb29rIHVwIHRoZSBkZWZhdWx0L2dlbmVyYXRlZCBleHByZXNzaW9uIHRleHQgdXAgZnJvbnQ7 IGdlbmVyYXRlZAorCQkgKiBjb2x1bW5zIGhhdmUgYXR0aGFzZGVmPXRydWUgd2l0aCBhbiBlbnRy eSBpbiBwZ19hdHRyZGVmIGp1c3QgbGlrZQorCQkgKiByZWd1bGFyIGRlZmF1bHRzLgorCQkgKi8K KwkJeworCQkJY2hhcgkgICAqZGVmZXhwciA9IE5VTEw7CisKKwkJCWlmIChhdHQtPmF0dGhhc2Rl ZikKKwkJCQlkZWZleHByID0gZmluZF9hdHRyZGVmX3RleHQocmVsLCBhdHQtPmF0dG51bSwgJmRw Y29udGV4dCk7CisKKwkJCS8qIEdFTkVSQVRFRCAvIElERU5USVRZIC8gREVGQVVMVCBhcmUgbXV0 dWFsbHkgZXhjbHVzaXZlLiAqLworCQkJaWYgKGF0dC0+YXR0Z2VuZXJhdGVkID09IEFUVFJJQlVU RV9HRU5FUkFURURfU1RPUkVEICYmIGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYs ICIgR0VORVJBVEVEIEFMV0FZUyBBUyAoJXMpIFNUT1JFRCIsIGRlZmV4cHIpOworCQkJZWxzZSBp ZiAoYXR0LT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMICYmIGRl ZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgR0VORVJBVEVEIEFMV0FZUyBBUyAo JXMpIFZJUlRVQUwiLCBkZWZleHByKTsKKwkJCWVsc2UgaWYgKGF0dC0+YXR0aWRlbnRpdHkgPT0g QVRUUklCVVRFX0lERU5USVRZX0FMV0FZUyB8fAorCQkJCQkgYXR0LT5hdHRpZGVudGl0eSA9PSBB VFRSSUJVVEVfSURFTlRJVFlfQllfREVGQVVMVCkKKwkJCXsKKwkJCQljb25zdCBjaGFyICppZGtp bmQgPQorCQkJCQkoYXR0LT5hdHRpZGVudGl0eSA9PSBBVFRSSUJVVEVfSURFTlRJVFlfQUxXQVlT KQorCQkJCQk/ICJBTFdBWVMiIDogIkJZIERFRkFVTFQiOworCQkJCU9pZAkJCXNlcWlkID0gZ2V0 SWRlbnRpdHlTZXF1ZW5jZShyZWwsIGF0dC0+YXR0bnVtLCB0cnVlKTsKKworCQkJCWFwcGVuZFN0 cmluZ0luZm8oYnVmLCAiIEdFTkVSQVRFRCAlcyBBUyBJREVOVElUWSIsIGlka2luZCk7CisKKwkJ CQkvKgorCQkJCSAqIEVtaXQgb25seSB0aGUgc2VxdWVuY2Ugb3B0aW9ucyB0aGF0IGRpZmZlciBm cm9tIHRoZWlyCisJCQkJICogZGVmYXVsdHMgLSBtaXJyb3JpbmcgcGdfZ2V0X2RhdGFiYXNlX2Rk bCdzIHBhdHRlcm4gb2YKKwkJCQkgKiBvbWl0dGluZyB2YWx1ZXMgdGhhdCB0aGUgc3lzdGVtIHdv dWxkIHJlYXBwbHkgb24gaXRzIG93bi4KKwkJCQkgKi8KKwkJCQlpZiAoT2lkSXNWYWxpZChzZXFp ZCkpCisJCQkJeworCQkJCQlIZWFwVHVwbGUJc2VxVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFNFUVJF TElELAorCQkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShzZXFpZCkpOworCisJCQkJCWlm IChIZWFwVHVwbGVJc1ZhbGlkKHNlcVR1cCkpCisJCQkJCXsKKwkJCQkJCUZvcm1fcGdfc2VxdWVu Y2Ugc2VxID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdFVFNUUlVDVChzZXFUdXApOworCQkJCQkJU3Ry aW5nSW5mb0RhdGEgb3B0czsKKwkJCQkJCWJvb2wJCWZpcnN0X29wdCA9IHRydWU7CisJCQkJCQlp bnQ2NAkJZGVmX21pbiwKKwkJCQkJCQkJCWRlZl9tYXgsCisJCQkJCQkJCQlkZWZfc3RhcnQ7CisJ CQkJCQlpbnQ2NAkJdHlwX21pbiwKKwkJCQkJCQkJCXR5cF9tYXg7CisKKwkJCQkJCS8qCisJCQkJ CQkgKiBQZXItdHlwZSBib3VuZHMgZm9yIHRoZSBzZXF1ZW5jZSdzIHVuZGVybHlpbmcKKwkJCQkJ CSAqIGludGVnZXIgdHlwZS4gIERlZmF1bHRzIHRvIGludDggaWYgdGhlIGNvbHVtbiB0eXBlCisJ CQkJCQkgKiBpcyBzb21ldGhpbmcgZWxzZSAoc2hvdWxkbid0IGhhcHBlbiBmb3IgSURFTlRJVFks CisJCQkJCQkgKiBidXQgYmUgZGVmZW5zaXZlKS4KKwkJCQkJCSAqLworCQkJCQkJc3dpdGNoIChh dHQtPmF0dHR5cGlkKQorCQkJCQkJeworCQkJCQkJCWNhc2UgSU5UMk9JRDoKKwkJCQkJCQkJdHlw X21pbiA9IFBHX0lOVDE2X01JTjsKKwkJCQkJCQkJdHlwX21heCA9IFBHX0lOVDE2X01BWDsKKwkJ CQkJCQkJYnJlYWs7CisJCQkJCQkJY2FzZSBJTlQ0T0lEOgorCQkJCQkJCQl0eXBfbWluID0gUEdf SU5UMzJfTUlOOworCQkJCQkJCQl0eXBfbWF4ID0gUEdfSU5UMzJfTUFYOworCQkJCQkJCQlicmVh azsKKwkJCQkJCQlkZWZhdWx0OgorCQkJCQkJCQl0eXBfbWluID0gUEdfSU5UNjRfTUlOOworCQkJ CQkJCQl0eXBfbWF4ID0gUEdfSU5UNjRfTUFYOworCQkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwor CQkJCQkJaWYgKHNlcS0+c2VxaW5jcmVtZW50ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQlkZWZfbWlu ID0gMTsKKwkJCQkJCQlkZWZfbWF4ID0gdHlwX21heDsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZf bWluOworCQkJCQkJfQorCQkJCQkJZWxzZQorCQkJCQkJeworCQkJCQkJCWRlZl9taW4gPSB0eXBf bWluOworCQkJCQkJCWRlZl9tYXggPSAtMTsKKwkJCQkJCQlkZWZfc3RhcnQgPSBkZWZfbWF4Owor CQkJCQkJfQorCisJCQkJCQlpbml0U3RyaW5nSW5mbygmb3B0cyk7CisKKwkJCQkJCS8qCisJCQkJ CQkgKiBTRVFVRU5DRSBOQU1FIC0gb21pdCB3aGVuIGl0IG1hdGNoZXMgdGhlIGltcGxpY2l0CisJ CQkJCQkgKiAiPHRhYmxlbmFtZT5fPGNvbHVtbm5hbWU+X3NlcSIgcGF0dGVybiBpbiB0aGUgc2Ft ZQorCQkJCQkJICogc2NoZW1hLCBzaW5jZSBDUkVBVEUgVEFCTEUgd2lsbCByZWdlbmVyYXRlIHRo YXQKKwkJCQkJCSAqIGV4YWN0IG5hbWUuICBUaGUgc2VxdWVuY2UgaXMgYW4gSU5URVJOQUwgZGVw ZW5kZW5jeQorCQkJCQkJICogb2YgdGhlIGNvbHVtbiwgc28gdGhlIGxvY2sgd2UgaG9sZCBvbiB0 aGUgdGFibGUKKwkJCQkJCSAqIGFsc28gcGlucyBpdCwgYnV0IHRoZSBsb29rdXAgaGVscGVyIHN0 aWxsIGRlZmVuZHMKKwkJCQkJCSAqIGFnYWluc3QgYSBtaXNzaW5nIHBnX2NsYXNzIHJvdy4KKwkJ CQkJCSAqLworCQkJCQkJeworCQkJCQkJCUhlYXBUdXBsZQlzZXFDbGFzc1R1cDsKKwkJCQkJCQlG b3JtX3BnX2NsYXNzIHNlcUNsYXNzOworCQkJCQkJCWNoYXIJCWF1dG9uYW1lW05BTUVEQVRBTEVO XTsKKworCQkJCQkJCXNlcUNsYXNzVHVwID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwKKwkJCQkJ CQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKHNlcWlkKSk7CisJCQkJCQkJaWYgKCFIZWFwVHVw bGVJc1ZhbGlkKHNlcUNsYXNzVHVwKSkKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkJCQkJCSBlcnJtc2co ImlkZW50aXR5IHNlcXVlbmNlIHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJCQkJ CQkJCXNlcWlkKSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1 cnJlbnRseSBkcm9wcGVkLiIpKSk7CisJCQkJCQkJc2VxQ2xhc3MgPSAoRm9ybV9wZ19jbGFzcykg R0VUU1RSVUNUKHNlcUNsYXNzVHVwKTsKKworCQkJCQkJCXNucHJpbnRmKGF1dG9uYW1lLCBzaXpl b2YoYXV0b25hbWUpLCAiJXNfJXNfc2VxIiwKKwkJCQkJCQkJCSBSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpLAorCQkJCQkJCQkJIE5hbWVTdHIoYXR0LT5hdHRuYW1lKSk7CisJCQkJCQkJaWYg KHNlcUNsYXNzLT5yZWxuYW1lc3BhY2UgIT0gUmVsYXRpb25HZXROYW1lc3BhY2UocmVsKSB8fAor CQkJCQkJCQlzdHJjbXAoTmFtZVN0cihzZXFDbGFzcy0+cmVsbmFtZSksIGF1dG9uYW1lKSAhPSAw KQorCQkJCQkJCXsKKwkJCQkJCQkJY2hhcgkgICAqc2VxUXVhbCA9CisJCQkJCQkJCQlsb29rdXBf cmVsbmFtZV9mb3JfZW1pdChzZXFpZCwKKwkJCQkJCQkJCQkJCQkJCXNjaGVtYV9xdWFsaWZpZWQs CisJCQkJCQkJCQkJCQkJCQliYXNlX25hbWVzcGFjZSk7CisKKwkJCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmb3B0cywgIiVzU0VRVUVOQ0UgTkFNRSAlcyIsCisJCQkJCQkJCQkJCQkgZmlyc3Rfb3B0 ID8gIiIgOiAiICIsIHNlcVF1YWwpOworCQkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJ CQkJcGZyZWUoc2VxUXVhbCk7CisJCQkJCQkJfQorCQkJCQkJCVJlbGVhc2VTeXNDYWNoZShzZXFD bGFzc1R1cCk7CisJCQkJCQl9CisKKwkJCQkJCWlmIChzZXEtPnNlcXN0YXJ0ICE9IGRlZl9zdGFy dCkKKwkJCQkJCXsKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNTVEFSVCBXSVRI ICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+ c2Vxc3RhcnQpOworCQkJCQkJCWZpcnN0X29wdCA9IGZhbHNlOworCQkJCQkJfQorCQkJCQkJaWYg KHNlcS0+c2VxaW5jcmVtZW50ICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5m bygmb3B0cywgIiVzSU5DUkVNRU5UIEJZICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmly c3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxaW5jcmVtZW50KTsKKwkJCQkJCQlmaXJzdF9vcHQg PSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1pbiAhPSBkZWZfbWluKQorCQkJ CQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIlc01JTlZBTFVFICIgSU5UNjRf Rk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAiICIsIHNlcS0+c2VxbWluKTsK KwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJCQkJCWlmIChzZXEtPnNlcW1h eCAhPSBkZWZfbWF4KQorCQkJCQkJeworCQkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJm9wdHMsICIl c01BWFZBTFVFICIgSU5UNjRfRk9STUFULAorCQkJCQkJCQkJCQkgZmlyc3Rfb3B0ID8gIiIgOiAi ICIsIHNlcS0+c2VxbWF4KTsKKwkJCQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKwkJ CQkJCWlmIChzZXEtPnNlcWNhY2hlICE9IDEpCisJCQkJCQl7CisJCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmb3B0cywgIiVzQ0FDSEUgIiBJTlQ2NF9GT1JNQVQsCisJCQkJCQkJCQkJCSBmaXJzdF9v cHQgPyAiIiA6ICIgIiwgc2VxLT5zZXFjYWNoZSk7CisJCQkJCQkJZmlyc3Rfb3B0ID0gZmFsc2U7 CisJCQkJCQl9CisJCQkJCQlpZiAoc2VxLT5zZXFjeWNsZSkKKwkJCQkJCXsKKwkJCQkJCQlhcHBl bmRTdHJpbmdJbmZvKCZvcHRzLCAiJXNDWUNMRSIsIGZpcnN0X29wdCA/ICIiIDogIiAiKTsKKwkJ CQkJCQlmaXJzdF9vcHQgPSBmYWxzZTsKKwkJCQkJCX0KKworCQkJCQkJaWYgKCFmaXJzdF9vcHQp CisJCQkJCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgKCVzKSIsIG9wdHMuZGF0YSk7CisKKwkJ CQkJCXBmcmVlKG9wdHMuZGF0YSk7CisJCQkJCQlSZWxlYXNlU3lzQ2FjaGUoc2VxVHVwKTsKKwkJ CQkJfQorCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKGRlZmV4cHIpCisJCQkJYXBwZW5kU3RyaW5n SW5mbyhidWYsICIgREVGQVVMVCAlcyIsIGRlZmV4cHIpOworCisJCQlpZiAoZGVmZXhwcikKKwkJ CQlwZnJlZShkZWZleHByKTsKKwkJfQorCisJCWlmIChhdHQtPmF0dG5vdG51bGwpCisJCXsKKwkJ CUxvY2FsTm90TnVsbEVudHJ5ICpubiA9ICZubl9lbnRyaWVzW2F0dC0+YXR0bnVtXTsKKworCQkJ aWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgIW5uLT5pc19hdXRvKQorCQkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIENPTlNUUkFJTlQgJXMgTk9UIE5VTEwiLAorCQkJCQkJCQkgcXVvdGVfaWRlbnRp Zmllcihubi0+bmFtZSkpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiIE5PVCBOVUxMIik7CisJCQlpZiAobm4tPm5hbWUgIT0gTlVMTCAmJiBubi0+bm9faW5oZXJp dCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBOTyBJTkhFUklUIik7CisJCX0K Kwl9CisKKwkvKgorCSAqIFRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIC0gZW1pdHRlZCBp bmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5CisJICogc28gdGhleSBhcHBlYXIgYWxvbmdz aWRlIHRoZSBjb2x1bW5zICh0aGUgcGdfZHVtcCBzaGFwZSkuICBUaGUKKwkgKiBjb25zdHJhaW50 IGxvb3AgbGF0ZXIgaW4gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCBza2lwcyBDSEVDSworCSAq IGNvbnN0cmFpbnRzIHRvIGF2b2lkIGRvdWJsZS1lbWlzc2lvbi4KKwkgKi8KKwlpZiAoaW5jbHVk ZV9jaGVjaykKKwkJYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cyhidWYsIHJlbCwgcHJl dHR5LCAmZmlyc3QpOworfQorCisvKgorICogYXBwZW5kX3R5cGVkX2NvbHVtbl9vdmVycmlkZXMK KyAqCQlGb3IgYSB0eXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIC4uLiBPRiB0eXBlX25hbWUpLCBh cHBlbmQgdGhlCisgKgkJb3B0aW9uYWwgIihjb2wgV0lUSCBPUFRJT05TIC4uLiwgLi4uKSIgbGlz dCBjYXJyeWluZyBsb2NhbGx5CisgKgkJYXBwbGllZCBwZXItY29sdW1uIG92ZXJyaWRlcyAtIERF RkFVTFQsIE5PVCBOVUxMLCBhbmQgYW55IGxvY2FsbHkKKyAqCQlkZWNsYXJlZCBDSEVDSyBjb25z dHJhaW50cy4KKyAqCisgKiBDb2x1bW5zIHdob3NlIHR5cGUgaXMgZnVsbHkgZGljdGF0ZWQgYnkg cmVsb2Z0eXBlIGVtaXQgbm90aGluZy4gIFRoZQorICogcGFyZW50aGVzaXNlZCBsaXN0IGlzIHN1 cHByZXNzZWQgZW50aXJlbHkgd2hlbiBubyBjb2x1bW4gbmVlZHMgYW4KKyAqIG92ZXJyaWRlIGFu ZCB0aGVyZSBhcmUgbm8gbG9jYWxseS1kZWNsYXJlZCBDSEVDSyBjb25zdHJhaW50cywgbWF0Y2hp bmcKKyAqIHRoZSBjYW5vbmljYWwgIkNSRUFURSBUQUJMRSB4IE9GIHQ7IiBzaGFwZS4KKyAqLwor c3RhdGljIHZvaWQKK2FwcGVuZF90eXBlZF9jb2x1bW5fb3ZlcnJpZGVzKFN0cmluZ0luZm8gYnVm LCBSZWxhdGlvbiByZWwsIGJvb2wgcHJldHR5LAorCQkJCQkJCSAgYm9vbCBpbmNsdWRlX2NoZWNr LAorCQkJCQkJCSAgTG9jYWxOb3ROdWxsRW50cnkgKm5uX2VudHJpZXMpCit7CisJVHVwbGVEZXNj CXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJTGlzdAkgICAqZHBjb250ZXh0ID0g TklMOworCVN0cmluZ0luZm9EYXRhIGlubmVyOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCWlu aXRTdHJpbmdJbmZvKCZpbm5lcik7CisKKwlmb3IgKGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5h dHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGkpOworCQljaGFyCSAgICpkZWZleHByID0gTlVMTDsKKwkJYm9vbAkJaGFzX2RlZmF1 bHQ7CisJCWJvb2wJCWhhc19ub3RudWxsOworCisJCWlmIChhdHQtPmF0dGlzZHJvcHBlZCkKKwkJ CWNvbnRpbnVlOworCisJCWlmIChhdHQtPmF0dGhhc2RlZikKKwkJCWRlZmV4cHIgPSBmaW5kX2F0 dHJkZWZfdGV4dChyZWwsIGF0dC0+YXR0bnVtLCAmZHBjb250ZXh0KTsKKworCQloYXNfZGVmYXVs dCA9IChkZWZleHByICE9IE5VTEwpOworCQloYXNfbm90bnVsbCA9IGF0dC0+YXR0bm90bnVsbDsK KworCQlpZiAoIWhhc19kZWZhdWx0ICYmICFoYXNfbm90bnVsbCkKKwkJeworCQkJaWYgKGRlZmV4 cHIpCisJCQkJcGZyZWUoZGVmZXhwcik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghZmly c3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcsJyk7CisJCWlmIChwcmV0dHkp CisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIlxuICAgICIpOworCQllbHNlIGlm ICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmaW5uZXIsICcgJyk7CisJCWZpcnN0 ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mbygmaW5uZXIsICIlcyBXSVRIIE9QVElPTlMi LAorCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihhdHQtPmF0dG5hbWUpKSk7CisJCWlm IChoYXNfZGVmYXVsdCkKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmlubmVyLCAiIERFRkFVTFQgJXMi LCBkZWZleHByKTsKKwkJaWYgKGhhc19ub3RudWxsKQorCQl7CisJCQlMb2NhbE5vdE51bGxFbnRy eSAqbm4gPSAmbm5fZW50cmllc1thdHQtPmF0dG51bV07CisKKwkJCWlmIChubi0+bmFtZSAhPSBO VUxMICYmICFubi0+aXNfYXV0bykKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZpbm5lciwgIiBDT05T VFJBSU5UICVzIE5PVCBOVUxMIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIobm4tPm5hbWUp KTsKKwkJCWVsc2UKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZpbm5lciwgIiBOT1QgTlVM TCIpOworCQkJaWYgKG5uLT5uYW1lICE9IE5VTEwgJiYgbm4tPm5vX2luaGVyaXQpCisJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmaW5uZXIsICIgTk8gSU5IRVJJVCIpOworCQl9CisKKwkJaWYg KGRlZmV4cHIpCisJCQlwZnJlZShkZWZleHByKTsKKwl9CisKKwkvKgorCSAqIExvY2FsbHktZGVj bGFyZWQgQ0hFQ0sgY29uc3RyYWludHMgb24gYSB0eXBlZCB0YWJsZSBiZWxvbmcgaW4gdGhlCisJ ICogY29sdW1uLWxpc3QgcGFyZW50aGVzZXMsIHNhbWUgYXMgZm9yIGFuIHVudHlwZWQgdGFibGUu ICBUaGUgb3V0LW9mLWxpbmUKKwkgKiBjb25zdHJhaW50IGxvb3AgbGF0ZXIgc3RpbGwgc2tpcHMg Q0hFQ0tzLgorCSAqLworCWlmIChpbmNsdWRlX2NoZWNrKQorCQlhcHBlbmRfaW5saW5lX2NoZWNr X2NvbnN0cmFpbnRzKCZpbm5lciwgcmVsLCBwcmV0dHksICZmaXJzdCk7CisKKwlpZiAoIWZpcnN0 KQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgKCIpOworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgaW5uZXIuZGF0YSk7CisJCWlmIChwcmV0dHkpCisJCQlhcHBlbmRT dHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcpJyk7CisJfQorCXBmcmVlKGlubmVyLmRhdGEpOworfQorCisvKgorICogYXBw ZW5kX3N0bXQKKyAqCQlQdXNoIGN0eC0+YnVmIG9udG8gY3R4LT5zdGF0ZW1lbnRzLgorICoKKyAq IFVzZWQgZm9yIGFsbCBEREwgZW1pc3Npb25zLiAgV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZh bHNlLCB0aGUKKyAqIGFjdGl2ZSBzZWFyY2hfcGF0aCBoYXMgYWxyZWFkeSBiZWVuIG5hcnJvd2Vk IHRvIHRoZSBiYXNlIHNjaGVtYSwgc28KKyAqIHJ1bGV1dGlscyBoZWxwZXJzIChwZ19nZXRfaW5k ZXhkZWZfZGRsLCBwZ19nZXRfcnVsZWRlZl9kZGwsCisgKiBwZ19nZXRfY29uc3RyYWludGRlZl9i b2R5LCBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwpIHByb2R1Y2UKKyAqIHVucXVhbGlmaWVk IG5hbWVzIGZvciBzYW1lLXNjaGVtYSBvYmplY3RzIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRp YyB2b2lkCithcHBlbmRfc3RtdChUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwljdHgtPnN0YXRl bWVudHMgPSBsYXBwZW5kKGN0eC0+c3RhdGVtZW50cywgcHN0cmR1cChjdHgtPmJ1Zi5kYXRhKSk7 Cit9CisKKy8qCisgKiBlbWl0X2NyZWF0ZV90YWJsZV9zdG10CisgKgkJQnVpbGQgdGhlIGxlYWRp bmcgQ1JFQVRFIFRBQkxFIHN0YXRlbWVudCwgaW5jbHVkaW5nIHBlcnNpc3RlbmNlCisgKgkJKFRF TVBPUkFSWSAvIFVOTE9HR0VEKSwgYm9keSAoY29sdW1uIGxpc3QgLyBPRiB0eXBlX25hbWUgLwor ICoJCVBBUlRJVElPTiBPRiBwYXJlbnQpLCBJTkhFUklUUywgUEFSVElUSU9OIEJZLCBVU0lORyBt ZXRob2QsCisgKgkJV0lUSCAocmVsb3B0aW9ucyksIFRBQkxFU1BBQ0UsIGFuZCBPTiBDT01NSVQu CisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X2NyZWF0ZV90YWJsZV9zdG10KFRhYmxlRGRsQ29udGV4 dCAqY3R4KQoreworCVJlbGF0aW9uCXJlbCA9IGN0eC0+cmVsOworCWNoYXIJCXJlbHBlcnNpc3Rl bmNlID0gcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlOworCWNoYXIJCXJlbGtpbmQgPSByZWwt PnJkX3JlbC0+cmVsa2luZDsKKwlib29sCQlpc190eXBlZCA9IE9pZElzVmFsaWQocmVsLT5yZF9y ZWwtPnJlbG9mdHlwZSk7CisJSGVhcFR1cGxlCWNsYXNzdHVwOworCURhdHVtCQlyZWxvcHREYXR1 bTsKKwlib29sCQlyZWxvcHRJc251bGw7CisKKwljbGFzc3R1cCA9IFNlYXJjaFN5c0NhY2hlMShS RUxPSUQsIE9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOworCWlmICghSGVhcFR1cGxlSXNW YWxpZChjbGFzc3R1cCkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBy ZWxhdGlvbiAldSIsIGN0eC0+cmVsaWQpOworCisJcmVsb3B0RGF0dW0gPSBTeXNDYWNoZUdldEF0 dHIoUkVMT0lELCBjbGFzc3R1cCwKKwkJCQkJCQkJICBBbnVtX3BnX2NsYXNzX3JlbG9wdGlvbnMs ICZyZWxvcHRJc251bGwpOworCisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICJDUkVBVEUgIik7CisJaWYgKHJlbHBlcnNpc3Rl bmNlID09IFJFTFBFUlNJU1RFTkNFX1RFTVApCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0 eC0+YnVmLCAiVEVNUE9SQVJZICIpOworCWVsc2UgaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBF UlNJU1RFTkNFX1VOTE9HR0VEKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IlVOTE9HR0VEICIpOworCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiVEFCTEUgJXMiLCBj dHgtPnF1YWxuYW1lKTsKKworCWlmIChyZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb24pCisJewor CQlPaWQJCQlwYXJlbnRPaWQgPSBnZXRfcGFydGl0aW9uX3BhcmVudChjdHgtPnJlbGlkLCB0cnVl KTsKKwkJY2hhcgkgICAqcGFyZW50UXVhbCA9IGxvb2t1cF9yZWxuYW1lX2Zvcl9lbWl0KHBhcmVu dE9pZCwKKwkJCQkJCQkJCQkJCQkJIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJCQkJ CQkJIGN0eC0+YmFzZV9uYW1lc3BhY2UpOworCQljaGFyCSAgICpwYXJlbnRSZWxuYW1lID0gZ2V0 X3JlbF9uYW1lKHBhcmVudE9pZCk7CisJCURhdHVtCQlib3VuZERhdHVtOworCQlib29sCQlib3Vu ZElzbnVsbDsKKwkJY2hhcgkgICAqZm9yVmFsdWVzID0gTlVMTDsKKwkJY2hhcgkgICAqYm91bmRT dHIgPSBOVUxMOworCisJCWlmIChwYXJlbnRSZWxuYW1lID09IE5VTEwpCisJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAorCQkJCQkgZXJy bXNnKCJwYXJ0aXRpb24gcGFyZW50IHdpdGggT0lEICV1IGRvZXMgbm90IGV4aXN0IiwKKwkJCQkJ CQlwYXJlbnRPaWQpLAorCQkJCQkgZXJyZGV0YWlsKCJJdCBtYXkgaGF2ZSBiZWVuIGNvbmN1cnJl bnRseSBkcm9wcGVkLiIpKSk7CisKKwkJYm91bmREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihSRUxP SUQsIGNsYXNzdHVwLAorCQkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLCAmYm91 bmRJc251bGwpOworCQlpZiAoIWJvdW5kSXNudWxsKQorCQl7CisJCQlOb2RlCSAgICpib3VuZE5v ZGU7CisJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisKKwkJCWJvdW5kU3RyID0gVGV4dERhdHVtR2V0 Q1N0cmluZyhib3VuZERhdHVtKTsKKwkJCWJvdW5kTm9kZSA9IHN0cmluZ1RvTm9kZShib3VuZFN0 cik7CisJCQlkcGNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKHBhcmVudFJlbG5hbWUsIHBh cmVudE9pZCk7CisJCQlmb3JWYWx1ZXMgPSBkZXBhcnNlX2V4cHJlc3Npb24oYm91bmROb2RlLCBk cGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgt PmJ1ZiwgIiBQQVJUSVRJT04gT0YgJXMgJXMiLAorCQkJCQkJIHBhcmVudFF1YWwsIGZvclZhbHVl cyA/IGZvclZhbHVlcyA6ICJERUZBVUxUIik7CisJCWlmIChmb3JWYWx1ZXMpCisJCQlwZnJlZShm b3JWYWx1ZXMpOworCQlpZiAoYm91bmRTdHIpCisJCQlwZnJlZShib3VuZFN0cik7CisJCXBmcmVl KHBhcmVudFF1YWwpOworCQlwZnJlZShwYXJlbnRSZWxuYW1lKTsKKwl9CisJZWxzZSBpZiAoaXNf dHlwZWQpCisJeworCQljaGFyCSAgICp0eXBuYW1lID0gZm9ybWF0X3R5cGVfYmVfcXVhbGlmaWVk KHJlbC0+cmRfcmVsLT5yZWxvZnR5cGUpOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVm LCAiIE9GICVzIiwgdHlwbmFtZSk7CisJCXBmcmVlKHR5cG5hbWUpOworCisJCWFwcGVuZF90eXBl ZF9jb2x1bW5fb3ZlcnJpZGVzKCZjdHgtPmJ1ZiwgcmVsLCBjdHgtPnByZXR0eSwKKwkJCQkJCQkJ CSAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCQkJ CSAgY3R4LT5ubl9lbnRyaWVzKTsKKwl9CisJZWxzZQorCXsKKwkJTGlzdAkgICAqcGFyZW50czsK KwkJTGlzdENlbGwgICAqbGM7CisJCWJvb2wJCWZpcnN0OworCisJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmN0eC0+YnVmLCAiICgiKTsKKworCQlhcHBlbmRfY29sdW1uX2RlZnMoJmN0eC0+YnVm LCByZWwsIGN0eC0+cHJldHR5LAorCQkJCQkJICAgaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxF X0RETF9LSU5EX0NIRUNLKSwKKwkJCQkJCSAgIGN0eC0+c2NoZW1hX3F1YWxpZmllZCwgY3R4LT5u bl9lbnRyaWVzKTsKKworCQlpZiAoY3R4LT5wcmV0dHkpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKCZjdHgtPmJ1ZiwgIlxuKSIpOworCQllbHNlCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigm Y3R4LT5idWYsICcpJyk7CisKKwkJcGFyZW50cyA9IGZpbmRfaW5oZXJpdGFuY2VfcGFyZW50cyhj dHgtPnJlbGlkLCBOb0xvY2spOworCQlpZiAocGFyZW50cyAhPSBOSUwpCisJCXsKKwkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIElOSEVSSVRTICgiKTsKKwkJCWZpcnN0ID0g dHJ1ZTsKKwkJCWZvcmVhY2gobGMsIHBhcmVudHMpCisJCQl7CisJCQkJT2lkCQkJcG9pZCA9IGxm aXJzdF9vaWQobGMpOworCQkJCWNoYXIJICAgKnBuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2Vt aXQocG9pZCwKKwkJCQkJCQkJCQkJCQkJCWN0eC0+c2NoZW1hX3F1YWxpZmllZCwKKwkJCQkJCQkJ CQkJCQkJCWN0eC0+YmFzZV9uYW1lc3BhY2UpOworCisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsICIsICIpOworCQkJCWZpcnN0ID0gZmFsc2U7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmY3R4LT5idWYsIHBuYW1lKTsKKwkJCQlwZnJl ZShwbmFtZSk7CisJCQl9CisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmY3R4LT5idWYsICcpJyk7 CisJCQlsaXN0X2ZyZWUocGFyZW50cyk7CisJCX0KKwl9CisKKwlpZiAocmVsa2luZCA9PSBSRUxL SU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKKwkJRGF0dW0JCXBhcnRrZXlEYXR1bTsKKwkJY2hh cgkgICAqcGFydGtleTsKKworCQlwYXJ0a2V5RGF0dW0gPSBPaWRGdW5jdGlvbkNhbGwxKEZfUEdf R0VUX1BBUlRLRVlERUYsCisJCQkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSk7 CisJCXBhcnRrZXkgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHBhcnRrZXlEYXR1bSk7CisJCWFwcGVu ZFN0cmluZ0luZm8oJmN0eC0+YnVmLCAiIFBBUlRJVElPTiBCWSAlcyIsIHBhcnRrZXkpOworCQlw ZnJlZShwYXJ0a2V5KTsKKwl9CisKKwlpZiAoT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsYW0p ICYmCisJCXJlbC0+cmRfcmVsLT5yZWxhbSAhPSBIRUFQX1RBQkxFX0FNX09JRCkKKwl7CisJCWNo YXIJICAgKmFtbmFtZSA9IGdldF9hbV9uYW1lKHJlbC0+cmRfcmVsLT5yZWxhbSk7CisKKwkJaWYg KGFtbmFtZSAhPSBOVUxMKQorCQl7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIiBV U0lORyAlcyIsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoYW1uYW1lKSk7CisJCQlwZnJlZShh bW5hbWUpOworCQl9CisJfQorCisJaWYgKCFyZWxvcHRJc251bGwpCisJeworCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZjdHgtPmJ1ZiwgIiBXSVRIICgiKTsKKwkJZ2V0X3JlbG9wdGlvbnMoJmN0 eC0+YnVmLCByZWxvcHREYXR1bSk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjdHgtPmJ1Ziwg JyknKTsKKwl9CisKKwlSZWxlYXNlU3lzQ2FjaGUoY2xhc3N0dXApOworCisJaWYgKCFjdHgtPm5v X3RhYmxlc3BhY2UgJiYgT2lkSXNWYWxpZChyZWwtPnJkX3JlbC0+cmVsdGFibGVzcGFjZSkpCisJ eworCQljaGFyCSAgICp0c25hbWUgPSBnZXRfdGFibGVzcGFjZV9uYW1lKHJlbC0+cmRfcmVsLT5y ZWx0YWJsZXNwYWNlKTsKKworCQlpZiAodHNuYW1lICE9IE5VTEwpCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm8oJmN0eC0+YnVmLCAiIFRBQkxFU1BBQ0UgJXMiLAorCQkJCQkJCSBxdW90ZV9pZGVu dGlmaWVyKHRzbmFtZSkpOworCQkJcGZyZWUodHNuYW1lKTsKKwkJfQorCX0KKworCWlmIChyZWxw ZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCXsKKwkJT25Db21taXRBY3Rpb24g b2MgPSBnZXRfb25fY29tbWl0X2FjdGlvbihjdHgtPnJlbGlkKTsKKworCQlpZiAob2MgPT0gT05D T01NSVRfREVMRVRFX1JPV1MpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg IiBPTiBDT01NSVQgREVMRVRFIFJPV1MiKTsKKwkJZWxzZSBpZiAob2MgPT0gT05DT01NSVRfRFJP UCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmN0eC0+YnVmLCAiIE9OIENPTU1JVCBEUk9Q Iik7CisJfQorCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmN0eC0+YnVmLCAnOycpOworCWFwcGVu ZF9zdG10KGN0eCk7Cit9CisKKy8qCisgKiBlbWl0X293bmVyX3N0bXQKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBPV05FUiBUTyByb2xlLgorICovCitzdGF0aWMgdm9pZAorZW1pdF9vd25lcl9z dG10KFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWNoYXIJICAgKm93bmVyOworCisJaWYgKGN0 eC0+bm9fb3duZXIpCisJCXJldHVybjsKKworCW93bmVyID0gR2V0VXNlck5hbWVGcm9tSWQoY3R4 LT5yZWwtPnJkX3JlbC0+cmVsb3duZXIsIGZhbHNlKTsKKwlyZXNldFN0cmluZ0luZm8oJmN0eC0+ YnVmKTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFMVEVSIFRBQkxFICVzIE9XTkVS IFRPICVzOyIsCisJCQkJCSBjdHgtPnF1YWxuYW1lLCBxdW90ZV9pZGVudGlmaWVyKG93bmVyKSk7 CisJYXBwZW5kX3N0bXQoY3R4KTsKKwlwZnJlZShvd25lcik7Cit9CisKKy8qCisgKiBlbWl0X2No aWxkX2RlZmF1bHRfb3ZlcnJpZGVzCisgKgkJQUxURVIgVEFCTEUgcXVhbG5hbWUgQUxURVIgQ09M VU1OIGNvbCBTRVQgREVGQVVMVCBleHByIC0gb25lIHBlcgorICoJCWluaGVyaXRlZCAoYXR0aXNs b2NhbD1mYWxzZSkgbm9uLWdlbmVyYXRlZCBjb2x1bW4gY2FycnlpbmcgYQorICoJCWxvY2FsbHkt c2V0IGRlZmF1bHQuICBHZW5lcmF0ZWQgY29sdW1ucyBhcmUgc2tpcHBlZDogdGhlaXIKKyAqCQll eHByZXNzaW9uIGlzIGluaGVyaXRlZCBhdXRvbWF0aWNhbGx5IGFuZCBTRVQgREVGQVVMVCB3b3Vs ZAorICoJCWZhaWwgYXQgcmVwbGF5LgorICovCitzdGF0aWMgdm9pZAorZW1pdF9jaGlsZF9kZWZh dWx0X292ZXJyaWRlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlUdXBsZURlc2MJdHVwZGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IoY3R4LT5yZWwpOworCUxpc3QJICAgKmRwY29udGV4dCA9IE5J TDsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCUZv cm1fcGdfYXR0cmlidXRlIGF0dCA9IFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSk7CisJCWNoYXIJ ICAgKmRlZnN0cjsKKworCQlpZiAoYXR0LT5hdHRpc2Ryb3BwZWQgfHwgYXR0LT5hdHRpc2xvY2Fs IHx8ICFhdHQtPmF0dGhhc2RlZikKKwkJCWNvbnRpbnVlOworCQlpZiAoYXR0LT5hdHRnZW5lcmF0 ZWQgIT0gJ1wwJykKKwkJCWNvbnRpbnVlOworCisJCWRlZnN0ciA9IGZpbmRfYXR0cmRlZl90ZXh0 KGN0eC0+cmVsLCBhdHQtPmF0dG51bSwgJmRwY29udGV4dCk7CisJCWlmIChkZWZzdHIgPT0gTlVM TCkKKwkJCWNvbnRpbnVlOworCisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBl bmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMgQUxURVIgQ09M VU1OICVzIFNFVCBERUZBVUxUICVzOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSwKKwkJCQkJCSBx dW90ZV9pZGVudGlmaWVyKE5hbWVTdHIoYXR0LT5hdHRuYW1lKSksCisJCQkJCQkgZGVmc3RyKTsK KwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoZGVmc3RyKTsKKwl9Cit9CisKKy8qCisgKiBl bWl0X2F0dG9wdGlvbnMKKyAqCQlBTFRFUiBUQUJMRSBxdWFsbmFtZSBBTFRFUiBDT0xVTU4gY29s IFNFVCAoLi4uKSAtIG9uZSBwZXIgY29sdW1uCisgKgkJd2l0aCBub24tbnVsbCBwZ19hdHRyaWJ1 dGUuYXR0b3B0aW9ucy4gIFRoZSBpbmxpbmUgZm9ybSBvZiB0aGVzZQorICoJCW9wdGlvbnMgaXNu J3QgYXZhaWxhYmxlIGluIENSRUFURSBUQUJMRSwgc28gdGhleSBjb21lIG91dCBoZXJlLgorICov CitzdGF0aWMgdm9pZAorZW1pdF9hdHRvcHRpb25zKFRhYmxlRGRsQ29udGV4dCAqY3R4KQorewor CVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihjdHgtPnJlbCk7CisKKwlmb3Ig KGludCBpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQlGb3JtX3BnX2F0dHJp YnV0ZSBhdHQgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpOworCQlIZWFwVHVwbGUJYXR0VHVw OworCQlEYXR1bQkJb3B0RGF0dW07CisJCWJvb2wJCW9wdElzbnVsbDsKKworCQlpZiAoYXR0LT5h dHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlhdHRUdXAgPSBTZWFyY2hTeXNDYWNoZTIo QVRUTlVNLAorCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjdHgtPnJlbGlkKSwKKwkJCQkJCQkJ IEludDE2R2V0RGF0dW0oYXR0LT5hdHRudW0pKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGF0 dFR1cCkpCisJCQljb250aW51ZTsKKworCQlvcHREYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihBVFRO VU0sIGF0dFR1cCwKKwkJCQkJCQkJICAgQW51bV9wZ19hdHRyaWJ1dGVfYXR0b3B0aW9ucywgJm9w dElzbnVsbCk7CisJCWlmICghb3B0SXNudWxsKQorCQl7CisJCQlyZXNldFN0cmluZ0luZm8oJmN0 eC0+YnVmKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIg VEFCTEUgJXMgQUxURVIgQ09MVU1OICVzIFNFVCAoIiwKKwkJCQkJCQkgY3R4LT5xdWFsbmFtZSwK KwkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGF0dC0+YXR0bmFtZSkpKTsKKwkJCWdl dF9yZWxvcHRpb25zKCZjdHgtPmJ1Ziwgb3B0RGF0dW0pOworCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmY3R4LT5idWYsICIpOyIpOworCQkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJfQorCQlSZWxl YXNlU3lzQ2FjaGUoYXR0VHVwKTsKKwl9Cit9CisKKy8qCisgKiBlbWl0X2luZGV4ZXMKKyAqCQlD UkVBVEUgSU5ERVggcGVyIG5vbi1jb25zdHJhaW50LWJhY2tlZCBpbmRleCBvbiB0aGUgcmVsYXRp b24uCisgKgkJSW5kZXhlcyB0aGF0IGJhY2sgUEsgLyBVTklRVUUgLyBFWENMVURFIGNvbnN0cmFp bnRzIGFyZSBlbWl0dGVkCisgKgkJb3V0LW9mLWxpbmUgYnkgZW1pdF9sb2NhbF9jb25zdHJhaW50 cyAodGhlIEFMVEVSIFRBQkxFIC4uLiBBREQKKyAqCQlDT05TVFJBSU5UIHN0YXRlbWVudCBjcmVh dGVzIHRoZSBpbmRleCBpbXBsaWNpdGx5KS4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfaW5kZXhl cyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlMaXN0CSAgICppbmRleG9pZHM7CisJTGlzdENl bGwgICAqbGM7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9J TkRFWCkpCisJCXJldHVybjsKKworCWluZGV4b2lkcyA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KGN0 eC0+cmVsKTsKKwlmb3JlYWNoKGxjLCBpbmRleG9pZHMpCisJeworCQlPaWQJCQlpZHhvaWQgPSBs Zmlyc3Rfb2lkKGxjKTsKKwkJY2hhcgkgICAqaWR4ZGVmOworCisJCWlmIChPaWRJc1ZhbGlkKGdl dF9pbmRleF9jb25zdHJhaW50KGlkeG9pZCkpKQorCQkJY29udGludWU7CisKKwkJaWR4ZGVmID0g cGdfZ2V0X2luZGV4ZGVmX2RkbChpZHhvaWQpOworCQlyZXNldFN0cmluZ0luZm8oJmN0eC0+YnVm KTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBpZHhkZWYpOworCQlhcHBl bmRfc3RtdChjdHgpOworCQlwZnJlZShpZHhkZWYpOworCX0KKwlsaXN0X2ZyZWUoaW5kZXhvaWRz KTsKK30KKworLyoKKyAqIGVtaXRfbG9jYWxfY29uc3RyYWludHMKKyAqCQlBTFRFUiBUQUJMRSAu Li4gQUREIENPTlNUUkFJTlQgZm9yIGVhY2ggbG9jYWxseS1kZWZpbmVkIGNvbnN0cmFpbnQKKyAq CQlvbiB0aGUgcmVsYXRpb24uICBJbmhlcml0ZWQgY29uc3RyYWludHMgKGNvbmlzbG9jYWw9ZmFs c2UpIGNvbWUKKyAqCQlmcm9tIHRoZSBwYXJlbnQncyBEREwuICBDSEVDSyBjb25zdHJhaW50cyBh cmUgZW1pdHRlZCBpbmxpbmUgZm9yCisgKgkJcmVndWxhci90eXBlZCB0YWJsZXMgKHNraXAgaGVy ZSkgYnV0IG91dC1vZi1saW5lIGZvciBwYXJ0aXRpb24KKyAqCQljaGlsZHJlbiAobm8gY29sdW1u IGxpc3QgdG8gbGl2ZSBpbikuICBMb2NhbCBOT1QgTlVMTAorICoJCWNvbnN0cmFpbnRzIG9uIGF0 dGlzbG9jYWwgY29sdW1ucyAtIHdoZXRoZXIgdXNlci1uYW1lZCBvcgorICoJCW1hdGNoaW5nIHRo ZSBhdXRvLW5hbWUgcGF0dGVybiAtIGFyZSBlbWl0dGVkIGlubGluZSBieSB0aGUKKyAqCQljb2x1 bW4tZW1pdCBoZWxwZXJzIGFuZCBhcmUgc2tpcHBlZCB2aWEgc2tpcF9ub3RudWxsX29pZHMsCisg KgkJYmVjYXVzZSBQRyBvbmx5IGFsbG93cyBvbmUgTk9UIE5VTEwgcGVyIGNvbHVtbiBhbmQgd291 bGQgcmVqZWN0CisgKgkJYSBzZWNvbmQgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5ULiAg UGFydGl0aW9uIGNoaWxkcmVuCisgKgkJaGF2ZSBubyBjb2x1bW4gbGlzdCwgc28gdGhlaXIgTk9U IE5VTExzIGZhbGwgdGhyb3VnaCBoZXJlLgorICoKKyAqCQlFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQg b24gdGhlIG1hdGNoaW5nIGtpbmQgaW4gdGhlIG9ubHkgLyBleGNlcHQKKyAqCQl2b2NhYnVsYXJ5 LCBzbyBjYWxsZXJzIGNhbiBwcm9kdWNlIGUuZy4gYW4gRkstb25seSBwYXNzCisgKgkJKG9ubHkg PT4gJ2ZvcmVpZ25fa2V5Jykgb3IgYSBwdWIvc3ViIGNsb25lIHRoYXQga2VlcHMgb25seQorICoJ CXRoZSBwcmltYXJ5IGtleSAoZXhjZXB0ID0+ICd1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhj bHVzaW9uJykuCisgKgkJTk9UIE5VTEwgaXMgaW50ZW50aW9uYWxseSBub3QgaW4gdGhlIHZvY2Fi dWxhcnkgLSBhbHdheXMgZW1pdHRlZAorICoJCXNvIGNsb25lZCBzY2hlbWFzIGRvbid0IHNpbGVu dGx5IGFjY2VwdCBOVUxMcyB0aGUgc291cmNlIHdvdWxkCisgKgkJaGF2ZSByZWplY3RlZC4KKyAq Lworc3RhdGljIHZvaWQKK2VtaXRfbG9jYWxfY29uc3RyYWludHMoVGFibGVEZGxDb250ZXh0ICpj dHgpCit7CisJUmVsYXRpb24JY29uUmVsOworCVN5c1NjYW5EZXNjIGNvblNjYW47CisJU2Nhbktl eURhdGEgY29uS2V5OworCUhlYXBUdXBsZQljb25UdXA7CisJYm9vbAkJaXNfcGFydGl0aW9uID0g Y3R4LT5yZWwtPnJkX3JlbC0+cmVsaXNwYXJ0aXRpb247CisKKwljb25SZWwgPSB0YWJsZV9vcGVu KENvbnN0cmFpbnRSZWxhdGlvbklkLCBBY2Nlc3NTaGFyZUxvY2spOworCVNjYW5LZXlJbml0KCZj b25LZXksCisJCQkJQW51bV9wZ19jb25zdHJhaW50X2NvbnJlbGlkLAorCQkJCUJURXF1YWxTdHJh dGVneU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsK Kwljb25TY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFJlbGlkVHlw aWROYW1lSW5kZXhJZCwKKwkJCQkJCQkJIHRydWUsIE5VTEwsIDEsICZjb25LZXkpOworCisJd2hp bGUgKEhlYXBUdXBsZUlzVmFsaWQoY29uVHVwID0gc3lzdGFibGVfZ2V0bmV4dChjb25TY2FuKSkp CisJeworCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VU U1RSVUNUKGNvblR1cCk7CisKKwkJaWYgKCFjb24tPmNvbmlzbG9jYWwpCisJCQljb250aW51ZTsK KworCQkvKgorCQkgKiBFYWNoIGNvbnR5cGUgaXMgZ2F0ZWQgb24gaXRzIGtpbmQgaW4gdGhlIG9u bHkgLyBleGNlcHQKKwkJICogdm9jYWJ1bGFyeS4gIENIRUNLIGlzIGFsc28gc2tpcHBlZCBmb3Ig bm9uLXBhcnRpdGlvbiByZWxhdGlvbnMKKwkJICogYmVjYXVzZSBhcHBlbmRfaW5saW5lX2NoZWNr X2NvbnN0cmFpbnRzIGVtaXRzIHRob3NlIGlubGluZSBpbgorCQkgKiB0aGUgQ1JFQVRFIFRBQkxF IGJvZHk7IHBhcnRpdGlvbiBjaGlsZHJlbiBoYXZlIG5vIGNvbHVtbiBsaXN0CisJCSAqIHRvIGxp dmUgaW4sIHNvIHRoZXkgY29tZSB0aHJvdWdoIHRoaXMgbG9vcC4gIE5PVCBOVUxMIGlzIG5vdCBh CisJCSAqIGZpbHRlcmFibGUga2luZCAtIGVtaXR0ZWQgdW5jb25kaXRpb25hbGx5IHRvIGF2b2lk IHByb2R1Y2luZworCQkgKiBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNjZXB0IE5VTExzIHRoZSBz b3VyY2Ugd291bGQgaGF2ZQorCQkgKiByZWplY3RlZC4KKwkJICovCisJCXN3aXRjaCAoY29uLT5j b250eXBlKQorCQl7CisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9QUklNQVJZX0tFWSkpCisJCQkJCWNvbnRp bnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1VOSVFVRToKKwkJCQlpZiAoIWlz X2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9VTklRVUUpKQorCQkJCQljb250aW51 ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9DSEVDSzoKKwkJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9DSEVDSykpCisJCQkJCWNvbnRpbnVlOwor CisJCQkJLyoKKwkJCQkgKiBGb3Igbm9uLXBhcnRpdGlvbiByZWxhdGlvbnMsIENIRUNLIGlzIG5v cm1hbGx5IGVtaXR0ZWQKKwkJCQkgKiBpbmxpbmUgaW4gdGhlIENSRUFURSBUQUJMRSBib2R5IGJ5 CisJCQkJICogYXBwZW5kX2lubGluZV9jaGVja19jb25zdHJhaW50cywgc28gd2Ugc2tpcCBpdCBo ZXJlIHRvCisJCQkJICogYXZvaWQgZG91YmxlIGVtaXNzaW9uLiAgQnV0IHdoZW4gS0lORF9UQUJM RSBpcyBub3QgaW4KKwkJCQkgKiB0aGUgYWN0aXZlIGZpbHRlciAoZS5nLiBvbmx5PT4nY2hlY2sn IG9yIGEgY2xvbmUgdGhhdAorCQkJCSAqIHRhcmdldHMgb25seSBzdWItb2JqZWN0cyksIHRoZSBp bmxpbmUgcGFzcyBuZXZlciBydW5zOworCQkJCSAqIGZhbGwgdGhyb3VnaCBhbmQgZW1pdCBlYWNo IENIRUNLIHZpYSBBTFRFUiBUQUJMRSBzbyB0aGUKKwkJCQkgKiB1c2VyIGFjdHVhbGx5IGdldHMg dGhlIGNvbnN0cmFpbnQgdGhleSBhc2tlZCBmb3IuCisJCQkJICovCisJCQkJaWYgKCFpc19wYXJ0 aXRpb24gJiYKKwkJCQkJaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1RBQkxF KSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTlNUUkFJTlRfRk9SRUlH TjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9GT1JFSUdO X0tFWSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0VY Q0xVU0lPTjoKKwkJCQlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9F WENMVVNJT04pKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlO VF9OT1ROVUxMOgorCQkJCS8qCisJCQkJICogT3V0LW9mLWxpbmUgTk9UIE5VTEwgaXMgY29uY2Vw dHVhbGx5IHBhcnQgb2YgdGhlCisJCQkJICogdGFibGUgZGVmaW5pdGlvbjogZ2F0aW5nIGl0IG9u IEtJTkRfVEFCTEUgbWVhbnMgYW4KKwkJCQkgKiBvbmx5PWZvcmVpZ25fa2V5IHNlY29uZCBwYXNz IGRvZXMgbm90IHJlLWVtaXQKKwkJCQkgKiBOT1QgTlVMTHMgdGhhdCB0aGUgZmlyc3QgcGFzcyBh bHJlYWR5IGNyZWF0ZWQsCisJCQkJICogd2hpbGUgdGhlIG5vLW9wdGlvbnMgZGVmYXVsdCBzdGls bCBlbWl0cyB0aGVtLgorCQkJCSAqLworCQkJCWlmICghaXNfa2luZF9pbmNsdWRlZChjdHgsIFRB QkxFX0RETF9LSU5EX1RBQkxFKSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKCFpc19wYXJ0aXRp b24gJiYKKwkJCQkJbGlzdF9tZW1iZXJfb2lkKGN0eC0+c2tpcF9ub3RudWxsX29pZHMsIGNvbi0+ b2lkKSkKKwkJCQkJY29udGludWU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qCisJ CQkJICogQW55IGZ1dHVyZSBjb250eXBlIHRoZSB2b2NhYnVsYXJ5IGRvZXMgbm90IHlldCBjb3Zl cjoKKwkJCQkgKiBmYWxsIHRocm91Z2ggYW5kIGVtaXQgaXQgdmlhIHBnX2dldF9jb25zdHJhaW50 ZGVmX2NvbW1hbmQsCisJCQkJICogbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGxvb3AncyAiZW1pdCB1 bmxlc3MgZmlsdGVyZWQiCisJCQkJICogYmVoYXZpb3IuICBUaGlzIGlzIHVucmVhY2hhYmxlIGlu IGN1cnJlbnQgUEcgKGV2ZXJ5CisJCQkJICogY29udHlwZSBhYm92ZSBpcyBlbnVtZXJhdGVkKSBi dXQga2VwdCBkZWZlbnNpdmUgYWdhaW5zdAorCQkJCSAqIGEgbmV3IGNvbnR5cGUgYmVpbmcgaW50 cm9kdWNlZC4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQorCisJCXsKKwkJCWNoYXIJICAgKmNv bmJvZHkgPSBwZ19nZXRfY29uc3RyYWludGRlZl9ib2R5KGNvbi0+b2lkKTsKKworCQkJcmVzZXRT dHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwgIkFM VEVSIFRBQkxFICVzIEFERCBDT05TVFJBSU5UICVzICVzOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5h bWUsCisJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJ CQkJCQkgY29uYm9keSk7CisJCQlhcHBlbmRfc3RtdChjdHgpOworCQkJcGZyZWUoY29uYm9keSk7 CisJCX0KKwl9CisJc3lzdGFibGVfZW5kc2Nhbihjb25TY2FuKTsKKwl0YWJsZV9jbG9zZShjb25S ZWwsIEFjY2Vzc1NoYXJlTG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3J1bGVzCisgKgkJQ1JFQVRF IFJVTEUgcGVyIGNhY2hlZCByZXdyaXRlIHJ1bGUgb24gdGhlIHJlbGF0aW9uLgorICovCitzdGF0 aWMgdm9pZAorZW1pdF9ydWxlcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBUQUJMRV9ERExfS0lORF9SVUxFKSB8fAorCQljdHgtPnJlbC0+cmRf cnVsZXMgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPnJl bC0+cmRfcnVsZXMtPm51bUxvY2tzOyBpKyspCisJeworCQlPaWQJCQlydWxlaWQgPSBjdHgtPnJl bC0+cmRfcnVsZXMtPnJ1bGVzW2ldLT5ydWxlSWQ7CisJCWNoYXIJICAgKnJ1bGVkZWZfc3RyOwor CisJCXJ1bGVkZWZfc3RyID0gcGdfZ2V0X3J1bGVkZWZfZGRsKHJ1bGVpZCk7CisJCXJlc2V0U3Ry aW5nSW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjdHgtPmJ1Ziwg cnVsZWRlZl9zdHIpOworCQlhcHBlbmRfc3RtdChjdHgpOworCQlwZnJlZShydWxlZGVmX3N0cik7 CisJfQorfQorCisvKgorICogZW1pdF9zdGF0aXN0aWNzCisgKgkJQ1JFQVRFIFNUQVRJU1RJQ1Mg cGVyIGV4dGVuZGVkIHN0YXRpc3RpY3Mgb2JqZWN0IG9uIHRoZSByZWxhdGlvbi4KKyAqLworc3Rh dGljIHZvaWQKK2VtaXRfc3RhdGlzdGljcyhUYWJsZURkbENvbnRleHQgKmN0eCkKK3sKKwlSZWxh dGlvbglzdGF0UmVsOworCVN5c1NjYW5EZXNjIHN0YXRTY2FuOworCVNjYW5LZXlEYXRhIHN0YXRL ZXk7CisJSGVhcFR1cGxlCXN0YXRUdXA7CisKKwlpZiAoIWlzX2tpbmRfaW5jbHVkZWQoY3R4LCBU QUJMRV9ERExfS0lORF9TVEFUSVNUSUNTKSkKKwkJcmV0dXJuOworCisJc3RhdFJlbCA9IHRhYmxl X29wZW4oU3RhdGlzdGljRXh0UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5 SW5pdCgmc3RhdEtleSwKKwkJCQlBbnVtX3BnX3N0YXRpc3RpY19leHRfc3R4cmVsaWQsCisJCQkJ QlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4 LT5yZWxpZCkpOworCXN0YXRTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHN0YXRSZWwsIFN0YXRp c3RpY0V4dFJlbGlkSW5kZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAmc3RhdEtleSk7 CisKKwl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChzdGF0VHVwID0gc3lzdGFibGVfZ2V0bmV4dChz dGF0U2NhbikpKQorCXsKKwkJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0YXQgPSAoRm9ybV9wZ19z dGF0aXN0aWNfZXh0KSBHRVRTVFJVQ1Qoc3RhdFR1cCk7CisJCWNoYXIJICAgKnN0YXRkZWYgPSBw Z19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwoc3RhdC0+b2lkKTsKKworCQlyZXNldFN0cmluZ0lu Zm8oJmN0eC0+YnVmKTsKKwkJYXBwZW5kU3RyaW5nSW5mbygmY3R4LT5idWYsICIlczsiLCBzdGF0 ZGVmKTsKKwkJYXBwZW5kX3N0bXQoY3R4KTsKKwkJcGZyZWUoc3RhdGRlZik7CisJfQorCXN5c3Rh YmxlX2VuZHNjYW4oc3RhdFNjYW4pOworCXRhYmxlX2Nsb3NlKHN0YXRSZWwsIEFjY2Vzc1NoYXJl TG9jayk7Cit9CisKKy8qCisgKiBlbWl0X3JlcGxpY2FfaWRlbnRpdHkKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBSRVBMSUNBIElERU5USVRZIC4uLiAtIGVtaXR0ZWQgb25seSB3aGVuIHRoZQor ICoJCXJlbHJlcGxpZGVudCBkaWZmZXJzIGZyb20gdGhlIGRlZmF1bHQgKCdkJyA9IHVzZSBwcmlt YXJ5IGtleSkuCisgKi8KK3N0YXRpYyB2b2lkCitlbWl0X3JlcGxpY2FfaWRlbnRpdHkoVGFibGVE ZGxDb250ZXh0ICpjdHgpCit7CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERM X0tJTkRfUkVQTElDQV9JREVOVElUWSkpCisJCXJldHVybjsKKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVscmVwbGlkZW50ID09IFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVCkKKwkJcmV0dXJuOwor CisJcmVzZXRTdHJpbmdJbmZvKCZjdHgtPmJ1Zik7CisJc3dpdGNoIChjdHgtPnJlbC0+cmRfcmVs LT5yZWxyZXBsaWRlbnQpCisJeworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJ CWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMgUkVQ TElDQSBJREVOVElUWSBOT1RISU5HOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBw ZW5kX3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoK KwkJCWFwcGVuZFN0cmluZ0luZm8oJmN0eC0+YnVmLAorCQkJCQkJCSAiQUxURVIgVEFCTEUgJXMg UkVQTElDQSBJREVOVElUWSBGVUxMOyIsCisJCQkJCQkJIGN0eC0+cXVhbG5hbWUpOworCQkJYXBw ZW5kX3N0bXQoY3R4KTsKKwkJCWJyZWFrOworCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfSU5ERVg6 CisJCQl7CisJCQkJT2lkCQkJcmVwbGlkeCA9IFJlbGF0aW9uR2V0UmVwbGljYUluZGV4KGN0eC0+ cmVsKTsKKworCQkJCWlmIChPaWRJc1ZhbGlkKHJlcGxpZHgpKQorCQkJCXsKKwkJCQkJY2hhcgkg ICAqaWR4bmFtZSA9IGdldF9yZWxfbmFtZShyZXBsaWR4KTsKKworCQkJCQlpZiAoaWR4bmFtZSA9 PSBOVUxMKQorCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9V TkRFRklORURfT0JKRUNUKSwKKwkJCQkJCQkJIGVycm1zZygicmVwbGljYSBpZGVudGl0eSBpbmRl eCB3aXRoIE9JRCAldSBkb2VzIG5vdCBleGlzdCIsCisJCQkJCQkJCQkJcmVwbGlkeCksCisJCQkJ CQkJCSBlcnJkZXRhaWwoIkl0IG1heSBoYXZlIGJlZW4gY29uY3VycmVudGx5IGRyb3BwZWQuIikp KTsKKworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCQkJCSAiQUxURVIg VEFCTEUgJXMgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCAlczsiLAorCQkJCQkJCQkJIGN0 eC0+cXVhbG5hbWUsCisJCQkJCQkJCQkgcXVvdGVfaWRlbnRpZmllcihpZHhuYW1lKSk7CisJCQkJ CWFwcGVuZF9zdG10KGN0eCk7CisJCQkJCXBmcmVlKGlkeG5hbWUpOworCQkJCX0KKwkJCX0KKwkJ CWJyZWFrOworCX0KK30KKworLyoKKyAqIGVtaXRfcmxzX3RvZ2dsZXMKKyAqCQlBTFRFUiBUQUJM RSBxdWFsbmFtZSBFTkFCTEUgLyBGT1JDRSBST1cgTEVWRUwgU0VDVVJJVFkuCisgKi8KK3N0YXRp YyB2b2lkCitlbWl0X3Jsc190b2dnbGVzKFRhYmxlRGRsQ29udGV4dCAqY3R4KQoreworCWlmICgh aXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1JMUykpCisJCXJldHVybjsKKwor CWlmIChjdHgtPnJlbC0+cmRfcmVsLT5yZWxyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5n SW5mbygmY3R4LT5idWYpOworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAi QUxURVIgVEFCTEUgJXMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsiLAorCQkJCQkJIGN0eC0+ cXVhbG5hbWUpOworCQlhcHBlbmRfc3RtdChjdHgpOworCX0KKwlpZiAoY3R4LT5yZWwtPnJkX3Jl bC0+cmVsZm9yY2Vyb3dzZWN1cml0eSkKKwl7CisJCXJlc2V0U3RyaW5nSW5mbygmY3R4LT5idWYp OworCQlhcHBlbmRTdHJpbmdJbmZvKCZjdHgtPmJ1ZiwKKwkJCQkJCSAiQUxURVIgVEFCTEUgJXMg Rk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZOyIsCisJCQkJCQkgY3R4LT5xdWFsbmFtZSk7CisJCWFw cGVuZF9zdG10KGN0eCk7CisJfQorfQorCisvKgorICogZW1pdF9wYXJ0aXRpb25fY2hpbGRyZW4K KyAqCQlGb3IgZWFjaCBkaXJlY3QgcGFydGl0aW9uIGNoaWxkIG9mIGEgcGFydGl0aW9uZWQtdGFi bGUgcGFyZW50LAorICoJCXJlY3Vyc2l2ZWx5IGNhbGwgcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5h bCBhbmQgYXBwZW5kIHRoZSBjaGlsZCdzCisgKgkJc3RhdGVtZW50cy4gIEVhY2ggY2hpbGQncyBv d24gRERMIGhhbmRsZXMgZnVydGhlciBsZXZlbHMgdGhyb3VnaAorICoJCXRoZSBzYW1lIHJlY3Vy c2lvbi4KKyAqLworc3RhdGljIHZvaWQKK2VtaXRfcGFydGl0aW9uX2NoaWxkcmVuKFRhYmxlRGRs Q29udGV4dCAqY3R4KQoreworCUxpc3QJICAgKmNoaWxkcmVuOworCUxpc3RDZWxsICAgKmxjOwor CisJaWYgKCFpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUEFSVElUSU9OKSB8 fAorCQljdHgtPnJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCisJCXJldHVybjsKKworCWNoaWxkcmVuID0gZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihj dHgtPnJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOworCWZvcmVhY2gobGMsIGNoaWxkcmVuKQorCXsK KwkJT2lkCQkJY2hpbGRvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJVGFibGVEZGxDb250ZXh0IGNo aWxkY3R4ID0gezB9OworCQlMaXN0CSAgICpjaGlsZHN0bXRzOworCisJCS8qCisJCSAqIEVhY2gg cmVjdXJzaXZlIGludm9jYXRpb24gcmUtZGVyaXZlcyBpdHMgb3duIHJlbCwgbmFtZXNwYWNlLAor CQkgKiBxdWFsbmFtZSwgTk9UIE5VTEwgY2FjaGUsIGJ1ZmZlciwgYW5kIHN0YXRlbWVudCBsaXN0 IGluc2lkZQorCQkgKiBwZ19nZXRfdGFibGVfZGRsX2ludGVybmFsLiAgVGhlIHVzZXItc3VwcGxp ZWQgb3B0aW9uIGZpZWxkcworCQkgKiBjYXJyeSBvdmVyIHZlcmJhdGltIHdpdGggb25lIGV4Y2Vw dGlvbjogS0lORF9QQVJUSVRJT04gaXMgYQorCQkgKiAiZ2F0ZSIga2luZCB0aGF0IGNvbnRyb2xz IHdoZXRoZXIgd2UgcmVjdXJzZSBhdCBhbGwsIG5vdCBhCisJCSAqIGtpbmQgdGhhdCB0aGUgY2hp bGRyZW4gdGhlbXNlbHZlcyBldmVyIGVtaXQuICBJZiB3ZSBwcm9wYWdhdGVkCisJCSAqIGFuIG9u bHktc2V0IHRoYXQgY29udGFpbmVkIFBBUlRJVElPTiBpbnRvIGEgY2hpbGQsIHRoZSBjaGlsZAor CQkgKiB3b3VsZCBub3QgZW1pdCBpdHMgb3duIENSRUFURSBUQUJMRSAoS0lORF9UQUJMRSBhYnNl bnQpIG5vcgorCQkgKiBhbnkgc3ViLW9iamVjdHMsIGFuZCB0aGUgcmVjdXJzaW9uIHdvdWxkIHBy b2R1Y2Ugbm90aGluZy4gIFNvCisJCSAqIHN0cmlwIFBBUlRJVElPTiBvdXQgb2Ygb25seV9raW5k cyB3aGVuIHJlY3Vyc2luZzsgaWYgdGhhdAorCQkgKiBlbXB0aWVzIHRoZSBzZXQsIGRyb3AgdGhl IGZpbHRlciBlbnRpcmVseSBzbyB0aGUgY2hpbGQgZW1pdHMKKwkJICogaXRzIGZ1bGwgRERMLiAg ZXhjZXB0X2tpbmRzIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZCBiZWNhdXNlCisJCSAqIFBBUlRJ VElPTiBpbiB0aGUgZXhjZXB0LXNldCBhbHJlYWR5IHN0b3BwZWQgdXMgZnJvbSBnZXR0aW5nCisJ CSAqIGhlcmUuCisJCSAqLworCQljaGlsZGN0eC5yZWxpZCA9IGNoaWxkb2lkOworCQljaGlsZGN0 eC5wcmV0dHkgPSBjdHgtPnByZXR0eTsKKwkJY2hpbGRjdHgubm9fb3duZXIgPSBjdHgtPm5vX293 bmVyOworCQljaGlsZGN0eC5ub190YWJsZXNwYWNlID0gY3R4LT5ub190YWJsZXNwYWNlOworCQlj aGlsZGN0eC5zY2hlbWFfcXVhbGlmaWVkID0gY3R4LT5zY2hlbWFfcXVhbGlmaWVkOworCQljaGls ZGN0eC5vbmx5X2tpbmRzID0gY3R4LT5vbmx5X2tpbmRzOworCQljaGlsZGN0eC5leGNlcHRfa2lu ZHMgPSBjdHgtPmV4Y2VwdF9raW5kczsKKworCQlpZiAoY2hpbGRjdHgub25seV9raW5kcyAhPSBO VUxMICYmCisJCQlibXNfaXNfbWVtYmVyKChpbnQpIFRBQkxFX0RETF9LSU5EX1BBUlRJVElPTiwK KwkJCQkJCSAgY2hpbGRjdHgub25seV9raW5kcykpCisJCXsKKwkJCUJpdG1hcHNldCAgKmNoaWxk X29ubHkgPSBibXNfY29weShjaGlsZGN0eC5vbmx5X2tpbmRzKTsKKworCQkJY2hpbGRfb25seSA9 IGJtc19kZWxfbWVtYmVyKGNoaWxkX29ubHksCisJCQkJCQkJCQkJKGludCkgVEFCTEVfRERMX0tJ TkRfUEFSVElUSU9OKTsKKwkJCWlmIChibXNfaXNfZW1wdHkoY2hpbGRfb25seSkpCisJCQl7CisJ CQkJYm1zX2ZyZWUoY2hpbGRfb25seSk7CisJCQkJY2hpbGRjdHgub25seV9raW5kcyA9IE5VTEw7 CisJCQl9CisJCQllbHNlCisJCQkJY2hpbGRjdHgub25seV9raW5kcyA9IGNoaWxkX29ubHk7CisJ CX0KKworCQljaGlsZHN0bXRzID0gcGdfZ2V0X3RhYmxlX2RkbF9pbnRlcm5hbCgmY2hpbGRjdHgp OworCQljdHgtPnN0YXRlbWVudHMgPSBsaXN0X2NvbmNhdChjdHgtPnN0YXRlbWVudHMsIGNoaWxk c3RtdHMpOworCX0KKwlsaXN0X2ZyZWUoY2hpbGRyZW4pOworfQorCisvKgorICogcGdfZ2V0X3Rh YmxlX2RkbF9pbnRlcm5hbAorICoJCUdlbmVyYXRlIERETCBzdGF0ZW1lbnRzIHRvIHJlY3JlYXRl IGEgcmVndWxhciBvciBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCisgKiBUaGUgY2FsbGVyIGluaXRp YWxpemVzICpjdHggd2l0aCB0aGUgdXNlci1zdXBwbGllZCBvcHRpb24gZmllbGRzCisgKiAocmVs aWQsIHByZXR0eSwgbm9fb3duZXIsIG5vX3RhYmxlc3BhY2UsIHNjaGVtYV9xdWFsaWZpZWQsCisg KiBvbmx5X2tpbmRzLCBleGNlcHRfa2luZHMpLiAgVGhpcyBmdW5jdGlvbiBvcGVucyB0aGUgcmVs YXRpb24sCisgKiB2YWxpZGF0ZXMgYWNjZXNzLCBwb3B1bGF0ZXMgdGhlIGRlcml2ZWQgZmllbGRz IChyZWwsIHF1YWxuYW1lLAorICogbm5fZW50cmllcywgLi4uKSwgcnVucyB0aGUgZW1pc3Npb24g cGFzc2VzLCBhbmQgcmV0dXJucyB0aGUKKyAqIGFjY3VtdWxhdGVkIHN0YXRlbWVudCBsaXN0Lgor ICoKKyAqIEVhY2ggZW1pc3Npb24gaGVscGVyIGNvbnN1bHRzIGlzX2tpbmRfaW5jbHVkZWQoKSB0 byBkZWNpZGUgd2hldGhlcgorICogaXQgc2hvdWxkIHJ1bi4gIFRoZSB0YWJsZS1wcm9wZXIgcGFz c2VzIChDUkVBVEUgVEFCTEUgLyBPV05FUiAvCisgKiBBTFRFUiBDT0xVTU4gLi4uIFNFVCBERUZB VUxUIC8gQUxURVIgQ09MVU1OIC4uLiBTRVQgKC4uLikpIGFyZQorICogZ3JvdXBlZCB1bmRlciBL SU5EX1RBQkxFIHNvIHRoZSBGSy1vbmx5IC8gc3ViLW9iamVjdC1vbmx5IHdvcmtmbG93CisgKiBp cyBleHByZXNzaWJsZSBhcyBhIHNpbmdsZSBvbmx5IG9yIGV4Y2VwdCBsaXN0LgorICoKKyAqIFRy aWdnZXIgYW5kIHBvbGljeSBlbWlzc2lvbiBhcmUgc2NhZmZvbGRlZCBidXQgY3VycmVudGx5IGRp c2FibGVkCisgKiAoI2lmIDApIC0gdGhleSB3aWxsIGJlY29tZSBhIHNpbmdsZSBoZWxwZXIgY2Fs bCBvbmNlIHRoZSBzdGFuZGFsb25lCisgKiBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9s aWN5X2RkbCBoZWxwZXJzIGxhbmQuCisgKi8KK3N0YXRpYyBMaXN0ICoKK3BnX2dldF90YWJsZV9k ZGxfaW50ZXJuYWwoVGFibGVEZGxDb250ZXh0ICpjdHgpCit7CisJUmVsYXRpb24JcmVsOworCWNo YXIJCXJlbGtpbmQ7CisJQWNsUmVzdWx0CWFjbHJlc3VsdDsKKworCXJlbCA9IHRhYmxlX29wZW4o Y3R4LT5yZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJlbGtpbmQgPSByZWwtPnJkX3JlbC0+ cmVsa2luZDsKKworCS8qCisJICogVGhlIGluaXRpYWwgY3V0IG9ubHkgc3VwcG9ydHMgb3JkaW5h cnkgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4gIFZpZXdzLAorCSAqIG1hdHZpZXdzLCBmb3JlaWdu IHRhYmxlcywgc2VxdWVuY2VzLCBpbmRleGVzLCBjb21wb3NpdGUgdHlwZXMsIGFuZAorCSAqIFRP QVNUIHRhYmxlcyBhcmUgb3V0IG9mIHNjb3BlIGZvciBub3cuCisJICovCisJaWYgKHJlbGtpbmQg IT0gUkVMS0lORF9SRUxBVElPTiAmJiByZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9ORURfVEFC TEUpCisJeworCQljaGFyCSAgICpyZWxuYW1lID0gcHN0cmR1cChSZWxhdGlvbkdldFJlbGF0aW9u TmFtZShyZWwpKTsKKworCQl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJ CQkJIGVycm1zZygiXCIlc1wiIGlzIG5vdCBhbiBvcmRpbmFyeSBvciBwYXJ0aXRpb25lZCB0YWJs ZSIsCisJCQkJCQlyZWxuYW1lKSkpOworCX0KKworCS8qIENhbGxlciBuZWVkcyBTRUxFQ1Qgb24g dGhlIHRhYmxlIHRvIHJlYWQgaXRzIGRlZmluaXRpb24uICovCisJYWNscmVzdWx0ID0gcGdfY2xh c3NfYWNsY2hlY2soY3R4LT5yZWxpZCwgR2V0VXNlcklkKCksIEFDTF9TRUxFQ1QpOworCWlmIChh Y2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0spCisJCWFjbGNoZWNrX2Vycm9yKGFjbHJlc3VsdCwgT0JK RUNUX1RBQkxFLAorCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKworCS8q CisJICogVmFsaWRhdGlvbjogaWYgdGhlIHRhYmxlIGhhcyBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIGFuZCB0aGUKKwkgKiByZWZlcmVuY2VkIGluZGV4IHdvdWxkIG5vdCBiZSBlbWl0dGVk IHVuZGVyIHRoZSBhY3RpdmUgZmlsdGVyLCB0aGUKKwkgKiBlbWl0dGVkIFJFUExJQ0EgSURFTlRJ VFkgY2xhdXNlIHdvdWxkIHJlZmVyZW5jZSBhbiBpbmRleCB0aGUgc2FtZSBEREwKKwkgKiBuZXZl ciBwcm9kdWNlZC4gIERldGVybWluZSB3aGljaCBraW5kIHdvdWxkIGVtaXQgdGhlIGluZGV4IChv bmUgb2YKKwkgKiBwcmltYXJ5X2tleSAvIHVuaXF1ZSAvIGV4Y2x1c2lvbiBmb3IgY29uc3RyYWlu dC1iYWNrZWQgaW5kZXhlcywKKwkgKiBvdGhlcndpc2UgdGhlIGdlbmVyaWMgImluZGV4IiBraW5k KSBhbmQgcmVxdWlyZSBpdCB0byBiZSBpbiBzY29wZQorCSAqIHdoZW5ldmVyICJyZXBsaWNhX2lk ZW50aXR5IiBpcy4gIFRoZSBjaGVjayB1c2VzIGlzX2tpbmRfaW5jbHVkZWQgc28KKwkgKiBpdCBj b3ZlcnMgYm90aCBmb3JtcyBuYXR1cmFsbHk6IGFuICJleGNlcHQiIGxpc3QgdGhhdCBvbWl0cyB0 aGUKKwkgKiBzb3VyY2Uga2luZCwgYW5kIGFuICJvbmx5IiBsaXN0IHRoYXQgb21pdHMgaXQuCisJ ICovCisJaWYgKHJlbC0+cmRfcmVsLT5yZWxyZXBsaWRlbnQgPT0gUkVQTElDQV9JREVOVElUWV9J TkRFWCAmJgorCQlpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFCTEVfRERMX0tJTkRfUkVQTElDQV9J REVOVElUWSkpCisJeworCQlPaWQJCQlyZXBsaWR4ID0gUmVsYXRpb25HZXRSZXBsaWNhSW5kZXgo cmVsKTsKKworCQlpZiAoT2lkSXNWYWxpZChyZXBsaWR4KSkKKwkJeworCQkJVGFibGVEZGxLaW5k IGlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfSU5ERVg7CisJCQlPaWQJCQljb25vaWQgPSBnZXRf aW5kZXhfY29uc3RyYWludChyZXBsaWR4KTsKKworCQkJaWYgKE9pZElzVmFsaWQoY29ub2lkKSkK KwkJCXsKKwkJCQlIZWFwVHVwbGUJY29uVHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwK KwkJCQkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjb25vaWQpKTsKKworCQkJCWlmIChIZWFw VHVwbGVJc1ZhbGlkKGNvblR1cCkpCisJCQkJeworCQkJCQlGb3JtX3BnX2NvbnN0cmFpbnQgY29u ID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvblR1cCk7CisKKwkJCQkJc3dpdGNo IChjb24tPmNvbnR5cGUpCisJCQkJCXsKKwkJCQkJCWNhc2UgQ09OU1RSQUlOVF9QUklNQVJZOgor CQkJCQkJCWlkeF9raW5kID0gVEFCTEVfRERMX0tJTkRfUFJJTUFSWV9LRVk7CisJCQkJCQkJYnJl YWs7CisJCQkJCQljYXNlIENPTlNUUkFJTlRfVU5JUVVFOgorCQkJCQkJCWlkeF9raW5kID0gVEFC TEVfRERMX0tJTkRfVU5JUVVFOworCQkJCQkJCWJyZWFrOworCQkJCQkJY2FzZSBDT05TVFJBSU5U X0VYQ0xVU0lPTjoKKwkJCQkJCQlpZHhfa2luZCA9IFRBQkxFX0RETF9LSU5EX0VYQ0xVU0lPTjsK KwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJ CQkJUmVsZWFzZVN5c0NhY2hlKGNvblR1cCk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoIWlzX2tp bmRfaW5jbHVkZWQoY3R4LCBpZHhfa2luZCkpCisJCQl7CisJCQkJY2hhcgkgICAqcmVsbmFtZSA9 IHBzdHJkdXAoUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJCQkJY29uc3QgY2hhciAq aWR4X25hbWUgPSB0YWJsZV9kZGxfa2luZF9uYW1lc1soaW50KSBpZHhfa2luZF0ubmFtZTsKKwor CQkJCXRhYmxlX2Nsb3NlKHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKwkJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJ CQkgZXJybXNnKCJSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSBcIiVzXCIgcmVxdWlyZXMga2lu ZCBcIiVzXCIgdG8gYmUgZW1pdHRlZCIsCisJCQkJCQkJCXJlbG5hbWUsIGlkeF9uYW1lKSwKKwkJ CQkJCSBlcnJkZXRhaWwoIlRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgg cmVmZXJlbmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgXCIlc1wiIGtpbmQsIHdoaWNoIGlz IG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4iLAorCQkJCQkJCQkgICBpZHhfbmFtZSksCisJCQkJ CQkgZXJyaGludCgiRWl0aGVyIGFkZCBcIiVzXCIgdG8gdGhlIGZpbHRlciBvciByZW1vdmUgXCJy ZXBsaWNhX2lkZW50aXR5XCIgZnJvbSBpdC4iLAorCQkJCQkJCQkgaWR4X25hbWUpKSk7CisJCQl9 CisJCX0KKwl9CisKKwkvKgorCSAqIFBvcHVsYXRlIGRlcml2ZWQgZmllbGRzIG5vdyB0aGF0IHRo ZSByZWxhdGlvbiBpcyBvcGVuIGFuZCB2YWxpZGF0ZWQuCisJICogVGhlIHJlbWFpbmluZyBkZXJp dmVkIGZpZWxkcyAobm5fZW50cmllcywgc2tpcF9ub3RudWxsX29pZHMsIGJ1ZiwKKwkgKiBzdGF0 ZW1lbnRzKSBzdGFydCB6ZXJvZWQgdmlhIHRoZSBjYWxsZXIncyBgVGFibGVEZGxDb250ZXh0IGN0 eCA9IHswfWAKKwkgKiBpbml0aWFsaXplcjsgdGhlIE5PVCBOVUxMIGNhY2hlIGlzIHBvcHVsYXRl ZCBieSBjb2xsZWN0X2xvY2FsX25vdF9udWxsLAorCSAqIHRoZSBidWZmZXIgaXMgaW5pdFN0cmlu Z0luZm8nZCwgYW5kIGVhY2ggZW1pdCBwYXNzIGFwcGVuZHMgdG8KKwkgKiBzdGF0ZW1lbnRzIHZp YSBsYXBwZW5kLgorCSAqLworCWN0eC0+cmVsID0gcmVsOworCWN0eC0+YmFzZV9uYW1lc3BhY2Ug PSBSZWxhdGlvbkdldE5hbWVzcGFjZShyZWwpOworCWN0eC0+c2F2ZV9uZXN0bGV2ZWwgPSAtMTsK KwljdHgtPnF1YWxuYW1lID0gbG9va3VwX3JlbG5hbWVfZm9yX2VtaXQoY3R4LT5yZWxpZCwgY3R4 LT5zY2hlbWFfcXVhbGlmaWVkLAorCQkJCQkJCQkJCQljdHgtPmJhc2VfbmFtZXNwYWNlKTsKKwor CS8qCisJICogV2hlbiBzY2hlbWFfcXVhbGlmaWVkIGlzIGZhbHNlLCBuYXJyb3cgdGhlIGFjdGl2 ZSBzZWFyY2hfcGF0aCB0byB0aGUKKwkgKiB0YXJnZXQgdGFibGUncyBvd24gbmFtZXNwYWNlIGZv ciB0aGUgZHVyYXRpb24gb2YgRERMIGVtaXNzaW9uLiAgVGhlCisJICogZGVwYXJzZSBjb2RlIGlu IHJ1bGV1dGlscyAoYW5kIHRoZSByZWdjbGFzcy9yZWdwcm9jIG91dHB1dCBmdW5jdGlvbnMgd2UK KwkgKiB0cmFuc2l0aXZlbHkgY2FsbCkgZGVjaWRlcyB3aGV0aGVyIHRvIHNjaGVtYS1xdWFsaWZ5 IGEgbmFtZSBiYXNlZCBvbgorCSAqIHdoZXRoZXIgdGhlIHJlZmVyZW5jZWQgb2JqZWN0IGlzIHJl YWNoYWJsZSB0aHJvdWdoIHNlYXJjaF9wYXRoLCBzbyB0aGlzCisJICogbWFrZXMgc2FtZS1zY2hl bWEgcmVmZXJlbmNlcyBpbiBERUZBVUxUIGFuZCBDSEVDSyBleHByZXNzaW9ucywgcmVnY2xhc3MK KwkgKiBsaXRlcmFscywgRksgdGFyZ2V0cywgaW5kZXhlcywgY29uc3RyYWludHMsIHJ1bGVzLCBh bmQgc3RhdGlzdGljcyBjb21lCisJICogb3V0IHVucXVhbGlmaWVkIGF1dG9tYXRpY2FsbHkuICBD cm9zcy1zY2hlbWEgcmVmZXJlbmNlcyBzdGF5IHF1YWxpZmllZCwKKwkgKiB3aGljaCBpcyB0aGUg Y29ycmVjdG5lc3MgcmVxdWlyZW1lbnQuCisJICogQXRFT1hhY3RfR1VDIGNsZWFucyB1cCBhdCB4 YWN0IGVuZCBpZiBhbnl0aGluZyB0aHJvd3MgYmV0d2VlbiBoZXJlIGFuZAorCSAqIHRoZSBleHBs aWNpdCByZXN0b3JlIGJlbG93OyBvbiB0aGUgbm9ybWFsIHBhdGggd2UgcmVzdG9yZSByaWdodCBi ZWZvcmUKKwkgKiByZXR1cm5pbmcuCisJICovCisJaWYgKCFjdHgtPnNjaGVtYV9xdWFsaWZpZWQp CisJeworCQljaGFyCSAgICpuc3BuYW1lID0gZ2V0X25hbWVzcGFjZV9uYW1lKGN0eC0+YmFzZV9u YW1lc3BhY2UpOworCisJCWlmIChuc3BuYW1lICE9IE5VTEwpCisJCXsKKwkJCWNvbnN0IGNoYXIg KnFuc3AgPSBxdW90ZV9pZGVudGlmaWVyKG5zcG5hbWUpOworCisJCQljdHgtPnNhdmVfbmVzdGxl dmVsID0gTmV3R1VDTmVzdExldmVsKCk7CisJCQkodm9pZCkgc2V0X2NvbmZpZ19vcHRpb24oInNl YXJjaF9wYXRoIiwgcW5zcCwKKwkJCQkJCQkJCSBQR0NfVVNFUlNFVCwgUEdDX1NfU0VTU0lPTiwK KwkJCQkJCQkJCSBHVUNfQUNUSU9OX1NBVkUsIHRydWUsIDAsIGZhbHNlKTsKKwkJCXBmcmVlKG5z cG5hbWUpOworCQl9CisJfQorCisJLyoKKwkgKiBDYWNoZSBsb2NhbGx5LWRlY2xhcmVkIE5PVCBO VUxMIGNvbnN0cmFpbnQgbWV0YWRhdGEgc28gdGhlIGNvbHVtbi0gZW1pdAorCSAqIGhlbHBlcnMg Y2FuIHByb2R1Y2UgIkNPTlNUUkFJTlQgbmFtZSBOT1QgTlVMTCIgaW5saW5lIGZvciB1c2VyLW5h bWVkCisJICogY29uc3RyYWludHMsIGFuZCBzbyB0aGUgY29uc3RyYWludCBsb29wIGNhbiBhdm9p ZCBkb3VibGUtZW1pdHRpbmcgdGhlbS4KKwkgKi8KKwljdHgtPm5uX2VudHJpZXMgPSBjb2xsZWN0 X2xvY2FsX25vdF9udWxsKHJlbCwgJmN0eC0+c2tpcF9ub3RudWxsX29pZHMpOworCisJaW5pdFN0 cmluZ0luZm8oJmN0eC0+YnVmKTsKKworCS8qCisJICogRW1pc3Npb24gcGFzc2VzLiAgT3JkZXIg aXMgc2lnbmlmaWNhbnQ6IENSRUFURSBUQUJMRSBmaXJzdDsgT1dORVIgYW5kCisJICogdGhlIHBl ci1jb2x1bW4gQUxURVIgQ09MVU1OIHBhc3NlcyBiZWZvcmUgc3ViLW9iamVjdCBlbWlzc2lvbjsK KwkgKiBzdWItb2JqZWN0cyBpbiBkZXBlbmRlbmN5LWZyaWVuZGx5IG9yZGVyIChpbmRleGVzIGJl Zm9yZSBjb25zdHJhaW50cywKKwkgKiBzaW5jZSBjb25zdHJhaW50LWJhY2tlZCBpbmRleGVzIGFy ZSBlbWl0dGVkIG91dC1vZi1saW5lIGJ5IHRoZQorCSAqIGNvbnN0cmFpbnQgbG9vcCk7IHBhcnRp dGlvbiBjaGlsZHJlbiBsYXN0IHNvIHRoZSBwYXJlbnQgYWxyZWFkeSBleGlzdHMKKwkgKiBhdCBy ZXBsYXkgdGltZS4gIEVhY2ggaGVscGVyIGdhdGVzIGl0c2VsZiBvbiBpc19raW5kX2luY2x1ZGVk IGZvciB0aGUKKwkgKiByZWxldmFudCBUQUJMRV9ERExfS0lORF8qOyB0aGUgZm91ciAidGFibGUg aXRzZWxmIiBwYXNzZXMgYXJlIGdyb3VwZWQKKwkgKiBoZXJlIHVuZGVyIEtJTkRfVEFCTEUgc28g YWxsIG9mIENSRUFURSBUQUJMRSAvIE9XTkVSIC8gU0VUIERFRkFVTFQgLworCSAqIFNFVCAoLi4u KSBkcm9wIG91dCB0b2dldGhlciB3aGVuIHRoZSB1c2VyIGFza3MgZm9yIG9ubHkgc3ViLW9iamVj dHMKKwkgKiAoZS5nLiBvbmx5ID0+ICdmb3JlaWduX2tleScgZm9yIHRoZSBzZWNvbmQgcGFzcyBv ZiBhIHR3by1wYXNzIEZLCisJICogY2xvbmUpLgorCSAqLworCWlmIChpc19raW5kX2luY2x1ZGVk KGN0eCwgVEFCTEVfRERMX0tJTkRfVEFCTEUpKQorCXsKKwkJZW1pdF9jcmVhdGVfdGFibGVfc3Rt dChjdHgpOworCQllbWl0X293bmVyX3N0bXQoY3R4KTsKKwkJZW1pdF9jaGlsZF9kZWZhdWx0X292 ZXJyaWRlcyhjdHgpOworCQllbWl0X2F0dG9wdGlvbnMoY3R4KTsKKwl9CisJZW1pdF9pbmRleGVz KGN0eCk7CisJZW1pdF9sb2NhbF9jb25zdHJhaW50cyhjdHgpOworCWVtaXRfcnVsZXMoY3R4KTsK KwllbWl0X3N0YXRpc3RpY3MoY3R4KTsKKwllbWl0X3JlcGxpY2FfaWRlbnRpdHkoY3R4KTsKKwll bWl0X3Jsc190b2dnbGVzKGN0eCk7CisKKwkvKgorCSAqIFRyaWdnZXJzIGFuZCByb3ctbGV2ZWwg c2VjdXJpdHkgcG9saWNpZXMgLSBkaXNhYmxlZCB1bnRpbCB0aGUKKwkgKiBzdGFuZGFsb25lIHBn X2dldF90cmlnZ2VyX2RkbCgpIGFuZCBwZ19nZXRfcG9saWN5X2RkbCgpIGhlbHBlcnMgbGFuZC4K KwkgKiBUaGUgc2NhbiArIGxvY2sgKyBmaWx0ZXIgc2NhZmZvbGRpbmcgYmVsb3cgaXMgcHJlc2Vy dmVkIChpbnNpZGUgI2lmIDApCisJICogc28gd2lyaW5nIHVwIGVhY2ggZW1pc3Npb24gYmVjb21l cyBhIG9uZS1saW5lciBpbiB0aGUgbG9vcCBib2R5IG9uY2UKKwkgKiB0aG9zZSBoZWxwZXJzIGFy ZSBhdmFpbGFibGUuCisJICovCisjaWYgMAorCWlmIChpc19raW5kX2luY2x1ZGVkKGN0eCwgVEFC TEVfRERMX0tJTkRfVFJJR0dFUikpCisJeworCQlSZWxhdGlvbgl0cmlnUmVsOworCQlTeXNTY2Fu RGVzYyB0cmlnU2NhbjsKKwkJU2NhbktleURhdGEgdHJpZ0tleTsKKwkJSGVhcFR1cGxlCXRyaWdU dXA7CisKKwkJdHJpZ1JlbCA9IHRhYmxlX29wZW4oVHJpZ2dlclJlbGF0aW9uSWQsIEFjY2Vzc1No YXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZ0cmlnS2V5LAorCQkJCQlBbnVtX3BnX3RyaWdnZXJf dGdyZWxpZCwKKwkJCQkJQlRFcXVhbFN0cmF0ZWd5TnVtYmVyLCBGX09JREVRLAorCQkJCQlPYmpl Y3RJZEdldERhdHVtKGN0eC0+cmVsaWQpKTsKKwkJdHJpZ1NjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4odHJpZ1JlbCwgVHJpZ2dlclJlbGlkTmFtZUluZGV4SWQsCisJCQkJCQkJCQkgIHRydWUsIE5V TEwsIDEsICZ0cmlnS2V5KTsKKwkJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHJpZ1R1cCA9IHN5 c3RhYmxlX2dldG5leHQodHJpZ1NjYW4pKSkKKwkJeworCQkJRm9ybV9wZ190cmlnZ2VyIHRyZyA9 IChGb3JtX3BnX3RyaWdnZXIpIEdFVFNUUlVDVCh0cmlnVHVwKTsKKworCQkJaWYgKHRyZy0+dGdp c2ludGVybmFsKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBUT0RPOiBhcHBlbmQgcGdfZ2V0X3Ry aWdnZXJfZGRsKHRyZy0+b2lkKSBvdXRwdXQgaGVyZS4gKi8KKwkJfQorCQlzeXN0YWJsZV9lbmRz Y2FuKHRyaWdTY2FuKTsKKwkJdGFibGVfY2xvc2UodHJpZ1JlbCwgQWNjZXNzU2hhcmVMb2NrKTsK Kwl9CisKKwlpZiAoaXNfa2luZF9pbmNsdWRlZChjdHgsIFRBQkxFX0RETF9LSU5EX1BPTElDWSkp CisJeworCQlSZWxhdGlvbglwb2xSZWw7CisJCVN5c1NjYW5EZXNjIHBvbFNjYW47CisJCVNjYW5L ZXlEYXRhIHBvbEtleTsKKwkJSGVhcFR1cGxlCXBvbFR1cDsKKworCQlwb2xSZWwgPSB0YWJsZV9v cGVuKFBvbGljeVJlbGF0aW9uSWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCVNjYW5LZXlJbml0KCZw b2xLZXksCisJCQkJCUFudW1fcGdfcG9saWN5X3BvbHJlbGlkLAorCQkJCQlCVEVxdWFsU3RyYXRl Z3lOdW1iZXIsIEZfT0lERVEsCisJCQkJCU9iamVjdElkR2V0RGF0dW0oY3R4LT5yZWxpZCkpOwor CQlwb2xTY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKHBvbFJlbCwgUG9saWN5UG9scmVsaWRQb2xu YW1lSW5kZXhJZCwKKwkJCQkJCQkJCSB0cnVlLCBOVUxMLCAxLCAmcG9sS2V5KTsKKwkJd2hpbGUg KEhlYXBUdXBsZUlzVmFsaWQocG9sVHVwID0gc3lzdGFibGVfZ2V0bmV4dChwb2xTY2FuKSkpCisJ CXsKKwkJCS8qIFRPRE86IGFwcGVuZCBwZ19nZXRfcG9saWN5X2RkbChyZWxpZCwgcG9sbmFtZSkg b3V0cHV0IGhlcmUuICovCisJCX0KKwkJc3lzdGFibGVfZW5kc2Nhbihwb2xTY2FuKTsKKwkJdGFi bGVfY2xvc2UocG9sUmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCX0KKyNlbmRpZgorCisJZW1pdF9w YXJ0aXRpb25fY2hpbGRyZW4oY3R4KTsKKworCXsKKwkJaW50CQkJbmF0dHMgPSBSZWxhdGlvbkdl dERlc2NyKHJlbCktPm5hdHRzOworCisJCWZvciAoaW50IGkgPSAxOyBpIDw9IG5hdHRzOyBpKysp CisJCQlpZiAoY3R4LT5ubl9lbnRyaWVzW2ldLm5hbWUgIT0gTlVMTCkKKwkJCQlwZnJlZShjdHgt Pm5uX2VudHJpZXNbaV0ubmFtZSk7CisJfQorCXBmcmVlKGN0eC0+bm5fZW50cmllcyk7CisKKwl0 YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisJcGZyZWUoY3R4LT5idWYuZGF0YSk7 CisJcGZyZWUoY3R4LT5xdWFsbmFtZSk7CisJbGlzdF9mcmVlKGN0eC0+c2tpcF9ub3RudWxsX29p ZHMpOworCisJLyoKKwkgKiBQb3AgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIG5vdyB0aGF0IGFs bCBoZWxwZXJzIGhhdmUgcnVuLiAgRXJyb3JzCisJICogdGhyb3duIGVhcmxpZXIgYXJlIGNsZWFu ZWQgdXAgYnkgQXRFT1hhY3RfR1VDIGF0IHhhY3QgZW5kLgorCSAqLworCWlmIChjdHgtPnNhdmVf bmVzdGxldmVsID49IDApCisJCUF0RU9YYWN0X0dVQyh0cnVlLCBjdHgtPnNhdmVfbmVzdGxldmVs KTsKKworCXJldHVybiBjdHgtPnN0YXRlbWVudHM7Cit9CisKKy8qCisgKiBwZ19nZXRfdGFibGVf ZGRsCisgKgkJUmV0dXJuIERETCB0byByZWNyZWF0ZSBhIHRhYmxlIGFzIGEgc2V0IG9mIHRleHQg cm93cy4KKyAqLworRGF0dW0KK3BnX2dldF90YWJsZV9kZGwoUEdfRlVOQ1RJT05fQVJHUykKK3sK KwlGdW5jQ2FsbENvbnRleHQgKmZ1bmNjdHg7CisJTGlzdAkgICAqc3RhdGVtZW50czsKKworCWlm IChTUkZfSVNfRklSU1RDQUxMKCkpCisJeworCQlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJ CVRhYmxlRGRsQ29udGV4dCBjdHggPSB7MH07CisJCURkbE9wdGlvbglvcHRzW10gPSB7CisJCQl7 InByZXR0eSIsIERETF9PUFRfQk9PTH0sCisJCQl7Im93bmVyIiwgRERMX09QVF9CT09MfSwKKwkJ CXsidGFibGVzcGFjZSIsIERETF9PUFRfQk9PTH0sCisJCQl7InNjaGVtYV9xdWFsaWZpZWQiLCBE RExfT1BUX0JPT0x9LAorCQkJeyJvbmx5IiwgRERMX09QVF9URVhUfSwKKwkJCXsiZXhjZXB0Iiwg RERMX09QVF9URVhUfSwKKwkJfTsKKwkJZW51bQorCQl7CisJCQlPUFRfUFJFVFRZLAorCQkJT1BU X09XTkVSLAorCQkJT1BUX1RBQkxFU1BBQ0UsCisJCQlPUFRfU0NIRU1BX1FVQUxJRklFRCwKKwkJ CU9QVF9PTkxZLAorCQkJT1BUX0VYQ0VQVCwKKwkJfTsKKworCQlmdW5jY3R4ID0gU1JGX0ZJUlNU Q0FMTF9JTklUKCk7CisJCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnVuY2N0 eC0+bXVsdGlfY2FsbF9tZW1vcnlfY3R4KTsKKworCQlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQl7 CisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJCQlTUkZfUkVUVVJOX0RP TkUoZnVuY2N0eCk7CisJCX0KKworCQlwYXJzZV9kZGxfb3B0aW9ucyhmY2luZm8sIDEsIG9wdHMs IGxlbmd0aG9mKG9wdHMpKTsKKworCQlpZiAob3B0c1tPUFRfT05MWV0uaXNzZXQgJiYgb3B0c1tP UFRfRVhDRVBUXS5pc3NldCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJcIm9ubHlcIiBhbmQg XCJleGNlcHRcIiBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUiKSkpOworCisJCS8qCisJ CSAqIEluaXRpYWxpemUgdGhlIG9wdGlvbiBmaWVsZHMgb2YgdGhlIGNvbnRleHQgdG8gdGhlaXIg ZGVmYXVsdHMKKwkJICogZmlyc3QsIHRoZW4gb3ZlcnJpZGUgb25seSB0aG9zZSB0aGF0IHRoZSBj YWxsZXIgZXhwbGljaXRseQorCQkgKiBzcGVjaWZpZWQuICBLZWVwaW5nIHRoZSBkZWZhdWx0IHZh bHVlcyBsaXRlcmFsIGhlcmUgKHJhdGhlciB0aGFuCisJCSAqIGZvbGRlZCBpbnRvIGVhY2ggb3B0 c1tdIGxvb2t1cCkgbWFrZXMgdGhlIGRlZmF1bHRzIG9idmlvdXMgaW4gb25lCisJCSAqIHBsYWNl IGFuZCBhdm9pZHMgdGhlIHRlcm5hcnktc291cCB0aGF0IG1hZGUgdGhlIHByZXZpb3VzCisJCSAq IHBvc2l0aW9uYWwtYm9vbCBjYWxsIHNpdGUgZXJyb3ItcHJvbmUuCisJCSAqLworCQljdHgucmVs aWQgPSBQR19HRVRBUkdfT0lEKDApOworCQljdHgucHJldHR5ID0gZmFsc2U7CisJCWN0eC5ub19v d25lciA9IGZhbHNlOworCQljdHgubm9fdGFibGVzcGFjZSA9IGZhbHNlOworCQljdHguc2NoZW1h X3F1YWxpZmllZCA9IHRydWU7CisJCWN0eC5vbmx5X2tpbmRzID0gTlVMTDsKKwkJY3R4LmV4Y2Vw dF9raW5kcyA9IE5VTEw7CisKKwkJaWYgKG9wdHNbT1BUX1BSRVRUWV0uaXNzZXQpCisJCQljdHgu cHJldHR5ID0gb3B0c1tPUFRfUFJFVFRZXS5ib29sdmFsOworCQlpZiAob3B0c1tPUFRfT1dORVJd Lmlzc2V0KQorCQkJY3R4Lm5vX293bmVyID0gIW9wdHNbT1BUX09XTkVSXS5ib29sdmFsOworCQlp ZiAob3B0c1tPUFRfVEFCTEVTUEFDRV0uaXNzZXQpCisJCQljdHgubm9fdGFibGVzcGFjZSA9ICFv cHRzW09QVF9UQUJMRVNQQUNFXS5ib29sdmFsOworCQlpZiAob3B0c1tPUFRfU0NIRU1BX1FVQUxJ RklFRF0uaXNzZXQpCisJCQljdHguc2NoZW1hX3F1YWxpZmllZCA9IG9wdHNbT1BUX1NDSEVNQV9R VUFMSUZJRURdLmJvb2x2YWw7CisJCWlmIChvcHRzW09QVF9PTkxZXS5pc3NldCkKKwkJCWN0eC5v bmx5X2tpbmRzID0gcGFyc2Vfa2luZF9saXN0KCJvbmx5IiwKKwkJCQkJCQkJCQkJIG9wdHNbT1BU X09OTFldLnRleHR2YWwpOworCQlpZiAob3B0c1tPUFRfRVhDRVBUXS5pc3NldCkKKwkJCWN0eC5l eGNlcHRfa2luZHMgPSBwYXJzZV9raW5kX2xpc3QoImV4Y2VwdCIsCisJCQkJCQkJCQkJCSAgIG9w dHNbT1BUX0VYQ0VQVF0udGV4dHZhbCk7CisKKwkJc3RhdGVtZW50cyA9IHBnX2dldF90YWJsZV9k ZGxfaW50ZXJuYWwoJmN0eCk7CisJCWZ1bmNjdHgtPnVzZXJfZmN0eCA9IHN0YXRlbWVudHM7CisJ CWZ1bmNjdHgtPm1heF9jYWxscyA9IGxpc3RfbGVuZ3RoKHN0YXRlbWVudHMpOworCisJCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwl9CisKKwlmdW5jY3R4ID0gU1JGX1BFUkNB TExfU0VUVVAoKTsKKwlzdGF0ZW1lbnRzID0gKExpc3QgKikgZnVuY2N0eC0+dXNlcl9mY3R4Owor CisJaWYgKGZ1bmNjdHgtPmNhbGxfY250ciA8IGZ1bmNjdHgtPm1heF9jYWxscykKKwl7CisJCWNo YXIJICAgKnN0bXQ7CisKKwkJc3RtdCA9IGxpc3RfbnRoKHN0YXRlbWVudHMsIGZ1bmNjdHgtPmNh bGxfY250cik7CisKKwkJU1JGX1JFVFVSTl9ORVhUKGZ1bmNjdHgsIENTdHJpbmdHZXRUZXh0RGF0 dW0oc3RtdCkpOworCX0KKwllbHNlCisJeworCQlsaXN0X2ZyZWVfZGVlcChzdGF0ZW1lbnRzKTsK KwkJU1JGX1JFVFVSTl9ET05FKGZ1bmNjdHgpOworCX0KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYwppbmRleCA4OGRlNWMwNDgxYy4uNzE4NmNmODNlMWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVs ZXV0aWxzLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxl LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2FnZ3JlZ2F0ZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW0uaCIKICNpbmNsdWRlICJjYXRh bG9nL3BnX2F1dGhpZC5oIgpAQCAtMzcwLDcgKzM3MSw3IEBAIHN0YXRpYyB2b2lkIG1ha2VfcHJv cGdyYXBoZGVmX2VsZW1lbnRzKFN0cmluZ0luZm8gYnVmLCBPaWQgcGdyZWxpZCwgY2hhciBwZ2Vr aW5kCiBzdGF0aWMgdm9pZCBtYWtlX3Byb3BncmFwaGRlZl9sYWJlbHMoU3RyaW5nSW5mbyBidWYs IE9pZCBlbGlkLCBjb25zdCBjaGFyICplbGFsaWFzLCBPaWQgZWxyZWxpZCk7CiBzdGF0aWMgdm9p ZCBtYWtlX3Byb3BncmFwaGRlZl9wcm9wZXJ0aWVzKFN0cmluZ0luZm8gYnVmLCBPaWQgZWxsYWJl bGlkLCBPaWQgZWxyZWxpZCk7CiBzdGF0aWMgY2hhciAqcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29y a2VyKE9pZCBzdGF0ZXh0aWQsIGJvb2wgY29sdW1uc19vbmx5LAotCQkJCQkJCQkJCSBib29sIG1p c3Npbmdfb2spOworCQkJCQkJCQkJCSBib29sIG1pc3Npbmdfb2ssIGludCBwcmV0dHlGbGFncyk7 CiBzdGF0aWMgY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKE9pZCByZWxpZCwgaW50IHBy ZXR0eUZsYWdzLAogCQkJCQkJCQkJICBib29sIGF0dHJzT25seSwgYm9vbCBtaXNzaW5nX29rKTsK IHN0YXRpYyBjaGFyICpwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIoT2lkIGNvbnN0cmFpbnRJ ZCwgYm9vbCBmdWxsQ29tbWFuZCwKQEAgLTYwMyw2ICs2MDQsMTkgQEAgcGdfZ2V0X3J1bGVkZWZf ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJUEdfUkVUVVJOX1RFWFRfUChzdHJpbmdfdG9fdGV4dChy ZXMpKTsKIH0KIAorLyoKKyAqIHBnX2dldF9ydWxlZGVmX2RkbAorICoJCUxpa2UgcGdfZ2V0X3J1 bGVkZWYgYnV0IHVzZXMgdGhlIGFjdGl2ZSBzZWFyY2hfcGF0aCB0byBkZWNpZGUKKyAqCQl3aGV0 aGVyIHRvIHNjaGVtYS1xdWFsaWZ5IHRoZSBydWxlJ3MgdGFyZ2V0IHJlbGF0aW9uIG5hbWUuCisg KgkJRm9yIHVzZSBieSBwZ19nZXRfdGFibGVfZGRsIHdoaWNoIGhhcyBhbHJlYWR5IHNldCBzZWFy Y2hfcGF0aAorICoJCXRvIHRoZSBiYXNlIHNjaGVtYSB3aGVuIHNjaGVtYV9xdWFsaWZpZWQ9ZmFs c2UuCisgKi8KK2NoYXIgKgorcGdfZ2V0X3J1bGVkZWZfZGRsKE9pZCBydWxlb2lkKQoreworCXJl dHVybiBwZ19nZXRfcnVsZWRlZl93b3JrZXIocnVsZW9pZCwgUFJFVFRZRkxBR19JTkRFTlQgfCBQ UkVUVFlGTEFHX1NDSEVNQSk7Cit9CisKIAogc3RhdGljIGNoYXIgKgogcGdfZ2V0X3J1bGVkZWZf d29ya2VyKE9pZCBydWxlb2lkLCBpbnQgcHJldHR5RmxhZ3MpCkBAIC0xMjQxLDYgKzEyNTUsMjIg QEAgcGdfZ2V0X2luZGV4ZGVmX3N0cmluZyhPaWQgaW5kZXhyZWxpZCkKIAkJCQkJCQkJICAwLCBm YWxzZSk7CiB9CiAKKy8qCisgKiBwZ19nZXRfaW5kZXhkZWZfZGRsCisgKgkJTGlrZSBwZ19nZXRf aW5kZXhkZWZfc3RyaW5nIGJ1dCB1c2VzIHRoZSBhY3RpdmUgc2VhcmNoX3BhdGggdG8KKyAqCQlk ZWNpZGUgd2hldGhlciB0byBzY2hlbWEtcXVhbGlmeSB0aGUgaW5kZXhlZCByZWxhdGlvbiBuYW1l LgorICoJCUZvciB1c2UgYnkgcGdfZ2V0X3RhYmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQg c2VhcmNoX3BhdGgKKyAqCQl0byB0aGUgYmFzZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVk PWZhbHNlLgorICovCitjaGFyICoKK3BnX2dldF9pbmRleGRlZl9kZGwoT2lkIGluZGV4cmVsaWQp Cit7CisJcmV0dXJuIHBnX2dldF9pbmRleGRlZl93b3JrZXIoaW5kZXhyZWxpZCwgMCwgTlVMTCwK KwkJCQkJCQkJICBmYWxzZSwgZmFsc2UsCisJCQkJCQkJCSAgdHJ1ZSwgdHJ1ZSwKKwkJCQkJCQkJ ICBQUkVUVFlGTEFHX1NDSEVNQSwgZmFsc2UpOworfQorCiAvKiBJbnRlcm5hbCB2ZXJzaW9uIHRo YXQganVzdCByZXBvcnRzIHRoZSBrZXktY29sdW1uIGRlZmluaXRpb25zICovCiBjaGFyICoKIHBn X2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0eSkKQEAgLTE5 NjksNyArMTk5OSw3IEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmKFBHX0ZVTkNUSU9OX0FSR1Mp CiAJT2lkCQkJc3RhdGV4dGlkID0gUEdfR0VUQVJHX09JRCgwKTsKIAljaGFyCSAgICpyZXM7CiAK LQlyZXMgPSBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgdHJ1 ZSk7CisJcmVzID0gcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKHN0YXRleHRpZCwgZmFsc2Us IHRydWUsIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKQogCQlQR19SRVRVUk5fTlVMTCgpOwpAQCAt MTk4NCw3ICsyMDE0LDIwIEBAIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmKFBHX0ZVTkNUSU9OX0FS R1MpCiBjaGFyICoKIHBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhPaWQgc3RhdGV4dGlk KQogewotCXJldHVybiBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxz ZSwgZmFsc2UpOworCXJldHVybiBwZ19nZXRfc3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlk LCBmYWxzZSwgZmFsc2UsIDApOworfQorCisvKgorICogcGdfZ2V0X3N0YXRpc3RpY3NvYmpkZWZf ZGRsCisgKgkJTGlrZSBwZ19nZXRfc3RhdGlzdGljc29iamRlZl9zdHJpbmcgYnV0IHVzZXMgdGhl IGFjdGl2ZSBzZWFyY2hfcGF0aAorICoJCXRvIGRlY2lkZSB3aGV0aGVyIHRvIHNjaGVtYS1xdWFs aWZ5IHRoZSBzdGF0aXN0aWNzIG9iamVjdCBuYW1lLgorICoJCUZvciB1c2UgYnkgcGdfZ2V0X3Rh YmxlX2RkbCB3aGljaCBoYXMgYWxyZWFkeSBzZXQgc2VhcmNoX3BhdGgKKyAqCQl0byB0aGUgYmFz ZSBzY2hlbWEgd2hlbiBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLgorICovCitjaGFyICoKK3BnX2dl dF9zdGF0aXN0aWNzb2JqZGVmX2RkbChPaWQgc3RhdGV4dGlkKQoreworCXJldHVybiBwZ19nZXRf c3RhdGlzdGljc29ial93b3JrZXIoc3RhdGV4dGlkLCBmYWxzZSwgZmFsc2UsIFBSRVRUWUZMQUdf U0NIRU1BKTsKIH0KIAogLyoKQEAgLTE5OTcsNyArMjA0MCw3IEBAIHBnX2dldF9zdGF0aXN0aWNz b2JqZGVmX2NvbHVtbnMoUEdfRlVOQ1RJT05fQVJHUykKIAlPaWQJCQlzdGF0ZXh0aWQgPSBQR19H RVRBUkdfT0lEKDApOwogCWNoYXIJICAgKnJlczsKIAotCXJlcyA9IHBnX2dldF9zdGF0aXN0aWNz b2JqX3dvcmtlcihzdGF0ZXh0aWQsIHRydWUsIHRydWUpOworCXJlcyA9IHBnX2dldF9zdGF0aXN0 aWNzb2JqX3dvcmtlcihzdGF0ZXh0aWQsIHRydWUsIHRydWUsIDApOwogCiAJaWYgKHJlcyA9PSBO VUxMKQogCQlQR19SRVRVUk5fTlVMTCgpOwpAQCAtMjAwOSw3ICsyMDUyLDggQEAgcGdfZ2V0X3N0 YXRpc3RpY3NvYmpkZWZfY29sdW1ucyhQR19GVU5DVElPTl9BUkdTKQogICogSW50ZXJuYWwgd29y a2hvcnNlIHRvIGRlY29tcGlsZSBhbiBleHRlbmRlZCBzdGF0aXN0aWNzIG9iamVjdC4KICAqLwog c3RhdGljIGNoYXIgKgotcGdfZ2V0X3N0YXRpc3RpY3NvYmpfd29ya2VyKE9pZCBzdGF0ZXh0aWQs IGJvb2wgY29sdW1uc19vbmx5LCBib29sIG1pc3Npbmdfb2spCitwZ19nZXRfc3RhdGlzdGljc29i al93b3JrZXIoT2lkIHN0YXRleHRpZCwgYm9vbCBjb2x1bW5zX29ubHksIGJvb2wgbWlzc2luZ19v aywKKwkJCQkJCQlpbnQgcHJldHR5RmxhZ3MpCiB7CiAJRm9ybV9wZ19zdGF0aXN0aWNfZXh0IHN0 YXRleHRyZWM7CiAJSGVhcFR1cGxlCXN0YXRleHR0dXA7CkBAIC0yMDY5LDEwICsyMTEzLDE4IEBA IHBnX2dldF9zdGF0aXN0aWNzb2JqX3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNf b25seSwgYm9vbCBtaXNzaW5nX29rKQogCiAJaWYgKCFjb2x1bW5zX29ubHkpCiAJewotCQluc3Ag PSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChzdGF0ZXh0cmVjLT5zdHhuYW1lc3BhY2UpOwot CQlhcHBlbmRTdHJpbmdJbmZvKCZidWYsICJDUkVBVEUgU1RBVElTVElDUyAlcyIsCi0JCQkJCQkg cXVvdGVfcXVhbGlmaWVkX2lkZW50aWZpZXIobnNwLAotCQkJCQkJCQkJCQkJCU5hbWVTdHIoc3Rh dGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJaWYgKChwcmV0dHlGbGFncyAmIFBSRVRUWUZMQUdfU0NI RU1BKSAmJgorCQkJU3RhdGlzdGljc09iaklzVmlzaWJsZShzdGF0ZXh0aWQpKQorCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAorCQkJCQkJCSBxdW90ZV9p ZGVudGlmaWVyKE5hbWVTdHIoc3RhdGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJZWxzZQorCQl7CisJ CQluc3AgPSBnZXRfbmFtZXNwYWNlX25hbWVfb3JfdGVtcChzdGF0ZXh0cmVjLT5zdHhuYW1lc3Bh Y2UpOworCQkJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIFNUQVRJU1RJQ1MgJXMiLAor CQkJCQkJCSBxdW90ZV9xdWFsaWZpZWRfaWRlbnRpZmllcihuc3AsCisJCQkJCQkJCQkJCQkJCU5h bWVTdHIoc3RhdGV4dHJlYy0+c3R4bmFtZSkpKTsKKwkJCXBmcmVlKG5zcCk7CisJCX0KIAogCQkv KgogCQkgKiBEZWNvZGUgdGhlIHN0eGtpbmQgY29sdW1uIHNvIHRoYXQgd2Uga25vdyB3aGljaCBz dGF0cyB0eXBlcyB0bwpAQCAtMjE2MywxMCArMjIxNSw5IEBAIHBnX2dldF9zdGF0aXN0aWNzb2Jq X3dvcmtlcihPaWQgc3RhdGV4dGlkLCBib29sIGNvbHVtbnNfb25seSwgYm9vbCBtaXNzaW5nX29r KQogCXsKIAkJTm9kZQkgICAqZXhwciA9IChOb2RlICopIGxmaXJzdChsYyk7CiAJCWNoYXIJICAg KnN0cjsKLQkJaW50CQkJcHJldHR5RmxhZ3MgPSBQUkVUVFlGTEFHX1BBUkVOOwogCiAJCXN0ciA9 IGRlcGFyc2VfZXhwcmVzc2lvbl9wcmV0dHkoZXhwciwgY29udGV4dCwgZmFsc2UsIGZhbHNlLAot CQkJCQkJCQkJCXByZXR0eUZsYWdzLCAwKTsKKwkJCQkJCQkJCQlQUkVUVFlGTEFHX1BBUkVOLCAw KTsKIAogCQlpZiAoY29sbm8gPiAwKQogCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmYnVmLCAi LCAiKTsKQEAgLTI1NDQsNiArMjU5NSwyMCBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5k KE9pZCBjb25zdHJhaW50SWQpCiAJcmV0dXJuIHBnX2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihj b25zdHJhaW50SWQsIHRydWUsIDAsIGZhbHNlKTsKIH0KIAorLyoKKyAqIHBnX2dldF9jb25zdHJh aW50ZGVmX2JvZHkKKyAqCQlSZXR1cm5zIHRoZSBjb25zdHJhaW50IGRlZmluaXRpb24gYm9keSB3 aXRob3V0IHRoZQorICoJCSJBTFRFUiBUQUJMRSBuYW1lIEFERCBDT05TVFJBSU5UIGNuYW1lIiBw cmVmaXguCisgKgkJRksgdGFyZ2V0IHJlbGF0aW9uIG5hbWVzIGluIHRoZSBib2R5IGFscmVhZHkg dXNlCisgKgkJZ2VuZXJhdGVfcmVsYXRpb25fbmFtZSAoc2VhcmNoX3BhdGgtYXdhcmUpLiAgRm9y IHVzZSBieQorICoJCXBnX2dldF90YWJsZV9kZGwgd2hpY2ggYnVpbGRzIHRoZSBBTFRFUiBUQUJM RSBwcmVmaXggaXRzZWxmLgorICovCitjaGFyICoKK3BnX2dldF9jb25zdHJhaW50ZGVmX2JvZHko T2lkIGNvbnN0cmFpbnRJZCkKK3sKKwlyZXR1cm4gcGdfZ2V0X2NvbnN0cmFpbnRkZWZfd29ya2Vy KGNvbnN0cmFpbnRJZCwgZmFsc2UsIDAsIGZhbHNlKTsKK30KKwogLyoKICAqIEFzIG9mIDkuNCwg d2Ugbm93IHVzZSBhbiBNVkNDIHNuYXBzaG90IGZvciB0aGlzLgogICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X2luaGVyaXRzLmgKaW5kZXggY2M4NzRhYmFhYmIuLjFlNDYzYjAxMDZkIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRzLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxv Zy9wZ19pbmhlcml0cy5oCkBAIC01NSw2ICs1NSw3IEBAIERFQ0xBUkVfSU5ERVgocGdfaW5oZXJp dHNfcGFyZW50X2luZGV4LCAyMTg3LCBJbmhlcml0c1BhcmVudEluZGV4SWQsIHBnX2luaGVyaXRz CiBleHRlcm4gTGlzdCAqZmluZF9pbmhlcml0YW5jZV9jaGlsZHJlbihPaWQgcGFyZW50cmVsSWQs IExPQ0tNT0RFIGxvY2ttb2RlKTsKIGV4dGVybiBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxk cmVuX2V4dGVuZGVkKE9pZCBwYXJlbnRyZWxJZCwgYm9vbCBvbWl0X2RldGFjaGVkLAogCQkJCQkJ CQkJCQkJTE9DS01PREUgbG9ja21vZGUsIGJvb2wgKmRldGFjaGVkX2V4aXN0LCBUcmFuc2FjdGlv bklkICpkZXRhY2hlZF94bWluKTsKK2V4dGVybiBMaXN0ICpmaW5kX2luaGVyaXRhbmNlX3BhcmVu dHMoT2lkIHJlbGlkLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAKIGV4dGVybiBMaXN0ICpmaW5kX2Fs bF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCwgTE9DS01PREUgbG9ja21vZGUsCiAJCQkJCQkJ CSBMaXN0ICoqbnVtcGFyZW50cyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCA0MDJkODY5 NzEwYi4uYjAxNDU0ZDA2ZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJv Yy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtODYxNCw2ICs4 NjE0LDEzIEBACiAgIHByb3JldHR5cGUgPT4gJ3RleHQnLCBwcm9hcmd0eXBlcyA9PiAncmVnZGF0 YWJhc2UgYm9vbCBib29sIGJvb2wnLAogICBwcm9hcmduYW1lcyA9PiAne2RhdGFiYXNlLHByZXR0 eSxvd25lcix0YWJsZXNwYWNlfScsCiAgIHByb2FyZ2RlZmF1bHRzID0+ICd7ZmFsc2UsdHJ1ZSx0 cnVlfScsIHByb3NyYyA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcgfSwKK3sgb2lkID0+ICc4MjE1 JywgZGVzY3IgPT4gJ2dldCBEREwgdG8gcmVjcmVhdGUgYSB0YWJsZScsCisgIHByb25hbWUgPT4g J3BnX2dldF90YWJsZV9kZGwnLCBwcm9yb3dzID0+ICc1MCcsIHByb3ZhcmlhZGljID0+ICd0ZXh0 JywKKyAgcHJvaXNzdHJpY3QgPT4gJ2YnLCBwcm9yZXRzZXQgPT4gJ3QnLCBwcm92b2xhdGlsZSA9 PiAncycsIHByb3BhcmFsbGVsID0+ICdyJywKKyAgcHJvbmFyZ2RlZmF1bHRzID0+ICcxJywgcHJv cmV0dHlwZSA9PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICdyZWdjbGFzcyBfdGV4dCcsIHBy b2FsbGFyZ3R5cGVzID0+ICd7cmVnY2xhc3MsX3RleHR9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tp LHZ9JywgcHJvYXJnZGVmYXVsdHMgPT4gJ3tOVUxMfScsCisgIHByb3NyYyA9PiAncGdfZ2V0X3Rh YmxlX2RkbCcgfSwKIHsgb2lkID0+ICcyNTA5JywKICAgZGVzY3IgPT4gJ2RlcGFyc2UgYW4gZW5j b2RlZCBleHByZXNzaW9uIHdpdGggcHJldHR5LXByaW50IG9wdGlvbicsCiAgIHByb25hbWUgPT4g J3BnX2dldF9leHByJywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9yZXR0eXBlID0+ICd0ZXh0JywK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3RhYmxlY21kcy5oIGIvc3JjL2luY2x1 ZGUvY29tbWFuZHMvdGFibGVjbWRzLmgKaW5kZXggYzNkODUxOGNiNjIuLmQzMzU2M2ZkZWFkIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaAorKysgYi9zcmMvaW5j bHVkZS9jb21tYW5kcy90YWJsZWNtZHMuaApAQCAtOTIsNiArOTIsNyBAQCBleHRlcm4gdm9pZCBj aGVja19vZl90eXBlKEhlYXBUdXBsZSB0eXBldHVwbGUpOwogCiBleHRlcm4gdm9pZCByZWdpc3Rl cl9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCwgT25Db21taXRBY3Rpb24gYWN0aW9uKTsKIGV4 dGVybiB2b2lkIHJlbW92ZV9vbl9jb21taXRfYWN0aW9uKE9pZCByZWxpZCk7CitleHRlcm4gT25D b21taXRBY3Rpb24gZ2V0X29uX2NvbW1pdF9hY3Rpb24oT2lkIHJlbGlkKTsKIAogZXh0ZXJuIHZv aWQgUHJlQ29tbWl0X29uX2NvbW1pdF9hY3Rpb25zKHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRFT1hh Y3Rfb25fY29tbWl0X2FjdGlvbnMoYm9vbCBpc0NvbW1pdCk7CkBAIC0xMDgsNCArMTA5LDYgQEAg ZXh0ZXJuIHZvaWQgUmFuZ2VWYXJDYWxsYmFja093bnNSZWxhdGlvbihjb25zdCBSYW5nZVZhciAq cmVsYXRpb24sCiBleHRlcm4gYm9vbCBQYXJ0Q29uc3RyYWludEltcGxpZWRCeVJlbENvbnN0cmFp bnQoUmVsYXRpb24gc2NhbnJlbCwKIAkJCQkJCQkJCQkJCSBMaXN0ICpwYXJ0Q29uc3RyYWludCk7 CiAKK2V4dGVybiBjb25zdCBjaGFyICpzdG9yYWdlX25hbWUoY2hhciBjKTsKKwogI2VuZGlmCQkJ CQkJCS8qIFRBQkxFQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9ydWxl dXRpbHMuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3J1bGV1dGlscy5oCmluZGV4IDI1YzA1ZTJmNjQ5 Li5jM2IzZGM2NWM5MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgK KysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcnVsZXV0aWxzLmgKQEAgLTI1LDYgKzI1LDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgUGxhbm5lZFN0bXQgUGxhbm5lZFN0bXQ7CiAjZGVmaW5lIFJVTEVfSU5ERVhE RUZfS0VZU19PTkxZCQkweDAyCS8qIGlnbm9yZSBpbmNsdWRlZCBhdHRyaWJ1dGVzICovCiAKIGV4 dGVybiBjaGFyICpwZ19nZXRfaW5kZXhkZWZfc3RyaW5nKE9pZCBpbmRleHJlbGlkKTsKK2V4dGVy biBjaGFyICpwZ19nZXRfaW5kZXhkZWZfZGRsKE9pZCBpbmRleHJlbGlkKTsKIGV4dGVybiBjaGFy ICpwZ19nZXRfaW5kZXhkZWZfY29sdW1ucyhPaWQgaW5kZXhyZWxpZCwgYm9vbCBwcmV0dHkpOwog ZXh0ZXJuIGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zX2V4dGVuZGVkKE9pZCBpbmRleHJl bGlkLAogCQkJCQkJCQkJCQkgIHVpbnQxNiBmbGFncyk7CkBAIC0zNCw2ICszNSw3IEBAIGV4dGVy biBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9jb2x1bW5zKE9pZCByZWxpZCwgYm9vbCBwcmV0dHkp OwogZXh0ZXJuIGNoYXIgKnBnX2dldF9wYXJ0Y29uc3RyZGVmX3N0cmluZyhPaWQgcGFydGl0aW9u SWQsIGNoYXIgKmFsaWFzbmFtZSk7CiAKIGV4dGVybiBjaGFyICpwZ19nZXRfY29uc3RyYWludGRl Zl9jb21tYW5kKE9pZCBjb25zdHJhaW50SWQpOworZXh0ZXJuIGNoYXIgKnBnX2dldF9jb25zdHJh aW50ZGVmX2JvZHkoT2lkIGNvbnN0cmFpbnRJZCk7CiBleHRlcm4gY2hhciAqZGVwYXJzZV9leHBy ZXNzaW9uKE5vZGUgKmV4cHIsIExpc3QgKmRwY29udGV4dCwKIAkJCQkJCQkJYm9vbCBmb3JjZXBy ZWZpeCwgYm9vbCBzaG93aW1wbGljaXQpOwogZXh0ZXJuIExpc3QgKmRlcGFyc2VfY29udGV4dF9m b3IoY29uc3QgY2hhciAqYWxpYXNuYW1lLCBPaWQgcmVsaWQpOwpAQCAtNTQsNSArNTYsNyBAQCBl eHRlcm4gY2hhciAqZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmcoTGlzdCAqYm91bmRfZGF0dW1z KTsKIGV4dGVybiB2b2lkIGdldF9yZWxvcHRpb25zKFN0cmluZ0luZm8gYnVmLCBEYXR1bSByZWxv cHRpb25zKTsKIAogZXh0ZXJuIGNoYXIgKnBnX2dldF9zdGF0aXN0aWNzb2JqZGVmX3N0cmluZyhP aWQgc3RhdGV4dGlkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRfc3RhdGlzdGljc29iamRlZl9kZGwo T2lkIHN0YXRleHRpZCk7CitleHRlcm4gY2hhciAqcGdfZ2V0X3J1bGVkZWZfZGRsKE9pZCBydWxl b2lkKTsKIAogI2VuZGlmCQkJCQkJCS8qIFJVTEVVVElMU19IICovCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90YWJsZV9kZGwub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9wZ19nZXRfdGFibGVfZGRsLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNGNlZDY0OWU5YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3BnX2dldF90YWJsZV9kZGwub3V0CkBAIC0wLDAgKzEsMTI2NSBA QAorLS0KKy0tIHBnX2dldF90YWJsZV9kZGwKKy0tCistLSBBbGwgdGVzdHMgcGFzcyBvd25lcj0+ ZmFsc2Ugc28gdGhlIEFMVEVSIFRBQkxFIE9XTkVSIFRPIGxpbmUgaXMgbm90CistLSBlbWl0dGVk LCBrZWVwaW5nIG91dHB1dCBzdGFibGUgYWNyb3NzIHRlc3QgcnVubmVycyAod2hpY2ggbWF5IHJ1 biB1bmRlcgorLS0gZGlmZmVyZW50IHJvbGUgbmFtZXMpLgorLS0KK0NSRUFURSBTQ0hFTUEgcGd0 YmxfZGRsX3Rlc3Q7CitTRVQgc2VhcmNoX3BhdGggPSBwZ3RibF9kZGxfdGVzdDsKKy0tIEJhc2lj IHRhYmxlIHdpdGggUFJJTUFSWSBLRVksIE5PVCBOVUxMLCBERUZBVUxULCBDT0xMQVRFLgorQ1JF QVRFIFRBQkxFIGJhc2ljICgKKyAgICBpZCBpbnQgUFJJTUFSWSBLRVksCisgICAgbmFtZSB0ZXh0 IE5PVCBOVUxMIERFRkFVTFQgJ2Fub24nIENPTExBVEUgIkMiCispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1l IHRleHQgQ09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVS IFRBQkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJ TUFSWSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIElkZW50aXR5IGNvbHVtbnMgKHdpdGggZGVm YXVsdCBhbmQgY3VzdG9tIHNlcXVlbmNlIG9wdGlvbnMpLgorQ1JFQVRFIFRBQkxFIGlkX2NvbHMg KAorICAgIGlkX2Fsd2F5cyBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElUWSwKKyAgICBp ZF9kZWZhdWx0IGludCBHRU5FUkFURUQgQlkgREVGQVVMVCBBUyBJREVOVElUWQorKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY29scyc6OnJlZ2NsYXNzLCAnb3duZXInLCAn ZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5pZF9jb2xzIChpZF9hbHdheXMgaW50ZWdlciBHRU5FUkFURUQgQUxX QVlTIEFTIElERU5USVRZIE5PVCBOVUxMLCBpZF9kZWZhdWx0IGludGVnZXIgR0VORVJBVEVEIEJZ IERFRkFVTFQgQVMgSURFTlRJVFkgTk9UIE5VTEwpOworKDEgcm93KQorCitDUkVBVEUgVEFCTEUg aWRfY3VzdG9tICgKKyAgICB2IGludCBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZICgKKyAg ICAgICAgU0VRVUVOQ0UgTkFNRSBpZF9jdXN0b21fdl9zZXEKKyAgICAgICAgU1RBUlQgV0lUSCAx MDAgSU5DUkVNRU5UIEJZIDUKKyAgICAgICAgTUlOVkFMVUUgNTAgTUFYVkFMVUUgMTAwMAorICAg ICAgICBDQUNIRSAxMCBDWUNMRQorICAgICkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuaWRfY3VzdG9tICh2IGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyBJREVOVElU WSAoU1RBUlQgV0lUSCAxMDAgSU5DUkVNRU5UIEJZIDUgTUlOVkFMVUUgNTAgTUFYVkFMVUUgMTAw MCBDQUNIRSAxMCBDWUNMRSkgTk9UIE5VTEwpOworKDEgcm93KQorCistLSBHZW5lcmF0ZWQgc3Rv cmVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBnZW5fY29scyAoCisgICAgY2VudHMgaW50LAorICAg IGRvbGxhcnMgbnVtZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9S RUQKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmdlbl9jb2xzIChjZW50cyBpbnRlZ2VyLCBkb2xs YXJzIG51bWVyaWMgR0VORVJBVEVEIEFMV0FZUyBBUyAoKChjZW50cyk6Om51bWVyaWMgLyAxMDAu MCkpIFNUT1JFRCk7CisoMSByb3cpCisKKy0tIEdlbmVyYXRlZCB2aXJ0dWFsIGNvbHVtbi4KK0NS RUFURSBUQUJMRSBnZW5fdmlydHVhbCAoCisgICAgYmFzZSBpbnQsCisgICAgZGVyaXZlZCBpbnQg R0VORVJBVEVEIEFMV0FZUyBBUyAoYmFzZSAqIDIpIFZJUlRVQUwKKyk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2dlbl92aXJ0dWFsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5nZW5fdmlydHVhbCAoYmFz ZSBpbnRlZ2VyLCBkZXJpdmVkIGludGVnZXIgR0VORVJBVEVEIEFMV0FZUyBBUyAoKGJhc2UgKiAy KSkgVklSVFVBTCk7CisoMSByb3cpCisKKy0tIFNUT1JBR0UgYW5kIENPTVBSRVNTSU9OIChvbmx5 IGVtaXR0ZWQgd2hlbiBub24tZGVmYXVsdCBmb3IgdGhlIHR5cGUpLgorQ1JFQVRFIFRBQkxFIHN0 b3JhZ2VfY29scyAoCisgICAgYSB0ZXh0IFNUT1JBR0UgRVhURVJOQUwsCisgICAgYiB0ZXh0IFNU T1JBR0UgTUFJTiwKKyAgICBjIHRleHQgQ09NUFJFU1NJT04gcGdsegorKTsKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnc3RvcmFnZV9jb2xzJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdG9yYWdlX2NvbHMg KGEgdGV4dCBTVE9SQUdFIEVYVEVSTkFMLCBiIHRleHQgU1RPUkFHRSBNQUlOLCBjIHRleHQgQ09N UFJFU1NJT04gcGdseik7CisoMSByb3cpCisKKy0tIENvbnN0cmFpbnRzOiBDSEVDSywgVU5JUVVF LCBGT1JFSUdOIEtFWSAoREVGRVJSQUJMRSkuCitDUkVBVEUgVEFCTEUgcmVmZCAoaWQgaW50IFBS SU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBjb25zICgKKyAgICBhIGludCBDSEVDSyAoYSA+IDAp LAorICAgIGIgaW50IFVOSVFVRSwKKyAgICBjIGludCBSRUZFUkVOQ0VTIHJlZmQoaWQpIERFRkVS UkFCTEUgSU5JVElBTExZIERFRkVSUkVECispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25zIChhIGludGVn ZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBDT05TVFJBSU5UIGNvbnNfYV9jaGVjayBDSEVDSyAo KGEgPiAwKSkpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJ TlQgY29uc19iX2tleSBVTklRVUUgKGIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNv bnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMg cmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCistLSBJ bmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFsLiAgQ29uc3RyYWludC1iYWNraW5nIGluZGV4 ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFyZSBlbWl0dGVkIGJ5IHRoZSBjb25zdHJhaW50 IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0 KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQgKGxvd2VyKG5hbWUpKTsKK0NSRUFU RSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAoaWQpIFdIRVJFIGlkID4gMTAwOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBU QUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQp OworIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQgVVNJTkcgYnRyZWUgKGxvd2VyKG5h bWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9OIGlkeGQgVVNJTkcgYnRyZWUgKGlk KSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgQURE IENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoNCByb3dzKQorCistLSBJ bmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVycmlkZSBvbiBhbiBpbmhl cml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVGQVVMVCAxLCBiIHRleHQp OworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7CitBTFRFUiBUQUJMRSBj aCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu Y2ggKGMgaW50ZWdlcikgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcik7CisgQUxURVIgVEFC TEUgcGd0YmxfZGRsX3Rlc3QuY2ggQUxURVIgQ09MVU1OIGEgU0VUIERFRkFVTFQgOTk5OworKDIg cm93cykKKworLS0gUGVyLWNvbHVtbiBhdHRvcHRpb25zOiBlbWl0dGVkIGFzIEFMVEVSIENPTFVN TiBTRVQgKC4uLikuCitDUkVBVEUgVEFCTEUgYXR0b3B0IChhIGludCwgYiB0ZXh0KTsKK0FMVEVS IFRBQkxFIGF0dG9wdCBBTFRFUiBDT0xVTU4gYSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdhdHRvcHQnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IChhIGludGVnZXIsIGIgdGV4dCk7CisgQUxURVIg VEFCTEUgcGd0YmxfZGRsX3Rlc3QuYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9kaXN0aW5j dD0nMTAwJyk7CisoMiByb3dzKQorCistLSBQYXJ0aXRpb25lZCB0YWJsZSBwYXJlbnRzIChSQU5H RSwgSEFTSCwgYW5kIExJU1QpLgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9yYW5nZSAoaWQgaW50LCBr IGludCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3BhcnRlZF9yYW5nZSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlIChpZCBp bnRlZ2VyLCBrIGludGVnZXIpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworKDEgcm93KQorCitD UkVBVEUgVEFCTEUgcGFydGVkX2hhc2ggKGlkIGludCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hhc2gnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaCAoaWQgaW50 ZWdlcikgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKKygxIHJvdykKKworQ1JFQVRFIFRBQkxFIHBh cnRlZF9saXN0IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJUSVRJT04gQlkgTElTVCAocmVnaW9u KTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2xpc3QnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX2xpc3QgKGlkIGludGVnZXIsIHJlZ2lvbiB0ZXh0KSBQ QVJUSVRJT04gQlkgTElTVCAocmVnaW9uKTsKKygxIHJvdykKKworLS0gUGFydGl0aW9uIGNoaWxk cmVuOiBGUk9NL1RPLCBXSVRIIChtb2R1bHVzLCByZW1haW5kZXIpLCBERUZBVUxULgorQ1JFQVRF IFRBQkxFIHBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBwYXJ0ZWRfcmFuZ2UKKyAgICBGT1Ig VkFMVUVTIEZST00gKDApIFRPICgxMDApOworQUxURVIgVEFCTEUgcGFydGVkX3JhbmdlXzEgQUxU RVIgQ09MVU1OIGsgU0VUIERFRkFVTFQgNzsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlXzEnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2Rk bCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZV8xIFBBUlRJVElPTiBPRiBw Z3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2VfMSBBTFRFUiBDT0xVTU4g ayBTRVQgREVGQVVMVCA3OworKDIgcm93cykKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9oYXNoXzAg UEFSVElUSU9OIE9GIHBhcnRlZF9oYXNoCisgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIs IHJlbWFpbmRlciAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGFydGVkX2hh c2hfMCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaF8wIFBBUlRJVElP TiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfaGFzaCBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMg MiwgcmVtYWluZGVyIDApOworKDEgcm93KQorCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlX2Rl ZiBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlIERFRkFVTFQ7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV9kZWYnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNl Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxl X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVz dC5wYXJ0ZWRfcmFuZ2VfZGVmIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFu Z2UgREVGQVVMVDsKKygxIHJvdykKKworLS0gUnVsZXMuCitDUkVBVEUgVEFCTEUgcnQgKGlkIGlu dCk7CitDUkVBVEUgVEFCTEUgcnRfbG9nIChpZCBpbnQpOworQ1JFQVRFIFJVTEUgcnRfbG9nX2lu c2VydCBBUyBPTiBJTlNFUlQgVE8gcnQKKyAgICBETyBBTFNPIElOU0VSVCBJTlRPIHJ0X2xvZyBW QUxVRVMgKE5FVy5pZCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ydCAoaWQgaW50ZWdl cik7CisgQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyAgICAgICAgICAgICAgICAgICArCisg ICAgIE9OIElOU0VSVCBUTyBydCBETyAgSU5TRVJUIElOVE8gcnRfbG9nIChpZCkrCisgICBWQUxV RVMgKG5ldy5pZCk7CisoMiByb3dzKQorCistLSBFeHRlbmRlZCBzdGF0aXN0aWNzLgorQ1JFQVRF IFRBQkxFIHN0eCAoYSBpbnQsIGIgaW50LCBjIGludCk7CitDUkVBVEUgU1RBVElTVElDUyBzdHhf bmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3N0eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5zdHggKGEgaW50ZWdl ciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIENSRUFURSBTVEFUSVNUSUNTIHN0eF9uZHYgKG5k aXN0aW5jdCkgT04gYSwgYiBGUk9NIHN0eDsKKygyIHJvd3MpCisKKy0tIFJvdy1sZXZlbCBzZWN1 cml0eSB0b2dnbGVzLgorQ1JFQVRFIFRBQkxFIHJscyAoaWQgaW50KTsKK0FMVEVSIFRBQkxFIHJs cyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VSSVRZOworQUxURVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBM RVZFTCBTRUNVUklUWTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3Rh YmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2Rk bF90ZXN0LnJscyAoaWQgaW50ZWdlcik7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmxz IEVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu cmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKKygzIHJvd3MpCisKKy0tIFJFUExJQ0EgSURF TlRJVFk6IGVtaXR0ZWQgb25seSB3aGVuIG5vdCB0aGUgZGVmYXVsdC4KK0NSRUFURSBUQUJMRSBy aV9mdWxsIChhIGludCk7CitBTFRFUiBUQUJMRSByaV9mdWxsIFJFUExJQ0EgSURFTlRJVFkgRlVM TDsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfZnVsbCc6OnJlZ2NsYXNzLCAn b3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5y aV9mdWxsIChhIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2Z1bGwg UkVQTElDQSBJREVOVElUWSBGVUxMOworKDIgcm93cykKKworQ1JFQVRFIFRBQkxFIHJpX2lkeCAo YSBpbnQgTk9UIE5VTEwpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiByaV9pZHgg KGEpOworQUxURVIgVEFCTEUgcmlfaWR4IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlf aWR4X2E7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5yaV9pZHggKGEgaW50ZWdlciBOT1QgTlVM TCk7CisgQ1JFQVRFIFVOSVFVRSBJTkRFWCByaV9pZHhfYSBPTiByaV9pZHggVVNJTkcgYnRyZWUg KGEpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeCBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJpX2lkeF9hOworKDMgcm93cykKKworLS0gVU5MT0dHRUQgKyByZWxvcHRp b25zLgorQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHVubyAoaWQgaW50KSBXSVRIIChmaWxsZmFjdG9y ID0gNzApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd1bm8nOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFVOTE9HR0VEIFRBQkxFIHBndGJsX2RkbF90ZXN0LnVubyAoaWQg aW50ZWdlcikgV0lUSCAoZmlsbGZhY3Rvcj0nNzAnKTsKKygxIHJvdykKKworLS0gVHlwZWQgdGFi bGUgKENSRUFURSBUQUJMRSBPRiB0eXBlX25hbWUpLiAgQ29sdW1ucyBpbmhlcml0ZWQgZnJvbSB0 aGUKKy0tIHR5cGUgZW1pdCBub3RoaW5nOyBsb2NhbGx5LWFwcGxpZWQgREVGQVVMVCwgTk9UIE5V TEwgYW5kIENIRUNLIGNvbWUKKy0tIG91dCB0aHJvdWdoIGEgc2luZ2xlICIoY29sIFdJVEggT1BU SU9OUyAuLi4pIiBsaXN0LgorQ1JFQVRFIFRZUEUgdHlwZWRfdCBBUyAoYSBpbnQsIGIgdGV4dCk7 CitDUkVBVEUgVEFCTEUgdHlwZWRfcGxhaW4gT0YgdHlwZWRfdDsKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgndHlwZWRfcGxhaW4nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qu dHlwZWRfcGxhaW4gT0YgcGd0YmxfZGRsX3Rlc3QudHlwZWRfdDsKKygxIHJvdykKKworQ1JFQVRF IFRBQkxFIHR5cGVkX292ZXIgT0YgdHlwZWRfdCAoCisgICAgYSBXSVRIIE9QVElPTlMgREVGQVVM VCA3IE5PVCBOVUxMLAorICAgIGIgV0lUSCBPUFRJT05TIE5PVCBOVUxMLAorICAgIENPTlNUUkFJ TlQgYl9ub25lbXB0eSBDSEVDSyAobGVuZ3RoKGIpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3R5cGVkX292ZXInOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnR5cGVkX292ZXIgT0Yg cGd0YmxfZGRsX3Rlc3QudHlwZWRfdCAoYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxM LCBiIFdJVEggT1BUSU9OUyBOT1QgTlVMTCwgQ09OU1RSQUlOVCBiX25vbmVtcHR5IENIRUNLICgo bGVuZ3RoKGIpID4gMCkpKTsKKygxIHJvdykKKworLS0gVGVtcG9yYXJ5IHRhYmxlcyArIE9OIENP TU1JVC4gIFRlbXAgdGFibGVzIG11c3QgbmV2ZXIgYmUgZW1pdHRlZCB3aXRoCistLSB0aGUgc2Vz c2lvbi1wcml2YXRlIHBnX3RlbXBfTk4gc2NoZW1hIHByZWZpeCAtLSB0aGUgVEVNUE9SQVJZIGtl eXdvcmQKKy0tIGFscmVhZHkgcGxhY2VzIHRoZSB0YWJsZSBpbiBwZ190ZW1wIGFuZCB0aGUgcHJl Zml4IGlzIG5vbi1yZXBsYXlhYmxlLgorLS0gT04gQ09NTUlUIERST1Agb25seSBmaXJlcyBhdCBj b21taXQsIHNvIHRoZSBxdWVyaWVzIHRoYXQgbmVlZCB0byBzZWUKKy0tIHRoZSBjYXRhbG9nIGVu dHJ5IG11c3QgcnVuIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIGFzIHRoZSBDUkVBVEUuCitCRUdJ TjsKK0NSRUFURSBURU1QIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50KTsKK0NSRUFURSBURU1Q IFRBQkxFIHRlbXBfZGVsZXRlIChpZCBpbnQpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKK0NSRUFU RSBURU1QIFRBQkxFIHRlbXBfZHJvcCAoaWQgaW50KSBPTiBDT01NSVQgRFJPUDsKK1NFTEVDVCBs aW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRFICUnOworICAgICAg ICAgICAgICAgICAgICAgICBsaW5lICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEVNUE9S QVJZIFRBQkxFIHRlbXBfZGVmYXVsdCAoaWQgaW50ZWdlcik7CisoMSByb3cpCisKK1NFTEVDVCBs aW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWxldGUnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgdGVtcF9k ZWxldGUgKGlkIGludGVnZXIpIE9OIENPTU1JVCBERUxFVEUgUk9XUzsKKygxIHJvdykKKworU0VM RUNUIGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0ZW1wX2Ryb3AnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJykgQVMgbGluZQorV0hFUkUgbGluZSBMSUtFICdDUkVBVEUgJSc7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBURU1QT1JBUlkgVEFCTEUgdGVtcF9kcm9wIChpZCBpbnRlZ2Vy KSBPTiBDT01NSVQgRFJPUDsKKygxIHJvdykKKworUk9MTEJBQ0s7CistLSBQcmV0dHkgbW9kZS4K K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywgJ3ByZXR0eScsICd0cnVlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5iYXNpYyAo ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIGlkIGludGVn ZXIgTk9UIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKKyAgICAgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0 IE5PVCBOVUxMICAgICAgICAgICAgICAgICAgICAgKworICk7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuYmFzaWMgQUREIENPTlNUUkFJTlQgYmFzaWNfcGtleSBQUklNQVJZIEtFWSAoaWQp OworKDIgcm93cykKKworLS0gVkFSSUFESUMgQVJSQVlbLi4uXSBjYWxsIGZvcm06IG9wdGlvbiBw YWlycyBjYW4gYmUgcGFzc2VkIGFzIGEgc2luZ2xlCistLSB0ZXh0W10gdGFnZ2VkIHdpdGggVkFS SUFESUMsIGluIGFkZGl0aW9uIHRvIHRoZSBwb3NpdGlvbmFsIHNwZWxsaW5nCistLSBleGVyY2lz ZWQgYWJvdmUuICBUaGlzIHJlcXVpcmVzIHByb2FyZ3R5cGVzIHRvIGRlY2xhcmUgdGhlIHZhcmlh ZGljCistLSBhcmd1bWVudCBhcyB0aGUgYXJyYXkgdHlwZSAoX3RleHQpLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZBUklBRElDIEFSUkFZWydvd25lcicsICdmYWxzZSddKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRB QkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIChpZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQg Q09MTEFURSAiQyIgREVGQVVMVCAnYW5vbic6OnRleHQgTk9UIE5VTEwpOworIEFMVEVSIFRBQkxF IHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFSWSBL RVkgKGlkKTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQVJJQURJQyBB UlJBWVsnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdwcmV0dHknLCAndHJ1ZSddOjp0ZXh0W10pOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuYmFzaWMgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAg ICBpZCBpbnRlZ2VyIE5PVCBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICAgIG5hbWUgdGV4dCBDT0xMQVRFICJDIiBERUZBVUxUICdh bm9uJzo6dGV4dCBOT1QgTlVMTCAgICAgICAgICAgICAgICAgICAgICsKKyApOworIEFMVEVSIFRB QkxFIHBndGJsX2RkbF90ZXN0LmJhc2ljIEFERCBDT05TVFJBSU5UIGJhc2ljX3BrZXkgUFJJTUFS WSBLRVkgKGlkKTsKKygyIHJvd3MpCisKKy0tIFZBUklBRElDIE5VTEw6OnRleHRbXSBpcyBlcXVp dmFsZW50IHRvIG9taXR0aW5nIHRoZSB2YXJpYWRpYyBhcmd1bWVudHM7CistLSBjaGVjayB0aGUg cm93IGNvdW50IHJhdGhlciB0aGFuIHRoZSByb3dzIHRoZW1zZWx2ZXMsIGJlY2F1c2Ugd2l0aG91 dAorLS0gJ293bmVyJywgJ2ZhbHNlJyB0aGUgb3V0cHV0IGNvbnRhaW5zIGFuIEFMVEVSIFRBQkxF IC4uLiBPV05FUiBUTyBsaW5lCistLSB0aGF0IHZhcmllcyBhY3Jvc3MgdGVzdCBydW5uZXJzLgor U0VMRUNUIGNvdW50KCopID4gMCBBUyBvaworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsIFZBUklBRElDIE5VTEw6OnRleHRbXSk7Cisgb2sgCistLS0tCisgdAorKDEg cm93KQorCistLSBvbmx5IC8gZXhjZXB0IGdhdGluZzogZWFjaCBlbWl0cyBlaXRoZXIgb25seSB0 aGUgbGlzdGVkIGtpbmRzCistLSAob25seSkgb3IgZXZlcnkga2luZCBleGNlcHQgdGhlIGxpc3Rl ZCBvbmVzIChleGNlcHQpLiAgVGhlIHR3bworLS0gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIEtp bmQgdm9jYWJ1bGFyeTogdGFibGUsIGluZGV4LAorLS0gcHJpbWFyeV9rZXksIHVuaXF1ZSwgY2hl Y2ssIGZvcmVpZ25fa2V5LCBleGNsdXNpb24sIHJ1bGUsCistLSBzdGF0aXN0aWNzLCB0cmlnZ2Vy LCBwb2xpY3ksIHJscywgcmVwbGljYV9pZGVudGl0eSwgcGFydGl0aW9uLgorLS0gTk9UIE5VTEwg aXMgbm90IGluIHRoZSB2b2NhYnVsYXJ5IC0gYWx3YXlzIGVtaXR0ZWQgdG8gcHJldmVudAorLS0g cHJvZHVjaW5nIHNjaGVtYXMgdGhhdCBzaWxlbnRseSBhY2NlcHQgTlVMTHMgdGhlIHNvdXJjZSB3 b3VsZAorLS0gaGF2ZSByZWplY3RlZC4KKy0tCistLSBleGNlcHQ9aW5kZXggaGlkZXMgdGhlIENS RUFURSBJTkRFWCBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdp ZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2V4Y2VwdCcsICdpbmRleCcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChpZCBpbnRl Z2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lmlk eGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiByb3dzKQor CistLSBleGNlcHQ9cHJpbWFyeV9rZXksdW5pcXVlLGNoZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lv biBoaWRlcyBldmVyeQorLS0gdGFibGUtbGV2ZWwgY29uc3RyYWludC4gIElubGluZSBDSEVDSyBp biB0aGUgQ1JFQVRFIFRBQkxFIGJvZHkgaXMKKy0tIHN1cHByZXNzZWQgdG9vLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3ByaW1hcnlfa2V5LHVuaXF1ZSxjaGVjayxmb3JlaWduX2tleSxl eGNsdXNpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEg cm93KQorCistLSBleGNlcHQ9Zm9yZWlnbl9rZXkgc3VwcHJlc3NlcyBvbmx5IEZPUkVJR04gS0VZ IGNvbnN0cmFpbnRzOworLS0gUFJJTUFSWSBLRVksIFVOSVFVRSwgQ0hFQ0ssIGFuZCBuYW1lZCBO T1QgTlVMTCBzdGF5LiAgVGhpcyBpcyB0aGUKKy0tIGZpcnN0IHBhc3Mgb2YgdGhlIHR3by1wYXNz IEZLLWNsb25lIHdvcmtmbG93OiBlbWl0IHRhYmxlcyB3aXRob3V0CistLSBjcm9zcy10YWJsZSBG S3MsIGxvYWQgZGF0YSwgdGhlbiByZS1ydW4gd2l0aCBvbmx5PWZvcmVpZ25fa2V5CistLSB0byBh ZGQgdGhlbSBvbmNlIGFsbCB0YXJnZXRzIGV4aXN0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdmb3JlaWduX2tleScpOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIsIENPTlNU UkFJTlQgY29uc19hX2NoZWNrIENIRUNLICgoYSA+IDApKSk7CisgQUxURVIgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3QuY29ucyBBREQgQ09OU1RSQUlOVCBjb25zX2Jfa2V5IFVOSVFVRSAoYik7CisoMiBy b3dzKQorCistLSBvbmx5PWZvcmVpZ25fa2V5IGlzIHRoZSBzZWNvbmQgcGFzcyBvZiB0aGUgdHdv LXBhc3MgRkstY2xvbmUKKy0tIHdvcmtmbG93OiBlbWl0IG9ubHkgdGhlIEFMVEVSIFRBQkxFIC4u LiBBREQgQ09OU1RSQUlOVCAuLi4gRk9SRUlHTgorLS0gS0VZIHJvd3M7IHRoZSBDUkVBVEUgVEFC TEUgYW5kIGV2ZXJ5IG5vbi1GSyBzdWItb2JqZWN0IGFyZQorLS0gc3VwcHJlc3NlZCAodGhlIHRh YmxlIGFscmVhZHkgZXhpc3RzIGZyb20gdGhlIGZpcnN0IHBhc3MpLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnZm9yZWlnbl9rZXknKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5jb25z IEFERCBDT05TVFJBSU5UIGNvbnNfY19ma2V5IEZPUkVJR04gS0VZIChjKSBSRUZFUkVOQ0VTIHJl ZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVEOworKDEgcm93KQorCistLSBBIHRh YmxlIHdpdGggbm8gZm9yZWlnbiBrZXlzIHByb2R1Y2VzIG5vIHJvd3MgdW5kZXIKKy0tIG9ubHk9 Zm9yZWlnbl9rZXkuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JlZmQnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn b25seScsICdmb3JlaWduX2tleScpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0tLS0tLS0t LS0tLS0KKygwIHJvd3MpCisKKy0tIG9ubHk9dGFibGUgZW1pdHMgb25seSB0aGUgYmFyZSBDUkVB VEUgVEFCTEUgKHdpdGggYW55IGlubGluZQorLS0gY29sdW1uLWxldmVsIE5PVCBOVUxMIGFuZCBD SEVDSykgLSBubyBpbmRleGVzLCBubyBQUklNQVJZIEtFWSBBTFRFUiwKKy0tIG5vIG90aGVyIHN1 Yi1vYmplY3RzLiAgVXNlZnVsIGZvciBjYXB0dXJpbmcgYSB0YWJsZSdzIHNoYXBlIHdpdGhvdXQK Ky0tIHB1bGxpbmcgaW4gZXZlcnl0aGluZyBhdHRhY2hlZCB0byBpdC4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3RhYmxlJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuaWR4ZCAoaWQgaW50 ZWdlciBOT1QgTlVMTCwgbmFtZSB0ZXh0KTsKKygxIHJvdykKKworLS0gb25seT1jaGVjayBvbiBh IG5vbi1wYXJ0aXRpb24gdGFibGUuICBUaGUgY29uc3RyYWludCBsb29wIG11c3QgZW1pdAorLS0g Y29sdW1uLWxldmVsIGFuZCB0YWJsZS1sZXZlbCBDSEVDSyBjb25zdHJhaW50cyB2aWEgQUxURVIg VEFCTEUgaGVyZSwKKy0tIGJlY2F1c2UgdGhlIGlubGluZSBwYXRoIGluIENSRUFURSBUQUJMRSBu ZXZlciBydW5zIChLSU5EX1RBQkxFIGlzCistLSBub3QgaW4gdGhlIGZpbHRlcikuCitDUkVBVEUg VEFCTEUgY2hrX29ubHkgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcXR5IGludCBD SEVDSyAocXR5ID4gMCksCisgICAgQ09OU1RSQUlOVCBjaGtfb25seV9pZF9wb3MgQ0hFQ0sgKGlk ID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Noa19vbmx5Jzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J29ubHknLCAnY2hlY2snKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rl c3QuY2hrX29ubHkgQUREIENPTlNUUkFJTlQgY2hrX29ubHlfaWRfcG9zIENIRUNLICgoaWQgPiAw KSk7CisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuY2hrX29ubHkgQUREIENPTlNUUkFJTlQg Y2hrX29ubHlfcXR5X2NoZWNrIENIRUNLICgocXR5ID4gMCkpOworKDIgcm93cykKKworRFJPUCBU QUJMRSBjaGtfb25seTsKKy0tIG9ubHk9cGFydGl0aW9uIG9uIGEgcGFydGl0aW9uZWQtdGFibGUg cGFyZW50OiBlYWNoIGNoaWxkJ3MgZnVsbCBEREwKKy0tIGlzIGVtaXR0ZWQgKENSRUFURSBUQUJM RSAuLi4gUEFSVElUSU9OIE9GIC4uLikuICBUaGUgInBhcnRpdGlvbiIKKy0tIGtleXdvcmQgaXMg YSBnYXRlIGF0IHRoZSBwYXJlbnQgbGV2ZWw7IGl0IGlzIHN0cmlwcGVkIGZyb20gdGhlCistLSBw cm9wYWdhdGVkIGZpbHRlciBzbyB0aGUgY2hpbGQgZG9lcyBub3QgZXhjbHVkZSBpdHMgb3duCist LSBDUkVBVEUgVEFCTEUuCitDUkVBVEUgVEFCTEUgcF9vbmx5IChpZCBpbnQsIHZhbCB0ZXh0KSBQ QVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYSBQQVJUSVRJT04g T0YgcF9vbmx5IEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitDUkVBVEUgVEFCTEUgcF9v bmx5X2IgUEFSVElUSU9OIE9GIHBfb25seSBGT1IgVkFMVUVTIEZST00gKDEwMCkgVE8gKDIwMCk7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Bfb25seSc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3Bh cnRpdGlvbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucF9vbmx5X2EgUEFSVElUSU9OIE9GIHBndGJsX2Rk bF90ZXN0LnBfb25seSBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIENSRUFURSBUQUJM RSBwZ3RibF9kZGxfdGVzdC5wX29ubHlfYiBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3Rlc3QucF9v bmx5IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKKygyIHJvd3MpCisKK0RST1AgVEFC TEUgcF9vbmx5OworLS0gb25seSBhbmQgZXhjZXB0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdmb3JlaWdu X2tleScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdmb3JlaWdu X2tleScpOworRVJST1I6ICAib25seSIgYW5kICJleGNlcHQiIG9wdGlvbnMgYXJlIG11dHVhbGx5 IGV4Y2x1c2l2ZQorLS0gUHViL3N1YiBzY2hlbWEgY2xvbmU6IGtlZXAgdGhlIHRhYmxlIGFuZCBp dHMgcHJpbWFyeSBrZXksIGRyb3AgdGhlCistLSByZXN0IG9mIHRoZSBjb25zdHJhaW50cyBzbyB0 aGUgc3Vic2NyaWJlciBjYW4gcmVwbGljYXRlIHdpdGhvdXQKKy0tIHB1bGxpbmcgY3Jvc3MtdGFi bGUgZGVwZW5kZW5jaWVzIGFsb25nLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdj b25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2V4Y2VwdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaXF1 ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24nKTsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRl Z2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNlcHQ9cnVsZSBoaWRlcyB0aGUgQ1JF QVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2Vw dCcsICdydWxlJyk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJ0IChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0g ZXhjZXB0PXN0YXRpc3RpY3MgaGlkZXMgdGhlIENSRUFURSBTVEFUSVNUSUNTLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3N0YXRpc3RpY3MnKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5z dHggKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworKDEgcm93KQorCistLSBleGNl cHQ9cmxzIGhpZGVzIHRoZSBFTkFCTEUvRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZIHRvZ2dsZXMu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jscyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAncmxz Jyk7CisgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFC TEUgcGd0YmxfZGRsX3Rlc3QucmxzIChpZCBpbnRlZ2VyKTsKKygxIHJvdykKKworLS0gZXhjZXB0 PXJlcGxpY2FfaWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdyZXBs aWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucmlfZnVsbCAoYSBpbnRlZ2VyKTsK KygxIHJvdykKKworLS0gUGFydGl0aW9uIGNoaWxkcmVuIGFyZSBlbWl0dGVkIGJ5IGRlZmF1bHQ7 IGV4Y2VwdD1wYXJ0aXRpb24KKy0tIHN1cHByZXNzZXMgdGhlbSBzbyBvbmx5IHRoZSBwYXJ0aXRp b25lZC10YWJsZSBwYXJlbnQgY29tZXMgb3V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdwYXJ0ZWRfcmFuZ2UnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3BhcnRpdGlvbicpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfcmFuZ2UgKGlkIGludGVn ZXIsIGsgaW50ZWdlcikgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CisoMSByb3cpCisKKy0tIFVu a25vd24ga2luZCBuYW1lIGlzIHJlamVjdGVkIGF0IG9wdGlvbi1wYXJzZSB0aW1lLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnbm9fc3VjaF9r aW5kJyk7CitFUlJPUjogIHVucmVjb2duaXplZCBraW5kICJub19zdWNoX2tpbmQiIGluIG9wdGlv biAiZXhjZXB0IgorLS0gV2hpdGVzcGFjZSBhcm91bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBj YXNlIGlzIGZvbGRlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdleGNlcHQnLCAnICBJTkRFWCAgLCAgIFJVTEUgICcpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5pZHhkIChp ZCBpbnRlZ2VyIE5PVCBOVUxMLCBuYW1lIHRleHQpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90 ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChpZCk7CisoMiBy b3dzKQorCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIHN0cmlwcyB0aGUgc2NoZW1hIGZyb20g dGhlIHRhcmdldCB0YWJsZSBpdHNlbGYKKy0tIGFuZCBmcm9tIHNhbWUtc2NoZW1hIHNpYmxpbmcg cmVmZXJlbmNlcyAoaW5oZXJpdGFuY2UvcGFydGl0aW9uCistLSBwYXJlbnRzLCBpZGVudGl0eSBz ZXF1ZW5jZXMgaW4gdGhlIHNhbWUgc2NoZW1hKSwgd2hpbGUgY3Jvc3Mtc2NoZW1hCistLSByZWZl cmVuY2VzIGFyZSBrZXB0IHF1YWxpZmllZCBmb3IgY29ycmVjdG5lc3MuCistLQorLS0gQmFyZSBD UkVBVEUgVEFCTEUgZm9yIGFuIG9yZGluYXJ5IHRhYmxlLgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBiYXNpYyAoaWQgaW50ZWdlciBOT1Qg TlVMTCwgbmFtZSB0ZXh0IENPTExBVEUgIkMiIERFRkFVTFQgJ2Fub24nOjp0ZXh0IE5PVCBOVUxM KTsKKyBBTFRFUiBUQUJMRSBiYXNpYyBBREQgQ09OU1RSQUlOVCBiYXNpY19wa2V5IFBSSU1BUlkg S0VZIChpZCk7CisoMiByb3dzKQorCistLSBJTkhFUklUUyBwYXJlbnQgaW4gdGhlIHNhbWUgc2No ZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAg ICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGNoIChjIGludGVnZXIp IElOSEVSSVRTIChwYXIpOworIEFMVEVSIFRBQkxFIGNoIEFMVEVSIENPTFVNTiBhIFNFVCBERUZB VUxUIDk5OTsKKygyIHJvd3MpCisKKy0tIFBhcnRpdGlvbiBwYXJlbnQgaW4gdGhlIHNhbWUgc2No ZW1hIGlzIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlXzEgUEFSVElUSU9OIE9GIHBhcnRlZF9yYW5nZSBG T1IgVkFMVUVTIEZST00gKDApIFRPICgxMDApOworIEFMVEVSIFRBQkxFIHBhcnRlZF9yYW5nZV8x IEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CisoMiByb3dzKQorCistLSBDcm9zcy1zY2hl bWEgRksgdGFyZ2V0IGtlZXBzIHF1YWxpZmljYXRpb24uICBUaGUgJ3JlZmQnIHRhYmxlIGlzIGlu CistLSBwZ3RibF9kZGxfdGVzdDsgcGxhY2UgYW4gRksgdGFyZ2V0IGluIGEgZGlmZmVyZW50IHNj aGVtYSBhbmQgdmVyaWZ5IGl0CistLSBzdGF5cyBxdWFsaWZpZWQgZXZlbiB3aXRoIHNjaGVtYV9x dWFsaWZpZWQ9ZmFsc2UuCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9vdGhlcjsKK0NSRUFURSBU QUJMRSBwZ3RibF9kZGxfb3RoZXIucGFyZW50IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRF IFRBQkxFIHhzY2hlbWFfZmsgKAorICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcGlkIGlu dCBSRUZFUkVOQ0VTIHBndGJsX2RkbF9vdGhlci5wYXJlbnQKKyk7CitTRUxFQ1QgKiBGUk9NIHBn X2dldF90YWJsZV9kZGwoJ3hzY2hlbWFfZmsnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHhzY2hlbWFfZmsgKGlkIGludGVnZXIgTk9UIE5V TEwsIHBpZCBpbnRlZ2VyKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJBSU5U IHhzY2hlbWFfZmtfcGlkX2ZrZXkgRk9SRUlHTiBLRVkgKHBpZCkgUkVGRVJFTkNFUyBwZ3RibF9k ZGxfb3RoZXIucGFyZW50KGlkKTsKKyBBTFRFUiBUQUJMRSB4c2NoZW1hX2ZrIEFERCBDT05TVFJB SU5UIHhzY2hlbWFfZmtfcGtleSBQUklNQVJZIEtFWSAoaWQpOworKDMgcm93cykKKworLS0gQ3Jv c3Mtc2NoZW1hIEZLIHdob3NlIHRhcmdldCBzY2hlbWEgbmFtZSBlbmRzIHdpdGggdGhlIGJhc2Ug c2NoZW1hIG5hbWUKKy0tIChlLmcuICJ4cGd0YmxfZGRsX3Rlc3QiIGVuZHMgd2l0aCAicGd0Ymxf ZGRsX3Rlc3QiKS4gIEEgcG9zdC1ob2MgdGV4dAorLS0gc3RyaXAgd291bGQgbWFuZ2xlICJ4cGd0 YmxfZGRsX3Rlc3QucmVmdGJsIiBpbnRvICJ4cmVmdGJsIjsgZGVjaWRpbmcKKy0tIHF1YWxpZmlj YXRpb24gYXQgZ2VuZXJhdGlvbiB0aW1lIGF2b2lkcyB0aGUgcHJvYmxlbSBlbnRpcmVseS4KK0NS RUFURSBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0OworQ1JFQVRFIFRBQkxFIHhwZ3RibF9kZGxfdGVz dC5yZWZ0YmwgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVt YV9mayAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICByZWYgaW50IFJFRkVSRU5DRVMg eHBndGJsX2RkbF90ZXN0LnJlZnRibAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnc3VmZml4X3NjaGVtYV9mayc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgc3VmZml4X3NjaGVt YV9mayAoaWQgaW50ZWdlciBOT1QgTlVMTCwgcmVmIGludGVnZXIpOworIEFMVEVSIFRBQkxFIHN1 ZmZpeF9zY2hlbWFfZmsgQUREIENPTlNUUkFJTlQgc3VmZml4X3NjaGVtYV9ma19wa2V5IFBSSU1B UlkgS0VZIChpZCk7CisgQUxURVIgVEFCTEUgc3VmZml4X3NjaGVtYV9mayBBREQgQ09OU1RSQUlO VCBzdWZmaXhfc2NoZW1hX2ZrX3JlZl9ma2V5IEZPUkVJR04gS0VZIChyZWYpIFJFRkVSRU5DRVMg eHBndGJsX2RkbF90ZXN0LnJlZnRibChpZCk7CisoMyByb3dzKQorCitEUk9QIFRBQkxFIHN1ZmZp eF9zY2hlbWFfZms7CitEUk9QIFNDSEVNQSB4cGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElD RTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgeHBndGJsX2RkbF90ZXN0LnJlZnRibAorLS0gSWRl bnRpdHkgY29sdW1uIHdpdGggYSBjdXN0b20gc2VxdWVuY2UgbmFtZSBpbiB0aGUgc2FtZSBzY2hl bWEgaXMKKy0tIGVtaXR0ZWQgdW5xdWFsaWZpZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2lkX2N1c3RvbSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIGlkX2N1c3RvbSAodiBpbnRlZ2VyIEdFTkVSQVRFRCBB TFdBWVMgQVMgSURFTlRJVFkgKFNUQVJUIFdJVEggMTAwIElOQ1JFTUVOVCBCWSA1IE1JTlZBTFVF IDUwIE1BWFZBTFVFIDEwMDAgQ0FDSEUgMTAgQ1lDTEUpIE5PVCBOVUxMKTsKKygxIHJvdykKKwor LS0gUm91bmQtdHJpcDogd2l0aCBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlLCBhZnRlciBTRVQgc2Vh cmNoX3BhdGggdGhlCistLSBEREwgY2FuIGJlIHJlcGxheWVkIGludG8gYSBkaWZmZXJlbnQgdGFy Z2V0IHNjaGVtYS4KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3JlcGxheTsKK0RPICQkCitERUNM QVJFCisgICAgc3RtdCB0ZXh0OworQkVHSU4KKyAgICBTRVQgTE9DQUwgc2VhcmNoX3BhdGggPSBw Z3RibF9kZGxfcmVwbGF5OworICAgIEZPUiBzdG10IElOCisgICAgICAgIFNFTEVDVCBsaW5lIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0YmxfZGRsX3Rlc3QuYmFzaWMnOjpyZWdjbGFzcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxp ZmllZCcsICdmYWxzZScpIEFTIGxpbmUKKyAgICBMT09QCisgICAgICAgIEVYRUNVVEUgc3RtdDsK KyAgICBFTkQgTE9PUDsKK0VORCAkJDsKK1NFTEVDVCByZWxuYW1lc3BhY2U6OnJlZ25hbWVzcGFj ZTo6dGV4dCwgcmVsbmFtZQorRlJPTSBwZ19jbGFzcyBXSEVSRSBvaWQgPSAncGd0YmxfZGRsX3Jl cGxheS5iYXNpYyc6OnJlZ2NsYXNzOworICAgcmVsbmFtZXNwYWNlICAgfCByZWxuYW1lIAorLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLQorIHBndGJsX2RkbF9yZXBsYXkgfCBiYXNpYworKDEg cm93KQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5IENBU0NBREU7CitOT1RJQ0U6ICBk cm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9yZXBsYXkuYmFzaWMKK0RST1AgVEFCTEUg eHNjaGVtYV9mazsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9vdGhlciBDQVNDQURFOworTk9USUNF OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwZ3RibF9kZGxfb3RoZXIucGFyZW50CistLSBMb2Nh bGx5LWRlY2xhcmVkIENIRUNLIG9uIGEgcGFydGl0aW9uIGNoaWxkIGhhcyBubyBpbmxpbmUgY29s dW1uCistLSBsaXN0IHRvIGxpdmUgaW4gKFBBUlRJVElPTiBPRiBmb3JtKSwgc28gaXQgbXVzdCBj b21lIG91dCBhcyBhCistLSBzZXBhcmF0ZSBBTFRFUiBUQUJMRSAuLi4gQUREIENPTlNUUkFJTlQg c3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIHBhcnRlZF9jaGsgKGlkIGludCwgdmFsIGludCkgUEFS VElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGFydGVkX2Noa19jaGlsZCBQQVJU SVRJT04gT0YgcGFydGVkX2NoaworICAgIChDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKHZh bCA+IDApKQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ3BhcnRlZF9jaGtfY2hpbGQnOjpyZWdjbGFzcywgJ293bmVyJywg J2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGtf Y2hpbGQgUEFSVElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9jaGsgRk9SIFZBTFVFUyBG Uk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5wYXJ0ZWRfY2hr X2NoaWxkIEFERCBDT05TVFJBSU5UIGNoa19pbmxpbmUgQ0hFQ0sgKCh2YWwgPiAwKSk7CisoMiBy b3dzKQorCitEUk9QIFRBQkxFIHBhcnRlZF9jaGs7CistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBv ZiBhIHBhcmVudCB3aXRoIGEgZ2VuZXJhdGVkIGNvbHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFu IEFMVEVSIENPTFVNTiAuLi4gU0VUIERFRkFVTFQgZm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVk CistLSBjb2x1bW46IHRoZSBHRU5FUkFURUQgZXhwcmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3Vn aCBpbmhlcml0YW5jZSwKKy0tIGFuZCBTRVQgREVGQVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBh Z2FpbnN0IGEgZ2VuZXJhdGVkIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBp ZCBpbnQsCisgICAgZyAgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGlkICogMikgU1RPUkVECisp OworQ1JFQVRFIFRBQkxFIGNoX2dlbiAoKSBJTkhFUklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoX2dlbic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBw Z3RibF9kZGxfdGVzdC5jaF9nZW4gKCkgSU5IRVJJVFMgKHBndGJsX2RkbF90ZXN0LnBhcl9nZW4p OworKDEgcm93KQorCitEUk9QIFRBQkxFIHBhcl9nZW4gQ0FTQ0FERTsKK05PVElDRTogIGRyb3Ag Y2FzY2FkZXMgdG8gdGFibGUgY2hfZ2VuCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBs b2NhbCBjb2x1bW4gaXMgZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9U IE5VTEwiIHNvIHRoZSBvcmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5h bWVkIE5PVCBOVUxMIG9uIGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxp bmUKKy0tICJOT1QgTlVMTCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFp bnQgd2hlbiBDUkVBVEUKKy0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tp cHMgYm90aCBmb3JtcyB0byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJl bmFtZSBvciBzZXF1ZW5jZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBB REQgQ09OU1RSQUlOVCAuLi4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25h bWVkICgKKyAgICBhIGludCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5P VCBOVUxMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBD UkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qubm5fbmFtZWQgKGEgaW50ZWdlciBDT05TVFJBSU5U IG15X25uIE5PVCBOVUxMLCBiIGludGVnZXIgTk9UIE5VTEwpOworKDEgcm93KQorCitEUk9QIFRB QkxFIG5uX25hbWVkOworLS0gUmVuYW1pbmcgdGhlIHRhYmxlIGFmdGVyIGFuIElERU5USVRZIE5P VCBOVUxMIGNvbHVtbiB3YXMgZGVjbGFyZWQKKy0tIGxlYXZlcyB0aGUgYXV0by1uYW1lZCBjb25z dHJhaW50IGZyb3plbiBhdCB0aGUgb3JpZ2luYWwgbmFtZSwgd2hpY2gKKy0tIG5vIGxvbmdlciBt YXRjaGVzIHRoZSBwb3N0LXJlbmFtZSAiPHRhYmxlPl88Y29sPl9ub3RfbnVsbCIgcGF0dGVybi4K Ky0tIFRoZSBlbWl0dGVkIERETCBtdXN0IHN0aWxsIHJvdW5kLXRyaXA6IHRoZSBjb25zdHJhaW50 IGxvb3AgbXVzdCBub3QKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCBhIHNlY29u ZCBOT1QgTlVMTCwgc2luY2UgQ1JFQVRFIFRBQkxFCistLSB3aXRoIHRoZSBpbmxpbmUgSURFTlRJ VFkgYWxyZWFkeSBjcmVhdGVzIGFuIGF1dG8tTk9ULU5VTEwgdW5kZXIgdGhlCistLSBuZXcgdGFi bGUgbmFtZSBhbmQgUEcgb25seSBwZXJtaXRzIG9uZSBOT1QgTlVMTCBwZXIgY29sdW1uLgorQ1JF QVRFIFRBQkxFIG5uX3JlbmFtZWQgKAorICAgIGEgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURF TlRJVFkgTk9UIE5VTEwKKyk7CitBTFRFUiBUQUJMRSBubl9yZW5hbWVkIFJFTkFNRSBUTyBubl9y ZW5hbWVkMjsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnbm5fcmVuYW1lZDInOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0Ymxf ZGRsX3Rlc3Qubm5fcmVuYW1lZDIgKGEgaW50ZWdlciBHRU5FUkFURUQgQUxXQVlTIEFTIElERU5U SVRZIChTRVFVRU5DRSBOQU1FIHBndGJsX2RkbF90ZXN0Lm5uX3JlbmFtZWRfYV9zZXEpIENPTlNU UkFJTlQgbm5fcmVuYW1lZF9hX25vdF9udWxsIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBU QUJMRSBubl9yZW5hbWVkMjsKKy0tIExvY2FsbHktZGVjbGFyZWQgTk9UIE5VTEwgb24gYW4gaW5o ZXJpdGVkIGNvbHVtbi4gIFRoZSBjb2x1bW4gaXRzZWxmCistLSBpcyBvbWl0dGVkIGZyb20gdGhl IGNoaWxkJ3MgY29sdW1uIGxpc3QgKGF0dGlzbG9jYWw9ZmFsc2UpLCBzbyB0aGUKKy0tIHVzZXIt bmFtZWQgTk9UIE5VTEwgbXVzdCBjb21lIG91dCB2aWEgdGhlIHBvc3QtQ1JFQVRFIGNvbnN0cmFp bnQKKy0tIGxvb3AgcmF0aGVyIHRoYW4gaW5saW5lLgorQ1JFQVRFIFRBQkxFIG5uX3BhciAoYSBp bnQpOworQ1JFQVRFIFRBQkxFIG5uX2NoIChiIGludCkgSU5IRVJJVFMgKG5uX3Bhcik7CitBTFRF UiBUQUJMRSBubl9jaCBBREQgQ09OU1RSQUlOVCBteV9ubiBOT1QgTlVMTCBhOworU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9jaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2NoIChiIGludGVnZXIpIElOSEVSSVRTIChw Z3RibF9kZGxfdGVzdC5ubl9wYXIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0Lm5uX2No IEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CisoMiByb3dzKQorCitEUk9QIFRBQkxF IG5uX3BhciBDQVNDQURFOworTk9USUNFOiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBubl9jaAor LS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJv bSBERUZBVUxUCistLSBleHByZXNzaW9ucyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJl ZmVyZW5jZSBzYW1lLXNjaGVtYQorLS0gb2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1 bmN0aW9uIHZpYSBkaXJlY3QgY2FsbCkuICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFyc2Vy IHJlc3BlY3RpbmcgdGhlIG5hcnJvd2VkIHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBz dWJzdHJpbmcgc3RyaXBwaW5nLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFU RSBTRVFVRU5DRSBwZ3RibF9kZGxfeHJlZi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9k ZGxfeHJlZi5mKGludCkgUkVUVVJOUyBpbnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFT ICdTRUxFQ1QgJDEnOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBp bnQgREVGQVVMVCBuZXh0dmFsKCdwZ3RibF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQs CisgICAgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDApCisp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVn Y2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBn X2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSB0IChpZCBpbnRlZ2VyIERFRkFVTFQgbmV4dHZhbCgn bXlzZXEnOjpyZWdjbGFzcyksIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKGYo dmFsKSA+IDApKSk7CisoMSByb3cpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF94cmVmIENBU0NB REU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDMgb3RoZXIgb2JqZWN0cworREVUQUlMOiAg ZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBwZ3RibF9kZGxfeHJlZi5teXNlcQorZHJvcCBjYXNj YWRlcyB0byBmdW5jdGlvbiBwZ3RibF9kZGxfeHJlZi5mKGludGVnZXIpCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIHBndGJsX2RkbF94cmVmLnQKKy0tIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UgbXVz dCBOT1QgY29ycnVwdCBzdHJpbmcgbGl0ZXJhbHMgd2hvc2UKKy0tIGNvbnRlbnRzIGhhcHBlbiB0 byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdC4gIFRoZQorLS0gaW4t c3RyaW5nIHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIgcHJlc2VydmVzIHRoZW0gdmVyYmF0 aW0uCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9zdHI7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3N0ci5wIChpZCBpbnQsIG5vdGUgdGV4dCkgUEFSVElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3N0ci5wYyBQQVJUSVRJT04gT0YgcGd0YmxfZGRsX3N0ci5wCisg ICAgKENPTlNUUkFJTlQgY2hrIENIRUNLIChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNlY3JldCcp KQorICAgIEZPUiBWQUxVRVMgRlJPTSAoMCkgVE8gKDEwMCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ3BndGJsX2RkbF9zdHIucGMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMg UEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJM RSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKChub3RlIDw+ICdwZ3RibF9kZGxfc3RyLnNl Y3JldCc6OnRleHQpKTsKKygyIHJvd3MpCisKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9zdHIgQ0FT Q0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgcGd0YmxfZGRsX3N0ci5wCist LSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNlIG11c3QgTk9UIGNvcnJ1cHQgZG91YmxlLXF1b3RlZCBp ZGVudGlmaWVycworLS0gd2hvc2UgY29udGVudHMgaGFwcGVuIHRvIGNvbnRhaW4gdGhlIHNjaGVt YSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90CistLSAoZm9yIGV4YW1wbGUgYSBjb2x1bW4gbGl0ZXJh bGx5IG5hbWVkICI8c2NoZW1hPi53ZWlyZCIgaW5zaWRlIHRoYXQKKy0tIHNjaGVtYSkuICBUaGUg aW4taWRlbnQgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbQorLS0g dmVyYmF0aW0uCitDUkVBVEUgU0NIRU1BIHBndGJsX2RkbF9xaWQ7CitDUkVBVEUgVEFCTEUgcGd0 YmxfZGRsX3FpZC5wIChpZCBpbnQsICJwZ3RibF9kZGxfcWlkLndlaXJkIiBpbnQpCisgICAgUEFS VElUSU9OIEJZIFJBTkdFIChpZCk7CitDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3FpZC5wYyBQQVJU SVRJT04gT0YgcGd0YmxfZGRsX3FpZC5wCisgICAgKENPTlNUUkFJTlQgY2hrIENIRUNLICgicGd0 YmxfZGRsX3FpZC53ZWlyZCIgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00gKDApIFRPICgxMDAp OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfcWlkLnBjJzo6cmVn Y2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGMg UEFSVElUSU9OIE9GIHAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKKyBBTFRFUiBUQUJM RSBwYyBBREQgQ09OU1RSQUlOVCBjaGsgQ0hFQ0sgKCgicGd0YmxfZGRsX3FpZC53ZWlyZCIgPiAw KSk7CisoMiByb3dzKQorCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcWlkIENBU0NBREU7CitOT1RJ Q0U6ICBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHBndGJsX2RkbF9xaWQucAorLS0gc2NoZW1hX3F1 YWxpZmllZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1lIGl0c2VsZiByZXF1aXJlcwor LS0gcXVvdGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4gIEJvdGggZm9ybXMgb2YgdGhl IHByZWZpeCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVkIC0gbXVzdCBiZSBzdHJpcHBl ZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JFQVRFIElOREVYIHByZWZpeGVz LCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRoYXQgaGFwcGVuIHRvIGJlZ2lu IHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFURSBTQ0hFTUEgIlBnVGJsLURk bC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAoaWQgaW50LCB2YWwgaW50LAor ICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitDUkVBVEUgSU5ERVggIlRfdmFs X2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSAiVCIgKGlkIGludGVn ZXIsIHZhbCBpbnRlZ2VyLCBDT05TVFJBSU5UIGNoayBDSEVDSyAoKHZhbCA+IDApKSk7CisgQ1JF QVRFIElOREVYICJUX3ZhbF9pZHgiIE9OICJUIiBVU0lORyBidHJlZSAodmFsKTsKKygyIHJvd3Mp CisKK0RST1AgU0NIRU1BICJQZ1RibC1EZGwtUSIgQ0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2Fz Y2FkZXMgdG8gdGFibGUgIlBnVGJsLURkbC1RIi4iVCIKKy0tIEVycm9yOiBub3QgYW4gb3JkaW5h cnkgb3IgcGFydGl0aW9uZWQgdGFibGUuCitDUkVBVEUgVklFVyB2IEFTIFNFTEVDVCAxIEFTIHg7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3YnOjpyZWdjbGFzcyk7CitFUlJPUjog ICJ2IiBpcyBub3QgYW4gb3JkaW5hcnkgb3IgcGFydGl0aW9uZWQgdGFibGUKK0NSRUFURSBTRVFV RU5DRSBzOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzJzo6cmVnY2xhc3MpOwor RVJST1I6ICAicyIgaXMgbm90IGFuIG9yZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlCistLSBO VUxMIGFyZ3VtZW50IHJldHVybnMgbm8gcm93cy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbChOVUxMKTsKKyBwZ19nZXRfdGFibGVfZGRsIAorLS0tLS0tLS0tLS0tLS0tLS0tCisoMCBy b3dzKQorCistLSBVbnJlY29nbml6ZWQgb3B0aW9uLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnYm9ndXMnLCAndHJ1ZScpOworRVJST1I6ICB1bnJl Y29nbml6ZWQgb3B0aW9uOiAiYm9ndXMiCistLSBPZGQgbnVtYmVyIG9mIHZhcmlhZGljIGFyZ3Mu CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdwcmV0 dHknKTsKK0VSUk9SOiAgdmFyaWFkaWMgYXJndW1lbnRzIG11c3QgYmUgbmFtZS92YWx1ZSBwYWly cworSElOVDogIFByb3ZpZGUgYW4gZXZlbiBudW1iZXIgb2YgdmFyaWFkaWMgYXJndW1lbnRzIHRo YXQgY2FuIGJlIGRpdmlkZWQgaW50byBwYWlycy4KKy0tIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcg SU5ERVggdmFsaWRhdGlvbjogaWYgdGhlIHJlZmVyZW5jZWQgaW5kZXgKKy0tIHdvdWxkIG5vdCBi ZSBlbWl0dGVkIChiZWNhdXNlIGl0cyBzb3VyY2Uga2luZCBpcyBzdXBwcmVzc2VkKSBidXQKKy0t IHJlcGxpY2FfaWRlbnRpdHkgaXRzZWxmIHdvdWxkIGJlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGFu IGVycm9yIHNvCistLSB0aGUgZW1pdHRlZCBEREwgbmV2ZXIgZGFuZ2xlcy4gIEV4ZXJjaXNlIGFs bCB0aHJlZSBjb25zdHJhaW50LWJhY2tlZAorLS0gZm9ybXMgKFBLLCBVTklRVUUsIEVYQ0xVU0lP TikgYW5kIGEgYmFyZSBDUkVBVEUgVU5JUVVFIElOREVYLCBpbgorLS0gYm90aCB0aGUgZXhjZXB0 LWxpc3QgYW5kIG9ubHktbGlzdCBzaGFwZXMuCistLQorLS0gUEstYmFja2VkOiBleGNlcHQ9cHJp bWFyeV9rZXkgd2l0aG91dCBleGNlcHQ9cmVwbGljYV9pZGVudGl0eS4KK0NSRUFURSBUQUJMRSBy aV9wa19leGNsIChhIGludCBQUklNQVJZIEtFWSk7CitBTFRFUiBUQUJMRSByaV9wa19leGNsIFJF UExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfcGtfZXhjbF9wa2V5OworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tl eScpOworRVJST1I6ICBSRVBMSUNBIElERU5USVRZIGZvciB0YWJsZSAicmlfcGtfZXhjbCIgcmVx dWlyZXMga2luZCAicHJpbWFyeV9rZXkiIHRvIGJlIGVtaXR0ZWQKK0RFVEFJTDogIFRoZSB0YWJs ZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJlbmNlcyBhbiBpbmRleCBwcm9k dWNlZCBieSB0aGUgInByaW1hcnlfa2V5IiBraW5kLCB3aGljaCBpcyBub3QgaW4gdGhlIGFjdGl2 ZSBmaWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAicHJpbWFyeV9rZXkiIHRvIHRoZSBmaWx0ZXIg b3IgcmVtb3ZlICJyZXBsaWNhX2lkZW50aXR5IiBmcm9tIGl0LgorLS0gU2FtZSBjYWxsIGJ1dCBh bHNvIGV4Y2x1ZGluZyByZXBsaWNhX2lkZW50aXR5IHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdyaV9wa19leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleSxy ZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9k ZGwgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgVEFCTEUgcGd0YmxfZGRs X3Rlc3QucmlfcGtfZXhjbCAoYSBpbnRlZ2VyIE5PVCBOVUxMKTsKKygxIHJvdykKKworRFJPUCBU QUJMRSByaV9wa19leGNsOworLS0gVU5JUVVFLWNvbnN0cmFpbnQtYmFja2VkIHJlcGxpY2EgaWRl bnRpdHkgaW5kZXguCitDUkVBVEUgVEFCTEUgcmlfdW5pcV9leGNsIChhIGludCBOT1QgTlVMTCBV TklRVUUsIGIgaW50KTsKK0FMVEVSIFRBQkxFIHJpX3VuaXFfZXhjbCBSRVBMSUNBIElERU5USVRZ IFVTSU5HIElOREVYIHJpX3VuaXFfZXhjbF9hX2tleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmlfdW5pcV9leGNsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICd1bmlxdWUnKTsKK0VSUk9SOiAg UkVQTElDQSBJREVOVElUWSBmb3IgdGFibGUgInJpX3VuaXFfZXhjbCIgcmVxdWlyZXMga2luZCAi dW5pcXVlIiB0byBiZSBlbWl0dGVkCitERVRBSUw6ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5U SVRZIFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4gaW5kZXggcHJvZHVjZWQgYnkgdGhlICJ1bmlx dWUiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUgYWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRo ZXIgYWRkICJ1bmlxdWUiIHRvIHRoZSBmaWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lkZW50aXR5 IiBmcm9tIGl0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywgJ3VuaXF1ZSxyZXBsaWNhX2lkZW50aXR5Jyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3RibF9kZGxfdGVzdC5y aV91bmlxX2V4Y2wgKGEgaW50ZWdlciBOT1QgTlVMTCwgYiBpbnRlZ2VyKTsKKygxIHJvdykKKwor RFJPUCBUQUJMRSByaV91bmlxX2V4Y2w7CistLSBCYXJlIENSRUFURSBVTklRVUUgSU5ERVggKG5v IGJhY2tpbmcgY29uc3RyYWludCkgdXNlZCBhcyBSRVBMSUNBCistLSBJREVOVElUWTogdGhlIGlu ZGV4IGlzIGVtaXR0ZWQgYnkgdGhlICJpbmRleCIga2luZCwgc28gZXhjbHVkaW5nCistLSAiaW5k ZXgiIHdpdGhvdXQgYWxzbyBleGNsdWRpbmcgInJlcGxpY2FfaWRlbnRpdHkiIG11c3QgZXJyb3Iu CitDUkVBVEUgVEFCTEUgcmlfaWR4X2V4Y2wgKGEgaW50IE5PVCBOVUxMLCBiIGludCk7CitDUkVB VEUgVU5JUVVFIElOREVYIHJpX2lkeF9leGNsX2FfdW5pcSBPTiByaV9pZHhfZXhjbCAoYSk7CitB TFRFUiBUQUJMRSByaV9pZHhfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX2lk eF9leGNsX2FfdW5pcTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfaWR4X2V4 Y2wnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnZXhjZXB0JywgJ2luZGV4Jyk7CitFUlJPUjogIFJFUExJQ0EgSURFTlRJVFkgZm9y IHRhYmxlICJyaV9pZHhfZXhjbCIgcmVxdWlyZXMga2luZCAiaW5kZXgiIHRvIGJlIGVtaXR0ZWQK K0RFVEFJTDogIFRoZSB0YWJsZSdzIFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmVmZXJl bmNlcyBhbiBpbmRleCBwcm9kdWNlZCBieSB0aGUgImluZGV4IiBraW5kLCB3aGljaCBpcyBub3Qg aW4gdGhlIGFjdGl2ZSBmaWx0ZXIuCitISU5UOiAgRWl0aGVyIGFkZCAiaW5kZXgiIHRvIHRoZSBm aWx0ZXIgb3IgcmVtb3ZlICJyZXBsaWNhX2lkZW50aXR5IiBmcm9tIGl0LgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnaW5kZXgscmVw bGljYV9pZGVudGl0eScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFi bGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg Q1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LnJpX2lkeF9leGNsIChhIGludGVnZXIgTk9UIE5V TEwsIGIgaW50ZWdlcik7CisoMSByb3cpCisKK0RST1AgVEFCTEUgcmlfaWR4X2V4Y2w7CistLSBJ bmNsdWRlLXNpZGUgYW5hbG9nOiBvbmx5PXJlcGxpY2FfaWRlbnRpdHkgbXVzdCBpbmNsdWRlIHRo ZSBraW5kCistLSB0aGF0IGVtaXRzIHRoZSBpbmRleCwgb3IgdGhlIGZ1bmN0aW9uIGVycm9ycy4K K0NSRUFURSBUQUJMRSByaV9vbmx5IChhIGludCBOT1QgTlVMTCBVTklRVUUsIGIgaW50KTsKK0FM VEVSIFRBQkxFIHJpX29ubHkgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9vbmx5X2Ff a2V5OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9vbmx5Jzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkn LCAncmVwbGljYV9pZGVudGl0eScpOworRVJST1I6ICBSRVBMSUNBIElERU5USVRZIGZvciB0YWJs ZSAicmlfb25seSIgcmVxdWlyZXMga2luZCAidW5pcXVlIiB0byBiZSBlbWl0dGVkCitERVRBSUw6 ICBUaGUgdGFibGUncyBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJlZmVyZW5jZXMgYW4g aW5kZXggcHJvZHVjZWQgYnkgdGhlICJ1bmlxdWUiIGtpbmQsIHdoaWNoIGlzIG5vdCBpbiB0aGUg YWN0aXZlIGZpbHRlci4KK0hJTlQ6ICBFaXRoZXIgYWRkICJ1bmlxdWUiIHRvIHRoZSBmaWx0ZXIg b3IgcmVtb3ZlICJyZXBsaWNhX2lkZW50aXR5IiBmcm9tIGl0LgorLS0gSW5jbHVkaW5nIGJvdGgg a2luZHMgc3VjY2VlZHMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX29ubHkn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnb25seScsICd1bmlxdWUscmVwbGljYV9pZGVudGl0eScpOworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3Qucmlfb25seSBBREQgQ09OU1RSQUlOVCByaV9vbmx5X2Ffa2V5IFVOSVFVRSAoYSk7Cisg QUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3Qucmlfb25seSBSRVBMSUNBIElERU5USVRZIFVTSU5H IElOREVYIHJpX29ubHlfYV9rZXk7CisoMiByb3dzKQorCitEUk9QIFRBQkxFIHJpX29ubHk7Cist LSBQZXIta2luZCBvbmx5IC8gZXhjZXB0IGNvdmVyYWdlLiAgRm9yIGVhY2gga2luZCBpbiB0aGUg dm9jYWJ1bGFyeSwKKy0tIHZlcmlmeSB0aGF0IG9ubHk9SyBlbWl0cyBqdXN0IHRoYXQga2luZCdz IG91dHB1dCBhbmQgdGhhdCBleGNlcHQ9SworLS0gb21pdHMganVzdCB0aGF0IGtpbmQncyBvdXRw dXQuICBLaW5kcyB3aXRoIG5vIGZpeHR1cmUgYWJvdmUgKHRyaWdnZXIsCistLSBwb2xpY3kpIGFy ZSBzdGlsbCByZWNvZ25pemVkIGJ1dCBjdXJyZW50bHkgZW1pdCBub3RoaW5nOyBvbmx5PUsKKy0t IHJldHVybnMgemVybyByb3dzIGZvciB0aGVtLiAgRml4dHVyZXMgdXNlZDoKKy0tICAgaWR4ZDog UEsgKyB0d28gc2Vjb25kYXJ5IENSRUFURSBJTkRFWAorLS0gICBjb25zOiBQSyArIFVOSVFVRSAr IENIRUNLICsgRksgKGNvbnN0cmFpbnQtYmFja2VkKQorLS0gICBydDogICBDUkVBVEUgUlVMRQor LS0gICBzdHg6ICBDUkVBVEUgU1RBVElTVElDUworLS0gICBybHM6ICBFTkFCTEUvRk9SQ0UgUk9X IExFVkVMIFNFQ1VSSVRZCistLSAgIHJpX2Z1bGw6IFJFUExJQ0EgSURFTlRJVFkgRlVMTCAobm8g c291cmNlLWtpbmQgZGVwZW5kZW5jeSkKK0NSRUFURSBUQUJMRSBleGNsX2ZpeCAocm5nIGludDRy YW5nZSwKKyAgICBFWENMVURFIFVTSU5HIGdpc3QgKHJuZyBXSVRIICYmKSk7CistLSBvbmx5PUs6 IGVtaXQgb25seSBraW5kIEsncyBzdGF0ZW1lbnRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ29ubHknLCAnaW5kZXgnKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgSU5ERVggaWR4ZF9sb3dlciBPTiBpZHhkIFVTSU5HIGJ0cmVlIChs b3dlcihuYW1lKSk7CisgQ1JFQVRFIElOREVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIFVTSU5HIGJ0 cmVlIChpZCkgV0hFUkUgKGlkID4gMTAwKTsKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3ByaW1hcnlfa2V5Jyk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRs X3Rlc3QuaWR4ZCBBREQgQ09OU1RSQUlOVCBpZHhkX3BrZXkgUFJJTUFSWSBLRVkgKGlkKTsKKygx IHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkn LCAndW5pcXVlJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBTFRFUiBUQUJM RSBwZ3RibF9kZGxfdGVzdC5jb25zIEFERCBDT05TVFJBSU5UIGNvbnNfYl9rZXkgVU5JUVVFIChi KTsKKygxIHJvdykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdleGNsX2ZpeCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdvbmx5JywgJ2V4Y2x1c2lvbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZXhjbF9maXggQUREIENPTlNU UkFJTlQgZXhjbF9maXhfcm5nX2V4Y2wgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAmJik7 CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25s eScsICdydWxlJyk7CisgICAgICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIFJVTEUgcnRfbG9nX2luc2VydCBBUyAgICAgICAgICAgICAgICAgICArCisgICAg IE9OIElOU0VSVCBUTyBydCBETyAgSU5TRVJUIElOVE8gcnRfbG9nIChpZCkrCisgICBWQUxVRVMg KG5ldy5pZCk7CisoMSByb3cpCisKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4 Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ29ubHknLCAnc3RhdGlzdGljcycpOworICAgICAgICAgICAgICAgICAgICBwZ19nZXRf dGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgU1RBVElTVElDUyBzdHhf bmR2IChuZGlzdGluY3QpIE9OIGEsIGIgRlJPTSBzdHg7CisoMSByb3cpCisKK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncmxzJyk7CisgICAgICAgICAg ICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBB TFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRU5BQkxFIFJPVyBMRVZFTCBTRUNVUklUWTsK KyBBTFRFUiBUQUJMRSBwZ3RibF9kZGxfdGVzdC5ybHMgRk9SQ0UgUk9XIExFVkVMIFNFQ1VSSVRZ OworKDIgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29ubHknLCAncmVwbGljYV9pZGVudGl0eScpOworICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQUxURVIgVEFCTEUgcGd0 YmxfZGRsX3Rlc3QucmlfZnVsbCBSRVBMSUNBIElERU5USVRZIEZVTEw7CisoMSByb3cpCisKKy0t IHRyaWdnZXIgLyBwb2xpY3kgYXJlIHNjYWZmb2xkZWQgYnV0IG5vdCB5ZXQgZW1pdHRpbmc7IG9u bHk9SyBpcyBhCistLSB2YWxpZCBmaWx0ZXIgdGhhdCBwcm9kdWNlcyB6ZXJvIHJvd3MuICBXaGVu IHRoZSBzdGFuZGFsb25lCistLSBwZ19nZXRfdHJpZ2dlcl9kZGwgLyBwZ19nZXRfcG9saWN5X2Rk bCBoZWxwZXJzIGxhbmQsIHRoZXNlIHF1ZXJpZXMKKy0tIHN0YXJ0IHJldHVybmluZyByb3dzIHdp dGhvdXQgYW4gQVBJIGNoYW5nZS4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFz aWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICd0cmlnZ2VyJyk7CisgcGdfZ2V0X3RhYmxlX2RkbCAKKy0tLS0tLS0t LS0tLS0tLS0tLQorKDAgcm93cykKKworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdvbmx5JywgJ3BvbGljeScpOworIHBnX2dldF90YWJsZV9kZGwgCistLS0tLS0t LS0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIGV4Y2VwdD1LOiBlbWl0IGV2ZXJ5dGhpbmcgZXhj ZXB0IGtpbmQgSydzIHN0YXRlbWVudHMuICBQSy9VTklRVUUvCistLSBJTkRFWCBhcmUgZXhlcmNp c2VkIG9uIHRhYmxlcyB3aXRob3V0IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVgKKy0tIHNv IHRoZSB2YWxpZGF0aW9uIGRvZXMgbm90IHRyaXAuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3ByaW1hcnlfa2V5Jyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0LmlkeGQgKGlkIGlu dGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlkeGRfbG93ZXIgT04g aWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRFWCBpZHhkX3BhcnRp YWwgT04gaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7CisoMyByb3dzKQor CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3Vu aXF1ZScpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBUQUJMRSBwZ3Ri bF9kZGxfdGVzdC5jb25zIChhIGludGVnZXIsIGIgaW50ZWdlciwgYyBpbnRlZ2VyLCBDT05TVFJB SU5UIGNvbnNfYV9jaGVjayBDSEVDSyAoKGEgPiAwKSkpOworIEFMVEVSIFRBQkxFIHBndGJsX2Rk bF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJF RkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMiByb3dz KQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0Jywg J2NoZWNrJyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmNvbnMgKGEgaW50ZWdlciwgYiBpbnRlZ2VyLCBjIGludGVnZXIpOworIEFM VEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQgY29uc19iX2tleSBV TklRVUUgKGIpOworIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJ TlQgY29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcmVmZChpZCkgREVGRVJS QUJMRSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2V4Y2xfZml4Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdleGNsdXNpb24nKTsKKyAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QuZXhjbF9maXggKHJuZyBpbnQ0cmFuZ2UpOworKDEgcm93 KQorCistLSBleGNlcHQ9dGFibGUgc3VwcHJlc3NlcyB0aGUgQ1JFQVRFIFRBQkxFICsgT1dORVIg KyBjaGlsZC1kZWZhdWx0CistLSBTRVQgREVGQVVMVCArIGF0dG9wdGlvbnMgcGFzc2VzLCBsZWF2 aW5nIG9ubHkgdGhlIHN1Yi1vYmplY3QgcGFzc2VzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICd0YWJsZScpOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcGdfZ2V0X3RhYmxlX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQg VVNJTkcgYnRyZWUgKGxvd2VyKG5hbWUpKTsKKyBDUkVBVEUgSU5ERVggaWR4ZF9wYXJ0aWFsIE9O IGlkeGQgVVNJTkcgYnRyZWUgKGlkKSBXSEVSRSAoaWQgPiAxMDApOworIEFMVEVSIFRBQkxFIHBn dGJsX2RkbF90ZXN0LmlkeGQgQUREIENPTlNUUkFJTlQgaWR4ZF9wa2V5IFBSSU1BUlkgS0VZIChp ZCk7CisoMyByb3dzKQorCistLSBNdWx0aS1raW5kIGNvbXBvc2l0aW9ucy4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3RhYmxlLGluZGV4Jyk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfdGFibGVfZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF90ZXN0 LmlkeGQgKGlkIGludGVnZXIgTk9UIE5VTEwsIG5hbWUgdGV4dCk7CisgQ1JFQVRFIElOREVYIGlk eGRfbG93ZXIgT04gaWR4ZCBVU0lORyBidHJlZSAobG93ZXIobmFtZSkpOworIENSRUFURSBJTkRF WCBpZHhkX3BhcnRpYWwgT04gaWR4ZCBVU0lORyBidHJlZSAoaWQpIFdIRVJFIChpZCA+IDEwMCk7 CisoMyByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn b25seScsICdwcmltYXJ5X2tleSxmb3JlaWduX2tleScpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIEFMVEVSIFRBQkxFIHBndGJsX2RkbF90ZXN0LmNvbnMgQUREIENPTlNUUkFJTlQg Y29uc19jX2ZrZXkgRk9SRUlHTiBLRVkgKGMpIFJFRkVSRU5DRVMgcmVmZChpZCkgREVGRVJSQUJM RSBJTklUSUFMTFkgREVGRVJSRUQ7CisoMSByb3cpCisKKy0tIER1cGxpY2F0ZSBlbnRyaWVzIGlu IHRoZSBsaXN0IGFyZSBzaWxlbnRseSBkZS1kdXBsaWNhdGVkIGJ5IHRoZQorLS0gQml0bWFwc2V0 LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25l cicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnaW5k ZXgsaW5kZXgnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF90YWJsZV9kZGwg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgSU5ERVgg aWR4ZF9sb3dlciBPTiBpZHhkIFVTSU5HIGJ0cmVlIChsb3dlcihuYW1lKSk7CisgQ1JFQVRFIElO REVYIGlkeGRfcGFydGlhbCBPTiBpZHhkIFVTSU5HIGJ0cmVlIChpZCkgV0hFUkUgKGlkID4gMTAw KTsKKygyIHJvd3MpCisKK0RST1AgVEFCTEUgZXhjbF9maXg7CistLSBvbmx5PUsgb24gYSB0YWJs ZSB0aGF0IGRvZXMgbm90IGhhdmUgYW55IEsgb2YgdGhhdCBraW5kIGlzIGEgdmFsaWQKKy0tIGZp bHRlciBhbmQgcmV0dXJucyB6ZXJvIHJvd3MuICBUZXN0ZWQgcHJldmlvdXNseSB3aXRoIGZvcmVp Z25fa2V5CistLSBvbiAncmVmZCc7IGhlcmUgYWxzbyBydWxlLCBzdGF0aXN0aWNzLCBybHMsIHJl cGxpY2FfaWRlbnRpdHksIGFuZAorLS0gZXhjbHVzaW9uIG9uICdiYXNpYycgKHdoaWNoIGhhcyBv bmx5IFBLICsgY29sdW1ucykuCitTRUxFQ1QgY291bnQoKikgQVMgcnVsZV9yb3dzCisgIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3J1bGUnKTsKKyBydWxlX3Jvd3MgCistLS0t LS0tLS0tLQorICAgICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgc3RhdHNf cm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdzdGF0aXN0aWNzJyk7 Cisgc3RhdHNfcm93cyAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDAKKygxIHJvdykKKworU0VM RUNUIGNvdW50KCopIEFTIHJsc19yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdv bmx5JywgJ3JscycpOworIHJsc19yb3dzIAorLS0tLS0tLS0tLQorICAgICAgICAwCisoMSByb3cp CisKK1NFTEVDVCBjb3VudCgqKSBBUyByaV9yb3dzCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKyByaV9yb3dzIAorLS0tLS0tLS0tCisg ICAgICAgMAorKDEgcm93KQorCitTRUxFQ1QgY291bnQoKikgQVMgZXhjbF9yb3dzCisgIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2V4Y2x1c2lvbicpOworIGV4Y2xfcm93cyAK Ky0tLS0tLS0tLS0tCisgICAgICAgICAwCisoMSByb3cpCisKKy0tIElucHV0LXZhbGlkYXRpb24g ZWRnZSBjYXNlcyBmb3IgdGhlIGNvbW1hLXNlcGFyYXRlZCBraW5kIGxpc3QuICBBbGwKKy0tIG9m IHRoZXNlIHJhaXNlIGFuIGVycm9yIGF0IHRoZSB2YXJpYWRpYy1wYXJzZSBzdGVwOyB0aGUgZnVu Y3Rpb24KKy0tIG5ldmVyIHJlYWNoZXMgcmVsYXRpb24gb3Blbi4KKy0tIEVtcHR5IGxpc3Q6CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5Jywg JycpOworRVJST1I6ICBvcHRpb24gIm9ubHkiIG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUga2lu ZAorLS0gV2hpdGVzcGFjZS1vbmx5IGxpc3Q6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJyAgICcpOworRVJST1I6ICBlbXB0eSBlbnRy eSBpbiBvcHRpb24gIm9ubHkiCistLSBUcmFpbGluZyBjb21tYToKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCAnaW5kZXgsJyk7CitFUlJP UjogIGVtcHR5IGVudHJ5IGluIG9wdGlvbiAib25seSIKKy0tIExlYWRpbmcgY29tbWE6CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgJyxp bmRleCcpOworRVJST1I6ICBlbXB0eSBlbnRyeSBpbiBvcHRpb24gIm9ubHkiCistLSBDb25zZWN1 dGl2ZSBjb21tYXM6CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsICdvbmx5JywgJ2luZGV4LCxydWxlJyk7CitFUlJPUjogIGVtcHR5IGVudHJ5IGluIG9w dGlvbiAib25seSIKKy0tIFRva2VuIGNvbnRhaW5pbmcgaW5uZXIgd2hpdGVzcGFjZToKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ29ubHknLCAnZm9y ZWlnbiBrZXknKTsKK0VSUk9SOiAgaW52YWxpZCBjaGFyYWN0ZXIgaW4gb3B0aW9uICJvbmx5Igor LS0gTlVMTCB2YWx1ZSBmb3IgYSBub24tTlVMTCBvcHRpb246CitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgTlVMTCk7CitFUlJPUjogIHZh bHVlIGZvciBvcHRpb24gIm9ubHkiIG11c3Qgbm90IGJlIG51bGwKKy0tIE9wdGlvbiBzcGVjaWZp ZWQgdHdpY2UgYXMgc2VwYXJhdGUgbmFtZS92YWx1ZSBwYWlyczoKK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnb25seScsICdpbmRleCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J29ubHknLCAncnVsZScpOworRVJST1I6ICBvcHRpb24gIm9ubHkiIGlzIHNwZWNpZmllZCBtb3Jl IHRoYW4gb25jZQorLS0gU2FtZSBraW5kIHNwZWNpZmllZCB0aHJvdWdoIGJvdGggb3B0aW9ucyBp cyBzdGlsbCBtdXRleC1yZWplY3RlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn YmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScs ICdpbmRleCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdydWxl Jyk7CitFUlJPUjogICJvbmx5IiBhbmQgImV4Y2VwdCIgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhj bHVzaXZlCistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0ZXN0IHRhYmxl LCBjYXB0dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0aGUgc2NoZW1h LCByZXBsYXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRlciwgYW5kIGNv bmZpcm0gdGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0tIHJlbGF0aW9u IG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwgU0VMRUNUIG11 c3QKKy0tIHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3RibF9kZGxfcnRf b3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElOVE8gcGd0Ymxf ZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00gKFZBTFVFUwor ICAgICAgICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAoJ2dlbl9jb2xz JyksICgnZ2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAgKCdyZWZkJyks ICgnY29ucycpLCAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwgKCdjaCcpLCAoJ2F0dG9wdCcp LAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9yYW5nZV8xJyksICgncGFydGVk X3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyksICgncGFydGVkX2hhc2hfMCcp LAorICAgICAgICAoJ3BhcnRlZF9saXN0JyksCisgICAgICAgICgncnRfbG9nJyksICgncnQnKSwK KyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyksICgncmlfaWR4JyksICgndW5v JykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwoKCdw Z3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJTkFMSVRZIG8obGluZSwgb3Jk KTsKK0RPICQkCitERUNMQVJFCisgICAgdGFibGVzIENPTlNUQU5UIHRleHRbXSA6PSBBUlJBWVsK KyAgICAgICAgJ2Jhc2ljJywgJ2lkX2NvbHMnLCAnaWRfY3VzdG9tJywgJ2dlbl9jb2xzJywgJ2dl bl92aXJ0dWFsJywgJ3N0b3JhZ2VfY29scycsCisgICAgICAgICdyZWZkJywgJ2NvbnMnLCAnaWR4 ZCcsCisgICAgICAgICdwYXInLCAnY2gnLCAnYXR0b3B0JywKKyAgICAgICAgJ3BhcnRlZF9yYW5n ZScsICdwYXJ0ZWRfcmFuZ2VfMScsICdwYXJ0ZWRfcmFuZ2VfZGVmJywKKyAgICAgICAgJ3BhcnRl ZF9oYXNoJywgJ3BhcnRlZF9oYXNoXzAnLAorICAgICAgICAncGFydGVkX2xpc3QnLAorICAgICAg ICAncnRfbG9nJywgJ3J0JywKKyAgICAgICAgJ3N0eCcsICdybHMnLCAncmlfZnVsbCcsICdyaV9p ZHgnLCAndW5vJworICAgIF07CisgICAgdCB0ZXh0OworICAgIHN0bXQgdGV4dDsKK0JFR0lOCisg ICAgRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKKyAgICBDUkVBVEUgU0NIRU1B IHBndGJsX2RkbF90ZXN0OworICAgIEZPUkVBQ0ggdCBJTiBBUlJBWSB0YWJsZXMgTE9PUAorICAg ICAgICBGT1Igc3RtdCBJTgorICAgICAgICAgICAgU0VMRUNUIGxpbmUgRlJPTSBwZ3RibF9kZGxf cnRfb3JpZyBXSEVSRSBuYW1lID0gdCBPUkRFUiBCWSBvcmQKKyAgICAgICAgTE9PUAorICAgICAg ICAgICAgRVhFQ1VURSBzdG10OworICAgICAgICBFTkQgTE9PUDsKKyAgICBFTkQgTE9PUDsKK0VO RCAkJDsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gMjcgb3RoZXIgb2JqZWN0cworREVUQUlM OiAgZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBp ZF9jb2xzCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBnZW5fY29scworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fdmlydHVhbAorZHJv cCBjYXNjYWRlcyB0byB0YWJsZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cmVmZAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGlkeGQKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxl IGNoCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBwYXJ0ZWRfcmFuZ2UKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3Ag Y2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2xpc3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQK K2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0 eAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlf ZnVsbAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFi bGUgdW5vCitkcm9wIGNhc2NhZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0 YWJsZSB0eXBlZF9wbGFpbgorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9w IGNhc2NhZGVzIHRvIHZpZXcgdgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCitFUlJPUjog IHJlbGF0aW9uICJwYXJ0ZWRfcmFuZ2VfMSIgYWxyZWFkeSBleGlzdHMKK0NPTlRFWFQ6ICBTUUwg c3RhdGVtZW50ICJDUkVBVEUgVEFCTEUgcGd0YmxfZGRsX3Rlc3QucGFydGVkX3JhbmdlXzEgUEFS VElUSU9OIE9GIHBndGJsX2RkbF90ZXN0LnBhcnRlZF9yYW5nZSBGT1IgVkFMVUVTIEZST00gKDAp IFRPICgxMDApOyIKK1BML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgMjIg YXQgRVhFQ1VURQorV0lUSCBhZnRlcl9kZGwgQVMgKAorICAgIFNFTEVDVCB0Lm5hbWUsIG8ub3Jk LCBvLmxpbmUKKyAgICBGUk9NIChTRUxFQ1QgRElTVElOQ1QgbmFtZSBGUk9NIHBndGJsX2RkbF9y dF9vcmlnKSBBUyB0LAorICAgICAgICAgTEFURVJBTCBwZ19nZXRfdGFibGVfZGRsKCgncGd0Ymxf ZGRsX3Rlc3QuJyB8fCB0Lm5hbWUpOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb3duZXInLCAnZmFsc2UnKSBXSVRIIE9SRElOQUxJVFkgbyhsaW5lLCBvcmQp CispCisoU0VMRUNUICdtaXNzaW5nLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBG Uk9NIHBndGJsX2RkbF9ydF9vcmlnCisgRVhDRVBUCisgU0VMRUNUICdtaXNzaW5nLWluLWNvcHkn LCBuYW1lLCBvcmQsIGxpbmUgRlJPTSBhZnRlcl9kZGwpCitVTklPTiBBTEwKKyhTRUxFQ1QgJ2V4 dHJhLWluLWNvcHknIEFTIGtpbmQsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbAorIEVY Q0VQVAorIFNFTEVDVCAnZXh0cmEtaW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIHBndGJs X2RkbF9ydF9vcmlnKQorT1JERVIgQlkga2luZCwgbmFtZSwgb3JkOworIGtpbmQgfCBuYW1lIHwg b3JkIHwgbGluZSAKKy0tLS0tLSstLS0tLS0rLS0tLS0rLS0tLS0tCisoMCByb3dzKQorCistLSBD bGVhbnVwLgorRFJPUCBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3QgQ0FTQ0FERTsKK05PVElDRTogIGRy b3AgY2FzY2FkZXMgdG8gMjcgb3RoZXIgb2JqZWN0cworREVUQUlMOiAgZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBiYXNpYworZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBpZF9jb2xzCitkcm9wIGNhc2Nh ZGVzIHRvIHRhYmxlIGlkX2N1c3RvbQorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fY29scwor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBnZW5fdmlydHVhbAorZHJvcCBjYXNjYWRlcyB0byB0YWJs ZSBzdG9yYWdlX2NvbHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmVmZAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSBjb25zCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGlkeGQKK2Ryb3AgY2FzY2Fk ZXMgdG8gdGFibGUgcGFyCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNoCitkcm9wIGNhc2NhZGVz IHRvIHRhYmxlIGF0dG9wdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSBwYXJ0ZWRfcmFuZ2UKK2Ry b3AgY2FzY2FkZXMgdG8gdGFibGUgcGFydGVkX2hhc2gKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUg cGFydGVkX2xpc3QKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcnQKK2Ryb3AgY2FzY2FkZXMgdG8g dGFibGUgcnRfbG9nCitkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHN0eAorZHJvcCBjYXNjYWRlcyB0 byB0YWJsZSBybHMKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgcmlfZnVsbAorZHJvcCBjYXNjYWRl cyB0byB0YWJsZSByaV9pZHgKK2Ryb3AgY2FzY2FkZXMgdG8gdGFibGUgdW5vCitkcm9wIGNhc2Nh ZGVzIHRvIHR5cGUgdHlwZWRfdAorZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9wbGFpbgor ZHJvcCBjYXNjYWRlcyB0byB0YWJsZSB0eXBlZF9vdmVyCitkcm9wIGNhc2NhZGVzIHRvIHZpZXcg dgorZHJvcCBjYXNjYWRlcyB0byBzZXF1ZW5jZSBzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVs ZQppbmRleCA4ZmEwYTZjNDdmYi4uOWVjYTY0Y2NhM2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9z Y2hlZHVsZQpAQCAtODEsNyArODEsNyBAQCB0ZXN0OiBjcmVhdGVfdGFibGVfbGlrZSBhbHRlcl9n ZW5lcmljIGFsdGVyX29wZXJhdG9yIG1pc2MgYXN5bmMgZGJzaXplIG1lcmdlIG1pcwogIyBjb2xs YXRlLmxpbnV4LnV0ZjggYW5kIGNvbGxhdGUuaWN1LnV0ZjggdGVzdHMgY2Fubm90IGJlIHJ1biBp biBwYXJhbGxlbCB3aXRoIGVhY2ggb3RoZXIKICMgcHNxbCBkZXBlbmRzIG9uIGNyZWF0ZV9hbQog IyBhbXV0aWxzIGRlcGVuZHMgb24gZ2VvbWV0cnksIGNyZWF0ZV9pbmRleF9zcGdpc3QsIGhhc2hf aW5kZXgsIGJyaW4KLXRlc3Q6IHJ1bGVzIHBzcWwgcHNxbF9jcm9zc3RhYiBwc3FsX3BpcGVsaW5l IGFtdXRpbHMgc3RhdHNfZXh0IGNvbGxhdGUubGludXgudXRmOCBjb2xsYXRlLndpbmRvd3Mud2lu MTI1MgordGVzdDogcnVsZXMgcHNxbCBwc3FsX2Nyb3NzdGFiIHBzcWxfcGlwZWxpbmUgYW11dGls cyBzdGF0c19leHQgY29sbGF0ZS5saW51eC51dGY4IGNvbGxhdGUud2luZG93cy53aW4xMjUyIHBn X2dldF90YWJsZV9kZGwKIAogIyAtLS0tLS0tLS0tCiAjIFJ1biB0aGVzZSBhbG9uZSBzbyB0aGV5 IGRvbid0IHJ1biBvdXQgb2YgcGFyYWxsZWwgd29ya2VycwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcGdfZ2V0X3RhYmxlX2RkbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w Z19nZXRfdGFibGVfZGRsLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uOTVhNGRkMGI1NjgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w Z19nZXRfdGFibGVfZGRsLnNxbApAQCAtMCwwICsxLDc0MSBAQAorLS0KKy0tIHBnX2dldF90YWJs ZV9kZGwKKy0tCistLSBBbGwgdGVzdHMgcGFzcyBvd25lcj0+ZmFsc2Ugc28gdGhlIEFMVEVSIFRB QkxFIE9XTkVSIFRPIGxpbmUgaXMgbm90CistLSBlbWl0dGVkLCBrZWVwaW5nIG91dHB1dCBzdGFi bGUgYWNyb3NzIHRlc3QgcnVubmVycyAod2hpY2ggbWF5IHJ1biB1bmRlcgorLS0gZGlmZmVyZW50 IHJvbGUgbmFtZXMpLgorLS0KK0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CitTRVQgc2Vh cmNoX3BhdGggPSBwZ3RibF9kZGxfdGVzdDsKKworLS0gQmFzaWMgdGFibGUgd2l0aCBQUklNQVJZ IEtFWSwgTk9UIE5VTEwsIERFRkFVTFQsIENPTExBVEUuCitDUkVBVEUgVEFCTEUgYmFzaWMgKAor ICAgIGlkIGludCBQUklNQVJZIEtFWSwKKyAgICBuYW1lIHRleHQgTk9UIE5VTEwgREVGQVVMVCAn YW5vbicgQ09MTEFURSAiQyIKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jh c2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBJZGVudGl0eSBjb2x1bW5z ICh3aXRoIGRlZmF1bHQgYW5kIGN1c3RvbSBzZXF1ZW5jZSBvcHRpb25zKS4KK0NSRUFURSBUQUJM RSBpZF9jb2xzICgKKyAgICBpZF9hbHdheXMgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJ VFksCisgICAgaWRfZGVmYXVsdCBpbnQgR0VORVJBVEVEIEJZIERFRkFVTFQgQVMgSURFTlRJVFkK Kyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2lkX2NvbHMnOjpyZWdjbGFzcywg J293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBpZF9jdXN0b20gKAorICAgIHYgaW50 IEdFTkVSQVRFRCBBTFdBWVMgQVMgSURFTlRJVFkgKAorICAgICAgICBTRVFVRU5DRSBOQU1FIGlk X2N1c3RvbV92X3NlcQorICAgICAgICBTVEFSVCBXSVRIIDEwMCBJTkNSRU1FTlQgQlkgNQorICAg ICAgICBNSU5WQUxVRSA1MCBNQVhWQUxVRSAxMDAwCisgICAgICAgIENBQ0hFIDEwIENZQ0xFCisg ICAgKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWRfY3VzdG9tJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpOworCistLSBHZW5lcmF0ZWQgc3RvcmVkIGNvbHVtbi4K K0NSRUFURSBUQUJMRSBnZW5fY29scyAoCisgICAgY2VudHMgaW50LAorICAgIGRvbGxhcnMgbnVt ZXJpYyBHRU5FUkFURUQgQUxXQVlTIEFTIChjZW50cyAvIDEwMC4wKSBTVE9SRUQKKyk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2dlbl9jb2xzJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworCistLSBHZW5lcmF0ZWQgdmlydHVhbCBjb2x1bW4uCitDUkVBVEUgVEFCTEUg Z2VuX3ZpcnR1YWwgKAorICAgIGJhc2UgaW50LAorICAgIGRlcml2ZWQgaW50IEdFTkVSQVRFRCBB TFdBWVMgQVMgKGJhc2UgKiAyKSBWSVJUVUFMCispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFi bGVfZGRsKCdnZW5fdmlydHVhbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0g U1RPUkFHRSBhbmQgQ09NUFJFU1NJT04gKG9ubHkgZW1pdHRlZCB3aGVuIG5vbi1kZWZhdWx0IGZv ciB0aGUgdHlwZSkuCitDUkVBVEUgVEFCTEUgc3RvcmFnZV9jb2xzICgKKyAgICBhIHRleHQgU1RP UkFHRSBFWFRFUk5BTCwKKyAgICBiIHRleHQgU1RPUkFHRSBNQUlOLAorICAgIGMgdGV4dCBDT01Q UkVTU0lPTiBwZ2x6CispOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdG9yYWdl X2NvbHMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIENvbnN0cmFpbnRzOiBD SEVDSywgVU5JUVVFLCBGT1JFSUdOIEtFWSAoREVGRVJSQUJMRSkuCitDUkVBVEUgVEFCTEUgcmVm ZCAoaWQgaW50IFBSSU1BUlkgS0VZKTsKK0NSRUFURSBUQUJMRSBjb25zICgKKyAgICBhIGludCBD SEVDSyAoYSA+IDApLAorICAgIGIgaW50IFVOSVFVRSwKKyAgICBjIGludCBSRUZFUkVOQ0VTIHJl ZmQoaWQpIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVECispOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworCist LSBJbmRleGVzOiBmdW5jdGlvbmFsIGFuZCBwYXJ0aWFsLiAgQ29uc3RyYWludC1iYWNraW5nIGlu ZGV4ZXMgYXJlCistLSBzdXBwcmVzc2VkICh0aGV5IGFyZSBlbWl0dGVkIGJ5IHRoZSBjb25zdHJh aW50IGxvb3ApLgorQ1JFQVRFIFRBQkxFIGlkeGQgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0 ZXh0KTsKK0NSRUFURSBJTkRFWCBpZHhkX2xvd2VyIE9OIGlkeGQgKGxvd2VyKG5hbWUpKTsKK0NS RUFURSBJTkRFWCBpZHhkX3BhcnRpYWwgT04gaWR4ZCAoaWQpIFdIRVJFIGlkID4gMTAwOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCistLSBJbmhlcml0YW5jZSwgaW5jbHVkaW5nIGEgY2hpbGQgREVGQVVMVCBvdmVy cmlkZSBvbiBhbiBpbmhlcml0ZWQgY29sdW1uLgorQ1JFQVRFIFRBQkxFIHBhciAoYSBpbnQgREVG QVVMVCAxLCBiIHRleHQpOworQ1JFQVRFIFRBQkxFIGNoIChjIGludCkgSU5IRVJJVFMgKHBhcik7 CitBTFRFUiBUQUJMRSBjaCBBTFRFUiBDT0xVTU4gYSBTRVQgREVGQVVMVCA5OTk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworCistLSBQZXItY29sdW1uIGF0dG9wdGlvbnM6IGVtaXR0ZWQgYXMgQUxURVIgQ09MVU1OIFNF VCAoLi4uKS4KK0NSRUFURSBUQUJMRSBhdHRvcHQgKGEgaW50LCBiIHRleHQpOworQUxURVIgVEFC TEUgYXR0b3B0IEFMVEVSIENPTFVNTiBhIFNFVCAobl9kaXN0aW5jdCA9IDEwMCk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2F0dG9wdCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnKTsKKworLS0gUGFydGl0aW9uZWQgdGFibGUgcGFyZW50cyAoUkFOR0UsIEhBU0gsIGFuZCBM SVNUKS4KK0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2UgKGlkIGludCwgayBpbnQpIFBBUlRJVElP TiBCWSBSQU5HRSAoaWQpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRf cmFuZ2UnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfaGFzaCAoaWQgaW50KSBQQVJUSVRJT04gQlkgSEFTSCAoaWQpOworU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un KTsKKworQ1JFQVRFIFRBQkxFIHBhcnRlZF9saXN0IChpZCBpbnQsIHJlZ2lvbiB0ZXh0KSBQQVJU SVRJT04gQlkgTElTVCAocmVnaW9uKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cGFydGVkX2xpc3QnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFBhcnRpdGlv biBjaGlsZHJlbjogRlJPTS9UTywgV0lUSCAobW9kdWx1cywgcmVtYWluZGVyKSwgREVGQVVMVC4K K0NSRUFURSBUQUJMRSBwYXJ0ZWRfcmFuZ2VfMSBQQVJUSVRJT04gT0YgcGFydGVkX3JhbmdlCisg ICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK0FMVEVSIFRBQkxFIHBhcnRlZF9yYW5n ZV8xIEFMVEVSIENPTFVNTiBrIFNFVCBERUZBVUxUIDc7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ3BhcnRlZF9yYW5nZV8xJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOwor CitDUkVBVEUgVEFCTEUgcGFydGVkX2hhc2hfMCBQQVJUSVRJT04gT0YgcGFydGVkX2hhc2gKKyAg ICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDApOworU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfaGFzaF8wJzo6cmVnY2xhc3MsICdvd25lcicsICdm YWxzZScpOworCitDUkVBVEUgVEFCTEUgcGFydGVkX3JhbmdlX2RlZiBQQVJUSVRJT04gT0YgcGFy dGVkX3JhbmdlIERFRkFVTFQ7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3BhcnRl ZF9yYW5nZV9kZWYnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFJ1bGVzLgor Q1JFQVRFIFRBQkxFIHJ0IChpZCBpbnQpOworQ1JFQVRFIFRBQkxFIHJ0X2xvZyAoaWQgaW50KTsK K0NSRUFURSBSVUxFIHJ0X2xvZ19pbnNlcnQgQVMgT04gSU5TRVJUIFRPIHJ0CisgICAgRE8gQUxT TyBJTlNFUlQgSU5UTyBydF9sb2cgVkFMVUVTIChORVcuaWQpOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdydCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworLS0gRXh0 ZW5kZWQgc3RhdGlzdGljcy4KK0NSRUFURSBUQUJMRSBzdHggKGEgaW50LCBiIGludCwgYyBpbnQp OworQ1JFQVRFIFNUQVRJU1RJQ1Mgc3R4X25kdiAobmRpc3RpbmN0KSBPTiBhLCBiIEZST00gc3R4 OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdzdHgnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJyk7CisKKy0tIFJvdy1sZXZlbCBzZWN1cml0eSB0b2dnbGVzLgorQ1JFQVRFIFRB QkxFIHJscyAoaWQgaW50KTsKK0FMVEVSIFRBQkxFIHJscyBFTkFCTEUgUk9XIExFVkVMIFNFQ1VS SVRZOworQUxURVIgVEFCTEUgcmxzIEZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWTsKK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScp OworCistLSBSRVBMSUNBIElERU5USVRZOiBlbWl0dGVkIG9ubHkgd2hlbiBub3QgdGhlIGRlZmF1 bHQuCitDUkVBVEUgVEFCTEUgcmlfZnVsbCAoYSBpbnQpOworQUxURVIgVEFCTEUgcmlfZnVsbCBS RVBMSUNBIElERU5USVRZIEZVTEw7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3Jp X2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKK0NSRUFURSBUQUJMRSByaV9p ZHggKGEgaW50IE5PVCBOVUxMKTsKK0NSRUFURSBVTklRVUUgSU5ERVggcmlfaWR4X2EgT04gcmlf aWR4IChhKTsKK0FMVEVSIFRBQkxFIHJpX2lkeCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY IHJpX2lkeF9hOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHgnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFVOTE9HR0VEICsgcmVsb3B0aW9ucy4KK0NS RUFURSBVTkxPR0dFRCBUQUJMRSB1bm8gKGlkIGludCkgV0lUSCAoZmlsbGZhY3RvciA9IDcwKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndW5vJzo6cmVnY2xhc3MsICdvd25lcics ICdmYWxzZScpOworCistLSBUeXBlZCB0YWJsZSAoQ1JFQVRFIFRBQkxFIE9GIHR5cGVfbmFtZSku ICBDb2x1bW5zIGluaGVyaXRlZCBmcm9tIHRoZQorLS0gdHlwZSBlbWl0IG5vdGhpbmc7IGxvY2Fs bHktYXBwbGllZCBERUZBVUxULCBOT1QgTlVMTCBhbmQgQ0hFQ0sgY29tZQorLS0gb3V0IHRocm91 Z2ggYSBzaW5nbGUgIihjb2wgV0lUSCBPUFRJT05TIC4uLikiIGxpc3QuCitDUkVBVEUgVFlQRSB0 eXBlZF90IEFTIChhIGludCwgYiB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0eXBlZF9wbGFpbiBPRiB0 eXBlZF90OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd0eXBlZF9wbGFpbic6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKKworQ1JFQVRFIFRBQkxFIHR5cGVkX292ZXIgT0Yg dHlwZWRfdCAoCisgICAgYSBXSVRIIE9QVElPTlMgREVGQVVMVCA3IE5PVCBOVUxMLAorICAgIGIg V0lUSCBPUFRJT05TIE5PVCBOVUxMLAorICAgIENPTlNUUkFJTlQgYl9ub25lbXB0eSBDSEVDSyAo bGVuZ3RoKGIpID4gMCkKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3R5cGVk X292ZXInOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJyk7CisKKy0tIFRlbXBvcmFyeSB0YWJs ZXMgKyBPTiBDT01NSVQuICBUZW1wIHRhYmxlcyBtdXN0IG5ldmVyIGJlIGVtaXR0ZWQgd2l0aAor LS0gdGhlIHNlc3Npb24tcHJpdmF0ZSBwZ190ZW1wX05OIHNjaGVtYSBwcmVmaXggLS0gdGhlIFRF TVBPUkFSWSBrZXl3b3JkCistLSBhbHJlYWR5IHBsYWNlcyB0aGUgdGFibGUgaW4gcGdfdGVtcCBh bmQgdGhlIHByZWZpeCBpcyBub24tcmVwbGF5YWJsZS4KKy0tIE9OIENPTU1JVCBEUk9QIG9ubHkg ZmlyZXMgYXQgY29tbWl0LCBzbyB0aGUgcXVlcmllcyB0aGF0IG5lZWQgdG8gc2VlCistLSB0aGUg Y2F0YWxvZyBlbnRyeSBtdXN0IHJ1biBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcyB0aGUgQ1JF QVRFLgorQkVHSU47CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2RlZmF1bHQgKGlkIGludCk7CitD UkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2RlbGV0ZSAoaWQgaW50KSBPTiBDT01NSVQgREVMRVRFIFJP V1M7CitDUkVBVEUgVEVNUCBUQUJMRSB0ZW1wX2Ryb3AgKGlkIGludCkgT04gQ09NTUlUIERST1A7 CisKK1NFTEVDVCBsaW5lIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgndGVtcF9kZWZhdWx0Jzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JFQVRF ICUnOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZGVsZXRlJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpIEFTIGxpbmUKK1dIRVJFIGxpbmUgTElLRSAnQ1JF QVRFICUnOworCitTRUxFQ1QgbGluZSBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3RlbXBfZHJvcCc6 OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKSBBUyBsaW5lCitXSEVSRSBsaW5lIExJS0UgJ0NS RUFURSAlJzsKK1JPTExCQUNLOworCistLSBQcmV0dHkgbW9kZS4KK1NFTEVDVCAqIEZST00gcGdf Z2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywgJ3ByZXR0 eScsICd0cnVlJyk7CisKKy0tIFZBUklBRElDIEFSUkFZWy4uLl0gY2FsbCBmb3JtOiBvcHRpb24g cGFpcnMgY2FuIGJlIHBhc3NlZCBhcyBhIHNpbmdsZQorLS0gdGV4dFtdIHRhZ2dlZCB3aXRoIFZB UklBRElDLCBpbiBhZGRpdGlvbiB0byB0aGUgcG9zaXRpb25hbCBzcGVsbGluZworLS0gZXhlcmNp c2VkIGFib3ZlLiAgVGhpcyByZXF1aXJlcyBwcm9hcmd0eXBlcyB0byBkZWNsYXJlIHRoZSB2YXJp YWRpYworLS0gYXJndW1lbnQgYXMgdGhlIGFycmF5IHR5cGUgKF90ZXh0KS4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWQVJJQURJQyBBUlJBWVsnb3duZXInLCAnZmFsc2UnXSk7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVkFSSUFESUMgQVJSQVlbJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJldHR5JywgJ3RydWUn XTo6dGV4dFtdKTsKKworLS0gVkFSSUFESUMgTlVMTDo6dGV4dFtdIGlzIGVxdWl2YWxlbnQgdG8g b21pdHRpbmcgdGhlIHZhcmlhZGljIGFyZ3VtZW50czsKKy0tIGNoZWNrIHRoZSByb3cgY291bnQg cmF0aGVyIHRoYW4gdGhlIHJvd3MgdGhlbXNlbHZlcywgYmVjYXVzZSB3aXRob3V0CistLSAnb3du ZXInLCAnZmFsc2UnIHRoZSBvdXRwdXQgY29udGFpbnMgYW4gQUxURVIgVEFCTEUgLi4uIE9XTkVS IFRPIGxpbmUKKy0tIHRoYXQgdmFyaWVzIGFjcm9zcyB0ZXN0IHJ1bm5lcnMuCitTRUxFQ1QgY291 bnQoKikgPiAwIEFTIG9rCisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFz cywgVkFSSUFESUMgTlVMTDo6dGV4dFtdKTsKKworLS0gb25seSAvIGV4Y2VwdCBnYXRpbmc6IGVh Y2ggZW1pdHMgZWl0aGVyIG9ubHkgdGhlIGxpc3RlZCBraW5kcworLS0gKG9ubHkpIG9yIGV2ZXJ5 IGtpbmQgZXhjZXB0IHRoZSBsaXN0ZWQgb25lcyAoZXhjZXB0KS4gIFRoZSB0d28KKy0tIGFyZSBt dXR1YWxseSBleGNsdXNpdmUuICBLaW5kIHZvY2FidWxhcnk6IHRhYmxlLCBpbmRleCwKKy0tIHBy aW1hcnlfa2V5LCB1bmlxdWUsIGNoZWNrLCBmb3JlaWduX2tleSwgZXhjbHVzaW9uLCBydWxlLAor LS0gc3RhdGlzdGljcywgdHJpZ2dlciwgcG9saWN5LCBybHMsIHJlcGxpY2FfaWRlbnRpdHksIHBh cnRpdGlvbi4KKy0tIE5PVCBOVUxMIGlzIG5vdCBpbiB0aGUgdm9jYWJ1bGFyeSAtIGFsd2F5cyBl bWl0dGVkIHRvIHByZXZlbnQKKy0tIHByb2R1Y2luZyBzY2hlbWFzIHRoYXQgc2lsZW50bHkgYWNj ZXB0IE5VTExzIHRoZSBzb3VyY2Ugd291bGQKKy0tIGhhdmUgcmVqZWN0ZWQuCistLQorLS0gZXhj ZXB0PWluZGV4IGhpZGVzIHRoZSBDUkVBVEUgSU5ERVggc3RhdGVtZW50cy4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnaW5kZXgnKTsKKworLS0g ZXhjZXB0PXByaW1hcnlfa2V5LHVuaXF1ZSxjaGVjayxmb3JlaWduX2tleSxleGNsdXNpb24gaGlk ZXMgZXZlcnkKKy0tIHRhYmxlLWxldmVsIGNvbnN0cmFpbnQuICBJbmxpbmUgQ0hFQ0sgaW4gdGhl IENSRUFURSBUQUJMRSBib2R5IGlzCistLSBzdXBwcmVzc2VkIHRvby4KK1NFTEVDVCAqIEZST00g cGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdwcmltYXJ5X2tleSx1bmlxdWUsY2hlY2ssZm9yZWlnbl9rZXksZXhjbHVz aW9uJyk7CisKKy0tIGV4Y2VwdD1mb3JlaWduX2tleSBzdXBwcmVzc2VzIG9ubHkgRk9SRUlHTiBL RVkgY29uc3RyYWludHM7CistLSBQUklNQVJZIEtFWSwgVU5JUVVFLCBDSEVDSywgYW5kIG5hbWVk IE5PVCBOVUxMIHN0YXkuICBUaGlzIGlzIHRoZQorLS0gZmlyc3QgcGFzcyBvZiB0aGUgdHdvLXBh c3MgRkstY2xvbmUgd29ya2Zsb3c6IGVtaXQgdGFibGVzIHdpdGhvdXQKKy0tIGNyb3NzLXRhYmxl IEZLcywgbG9hZCBkYXRhLCB0aGVuIHJlLXJ1biB3aXRoIG9ubHk9Zm9yZWlnbl9rZXkKKy0tIHRv IGFkZCB0aGVtIG9uY2UgYWxsIHRhcmdldHMgZXhpc3QuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ2ZvcmVpZ25fa2V5Jyk7CisKKy0tIG9ubHk9 Zm9yZWlnbl9rZXkgaXMgdGhlIHNlY29uZCBwYXNzIG9mIHRoZSB0d28tcGFzcyBGSy1jbG9uZQor LS0gd29ya2Zsb3c6IGVtaXQgb25seSB0aGUgQUxURVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5U IC4uLiBGT1JFSUdOCistLSBLRVkgcm93czsgdGhlIENSRUFURSBUQUJMRSBhbmQgZXZlcnkgbm9u LUZLIHN1Yi1vYmplY3QgYXJlCistLSBzdXBwcmVzc2VkICh0aGUgdGFibGUgYWxyZWFkeSBleGlz dHMgZnJvbSB0aGUgZmlyc3QgcGFzcykuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwo J2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnb25seScsICdmb3JlaWduX2tleScpOworCistLSBBIHRhYmxlIHdpdGggbm8g Zm9yZWlnbiBrZXlzIHByb2R1Y2VzIG5vIHJvd3MgdW5kZXIKKy0tIG9ubHk9Zm9yZWlnbl9rZXku CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JlZmQnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdmb3Jl aWduX2tleScpOworCistLSBvbmx5PXRhYmxlIGVtaXRzIG9ubHkgdGhlIGJhcmUgQ1JFQVRFIFRB QkxFICh3aXRoIGFueSBpbmxpbmUKKy0tIGNvbHVtbi1sZXZlbCBOT1QgTlVMTCBhbmQgQ0hFQ0sp IC0gbm8gaW5kZXhlcywgbm8gUFJJTUFSWSBLRVkgQUxURVIsCistLSBubyBvdGhlciBzdWItb2Jq ZWN0cy4gIFVzZWZ1bCBmb3IgY2FwdHVyaW5nIGEgdGFibGUncyBzaGFwZSB3aXRob3V0CistLSBw dWxsaW5nIGluIGV2ZXJ5dGhpbmcgYXR0YWNoZWQgdG8gaXQuCitTRUxFQ1QgKiBGUk9NIHBnX2dl dF90YWJsZV9kZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd0YWJsZScpOworCistLSBvbmx5PWNoZWNr IG9uIGEgbm9uLXBhcnRpdGlvbiB0YWJsZS4gIFRoZSBjb25zdHJhaW50IGxvb3AgbXVzdCBlbWl0 CistLSBjb2x1bW4tbGV2ZWwgYW5kIHRhYmxlLWxldmVsIENIRUNLIGNvbnN0cmFpbnRzIHZpYSBB TFRFUiBUQUJMRSBoZXJlLAorLS0gYmVjYXVzZSB0aGUgaW5saW5lIHBhdGggaW4gQ1JFQVRFIFRB QkxFIG5ldmVyIHJ1bnMgKEtJTkRfVEFCTEUgaXMKKy0tIG5vdCBpbiB0aGUgZmlsdGVyKS4KK0NS RUFURSBUQUJMRSBjaGtfb25seSAoCisgICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBxdHkg aW50IENIRUNLIChxdHkgPiAwKSwKKyAgICBDT05TVFJBSU5UIGNoa19vbmx5X2lkX3BvcyBDSEVD SyAoaWQgPiAwKQorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY2hrX29ubHkn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnb25seScsICdjaGVjaycpOworRFJPUCBUQUJMRSBjaGtfb25seTsKKworLS0gb25seT1w YXJ0aXRpb24gb24gYSBwYXJ0aXRpb25lZC10YWJsZSBwYXJlbnQ6IGVhY2ggY2hpbGQncyBmdWxs IERETAorLS0gaXMgZW1pdHRlZCAoQ1JFQVRFIFRBQkxFIC4uLiBQQVJUSVRJT04gT0YgLi4uKS4g IFRoZSAicGFydGl0aW9uIgorLS0ga2V5d29yZCBpcyBhIGdhdGUgYXQgdGhlIHBhcmVudCBsZXZl bDsgaXQgaXMgc3RyaXBwZWQgZnJvbSB0aGUKKy0tIHByb3BhZ2F0ZWQgZmlsdGVyIHNvIHRoZSBj aGlsZCBkb2VzIG5vdCBleGNsdWRlIGl0cyBvd24KKy0tIENSRUFURSBUQUJMRS4KK0NSRUFURSBU QUJMRSBwX29ubHkgKGlkIGludCwgdmFsIHRleHQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOwor Q1JFQVRFIFRBQkxFIHBfb25seV9hIFBBUlRJVElPTiBPRiBwX29ubHkgRk9SIFZBTFVFUyBGUk9N ICgwKSBUTyAoMTAwKTsKK0NSRUFURSBUQUJMRSBwX29ubHlfYiBQQVJUSVRJT04gT0YgcF9vbmx5 IEZPUiBWQUxVRVMgRlJPTSAoMTAwKSBUTyAoMjAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncF9vbmx5Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncGFydGl0aW9uJyk7CitEUk9QIFRBQkxFIHBf b25seTsKKworLS0gb25seSBhbmQgZXhjZXB0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICdmb3JlaWduX2tl eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdmb3JlaWduX2tl eScpOworCistLSBQdWIvc3ViIHNjaGVtYSBjbG9uZToga2VlcCB0aGUgdGFibGUgYW5kIGl0cyBw cmltYXJ5IGtleSwgZHJvcCB0aGUKKy0tIHJlc3Qgb2YgdGhlIGNvbnN0cmFpbnRzIHNvIHRoZSBz dWJzY3JpYmVyIGNhbiByZXBsaWNhdGUgd2l0aG91dAorLS0gcHVsbGluZyBjcm9zcy10YWJsZSBk ZXBlbmRlbmNpZXMgYWxvbmcuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZXhjZXB0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pcXVlLGNo ZWNrLGZvcmVpZ25fa2V5LGV4Y2x1c2lvbicpOworCistLSBleGNlcHQ9cnVsZSBoaWRlcyB0aGUg Q1JFQVRFIFJVTEUuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3J0Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4 Y2VwdCcsICdydWxlJyk7CisKKy0tIGV4Y2VwdD1zdGF0aXN0aWNzIGhpZGVzIHRoZSBDUkVBVEUg U1RBVElTVElDUy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnc3R4Jzo6cmVnY2xh c3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4 Y2VwdCcsICdzdGF0aXN0aWNzJyk7CisKKy0tIGV4Y2VwdD1ybHMgaGlkZXMgdGhlIEVOQUJMRS9G T1JDRSBST1cgTEVWRUwgU0VDVVJJVFkgdG9nZ2xlcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdybHMnKTsKKworLS0gZXhjZXB0PXJlcGxpY2Ff aWRlbnRpdHkgaGlkZXMgdGhlIFJFUExJQ0EgSURFTlRJVFkgY2xhdXNlLgorU0VMRUNUICogRlJP TSBwZ19nZXRfdGFibGVfZGRsKCdyaV9mdWxsJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdyZXBsaWNhX2lkZW50 aXR5Jyk7CisKKy0tIFBhcnRpdGlvbiBjaGlsZHJlbiBhcmUgZW1pdHRlZCBieSBkZWZhdWx0OyBl eGNlcHQ9cGFydGl0aW9uCistLSBzdXBwcmVzc2VzIHRoZW0gc28gb25seSB0aGUgcGFydGl0aW9u ZWQtdGFibGUgcGFyZW50IGNvbWVzIG91dC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgncGFydGVkX3JhbmdlJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwYXJ0aXRpb24nKTsKKworLS0gVW5rbm93 biBraW5kIG5hbWUgaXMgcmVqZWN0ZWQgYXQgb3B0aW9uLXBhcnNlIHRpbWUuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdub19zdWNoX2tpbmQn KTsKKworLS0gV2hpdGVzcGFjZSBhcm91bmQga2luZCBuYW1lcyBpcyBhbGxvd2VkOyBjYXNlIGlz IGZvbGRlZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNz LCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLCAnICBJTkRFWCAgLCAgIFJVTEUgICcpOworCistLSBzY2hlbWFfcXVhbGlmaWVkPWZhbHNl IHN0cmlwcyB0aGUgc2NoZW1hIGZyb20gdGhlIHRhcmdldCB0YWJsZSBpdHNlbGYKKy0tIGFuZCBm cm9tIHNhbWUtc2NoZW1hIHNpYmxpbmcgcmVmZXJlbmNlcyAoaW5oZXJpdGFuY2UvcGFydGl0aW9u CistLSBwYXJlbnRzLCBpZGVudGl0eSBzZXF1ZW5jZXMgaW4gdGhlIHNhbWUgc2NoZW1hKSwgd2hp bGUgY3Jvc3Mtc2NoZW1hCistLSByZWZlcmVuY2VzIGFyZSBrZXB0IHF1YWxpZmllZCBmb3IgY29y cmVjdG5lc3MuCistLQorLS0gQmFyZSBDUkVBVEUgVEFCTEUgZm9yIGFuIG9yZGluYXJ5IHRhYmxl LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVh bGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIElOSEVSSVRTIHBhcmVudCBpbiB0aGUgc2FtZSBzY2hl bWEgaXMgZW1pdHRlZCB1bnF1YWxpZmllZC4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2Rk bCgnY2gnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworCistLSBQYXJ0aXRpb24g cGFyZW50IGluIHRoZSBzYW1lIHNjaGVtYSBpcyBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfcmFuZ2VfMSc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hlbWFfcXVh bGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIENyb3NzLXNjaGVtYSBGSyB0YXJnZXQga2VlcHMgcXVh bGlmaWNhdGlvbi4gIFRoZSAncmVmZCcgdGFibGUgaXMgaW4KKy0tIHBndGJsX2RkbF90ZXN0OyBw bGFjZSBhbiBGSyB0YXJnZXQgaW4gYSBkaWZmZXJlbnQgc2NoZW1hIGFuZCB2ZXJpZnkgaXQKKy0t IHN0YXlzIHF1YWxpZmllZCBldmVuIHdpdGggc2NoZW1hX3F1YWxpZmllZD1mYWxzZS4KK0NSRUFU RSBTQ0hFTUEgcGd0YmxfZGRsX290aGVyOworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9vdGhlci5w YXJlbnQgKGlkIGludCBQUklNQVJZIEtFWSk7CitDUkVBVEUgVEFCTEUgeHNjaGVtYV9mayAoCisg ICAgaWQgIGludCBQUklNQVJZIEtFWSwKKyAgICBwaWQgaW50IFJFRkVSRU5DRVMgcGd0YmxfZGRs X290aGVyLnBhcmVudAorKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgneHNjaGVt YV9mayc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdzY2hlbWFfcXVhbGlmaWVkJywgJ2ZhbHNlJyk7CisKKy0tIENyb3NzLXNjaGVt YSBGSyB3aG9zZSB0YXJnZXQgc2NoZW1hIG5hbWUgZW5kcyB3aXRoIHRoZSBiYXNlIHNjaGVtYSBu YW1lCistLSAoZS5nLiAieHBndGJsX2RkbF90ZXN0IiBlbmRzIHdpdGggInBndGJsX2RkbF90ZXN0 IikuICBBIHBvc3QtaG9jIHRleHQKKy0tIHN0cmlwIHdvdWxkIG1hbmdsZSAieHBndGJsX2RkbF90 ZXN0LnJlZnRibCIgaW50byAieHJlZnRibCI7IGRlY2lkaW5nCistLSBxdWFsaWZpY2F0aW9uIGF0 IGdlbmVyYXRpb24gdGltZSBhdm9pZHMgdGhlIHByb2JsZW0gZW50aXJlbHkuCitDUkVBVEUgU0NI RU1BIHhwZ3RibF9kZGxfdGVzdDsKK0NSRUFURSBUQUJMRSB4cGd0YmxfZGRsX3Rlc3QucmVmdGJs IChpZCBpbnQgUFJJTUFSWSBLRVkpOworQ1JFQVRFIFRBQkxFIHN1ZmZpeF9zY2hlbWFfZmsgKAor ICAgIGlkICBpbnQgUFJJTUFSWSBLRVksCisgICAgcmVmIGludCBSRUZFUkVOQ0VTIHhwZ3RibF9k ZGxfdGVzdC5yZWZ0YmwKKyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N1ZmZp eF9zY2hlbWFfZmsnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBUQUJM RSBzdWZmaXhfc2NoZW1hX2ZrOworRFJPUCBTQ0hFTUEgeHBndGJsX2RkbF90ZXN0IENBU0NBREU7 CisKKy0tIElkZW50aXR5IGNvbHVtbiB3aXRoIGEgY3VzdG9tIHNlcXVlbmNlIG5hbWUgaW4gdGhl IHNhbWUgc2NoZW1hIGlzCistLSBlbWl0dGVkIHVucXVhbGlmaWVkLgorU0VMRUNUICogRlJPTSBw Z19nZXRfdGFibGVfZGRsKCdpZF9jdXN0b20nOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxz ZScpOworCistLSBSb3VuZC10cmlwOiB3aXRoIHNjaGVtYV9xdWFsaWZpZWQ9ZmFsc2UsIGFmdGVy IFNFVCBzZWFyY2hfcGF0aCB0aGUKKy0tIERETCBjYW4gYmUgcmVwbGF5ZWQgaW50byBhIGRpZmZl cmVudCB0YXJnZXQgc2NoZW1hLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcmVwbGF5OworRE8g JCQKK0RFQ0xBUkUKKyAgICBzdG10IHRleHQ7CitCRUdJTgorICAgIFNFVCBMT0NBTCBzZWFyY2hf cGF0aCA9IHBndGJsX2RkbF9yZXBsYXk7CisgICAgRk9SIHN0bXQgSU4KKyAgICAgICAgU0VMRUNU IGxpbmUgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfdGVzdC5iYXNpYyc6OnJlZ2Ns YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywg J2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2hl bWFfcXVhbGlmaWVkJywgJ2ZhbHNlJykgQVMgbGluZQorICAgIExPT1AKKyAgICAgICAgRVhFQ1VU RSBzdG10OworICAgIEVORCBMT09QOworRU5EICQkOworU0VMRUNUIHJlbG5hbWVzcGFjZTo6cmVn bmFtZXNwYWNlOjp0ZXh0LCByZWxuYW1lCitGUk9NIHBnX2NsYXNzIFdIRVJFIG9pZCA9ICdwZ3Ri bF9kZGxfcmVwbGF5LmJhc2ljJzo6cmVnY2xhc3M7CitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfcmVw bGF5IENBU0NBREU7CitEUk9QIFRBQkxFIHhzY2hlbWFfZms7CitEUk9QIFNDSEVNQSBwZ3RibF9k ZGxfb3RoZXIgQ0FTQ0FERTsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBDSEVDSyBvbiBhIHBhcnRp dGlvbiBjaGlsZCBoYXMgbm8gaW5saW5lIGNvbHVtbgorLS0gbGlzdCB0byBsaXZlIGluIChQQVJU SVRJT04gT0YgZm9ybSksIHNvIGl0IG11c3QgY29tZSBvdXQgYXMgYQorLS0gc2VwYXJhdGUgQUxU RVIgVEFCTEUgLi4uIEFERCBDT05TVFJBSU5UIHN0YXRlbWVudC4KK0NSRUFURSBUQUJMRSBwYXJ0 ZWRfY2hrIChpZCBpbnQsIHZhbCBpbnQpIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRF IFRBQkxFIHBhcnRlZF9jaGtfY2hpbGQgUEFSVElUSU9OIE9GIHBhcnRlZF9jaGsKKyAgICAoQ09O U1RSQUlOVCBjaGtfaW5saW5lIENIRUNLICh2YWwgPiAwKSkKKyAgICBGT1IgVkFMVUVTIEZST00g KDApIFRPICgxMDApOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdwYXJ0ZWRfY2hr X2NoaWxkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBUQUJMRSBwYXJ0ZWRf Y2hrOworCistLSBJbmhlcml0YW5jZSBjaGlsZHJlbiBvZiBhIHBhcmVudCB3aXRoIGEgZ2VuZXJh dGVkIGNvbHVtbiBzaG91bGQgbm90CistLSBlbWl0IGFuIEFMVEVSIENPTFVNTiAuLi4gU0VUIERF RkFVTFQgZm9yIHRoZSBpbmhlcml0ZWQgZ2VuZXJhdGVkCistLSBjb2x1bW46IHRoZSBHRU5FUkFU RUQgZXhwcmVzc2lvbiBjYXJyaWVzIGRvd24gdGhyb3VnaCBpbmhlcml0YW5jZSwKKy0tIGFuZCBT RVQgREVGQVVMVCB3b3VsZCBmYWlsIGF0IHJlcGxheSBhZ2FpbnN0IGEgZ2VuZXJhdGVkIGNvbHVt bi4KK0NSRUFURSBUQUJMRSBwYXJfZ2VuICgKKyAgICBpZCBpbnQsCisgICAgZyAgaW50IEdFTkVS QVRFRCBBTFdBWVMgQVMgKGlkICogMikgU1RPUkVECispOworQ1JFQVRFIFRBQkxFIGNoX2dlbiAo KSBJTkhFUklUUyAocGFyX2dlbik7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2No X2dlbic6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgcGFyX2dlbiBD QVNDQURFOworCistLSBBIHVzZXItbmFtZWQgTk9UIE5VTEwgb24gYSBsb2NhbCBjb2x1bW4gaXMg ZW1pdHRlZCBpbmxpbmUgYXMKKy0tICJDT05TVFJBSU5UIG5hbWUgTk9UIE5VTEwiIHNvIHRoZSBv cmlnaW5hbCBuYW1lIGlzIHByZXNlcnZlZC4gIEFuCistLSBhdXRvLW5hbWVkIE5PVCBOVUxMIG9u IGEgbG9jYWwgY29sdW1uIGlzIGVtaXR0ZWQgYXMgYSBwbGFpbiBpbmxpbmUKKy0tICJOT1QgTlVM TCIgLSBQRyByZS1jcmVhdGVzIHRoZSBhdXRvLW5hbWVkIGNvbnN0cmFpbnQgd2hlbiBDUkVBVEUK Ky0tIFRBQkxFIHJ1bnMsIHNvIHRoZSBjb25zdHJhaW50IGxvb3Agc2tpcHMgYm90aCBmb3JtcyB0 byBhdm9pZCB0aGUKKy0tIHJlZHVuZGFudCAoYW5kIG9uIHRhYmxlLXJlbmFtZSBvciBzZXF1ZW5j ZS1jb2xsaXNpb24sIGJyb2tlbikKKy0tIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09OU1RSQUlOVCAu Li4gTk9UIE5VTEwgc3RhdGVtZW50LgorQ1JFQVRFIFRBQkxFIG5uX25hbWVkICgKKyAgICBhIGlu dCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMLAorICAgIGIgaW50IE5PVCBOVUxMCispOworU0VM RUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdubl9uYW1lZCc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnKTsKK0RST1AgVEFCTEUgbm5fbmFtZWQ7CisKKy0tIFJlbmFtaW5nIHRoZSB0YWJs ZSBhZnRlciBhbiBJREVOVElUWSBOT1QgTlVMTCBjb2x1bW4gd2FzIGRlY2xhcmVkCistLSBsZWF2 ZXMgdGhlIGF1dG8tbmFtZWQgY29uc3RyYWludCBmcm96ZW4gYXQgdGhlIG9yaWdpbmFsIG5hbWUs IHdoaWNoCistLSBubyBsb25nZXIgbWF0Y2hlcyB0aGUgcG9zdC1yZW5hbWUgIjx0YWJsZT5fPGNv bD5fbm90X251bGwiIHBhdHRlcm4uCistLSBUaGUgZW1pdHRlZCBEREwgbXVzdCBzdGlsbCByb3Vu ZC10cmlwOiB0aGUgY29uc3RyYWludCBsb29wIG11c3Qgbm90CistLSBBTFRFUiBUQUJMRSAuLi4g QUREIENPTlNUUkFJTlQgYSBzZWNvbmQgTk9UIE5VTEwsIHNpbmNlIENSRUFURSBUQUJMRQorLS0g d2l0aCB0aGUgaW5saW5lIElERU5USVRZIGFscmVhZHkgY3JlYXRlcyBhbiBhdXRvLU5PVC1OVUxM IHVuZGVyIHRoZQorLS0gbmV3IHRhYmxlIG5hbWUgYW5kIFBHIG9ubHkgcGVybWl0cyBvbmUgTk9U IE5VTEwgcGVyIGNvbHVtbi4KK0NSRUFURSBUQUJMRSBubl9yZW5hbWVkICgKKyAgICBhIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIElERU5USVRZIE5PVCBOVUxMCispOworQUxURVIgVEFCTEUgbm5f cmVuYW1lZCBSRU5BTUUgVE8gbm5fcmVuYW1lZDI7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ25uX3JlbmFtZWQyJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScpOworRFJPUCBU QUJMRSBubl9yZW5hbWVkMjsKKworLS0gTG9jYWxseS1kZWNsYXJlZCBOT1QgTlVMTCBvbiBhbiBp bmhlcml0ZWQgY29sdW1uLiAgVGhlIGNvbHVtbiBpdHNlbGYKKy0tIGlzIG9taXR0ZWQgZnJvbSB0 aGUgY2hpbGQncyBjb2x1bW4gbGlzdCAoYXR0aXNsb2NhbD1mYWxzZSksIHNvIHRoZQorLS0gdXNl ci1uYW1lZCBOT1QgTlVMTCBtdXN0IGNvbWUgb3V0IHZpYSB0aGUgcG9zdC1DUkVBVEUgY29uc3Ry YWludAorLS0gbG9vcCByYXRoZXIgdGhhbiBpbmxpbmUuCitDUkVBVEUgVEFCTEUgbm5fcGFyIChh IGludCk7CitDUkVBVEUgVEFCTEUgbm5fY2ggKGIgaW50KSBJTkhFUklUUyAobm5fcGFyKTsKK0FM VEVSIFRBQkxFIG5uX2NoIEFERCBDT05TVFJBSU5UIG15X25uIE5PVCBOVUxMIGE7CitTRUxFQ1Qg KiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ25uX2NoJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScpOworRFJPUCBUQUJMRSBubl9wYXIgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1m YWxzZSBtdXN0IGRyb3AgdGhlIHNjaGVtYSBwcmVmaXggZnJvbSBERUZBVUxUCistLSBleHByZXNz aW9ucyBhbmQgaW5saW5lIENIRUNLIGJvZGllcyB0aGF0IHJlZmVyZW5jZSBzYW1lLXNjaGVtYQor LS0gb2JqZWN0cyAoc2VxdWVuY2UgdmlhIG5leHR2YWwsIGZ1bmN0aW9uIHZpYSBkaXJlY3QgY2Fs bCkuICBUaGlzCistLSByZWxpZXMgb24gdGhlIGRlcGFyc2VyIHJlc3BlY3RpbmcgdGhlIG5hcnJv d2VkIHNlYXJjaF9wYXRoIHJhdGhlcgorLS0gdGhhbiBvbiBzdWJzdHJpbmcgc3RyaXBwaW5nLgor Q1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfeHJlZjsKK0NSRUFURSBTRVFVRU5DRSBwZ3RibF9kZGxf eHJlZi5teXNlcTsKK0NSRUFURSBGVU5DVElPTiBwZ3RibF9kZGxfeHJlZi5mKGludCkgUkVUVVJO UyBpbnQgTEFOR1VBR0Ugc3FsIElNTVVUQUJMRQorICAgIEFTICdTRUxFQ1QgJDEnOworQ1JFQVRF IFRBQkxFIHBndGJsX2RkbF94cmVmLnQgKAorICAgIGlkICBpbnQgREVGQVVMVCBuZXh0dmFsKCdw Z3RibF9kZGxfeHJlZi5teXNlcScpLAorICAgIHZhbCBpbnQsCisgICAgQ09OU1RSQUlOVCBjaGsg Q0hFQ0sgKHBndGJsX2RkbF94cmVmLmYodmFsKSA+IDApCispOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdwZ3RibF9kZGxfeHJlZi50Jzo6cmVnY2xhc3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOworRFJPUCBTQ0hFTUEgcGd0 YmxfZGRsX3hyZWYgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5P VCBjb3JydXB0IHN0cmluZyBsaXRlcmFscyB3aG9zZQorLS0gY29udGVudHMgaGFwcGVuIHRvIGNv bnRhaW4gdGhlIHNjaGVtYSBuYW1lIGZvbGxvd2VkIGJ5IGEgZG90LiAgVGhlCistLSBpbi1zdHJp bmcgc3RhdGUgb2YgdGhlIHByZWZpeCBzdHJpcHBlciBwcmVzZXJ2ZXMgdGhlbSB2ZXJiYXRpbS4K K0NSRUFURSBTQ0hFTUEgcGd0YmxfZGRsX3N0cjsKK0NSRUFURSBUQUJMRSBwZ3RibF9kZGxfc3Ry LnAgKGlkIGludCwgbm90ZSB0ZXh0KSBQQVJUSVRJT04gQlkgUkFOR0UgKGlkKTsKK0NSRUFURSBU QUJMRSBwZ3RibF9kZGxfc3RyLnBjIFBBUlRJVElPTiBPRiBwZ3RibF9kZGxfc3RyLnAKKyAgICAo Q09OU1RSQUlOVCBjaGsgQ0hFQ0sgKG5vdGUgPD4gJ3BndGJsX2RkbF9zdHIuc2VjcmV0JykpCisg ICAgRk9SIFZBTFVFUyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3Rh YmxlX2RkbCgncGd0YmxfZGRsX3N0ci5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3NjaGVtYV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BIHBndGJsX2Rk bF9zdHIgQ0FTQ0FERTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSBtdXN0IE5PVCBjb3Jy dXB0IGRvdWJsZS1xdW90ZWQgaWRlbnRpZmllcnMKKy0tIHdob3NlIGNvbnRlbnRzIGhhcHBlbiB0 byBjb250YWluIHRoZSBzY2hlbWEgbmFtZSBmb2xsb3dlZCBieSBhIGRvdAorLS0gKGZvciBleGFt cGxlIGEgY29sdW1uIGxpdGVyYWxseSBuYW1lZCAiPHNjaGVtYT4ud2VpcmQiIGluc2lkZSB0aGF0 CistLSBzY2hlbWEpLiAgVGhlIGluLWlkZW50IHN0YXRlIG9mIHRoZSBwcmVmaXggc3RyaXBwZXIg cHJlc2VydmVzIHRoZW0KKy0tIHZlcmJhdGltLgorQ1JFQVRFIFNDSEVNQSBwZ3RibF9kZGxfcWlk OworQ1JFQVRFIFRBQkxFIHBndGJsX2RkbF9xaWQucCAoaWQgaW50LCAicGd0YmxfZGRsX3FpZC53 ZWlyZCIgaW50KQorICAgIFBBUlRJVElPTiBCWSBSQU5HRSAoaWQpOworQ1JFQVRFIFRBQkxFIHBn dGJsX2RkbF9xaWQucGMgUEFSVElUSU9OIE9GIHBndGJsX2RkbF9xaWQucAorICAgIChDT05TVFJB SU5UIGNoayBDSEVDSyAoInBndGJsX2RkbF9xaWQud2VpcmQiID4gMCkpCisgICAgRk9SIFZBTFVF UyBGUk9NICgwKSBUTyAoMTAwKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncGd0 YmxfZGRsX3FpZC5wYyc6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjaGVt YV9xdWFsaWZpZWQnLCAnZmFsc2UnKTsKK0RST1AgU0NIRU1BIHBndGJsX2RkbF9xaWQgQ0FTQ0FE RTsKKworLS0gc2NoZW1hX3F1YWxpZmllZD1mYWxzZSB3aGVuIHRoZSBiYXNlIHNjaGVtYSBuYW1l IGl0c2VsZiByZXF1aXJlcworLS0gcXVvdGluZyAoaXRzIHByZWZpeCBzdGFydHMgd2l0aCAiKS4g IEJvdGggZm9ybXMgb2YgdGhlIHByZWZpeCAtCistLSBiYXJlLWxvd2VyY2FzZSBhbmQgcXVvdGVk IC0gbXVzdCBiZSBzdHJpcHBlZCBmcm9tIG91dGVyCistLSBBTFRFUiBUQUJMRSAvIE9OIC8gQ1JF QVRFIElOREVYIHByZWZpeGVzLCB3aGlsZSBpbm5lciBxdW90ZWQKKy0tIGlkZW50aWZpZXJzIHRo YXQgaGFwcGVuIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBtdXN0IGJlIHByZXNlcnZlZC4KK0NSRUFU RSBTQ0hFTUEgIlBnVGJsLURkbC1RIjsKK0NSRUFURSBUQUJMRSAiUGdUYmwtRGRsLVEiLiJUIiAo aWQgaW50LCB2YWwgaW50LAorICAgIENPTlNUUkFJTlQgY2hrIENIRUNLICh2YWwgPiAwKSk7CitD UkVBVEUgSU5ERVggIlRfdmFsX2lkeCIgT04gIlBnVGJsLURkbC1RIi4iVCIgKHZhbCk7CitTRUxF Q1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJyJQZ1RibC1EZGwtUSIuIlQiJzo6cmVnY2xhc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX3F1YWxpZmllZCcsICdmYWxzZScpOwor RFJPUCBTQ0hFTUEgIlBnVGJsLURkbC1RIiBDQVNDQURFOworCistLSBFcnJvcjogbm90IGFuIG9y ZGluYXJ5IG9yIHBhcnRpdGlvbmVkIHRhYmxlLgorQ1JFQVRFIFZJRVcgdiBBUyBTRUxFQ1QgMSBB UyB4OworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCd2Jzo6cmVnY2xhc3MpOworCitD UkVBVEUgU0VRVUVOQ0UgczsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncyc6OnJl Z2NsYXNzKTsKKworLS0gTlVMTCBhcmd1bWVudCByZXR1cm5zIG5vIHJvd3MuCitTRUxFQ1QgKiBG Uk9NIHBnX2dldF90YWJsZV9kZGwoTlVMTCk7CisKKy0tIFVucmVjb2duaXplZCBvcHRpb24uCitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdib2d1cycs ICd0cnVlJyk7CisKKy0tIE9kZCBudW1iZXIgb2YgdmFyaWFkaWMgYXJncy4KK1NFTEVDVCAqIEZS T00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ3ByZXR0eScpOworCistLSBS RVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHZhbGlkYXRpb246IGlmIHRoZSByZWZlcmVuY2Vk IGluZGV4CistLSB3b3VsZCBub3QgYmUgZW1pdHRlZCAoYmVjYXVzZSBpdHMgc291cmNlIGtpbmQg aXMgc3VwcHJlc3NlZCkgYnV0CistLSByZXBsaWNhX2lkZW50aXR5IGl0c2VsZiB3b3VsZCBiZSwg dGhlIGZ1bmN0aW9uIHJhaXNlcyBhbiBlcnJvciBzbworLS0gdGhlIGVtaXR0ZWQgRERMIG5ldmVy IGRhbmdsZXMuICBFeGVyY2lzZSBhbGwgdGhyZWUgY29uc3RyYWludC1iYWNrZWQKKy0tIGZvcm1z IChQSywgVU5JUVVFLCBFWENMVVNJT04pIGFuZCBhIGJhcmUgQ1JFQVRFIFVOSVFVRSBJTkRFWCwg aW4KKy0tIGJvdGggdGhlIGV4Y2VwdC1saXN0IGFuZCBvbmx5LWxpc3Qgc2hhcGVzLgorLS0KKy0t IFBLLWJhY2tlZDogZXhjZXB0PXByaW1hcnlfa2V5IHdpdGhvdXQgZXhjZXB0PXJlcGxpY2FfaWRl bnRpdHkuCitDUkVBVEUgVEFCTEUgcmlfcGtfZXhjbCAoYSBpbnQgUFJJTUFSWSBLRVkpOworQUxU RVIgVEFCTEUgcmlfcGtfZXhjbCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVYIHJpX3BrX2V4 Y2xfcGtleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncmlfcGtfZXhjbCc6OnJl Z2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdleGNlcHQnLCAncHJpbWFyeV9rZXknKTsKKy0tIFNhbWUgY2FsbCBidXQgYWxzbyBleGNsdWRp bmcgcmVwbGljYV9pZGVudGl0eSBzdWNjZWVkcy4KK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmlfcGtfZXhjbCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAncHJpbWFyeV9rZXkscmVwbGljYV9pZGVu dGl0eScpOworRFJPUCBUQUJMRSByaV9wa19leGNsOworCistLSBVTklRVUUtY29uc3RyYWludC1i YWNrZWQgcmVwbGljYSBpZGVudGl0eSBpbmRleC4KK0NSRUFURSBUQUJMRSByaV91bmlxX2V4Y2wg KGEgaW50IE5PVCBOVUxMIFVOSVFVRSwgYiBpbnQpOworQUxURVIgVEFCTEUgcmlfdW5pcV9leGNs IFJFUExJQ0EgSURFTlRJVFkgVVNJTkcgSU5ERVggcmlfdW5pcV9leGNsX2Ffa2V5OworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpyZWdjbGFzcywgJ293bmVy JywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhjZXB0JywgJ3Vu aXF1ZScpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV91bmlxX2V4Y2wnOjpy ZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnZXhjZXB0JywgJ3VuaXF1ZSxyZXBsaWNhX2lkZW50aXR5Jyk7CitEUk9QIFRBQkxFIHJpX3Vu aXFfZXhjbDsKKworLS0gQmFyZSBDUkVBVEUgVU5JUVVFIElOREVYIChubyBiYWNraW5nIGNvbnN0 cmFpbnQpIHVzZWQgYXMgUkVQTElDQQorLS0gSURFTlRJVFk6IHRoZSBpbmRleCBpcyBlbWl0dGVk IGJ5IHRoZSAiaW5kZXgiIGtpbmQsIHNvIGV4Y2x1ZGluZworLS0gImluZGV4IiB3aXRob3V0IGFs c28gZXhjbHVkaW5nICJyZXBsaWNhX2lkZW50aXR5IiBtdXN0IGVycm9yLgorQ1JFQVRFIFRBQkxF IHJpX2lkeF9leGNsIChhIGludCBOT1QgTlVMTCwgYiBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRF WCByaV9pZHhfZXhjbF9hX3VuaXEgT04gcmlfaWR4X2V4Y2wgKGEpOworQUxURVIgVEFCTEUgcmlf aWR4X2V4Y2wgUkVQTElDQSBJREVOVElUWSBVU0lORyBJTkRFWCByaV9pZHhfZXhjbF9hX3VuaXE7 CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3JpX2lkeF9leGNsJzo6cmVnY2xhc3Ms ICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2Vw dCcsICdpbmRleCcpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9pZHhfZXhj bCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdleGNlcHQnLCAnaW5kZXgscmVwbGljYV9pZGVudGl0eScpOworRFJPUCBUQUJMRSBy aV9pZHhfZXhjbDsKKworLS0gSW5jbHVkZS1zaWRlIGFuYWxvZzogb25seT1yZXBsaWNhX2lkZW50 aXR5IG11c3QgaW5jbHVkZSB0aGUga2luZAorLS0gdGhhdCBlbWl0cyB0aGUgaW5kZXgsIG9yIHRo ZSBmdW5jdGlvbiBlcnJvcnMuCitDUkVBVEUgVEFCTEUgcmlfb25seSAoYSBpbnQgTk9UIE5VTEwg VU5JUVVFLCBiIGludCk7CitBTFRFUiBUQUJMRSByaV9vbmx5IFJFUExJQ0EgSURFTlRJVFkgVVNJ TkcgSU5ERVggcmlfb25seV9hX2tleTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgn cmlfb25seSc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdvbmx5JywgJ3JlcGxpY2FfaWRlbnRpdHknKTsKKy0tIEluY2x1ZGluZyBi b3RoIGtpbmRzIHN1Y2NlZWRzLgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdyaV9v bmx5Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ29ubHknLCAndW5pcXVlLHJlcGxpY2FfaWRlbnRpdHknKTsKK0RST1AgVEFCTEUg cmlfb25seTsKKworLS0gUGVyLWtpbmQgb25seSAvIGV4Y2VwdCBjb3ZlcmFnZS4gIEZvciBlYWNo IGtpbmQgaW4gdGhlIHZvY2FidWxhcnksCistLSB2ZXJpZnkgdGhhdCBvbmx5PUsgZW1pdHMganVz dCB0aGF0IGtpbmQncyBvdXRwdXQgYW5kIHRoYXQgZXhjZXB0PUsKKy0tIG9taXRzIGp1c3QgdGhh dCBraW5kJ3Mgb3V0cHV0LiAgS2luZHMgd2l0aCBubyBmaXh0dXJlIGFib3ZlICh0cmlnZ2VyLAor LS0gcG9saWN5KSBhcmUgc3RpbGwgcmVjb2duaXplZCBidXQgY3VycmVudGx5IGVtaXQgbm90aGlu Zzsgb25seT1LCistLSByZXR1cm5zIHplcm8gcm93cyBmb3IgdGhlbS4gIEZpeHR1cmVzIHVzZWQ6 CistLSAgIGlkeGQ6IFBLICsgdHdvIHNlY29uZGFyeSBDUkVBVEUgSU5ERVgKKy0tICAgY29uczog UEsgKyBVTklRVUUgKyBDSEVDSyArIEZLIChjb25zdHJhaW50LWJhY2tlZCkKKy0tICAgcnQ6ICAg Q1JFQVRFIFJVTEUKKy0tICAgc3R4OiAgQ1JFQVRFIFNUQVRJU1RJQ1MKKy0tICAgcmxzOiAgRU5B QkxFL0ZPUkNFIFJPVyBMRVZFTCBTRUNVUklUWQorLS0gICByaV9mdWxsOiBSRVBMSUNBIElERU5U SVRZIEZVTEwgKG5vIHNvdXJjZS1raW5kIGRlcGVuZGVuY3kpCitDUkVBVEUgVEFCTEUgZXhjbF9m aXggKHJuZyBpbnQ0cmFuZ2UsCisgICAgRVhDTFVERSBVU0lORyBnaXN0IChybmcgV0lUSCAmJikp OworCistLSBvbmx5PUs6IGVtaXQgb25seSBraW5kIEsncyBzdGF0ZW1lbnRzLgorU0VMRUNUICog RlJPTSBwZ19nZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAnaW5kZXgnKTsKK1NFTEVD VCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFs c2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ3ByaW1hcnlfa2V5 Jyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2NvbnMnOjpyZWdjbGFzcywgJ293 bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seScsICd1 bmlxdWUnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdj bGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn b25seScsICdleGNsdXNpb24nKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgncnQn OjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnb25seScsICdydWxlJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ3N0 eCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdvbmx5JywgJ3N0YXRpc3RpY3MnKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxl X2RkbCgncmxzJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ29ubHknLCAncmxzJyk7CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJs ZV9kZGwoJ3JpX2Z1bGwnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnb25seScsICdyZXBsaWNhX2lkZW50aXR5Jyk7CistLSB0cmln Z2VyIC8gcG9saWN5IGFyZSBzY2FmZm9sZGVkIGJ1dCBub3QgeWV0IGVtaXR0aW5nOyBvbmx5PUsg aXMgYQorLS0gdmFsaWQgZmlsdGVyIHRoYXQgcHJvZHVjZXMgemVybyByb3dzLiAgV2hlbiB0aGUg c3RhbmRhbG9uZQorLS0gcGdfZ2V0X3RyaWdnZXJfZGRsIC8gcGdfZ2V0X3BvbGljeV9kZGwgaGVs cGVycyBsYW5kLCB0aGVzZSBxdWVyaWVzCistLSBzdGFydCByZXR1cm5pbmcgcm93cyB3aXRob3V0 IGFuIEFQSSBjaGFuZ2UuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6 cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29ubHknLCAndHJpZ2dlcicpOworU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdvbmx5JywgJ3BvbGljeScpOworCistLSBleGNlcHQ9SzogZW1pdCBldmVyeXRo aW5nIGV4Y2VwdCBraW5kIEsncyBzdGF0ZW1lbnRzLiAgUEsvVU5JUVVFLworLS0gSU5ERVggYXJl IGV4ZXJjaXNlZCBvbiB0YWJsZXMgd2l0aG91dCBSRVBMSUNBIElERU5USVRZIFVTSU5HIElOREVY CistLSBzbyB0aGUgdmFsaWRhdGlvbiBkb2VzIG5vdCB0cmlwLgorU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICdwcmltYXJ5X2tleScpOworU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxz ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdCcsICd1bmlxdWUnKTsK K1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnY29ucyc6OnJlZ2NsYXNzLCAnb3duZXIn LCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAnY2hl Y2snKTsKK1NFTEVDVCAqIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnZXhjbF9maXgnOjpyZWdjbGFz cywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhj ZXB0JywgJ2V4Y2x1c2lvbicpOworLS0gZXhjZXB0PXRhYmxlIHN1cHByZXNzZXMgdGhlIENSRUFU RSBUQUJMRSArIE9XTkVSICsgY2hpbGQtZGVmYXVsdAorLS0gU0VUIERFRkFVTFQgKyBhdHRvcHRp b25zIHBhc3NlcywgbGVhdmluZyBvbmx5IHRoZSBzdWItb2JqZWN0IHBhc3Nlcy4KK1NFTEVDVCAq IEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnaWR4ZCc6OnJlZ2NsYXNzLCAnb3duZXInLCAnZmFsc2Un LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHQnLCAndGFibGUnKTsKKwor LS0gTXVsdGkta2luZCBjb21wb3NpdGlvbnMuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9k ZGwoJ2lkeGQnOjpyZWdjbGFzcywgJ293bmVyJywgJ2ZhbHNlJywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnb25seScsICd0YWJsZSxpbmRleCcpOworU0VMRUNUICogRlJPTSBwZ19n ZXRfdGFibGVfZGRsKCdjb25zJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncHJpbWFyeV9rZXksZm9yZWlnbl9rZXkn KTsKKy0tIER1cGxpY2F0ZSBlbnRyaWVzIGluIHRoZSBsaXN0IGFyZSBzaWxlbnRseSBkZS1kdXBs aWNhdGVkIGJ5IHRoZQorLS0gQml0bWFwc2V0LgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVf ZGRsKCdpZHhkJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ29ubHknLCAnaW5kZXgsaW5kZXgnKTsKKworRFJPUCBUQUJMRSBleGNs X2ZpeDsKKworLS0gb25seT1LIG9uIGEgdGFibGUgdGhhdCBkb2VzIG5vdCBoYXZlIGFueSBLIG9m IHRoYXQga2luZCBpcyBhIHZhbGlkCistLSBmaWx0ZXIgYW5kIHJldHVybnMgemVybyByb3dzLiAg VGVzdGVkIHByZXZpb3VzbHkgd2l0aCBmb3JlaWduX2tleQorLS0gb24gJ3JlZmQnOyBoZXJlIGFs c28gcnVsZSwgc3RhdGlzdGljcywgcmxzLCByZXBsaWNhX2lkZW50aXR5LCBhbmQKKy0tIGV4Y2x1 c2lvbiBvbiAnYmFzaWMnICh3aGljaCBoYXMgb25seSBQSyArIGNvbHVtbnMpLgorU0VMRUNUIGNv dW50KCopIEFTIHJ1bGVfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVn Y2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnb25seScs ICdydWxlJyk7CitTRUxFQ1QgY291bnQoKikgQVMgc3RhdHNfcm93cworICBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAg ICAgICAgICAgICAgICAnb25seScsICdzdGF0aXN0aWNzJyk7CitTRUxFQ1QgY291bnQoKikgQVMg cmxzX3Jvd3MKKyAgRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb3du ZXInLCAnZmFsc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHknLCAncmxzJyk7CitT RUxFQ1QgY291bnQoKikgQVMgcmlfcm93cworICBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2lj Jzo6cmVnY2xhc3MsICdvd25lcicsICdmYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAn b25seScsICdyZXBsaWNhX2lkZW50aXR5Jyk7CitTRUxFQ1QgY291bnQoKikgQVMgZXhjbF9yb3dz CisgIEZST00gcGdfZ2V0X3RhYmxlX2RkbCgnYmFzaWMnOjpyZWdjbGFzcywgJ293bmVyJywgJ2Zh bHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5JywgJ2V4Y2x1c2lvbicpOworCist LSBJbnB1dC12YWxpZGF0aW9uIGVkZ2UgY2FzZXMgZm9yIHRoZSBjb21tYS1zZXBhcmF0ZWQga2lu ZCBsaXN0LiAgQWxsCistLSBvZiB0aGVzZSByYWlzZSBhbiBlcnJvciBhdCB0aGUgdmFyaWFkaWMt cGFyc2Ugc3RlcDsgdGhlIGZ1bmN0aW9uCistLSBuZXZlciByZWFjaGVzIHJlbGF0aW9uIG9wZW4u CistLSBFbXB0eSBsaXN0OgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6 OnJlZ2NsYXNzLCAnb25seScsICcnKTsKKy0tIFdoaXRlc3BhY2Utb25seSBsaXN0OgorU0VMRUNU ICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICcgICAn KTsKKy0tIFRyYWlsaW5nIGNvbW1hOgorU0VMRUNUICogRlJPTSBwZ19nZXRfdGFibGVfZGRsKCdi YXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICdpbmRleCwnKTsKKy0tIExlYWRpbmcgY29tbWE6CitT RUxFQ1QgKiBGUk9NIHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5Jywg JyxpbmRleCcpOworLS0gQ29uc2VjdXRpdmUgY29tbWFzOgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICdpbmRleCwscnVsZScpOworLS0g VG9rZW4gY29udGFpbmluZyBpbm5lciB3aGl0ZXNwYWNlOgorU0VMRUNUICogRlJPTSBwZ19nZXRf dGFibGVfZGRsKCdiYXNpYyc6OnJlZ2NsYXNzLCAnb25seScsICdmb3JlaWduIGtleScpOworLS0g TlVMTCB2YWx1ZSBmb3IgYSBub24tTlVMTCBvcHRpb246CitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsICdvbmx5JywgTlVMTCk7CistLSBPcHRpb24gc3Bl Y2lmaWVkIHR3aWNlIGFzIHNlcGFyYXRlIG5hbWUvdmFsdWUgcGFpcnM6CitTRUxFQ1QgKiBGUk9N IHBnX2dldF90YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ29ubHknLCAnaW5kZXgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdvbmx5JywgJ3J1bGUnKTsKKy0tIFNhbWUga2luZCBzcGVjaWZpZWQgdGhyb3VnaCBib3Ro IG9wdGlvbnMgaXMgc3RpbGwgbXV0ZXgtcmVqZWN0ZWQuCitTRUxFQ1QgKiBGUk9NIHBnX2dldF90 YWJsZV9kZGwoJ2Jhc2ljJzo6cmVnY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ29ubHknLCAnaW5kZXgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNl cHQnLCAncnVsZScpOworCistLSBSb3VuZC10cmlwIHZlcmlmaWNhdGlvbi4gIEZvciBldmVyeSB0 ZXN0IHRhYmxlLCBjYXB0dXJlIHRoZSBEREwgdGhlCistLSBmdW5jdGlvbiBlbWl0cywgZHJvcCB0 aGUgc2NoZW1hLCByZXBsYXkgZWFjaCB0YWJsZSdzIERETCBpbgorLS0gZGVwZW5kZW5jeSBvcmRl ciwgYW5kIGNvbmZpcm0gdGhhdCBwZ19nZXRfdGFibGVfZGRsIG9uIHRoZSByZWNyZWF0ZWQKKy0t IHJlbGF0aW9uIG1hdGNoZXMgdGhlIG9yaWdpbmFsIGxpbmUtZm9yLWxpbmUuICBUaGUgZmluYWwg U0VMRUNUIG11c3QKKy0tIHJldHVybiB6ZXJvIHJvd3MuCitDUkVBVEUgVEVNUCBUQUJMRSBwZ3Ri bF9kZGxfcnRfb3JpZyAobmFtZSB0ZXh0LCBvcmQgaW50LCBsaW5lIHRleHQpOworSU5TRVJUIElO VE8gcGd0YmxfZGRsX3J0X29yaWcKK1NFTEVDVCB0Lm5hbWUsIG8ub3JkLCBvLmxpbmUKK0ZST00g KFZBTFVFUworICAgICAgICAoJ2Jhc2ljJyksICgnaWRfY29scycpLCAoJ2lkX2N1c3RvbScpLCAo J2dlbl9jb2xzJyksICgnZ2VuX3ZpcnR1YWwnKSwgKCdzdG9yYWdlX2NvbHMnKSwKKyAgICAgICAg KCdyZWZkJyksICgnY29ucycpLCAoJ2lkeGQnKSwKKyAgICAgICAgKCdwYXInKSwgKCdjaCcpLCAo J2F0dG9wdCcpLAorICAgICAgICAoJ3BhcnRlZF9yYW5nZScpLCAoJ3BhcnRlZF9yYW5nZV8xJyks ICgncGFydGVkX3JhbmdlX2RlZicpLAorICAgICAgICAoJ3BhcnRlZF9oYXNoJyksICgncGFydGVk X2hhc2hfMCcpLAorICAgICAgICAoJ3BhcnRlZF9saXN0JyksCisgICAgICAgICgncnRfbG9nJyks ICgncnQnKSwKKyAgICAgICAgKCdzdHgnKSwgKCdybHMnKSwgKCdyaV9mdWxsJyksICgncmlfaWR4 JyksICgndW5vJykKKyAgICAgKSBBUyB0KG5hbWUpLAorICAgICBMQVRFUkFMIHBnX2dldF90YWJs ZV9kZGwoKCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ293bmVyJywgJ2ZhbHNlJykgV0lUSCBPUkRJTkFMSVRZIG8o bGluZSwgb3JkKTsKKworRE8gJCQKK0RFQ0xBUkUKKyAgICB0YWJsZXMgQ09OU1RBTlQgdGV4dFtd IDo9IEFSUkFZWworICAgICAgICAnYmFzaWMnLCAnaWRfY29scycsICdpZF9jdXN0b20nLCAnZ2Vu X2NvbHMnLCAnZ2VuX3ZpcnR1YWwnLCAnc3RvcmFnZV9jb2xzJywKKyAgICAgICAgJ3JlZmQnLCAn Y29ucycsICdpZHhkJywKKyAgICAgICAgJ3BhcicsICdjaCcsICdhdHRvcHQnLAorICAgICAgICAn cGFydGVkX3JhbmdlJywgJ3BhcnRlZF9yYW5nZV8xJywgJ3BhcnRlZF9yYW5nZV9kZWYnLAorICAg ICAgICAncGFydGVkX2hhc2gnLCAncGFydGVkX2hhc2hfMCcsCisgICAgICAgICdwYXJ0ZWRfbGlz dCcsCisgICAgICAgICdydF9sb2cnLCAncnQnLAorICAgICAgICAnc3R4JywgJ3JscycsICdyaV9m dWxsJywgJ3JpX2lkeCcsICd1bm8nCisgICAgXTsKKyAgICB0IHRleHQ7CisgICAgc3RtdCB0ZXh0 OworQkVHSU4KKyAgICBEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOworICAgIENS RUFURSBTQ0hFTUEgcGd0YmxfZGRsX3Rlc3Q7CisgICAgRk9SRUFDSCB0IElOIEFSUkFZIHRhYmxl cyBMT09QCisgICAgICAgIEZPUiBzdG10IElOCisgICAgICAgICAgICBTRUxFQ1QgbGluZSBGUk9N IHBndGJsX2RkbF9ydF9vcmlnIFdIRVJFIG5hbWUgPSB0IE9SREVSIEJZIG9yZAorICAgICAgICBM T09QCisgICAgICAgICAgICBFWEVDVVRFIHN0bXQ7CisgICAgICAgIEVORCBMT09QOworICAgIEVO RCBMT09QOworRU5EICQkOworCitXSVRIIGFmdGVyX2RkbCBBUyAoCisgICAgU0VMRUNUIHQubmFt ZSwgby5vcmQsIG8ubGluZQorICAgIEZST00gKFNFTEVDVCBESVNUSU5DVCBuYW1lIEZST00gcGd0 YmxfZGRsX3J0X29yaWcpIEFTIHQsCisgICAgICAgICBMQVRFUkFMIHBnX2dldF90YWJsZV9kZGwo KCdwZ3RibF9kZGxfdGVzdC4nIHx8IHQubmFtZSk6OnJlZ2NsYXNzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdvd25lcicsICdmYWxzZScpIFdJVEggT1JESU5BTElUWSBvKGxp bmUsIG9yZCkKKykKKyhTRUxFQ1QgJ21pc3NpbmctaW4tY29weScgQVMga2luZCwgbmFtZSwgb3Jk LCBsaW5lIEZST00gcGd0YmxfZGRsX3J0X29yaWcKKyBFWENFUFQKKyBTRUxFQ1QgJ21pc3Npbmct aW4tY29weScsIG5hbWUsIG9yZCwgbGluZSBGUk9NIGFmdGVyX2RkbCkKK1VOSU9OIEFMTAorKFNF TEVDVCAnZXh0cmEtaW4tY29weScgQVMga2luZCwgbmFtZSwgb3JkLCBsaW5lIEZST00gYWZ0ZXJf ZGRsCisgRVhDRVBUCisgU0VMRUNUICdleHRyYS1pbi1jb3B5JywgbmFtZSwgb3JkLCBsaW5lIEZS T00gcGd0YmxfZGRsX3J0X29yaWcpCitPUkRFUiBCWSBraW5kLCBuYW1lLCBvcmQ7CisKKy0tIENs ZWFudXAuCitEUk9QIFNDSEVNQSBwZ3RibF9kZGxfdGVzdCBDQVNDQURFOwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdAppbmRleCBjNWRiNmNhNjcwNS4uM2RjOTNmNTQ2OGMgMTAwNjQ0Ci0tLSBhL3Ny Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CkBAIC0xNjQ1LDYgKzE2NDUsNyBAQCBMaXN0ZW5lckVudHJ5CiBMb0luZm8K IExvYWRTdG10CiBMb2NhbEJ1ZmZlckxvb2t1cEVudAorTG9jYWxOb3ROdWxsRW50cnkKIExvY2Fs UGdCYWNrZW5kU3RhdHVzCiBMb2NhbFRyYW5zYWN0aW9uSWQKIExvY2F0aW9uCkBAIC0zMTUwLDYg KzMxNTEsNyBAQCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUKIFRhYmxlRnVuY1R5 cGUKIFRhYmxlSW5mbworVGFibGVEZGxDb250ZXh0CiBUYWJsZUxpa2VDbGF1c2UKIFRhYmxlU2Ft cGxlQ2xhdXNlCiBUYWJsZVNjYW5EZXNjCi0tIAoyLjUxLjAKCg== --0000000000008b6d290655649298--