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 1vxQ4O-00D6An-2P for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 13:45:53 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxQ4L-0078lp-2E for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 13:45:50 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxQ4L-0078lg-0p for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 13:45:49 +0000 Received: from mail-yx1-xb12e.google.com ([2607:f8b0:4864:20::b12e]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxQ4I-00000000BkA-2Tss for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 13:45:49 +0000 Received: by mail-yx1-xb12e.google.com with SMTP id 956f58d0204a3-64ca09f2170so5719800d50.1 for ; Tue, 03 Mar 2026 05:45:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772545544; cv=none; d=google.com; s=arc-20240605; b=V59YoMQ4AQX7U7QQcfMjyx6rQ2LsyLydf1zebrpmgDYBKLqEuAYdQBI3JpvaMJgjS0 C181sG9+FQBAu1nM+20+EMg8IWWxHGU8RAO3QB3wk3AdmXYPf8FSaVwBmhTFdLaxmJXg Kdrhd3qvW1yb2m2jS6X1jWQ1NjpUhfxIkwAqVFvz+dOxJBJk/q71ly/oeej9jQrX8Uv3 P4DtQbS2WmTvtASZ59yYZQdsHcGxLRrVkJk726I81VHCIPcvw3CYZNOR2FOkhTn1s4ic MDmpAy46VrDERM/M+yAQNnzMOJRG3HTpt4r/zpGej4W78NDMhmA+KhsOIqctMUUID5Tr Tkbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=lJWCTVtbV5xVJpE3vmG/uuQTUGoN73Kqr11Wobtyjvg=; fh=eGhD8NE58EmIgD6b+gPO+CvU80MO/Q+yy1QKus3+4M4=; b=G3Gml2yvaFehcgzFTECRykZRqotrfhUilVVWe/DPjW4OvJZV7tr+zwU09fVSwkmu3X eR1wxtCyZLTAwY8pUD2yxcx1NvSnG2QB9FMzSddtpn6/bW5DcAld+XY8FEJGb72NZv7B pLYT43O6bpoXuxxyFev7Uu/TZIrYg/ry2ojxCyUifoTzE7CKAIueQ7XipLuvUQVzpqj3 Ix8Q2wY2crlpQCpaPWgzIa7ExU6b1bOT6U3l5add9kbXfWJlfFhTkADvCQJ6KrimphzB 4Q3+e0QUrJVNu76qi7AYurBYvrXS3QfYT9AeZNh9WeqbNQILeVdPw5GN57zdTL6f0xoT l9UQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772545544; x=1773150344; 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=lJWCTVtbV5xVJpE3vmG/uuQTUGoN73Kqr11Wobtyjvg=; b=Ma4jSOMYlcU7BFz3kejobFqbUNeLpWSNe/gzud8RrZbq93LyJtaV92vuQCgp1dRlBE j2nLWNrgrpdGUmVPoStOhc6gN4AGtHZY2qMasztF2YedKrlEZKPqliWGvKlLk7nnSjmf Ndu3tbZZ2xwpT/DU15LDHbEN8ox35ymwwe0YuKOZfF7+ZlVZRhLv3OqjDhuIoWH757MY rFY/fejFew2zfFgu7+3a1YpKiCfDG1Oj8lo2uz6ImKPpBwjv6SBcEyH1Au8FZt2Bae34 GpSDOZZ+yw9EA8YSvQFEMpPRgJpJAu/x6BGXvztrn406Q2nqd4v112Ga7qIUnz6pNGZ0 Gvgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772545544; x=1773150344; 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=lJWCTVtbV5xVJpE3vmG/uuQTUGoN73Kqr11Wobtyjvg=; b=RbKjScDiI/0JV1a48OcePZM1kk95T5I3DF8TysO3iUhT7mtKcKzb47sAektQ1halCW Uw/TvW6lZrKJ/NbP81LGDBXz+5B98FTpn6kRmD5kmnxLkPQ84AlscPciew46BXO6KCrd 0QTQZhpq+Ecg2cvN/B2uhj5t7zmkxfcysIMI/Es1hFhnzDOrsmRP00ryapCF7WQnSxOy TFb/bcN0FSm7I6f6RtyC1c6JnfCON24Kz2koRFrTqHKyCopLZHOsegEuA3Gq839gSA39 qy34MbGOSZtFCrv34/ANaqpuXfDphOCX8H/Pt1K87OI069W41x2i86vJ0rhvgTJZDk5K XiZg== X-Gm-Message-State: AOJu0Yxik7igaCq02dIP8FLyZ88ycITNQkNDqZ7mLrJwl5uolNaFSP5y 3bIyxj9LucTNrsmfBRhyopOERFNqWwmAtYgG/0ITVZrfqf+7ObZntL6pliPPRJ7G9UVE1VK1QCe oV5G+5b51qqush2xQsTRS1fQALHVRPQY= X-Gm-Gg: ATEYQzy2QO8Mxz60xTb1irnpsYPSA0KOfG+ZUQ4y1/mnRmPWTun6AjtqhkSaRJw+fYk pm3JrJ+pYN1VIpsaZxPJDjib6dqBL5PNPVjEI5KROc7Dc8LNZ00P2yZwN78EmSpvicNezHsG3Yl FU82eLNLaZ3/DMn6A9a2oXwk3P20wul7vWeyQH3YJw8AQ0RwHwDu74i6xJfLVxcpiy8ZX/wrWGx 1zm7I4raWF4KG2Zd30x/QpsJi2bLLEz/4OySDi8OzvepPseKkyP+E64VQ7rGr51+A9N8Wv+r3Tf vnyLskzP/vVdjctrwW/v2rulB123/G+yHkzNTW41XKruj+GsSU1FVZ+jKZWelfzMJ3VKjCgAmWR UPD9RdBQ0fNKqHxHPGnLgb9PbpeoXvhNOICcpVOnPHFj2XzNKc2nk6VX7Lg== X-Received: by 2002:a05:690e:408d:b0:64c:e0d8:412f with SMTP id 956f58d0204a3-64ce0d8418fmr5367977d50.83.1772545544497; Tue, 03 Mar 2026 05:45:44 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavel Stehule Date: Tue, 3 Mar 2026 14:45:07 +0100 X-Gm-Features: AaiRm506rwhHFQyqqEq67e0geyAatE-S6r0Ngch_58TYgbn5ZixquWYaFeJTrW0 Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Jim Jones Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000878214064c1eeb5d" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000878214064c1eeb5d Content-Type: multipart/alternative; boundary="000000000000878214064c1eeb5b" --000000000000878214064c1eeb5b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi =C3=BAt 3. 3. 2026 v 8:43 odes=C3=ADlatel Jim Jones napsal: > Hi Pavel, > > I quickly tested the patch, and I also could observe a ~3x performance > improvement! > > A few first impressions: > > ## in exec_stmt_foreach_json_a the boolean variable found is declared as > false, bit its value is never set to true until exec_set_found() is calle= d: > > /* > * Set the FOUND variable to indicate the result of executing the loop > * (namely, whether we looped one or more times). This must be set here s= o > * that it does not interfere with the value of the FOUND variable inside > * the loop processing itself. > */ > exec_set_found(estate, found); > > > Test: > > > DO $$ > DECLARE > x int; > BEGIN > FOREACH x IN JSON ARRAY '[1,2,3]' > LOOP > RAISE NOTICE 'x: %', x; > END LOOP; > > IF FOUND THEN > RAISE NOTICE 'FOUND is true'; > ELSE > RAISE NOTICE 'FOUND is false'; > END IF; > END; > $$; > NOTICE: x: 1 > NOTICE: x: 2 > NOTICE: x: 3 > NOTICE: FOUND is false > > fixed + regress tests > > ## Suggestion in the plpgsql.sgml > > The FOREACH loop is much like a > FOREACH loop, > > to > > "much like a regular FOREACH loop over arrays" > done > > ## Typo in comment > > /* > * We cannot to use fieldnames for tupdescentry, because > * these names can be suffixed by name of row variable. > ... > > We cannot to use > We cannot use > fixed > > > ## Nit pick > > These error messages are not wrong, but IMO a errhint/errdetail could > add some value here: > > ereport(ERROR, > (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > errmsg("cannot extract elements from a scalar"))); > > ereport(ERROR, > (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > errmsg("cannot extract elements from an object"))); > > Something like this perhaps? > > ereport(ERROR, > (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > errmsg("cannot extract elements from a scalar"), > errhint("FOREACH IN JSON ARRAY requires an array value."))); > > ereport(ERROR, > (errcode(ERRCODE_INVALID_PARAMETER_VALUE), > errmsg("FOREACH expression must evaluate to a JSON array"), > errdetail("Cannot iterate over a scalar value."))); > > I rewrote it to if (JB_ROOT_IS_SCALAR(jb)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("FOREACH expression must evaluate to a JSON array")= , errhint("Cannot iterate over a scalar value."))); else if (JB_ROOT_IS_OBJECT(jb)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("FOREACH expression must evaluate to a JSON array")= , errdetail("Cannot iterate over a object value."))); Assert(JB_ROOT_IS_ARRAY(jb)); + regress tests > > Thanks for the patch! > Thank you for check Regards Pavel > > Best, Jim > --000000000000878214064c1eeb5b Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

=C3=BAt 3. 3. 2026 v=C2=A08:43 ode= s=C3=ADlatel Jim Jones <jim.jones@uni-muenster.de> napsal:
Hi Pavel,

I quickly tested the patch, and I also could observe a ~3x performance
improvement!

A few first impressions:

## in exec_stmt_foreach_json_a the boolean variable found is declared as false, bit its value is never set to true until exec_set_found() is called:=

/*
=C2=A0* Set the FOUND variable to indicate the result of executing the loop=
=C2=A0* (namely, whether we looped one or more times). This must be set her= e so
=C2=A0* that it does not interfere with the value of the FOUND variable ins= ide
=C2=A0* the loop processing itself.
=C2=A0*/
exec_set_found(estate, found);


Test:


DO $$
DECLARE
=C2=A0 x int;
BEGIN
=C2=A0 FOREACH x IN JSON ARRAY '[1,2,3]'
=C2=A0 LOOP
=C2=A0 =C2=A0 RAISE NOTICE 'x: %', x;
=C2=A0 END LOOP;

=C2=A0 IF FOUND THEN
=C2=A0 =C2=A0 RAISE NOTICE 'FOUND is true';
=C2=A0 ELSE
=C2=A0 =C2=A0 RAISE NOTICE 'FOUND is false';
=C2=A0 END IF;
END;
$$;
NOTICE:=C2=A0 x: 1
NOTICE:=C2=A0 x: 2
NOTICE:=C2=A0 x: 3
NOTICE:=C2=A0 FOUND is false


fixed=C2=A0+ regress tests
= =C2=A0

## Suggestion in the plpgsql.sgml

The <literal>FOREACH</literal> loop is much like a
<literal>FOREACH</literal> loop,

to

"much like a regular <literal>FOREACH</literal> loop over = arrays"

done
=C2=A0

## Typo in comment

/*
=C2=A0* We cannot to use fieldnames for tupdescentry, because
=C2=A0* these names can be suffixed by name of row variable.
...

We cannot to use > We cannot use

fix= ed
=C2=A0


## Nit pick

These error messages are not wrong, but IMO a errhint/errdetail could
add some value here:

ereport(ERROR,
=C2=A0 =C2=A0 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 =C2=A0errmsg("cannot extract elements from a scalar"= ;)));

ereport(ERROR,
=C2=A0 =C2=A0 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 errmsg("cannot extract elements from an object")));=

Something like this perhaps?

ereport(ERROR,
=C2=A0 =C2=A0 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 =C2=A0errmsg("cannot extract elements from a scalar"= ;),
=C2=A0 =C2=A0 =C2=A0errhint("FOREACH IN JSON ARRAY requires an array v= alue.")));

ereport(ERROR,
=C2=A0 =C2=A0 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 =C2=A0errmsg("FOREACH expression must evaluate to a JSON= array"),
=C2=A0 =C2=A0 =C2=A0errdetail("Cannot iterate over a scalar value.&quo= t;)));


I rewrote it to

=C2=A0 =C2=A0 if (JB_ROOT_IS_SCALAR(jb))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = ereport(ERROR,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (= errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0errmsg("FOREACH expression must eval= uate to a JSON array"),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0errhint("Cannot iterate over a scalar value."= )));
=C2=A0 =C2=A0 else if (JB_ROOT_IS_OBJECT(jb))
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 ereport(ERROR,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
=C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0errmsg("FOREACH expressio= n must evaluate to a JSON array"),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0errdetail("Cannot iterate over a object= value.")));
=C2=A0
=C2=A0 =C2=A0 Assert(JB_ROOT_IS_ARRAY(jb));<= br>
+ regress tests

=C2=A0

Thanks for the patch!

Thank you for che= ck

Regards

Pavel
=C2=A0

Best, Jim
--000000000000878214064c1eeb5b-- --000000000000878214064c1eeb5d Content-Type: text/x-patch; charset="US-ASCII"; name="v20260303-4-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Disposition: attachment; filename="v20260303-4-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmanthma0 RnJvbSA4OTllZTE2ODlkOWRjNTM3YzU3YThlNzRlMDQwODhkNjM4Y2MzY2NjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gSlNPTiBBUlJBWQoKdGhpcyBwYXRjaCBpbnRyb2R1Y2Ug Rk9SRUFDSCBzY2FsYXJfdmFyIElOIEpTT04gQVJSQVkuIFRoZSBkZXNpZ24gaXMgYmFzZWQKb24g YmVoYXZlIG9mIGpzb25iX2FycmF5X2VsZW1lbnRzIGZ1bmN0aW9ucy4gSW4gdGhpcyBjYXNlLCBG T1JFQUNIIGVuZm9yY2UKY2FzdGluZyB0byB0YXJnZXQgdHlwZSAoYmVjYXVzZSB3ZSBrbm93IHRh cmdldCB0eXBlKSBhbmQgdHJ5IHRvIHJlZHVjZQpJTyBjYXN0aW5nLiBBdHRlbnRpb246IElPIGNh c3RpbmcgY2FuIGJlIG1vcmUgc3RyaWN0LCB0aGVuIGNhc3RpbmcgYmFzZWQKb24gY2FzdCBmdW5j dGlvbnMuCgpERUNMQVJFIHQgaW50OwpCRUdJTgogIC0tIHRoaXMgY2FuIHdvcmsgYmVjYXVzZSB3 ZSB1c2UgY2FzdCBudW1lcmljIC0+IGludAogIEZPUkVBQ0ggdCBJTiBKU09OIEFSUkFZICdbMSwy LDMuMTRdJwogIExPT1AKCiAgLS0gdGhpcyBmYWlscywgYmVjYXVzZSBJTyBjYXN0IGlzIHVzZWQs IGFuZCBpbnRlZ2VyIGlucHV0IGZ1bmN0aW9uCiAgLS0gYWxsb3dzIG9ubHkgZGlnaXRzCiAgRk9S RUFDIHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzLCIzLjE0Il0nCiAgTE9PUAoKQ29uY2VwdHVhbCBx dWVzdGlvbiBpcyBpZiBjYXN0aW5nIHNob3VsZCBiZSBzdHJpY3QgbGlrZSAib2xkIiBQb3N0Z3Jl U1FMCmpzb24gZnVuY3Rpb24gb3IgbGF4IGFzICJuZXciIFNRTC9KU09OIGZ1bmN0aW9ucz8gSSBj YW4gaW1hZ2luZSBsYXggbW9kZQphcyBkZWZhdWx0IHdpdGggcG9zc2liaWxpdHkgdG8gc3dpdGNo IHRvIHN0cmljdCBtb2RlICh0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZApub3cpOgoKICBGT1JFQUNI IHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IK ICBMT09QCiAgICAuLi4KClRoZSBwZXJmb3JtYW5jZSAoYmVzdCBjYXNlIGZvciBpdGVyYXRpb24g b3ZlciAxMDAwIGZpZWxkcyBhcnJheSkgaXMgYWJvdXQKNHggYmV0dGVyIHRoYW4gd2hlbiBGT1Ig SU4gU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRzIGlzIHVzZWQuCi0tLQogZG9jL3NyYy9zZ21s L3BscGdzcWwuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9wbC9wbHBn c3FsL3NyYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogLi4uL3BscGdzcWwv c3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQgIHwgMjUzICsrKysrKysrKysrKysrKwog c3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgICAgICAgICAgICAgICAgICB8IDI5NiArKysrKysr KysrKysrKysrKysKIHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9mdW5jcy5jICAgICAgICAgICAgICAg ICB8ICAyOSArKwogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueSAgICAgICAgICAgICAgICAg IHwgIDM5ICsrLQogc3JjL3BsL3BscGdzcWwvc3JjL3BsX3VucmVzZXJ2ZWRfa3dsaXN0LmggICAg IHwgICAxICsKIHNyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmggICAgICAgICAgICAgICAgICB8 ICAzNiArKy0KIHNyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbCAgICB8 IDIxNCArKysrKysrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCA5MjMgaW5zZXJ0aW9ucygrKSwg OCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvcGwvcGxwZ3NxbC9zcmMvZXhw ZWN0ZWQvcGxwZ3NxbF9mb3JlYWNoLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbC9wbHBn c3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dt bC9wbHBnc3FsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sCmluZGV4IDU2MWY2ZTUw ZDYzLi5hZDEyZDIxOTFhYSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3BscGdzcWwuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5zZ21sCkBAIC0yNzgwLDYgKzI3ODAsNjYgQEAgTk9U SUNFOiAgcm93ID0gezEwLDExLDEyfQogICAgIDwvcGFyYT4KICAgIDwvc2VjdDI+CiAKKyAgIDxz ZWN0MiBpZD0icGxwZ3NxbC1mb3JlYWNoLWpzb24tYXJyYXkiPgorICAgIDx0aXRsZT5Mb29waW5n IHRocm91Z2ggSlNPTiBhcnJheXM8L3RpdGxlPgorCisgICAgPHBhcmE+CisgICAgIFRoZSA8bGl0 ZXJhbD5GT1JFQUNIPC9saXRlcmFsPiBsb29wIGlzIG11Y2ggbGlrZSBhIHJlZ3VsYXIKKyAgICAg PGxpdGVyYWw+Rk9SRUFDSDwvbGl0ZXJhbD4gbG9vcCBvdmVyIGFycmF5cywKKyAgICAgYnV0IGlu c3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggZWxlbWVudHMgb2YgdGhlIGFycmF5LAorICAgICBp dCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiBhbiBKU09OIGFycmF5IHZhbHVlCisg ICAgIChleHByZXNzaW9uIGlzIGludGVybmFseSBjYXN0ZWQgdG8ganNvbmIgdHlwZSkuCisKKzxz eW5vcHNpcz4KKzxvcHRpb25hbD4gJmx0OyZsdDs8cmVwbGFjZWFibGU+bGFiZWw8L3JlcGxhY2Vh YmxlPiZndDsmZ3Q7IDwvb3B0aW9uYWw+CitGT1JFQUNIIDxyZXBsYWNlYWJsZT50YXJnZXQ8L3Jl cGxhY2VhYmxlPiBJTiBKU09OIEFSUkFZIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNl YWJsZT4gTE9PUAorICAgIDxyZXBsYWNlYWJsZT5zdGF0ZW1lbnRzPC9yZXBsYWNlYWJsZT4KK0VO RCBMT09QIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPmxhYmVsPC9yZXBsYWNlYWJsZT4gPC9vcHRp b25hbD47Cis8L3N5bm9wc2lzPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBUYXJn ZXQgY2FuIGJlIHNjYWxhciB2YXJpYWJsZSwgY29tcG9zaXRlIHZhcmlhYmxlIG9yIGxpc3Qgb2YK KyAgICAgc2NhbGFyIHZhcmlhYmxlcy4gV2hlbiB2YXJpYWJsZSBpcyBub3Qgc2NhbGFyLCB0aGVu IGFzc2lnbmVkIHZhbHVlCisgICAgIHNob3VsZCBiZSBhIEpTT04gb2JqZWN0IGFuZCB0aGUgSlNP TiBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBieSBuYW1lcy4KKworPHByb2dyYW1saXN0aW5nPgor Q1JFQVRFIEZVTkNUSU9OIHNjYW5fcm93cyhqc29uYikgUkVUVVJOUyB2b2lkIEFTICQkCitERUNM QVJFCisgIHggaW50OworQkVHSU4KKyAgRk9SRUFDSCB4IElOIEpTT04gQVJSQVkgJDEKKyAgTE9P UAorICAgIFJBSVNFIE5PVElDRSAncm93ID0gJScsIHg7CisgIEVORCBMT09QOworRU5EOworJCQg TEFOR1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUIHNjYW5fcm93cygnWzEsMiwzXScpOworTk9USUNF OiAgcm93ID0gMQorTk9USUNFOiAgcm93ID0gMgorTk9USUNFOiAgcm93ID0gMworCitDUkVBVEUg RlVOQ1RJT04gc2Nhbl9yb3dzKGpzb25iKSBSRVRVUk5TIHZvaWQgQVMgJCQKK0RFQ0xBUkUKKyAg eCBpbnQ7IHkgdmFyY2hhcjsKK0JFR0lOCisgIEZPUkVBQ0ggeCwgeSBJTiBKU09OIEFSUkFZICQx CisgIExPT1AKKyAgICBSQUlTRSBOT1RJQ0UgJ3g6ICUsIHk6ICUnLCB4LCB5OworICBFTkQgTE9P UDsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWw7CisKK1NFTEVDVCBzY2FuX3Jvd3MoJ1t7fSx7 IngiOjEwfSx7InkiOiJIaSJ9LHsieSI6IkhpIiwgIngiOjEwMDB9XScpOworTk9USUNFOiAgeDog Jmx0O05VTEwmZ3Q7LCB5OiAmbHQ7TlVMTCZndDsKK05PVElDRTogIHg6IDEwLCB5OiAmbHQ7TlVM TCZndDsKK05PVElDRTogIHg6ICZsdDtOVUxMJmd0OywgeTogSGkKK05PVElDRTogIHg6IDEwMDAs IHk6IEhpCis8L3Byb2dyYW1saXN0aW5nPgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDI+CisKICAg IDxzZWN0MiBpZD0icGxwZ3NxbC1lcnJvci10cmFwcGluZyI+CiAgICAgPHRpdGxlPlRyYXBwaW5n IEVycm9yczwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmls ZSBiL3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZQppbmRleCA2M2NiOTZmYWUzZS4uNWJkMGNm MzFkZmMgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZQorKysgYi9zcmMv cGwvcGxwZ3NxbC9zcmMvTWFrZWZpbGUKQEAgLTM1LDcgKzM1LDcgQEAgUkVHUkVTU19PUFRTID0g LS1kYm5hbWU9JChQTF9URVNUREIpCiBSRUdSRVNTID0gcGxwZ3NxbF9hcnJheSBwbHBnc3FsX2Nh Y2hlIHBscGdzcWxfY2FsbCBwbHBnc3FsX2NvbnRyb2wgXAogCXBscGdzcWxfY29weSBwbHBnc3Fs X2RvbWFpbiBwbHBnc3FsX21pc2MgXAogCXBscGdzcWxfcmVjb3JkIHBscGdzcWxfc2ltcGxlIHBs cGdzcWxfdHJhbnNhY3Rpb24gXAotCXBscGdzcWxfdHJhcCBwbHBnc3FsX3RyaWdnZXIgcGxwZ3Nx bF92YXJwcm9wcworCXBscGdzcWxfdHJhcCBwbHBnc3FsX3RyaWdnZXIgcGxwZ3NxbF92YXJwcm9w cyBwbHBnc3FsX2ZvcmVhY2gKIAogIyB3aGVyZSB0byBmaW5kIGdlbl9rZXl3b3JkbGlzdC5wbCBh bmQgc3Vic2lkaWFyeSBmaWxlcwogVE9PTFNESVIgPSAkKHRvcF9zcmNkaXIpL3NyYy90b29scwpk aWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5v dXQgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9mb3JlYWNoLm91dApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjI0ZTczMjc3ZjEKLS0tIC9kZXYv bnVsbAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9mb3JlYWNoLm91 dApAQCAtMCwwICsxLDI1MyBAQAorLS0gaW5wdXQgbXVzdCBiZSBhIEpTT04gYXJyYXkKK2RvICQk CitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5IE5V TEwgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7 CitlbmQ7CiskJDsKK0VSUk9SOiAgRk9SRUFDSCBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwK K0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQg Rk9SRUFDSCBvdmVyIGpzb24gYXJyYXkKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2lu CisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICcxMCcgLS0gZmFpbAorICBsb29wCisgICAgcmFp c2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK0VSUk9SOiAgRk9SRUFD SCBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUgdG8gYSBKU09OIGFycmF5CitISU5UOiAgQ2Fubm90 IGl0ZXJhdGUgb3ZlciBhIHNjYWxhciB2YWx1ZS4KK0NPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlv biBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgRk9SRUFDSCBvdmVyIGpzb24gYXJyYXkKK2Rv ICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5 ICd7fScgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKK0VSUk9SOiAgRk9SRUFDSCBleHByZXNzaW9uIG11c3QgZXZhbHVhdGUg dG8gYSBKU09OIGFycmF5CitERVRBSUw6ICBDYW5ub3QgaXRlcmF0ZSBvdmVyIGEgb2JqZWN0IHZh bHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUg NCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQorLS0gbnVtZXJpYyB0byBudW1lcmljCitkbyAk JAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAn WzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsK KyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAyMAorTk9USUNF OiAgMzAKK05PVElDRTogIDMuMTQKK05PVElDRTogIDxOVUxMPgorLS0gbnVtZXJpYyB0byBpbnQg YnkgY2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNv biBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNl ICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAy MAorTk9USUNFOiAgMzAKK05PVElDRTogIDMKK05PVElDRTogIDxOVUxMPgorLS0gdGVzdCBvZiBG T1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHgg aW4ganNvbiBhcnJheSAnWzEwXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7Cisg IGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7CiskJDsK K05PVElDRTogIDEwCitOT1RJQ0U6ICBGT1VORDogdAorLS0gdGVzdCBvZiBGT1VORCB2YXJpYWJs ZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJh eSAnW10nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKKyAg cmFpc2Ugbm90aWNlICdGT1VORDogJScsIGZvdW5kOworZW5kOworJCQ7CitOT1RJQ0U6ICBGT1VO RDogZgorLS0gY29udmVyc2lvbiAiMy4xNCIgdG8gaW50IHNob3VsZCB0byBmYWlsIGR1ZSBJTyBj YXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFy cmF5ICdbIjEwIiwyMCwzMCwiMy4xNCJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywg eDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAyMAorTk9U SUNFOiAgMzAKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50ZWdlcjog IjMuMTQiCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGlu ZSA0IGF0IEZPUkVBQ0ggb3ZlciBqc29uIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGJvb2xlYW47 CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW3RydWUsIGZhbHNlXScKKyAgbG9v cAorICBpZiB4IHRoZW4KKyAgICByYWlzZSBub3RpY2UgJ3RydWUnOworICBlbHNlCisgICAgcmFp c2Ugbm90aWNlICdmYWxzZSc7CisgIGVuZCBpZjsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05P VElDRTogIHRydWUKK05PVElDRTogIGZhbHNlCistLSBqc29uYiB0byBqc29uYgorZG8gJCQKK2Rl Y2xhcmUgeCBqc29uYjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAs MzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4Owor ICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6 ICAzMAorTk9USUNFOiAgMy4xNAorTk9USUNFOiAgbnVsbAorTk9USUNFOiAgIkhpIgorLS0ganNv bmIgdG8ganNvbgorZG8gJCQKK2RlY2xhcmUgeCBqc29uOworYmVnaW4KKyAgZm9yZWFjaCB4IGlu IGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAgbG9vcAorICAgIHJh aXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxMAor Tk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0CitOT1RJQ0U6ICBudWxsCitO T1RJQ0U6ICAiSGkiCistLSBpdGVyYXRpb24gb3ZlciBjb21wb3NpdGVzCitkbyAkJAorZGVjbGFy ZSB4IGludDsgeSBudW1lcmljOyB6IHZhcmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHksIHog aW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAi eCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUs IHo6ICUnLCB4LCB5LCB6OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgeDogPE5V TEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNFOiAgeDogPE5VTEw+LCB5OiA8TlVMTD4s IHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMuMTQsIHo6IDxOVUxMPgorTk9USUNFOiAg eDogMTAsIHk6IDMuMTQsIHo6IEhpCitjcmVhdGUgdHlwZSB0MyBhcyAoeCBpbnQsIHkgbnVtZXJp YywgeiB2YXJjaGFyKTsKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMg aW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAi eCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUs IHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg eDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNFOiAgeDogPE5VTEw+LCB5OiA8 TlVMTD4sIHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMuMTQsIHo6IDxOVUxMPgorTk9U SUNFOiAgeDogMTAsIHk6IDMuMTQsIHo6IEhpCitkbyAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4K KyAgZm9yZWFjaCBjLngsIGMueSwgYy56IGluIGpzb24gYXJyYXkgJ1t7fSwgeyJ6IjoiSGkifSwg eyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAg cmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiA8TlVMTD4K K05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiBIaQorTk9USUNFOiAgeDogPE5VTEw+ LCB5OiAzLjE0LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDEwLCB5OiAzLjE0LCB6OiBIaQorZHJv cCB0eXBlIHQzOworLS0gdGFyZ2V0IGNhbiBiZSBhIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGlu dFtdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1tbMSwyLDNdLFs0LDUsNl1d JworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHhbMV0sIHhbMl0sIHhbM107Cisg IGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxIDIgMworTk9USUNFOiAgNCA1IDYKK2Rv ICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJy YXkgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICByYWlzZSBu b3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6 ICBIaSBIZWxsbworTk9USUNFOiAgSGVsbG8gSGkKK2RvICQkCitkZWNsYXJlIHggdmFyY2hhcltd OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1tbIkhpIiwiSGVsbG8iXSxbIkhl bGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07 CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICBIaSBIZWxsbworTk9USUNFOiAgSGVs bG8gSGkKK2RvICQkCitkZWNsYXJlIHggaW50W107IHkgdmFyY2hhcjsKK2JlZ2luCisgIGZvcmVh Y2ggeCwgeSBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0sIHsieCI6WzQs NSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUsIHk6ICUn LCB4WzFdLCB4WzJdLCB4WzNdLCB5OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg MSAyIDMsIHk6IEhpCitOT1RJQ0U6ICA0IDUgNiwgeTogSGkKK2NyZWF0ZSB0eXBlIHQyIGFzICh4 IGludFtdLCB5IHZhcmNoYXIpOworZG8gJCQKK2RlY2xhcmUgYyB0MjsKK2JlZ2luCisgIGZvcmVh Y2ggYyBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0sIHsieCI6WzQsNSw2 XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUsIHk6ICUnLCBj LnhbMV0sIGMueFsyXSwgYy54WzNdLCBjLnk7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJ Q0U6ICAxIDIgMywgeTogSGkKK05PVElDRTogIDQgNSA2LCB5OiBIaQorZHJvcCB0eXBlIHQyOwpk aWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkIGIvc3JjL3BsL3BscGdz cWwvc3JjL21lc29uLmJ1aWxkCmluZGV4IDZmZjI3MDA2Y2ZjLi42MDllZWQ3YTI4ZCAxMDA2NDQK LS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkCisrKyBiL3NyYy9wbC9wbHBnc3Fs L3NyYy9tZXNvbi5idWlsZApAQCAtODgsNiArODgsNyBAQCB0ZXN0cyArPSB7CiAgICAgICAncGxw Z3NxbF90cmFwJywKICAgICAgICdwbHBnc3FsX3RyaWdnZXInLAogICAgICAgJ3BscGdzcWxfdmFy cHJvcHMnLAorICAgICAgJ3BscGdzcWxfZm9yZWFjaCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAt LWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfZXhlYy5jCmluZGV4IDg0NTUyZTMyYzg3Li4wMzYzOTBmMDdhNCAxMDA2NDQKLS0tIGEvc3Jj L3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYworKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhl Yy5jCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNs dWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVk ZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgpAQCAtMzA1LDYgKzMwNyw4IEBAIHN0YXRpYyBpbnQJZXhlY19zdG10 X2ZvcmMoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCSAgIFBMcGdTUUxfc3RtdF9m b3JjICpzdG10KTsKIHN0YXRpYyBpbnQJZXhlY19zdG10X2ZvcmVhY2hfYShQTHBnU1FMX2V4ZWNz dGF0ZSAqZXN0YXRlLAogCQkJCQkJCQlQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICpzdG10KTsKK3N0 YXRpYyBpbnQJZXhlY19zdG10X2ZvcmVhY2hfanNvbl9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3Rh dGUsCisJCQkJCQkJCQkgUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpzdG10KTsKIHN0YXRp YyBpbnQJZXhlY19zdG10X29wZW4oUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCSAg IFBMcGdTUUxfc3RtdF9vcGVuICpzdG10KTsKIHN0YXRpYyBpbnQJZXhlY19zdG10X2ZldGNoKFBM cGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCkBAIC0yMDc1LDYgKzIwNzksMTAgQEAgZXhlY19zdG10 cyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBMaXN0ICpzdG10cykKIAkJCQlyYyA9IGV4ZWNf c3RtdF9mb3JlYWNoX2EoZXN0YXRlLCAoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10KTsK IAkJCQlicmVhazsKIAorCQkJY2FzZSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9KU09OX0E6CisJCQkJ cmMgPSBleGVjX3N0bXRfZm9yZWFjaF9qc29uX2EoZXN0YXRlLCAoUExwZ1NRTF9zdG10X2ZvcmVh Y2hfanNvbl9hICopIHN0bXQpOworCQkJCWJyZWFrOworCiAJCQljYXNlIFBMUEdTUUxfU1RNVF9F WElUOgogCQkJCXJjID0gZXhlY19zdG10X2V4aXQoZXN0YXRlLCAoUExwZ1NRTF9zdG10X2V4aXQg Kikgc3RtdCk7CiAJCQkJYnJlYWs7CkBAIC0yOTk1LDYgKzMwMDMsMjQ5IEBAIGV4ZWNfc3RtdF9m b3JjKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIFBMcGdTUUxfc3RtdF9mb3JjICpzdG10KQog fQogCiAKKy8qCisgKiBDb252ZXJ0IEpzb25iVmFsdWUgdG8gRGF0dW0gdGhhdCBjYW4gYmUgYXNz aWduZWQgdG8gUExwZ1NRTF92YXIuCisgKi8KK3N0YXRpYyBEYXR1bQorSnNvbmJWYWx1ZVRvRGF0 dW0oSnNvbmJWYWx1ZSAqamJ2LAorCQkJCSAgT2lkICp0eXBpZCwgaW50MzIgKnR5cG1vZCwgYm9v bCAqaXNudWxsLAorCQkJCSAgT2lkIGV4cGVjdGVkX3R5cGlkLCBpbnQzMiBleHBlY3RlZF90eXBt b2QsCisJCQkJICB2b2lkICoqY2FjaGUsIE1lbW9yeUNvbnRleHQgbWN4dCkKK3sKKwlpZiAoZXhw ZWN0ZWRfdHlwaWQgPT0gSlNPTkJPSUQpCisJeworCQkqdHlwaWQgPSBKU09OQk9JRDsKKwkJKnR5 cG1vZCA9IC0xOworCQkqaXNudWxsID0gZmFsc2U7CisKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1 bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwl9CisJZWxzZSBpZiAoZXhwZWN0ZWRfdHlwaWQg PT0gSlNPTk9JRCkKKwl7CisJCUpzb25iCSAgICpqc29uYjsKKwkJY2hhcgkgICAqc3RyOworCisJ CS8qIHNlcmlhbGl6ZSBKc29uVmFsdWUgdG8gSlNPTiB0ZXh0ICovCisJCWpzb25iID0gSnNvbmJW YWx1ZVRvSnNvbmIoamJ2KTsKKwkJc3RyID0gSnNvbmJUb0NTdHJpbmcoTlVMTCwgJmpzb25iLT5y b290LCBWQVJTSVpFKGpzb25iKSk7CisKKwkJKnR5cGlkID0gVEVYVE9JRDsKKwkJKnR5cG1vZCA9 IC0xOworCQkqaXNudWxsID0gZmFsc2U7CisKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3Ry aW5nX3RvX3RleHQoc3RyKSk7CisJfQorCWVsc2UgaWYgKGpidi0+dHlwZSA9PSBqYnZOdWxsKQor CXsKKwkJKnR5cGlkID0gZXhwZWN0ZWRfdHlwaWQ7CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVs bCA9IHRydWU7CisKKwkJcmV0dXJuIChEYXR1bSkgMDsKKwl9CisJZWxzZSBpZiAoamJ2LT50eXBl ID09IGpidlN0cmluZykKKwl7CisJCSp0eXBpZCA9IFRFWFRPSUQ7CisJCSp0eXBtb2QgPSAtMTsK KwkJKmlzbnVsbCA9IGZhbHNlOworCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190 b190ZXh0X3dpdGhfbGVuKGpidi0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJCQkJCQkJCWpidi0+ dmFsLnN0cmluZy5sZW4pKTsKKwl9CisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidk51bWVyaWMp CisJeworCQkqdHlwaWQgPSBOVU1FUklDT0lEOworCQkqdHlwbW9kID0gLTE7CisJCSppc251bGwg PSBmYWxzZTsKKworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGpidi0+dmFsLm51bWVyaWMpOwor CX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2Qm9vbCkKKwl7CisJCSp0eXBpZCA9IEJPT0xP SUQ7CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVsbCA9IGZhbHNlOworCisJCXJldHVybiBCb29s R2V0RGF0dW0oamJ2LT52YWwuYm9vbGVhbik7CisJfQorCWVsc2UKKwl7CisJCUpzb25iCSpqc29u YjsKKwkJRGF0dW0JcmVzdWx0OworCisJCS8qIGlzbnVsbCBpbiBqc29uX3BvcHVsYXRlX3R5cGUg aXMgaW5vdXQgYXJndW1lbnQgKi8KKwkJKmlzbnVsbCA9IGZhbHNlOworCisJCWpzb25iID0gSnNv bmJWYWx1ZVRvSnNvbmIoamJ2KTsKKwkJcmVzdWx0ID0ganNvbl9wb3B1bGF0ZV90eXBlKFBvaW50 ZXJHZXREYXR1bShqc29uYiksIEpTT05CT0lELAorCQkJCQkJCQkJZXhwZWN0ZWRfdHlwaWQsIGV4 cGVjdGVkX3R5cG1vZCwKKwkJCQkJCQkJCWNhY2hlLCBtY3h0LAorCQkJCQkJCQkJaXNudWxsLCBm YWxzZSwgTlVMTCk7CisKKwkJKnR5cGlkID0gZXhwZWN0ZWRfdHlwaWQ7CisJCSp0eXBtb2QgPSBl eHBlY3RlZF90eXBtb2Q7CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CisKKy8qIC0tLS0tLS0t LS0KKyAqIGV4ZWNfc3RtdF9mb3JlYWNoX2pzb25fYQkJCUxvb3Agb3ZlciBlbGVtZW50cyBpbiBq c29uIGFycmF5CisgKgorICogV2hlbiB0YXJnZXQgaXMgYSBjb21wb3NpdGUsIHRoZW4gdGFyZ2V0 IGlzIHBvcHVsYXRlZCBsaWtlIGpzb25fdG9fcG9wdWxhdGVfcmVjb3JkLgorICoganNvbmIgZG9l c24ndCBwcmVzZXJ2ZSBhdHRyaWJ1dGUgb3JkZXIsIHNvIHBvc2l0aW9uIGJhc2VkIG1hcHBpbmcg YmV0d2VlbgorICogdGFyZ2V0IGFuZCBzb3VyY2UgY2FuIGJlIHBvc3NpYmx5IGRhbmdlcm91cyAo d2l0aCB1bmV4cGVjdGVkIGJlaGF2ZSkuCisgKiAtLS0tLS0tLS0tCisgKi8KK3N0YXRpYyBpbnQK K2V4ZWNfc3RtdF9mb3JlYWNoX2pzb25fYShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJ CQkJIFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqc3RtdCkKK3sKKwlPaWQJCQlleHBydHlw ZWlkOworCWludDMyCQlleHBydHlwbW9kOworCURhdHVtCQlleHByZGF0dW07CisJUExwZ1NRTF9k YXR1bSAqbG9vcF92YXI7CisJT2lkCQkJbG9vcF92YXJfdHlwaWQ7CisJaW50MzIJCWxvb3BfdmFy X3R5cG1vZDsKKwlPaWQJCQlsb29wX3Zhcl9jb2xsYXRpb247CisJSnNvbmIJICAgKmpiOworCUpz b25iSXRlcmF0b3IgKml0OworCUpzb25iVmFsdWUJamJ2OworCUpzb25iSXRlcmF0b3JUb2tlbiBy OworCU1lbW9yeUNvbnRleHQgc3RtdF9tY29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRl eHQ7CisJTWVtb3J5Q29udGV4dCB0bXBfY3h0OworCWJvb2wJCWZvdW5kID0gZmFsc2U7CisJYm9v bAkJaXNudWxsOworCWJvb2wJCXNraXBOZXN0ZWQgPSBmYWxzZTsKKwlpbnQJCQlyYyA9IFBMUEdT UUxfUkNfT0s7CisJdm9pZAkgICAqY2FjaGUgPSBOVUxMOworCisJLyogZ2V0IHRoZSB2YWx1ZSBv ZiB0aGUgZXhwcmVzc2lvbiAqLworCWV4cHJkYXR1bSA9IGV4ZWNfZXZhbF9leHByKGVzdGF0ZSwg c3RtdC0+ZXhwciwgJmlzbnVsbCwKKwkJCQkJCQkgICAmZXhwcnR5cGVpZCwgJmV4cHJ0eXBtb2Qp OworCWlmIChpc251bGwpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9O VUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJCQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24g bXVzdCBub3QgYmUgbnVsbCIpKSk7CisKKwkvKgorCSAqIERvIGFzIG11Y2ggYXMgcG9zc2libGUg b2YgdGhlIGNvZGUgYmVsb3cgaW4gc3RtdF9tY29udGV4dCwgdG8gYXZvaWQgYW55CisJICogbGVh a3MgZnJvbSBjYWxsZWQgc3Vicm91dGluZXMuICBXZSBuZWVkIGEgcHJpdmF0ZSBzdG10X21jb250 ZXh0IHNpbmNlCisJICogd2UnbGwgYmUgY2FsbGluZyBhcmJpdHJhcnkgc3RhdGVtZW50IGNvZGUu CisJICovCisJc3RtdF9tY29udGV4dCA9IGdldF9zdG10X21jb250ZXh0KGVzdGF0ZSk7CisJcHVz aF9zdG10X21jb250ZXh0KGVzdGF0ZSk7CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhzdG10X21jb250ZXh0KTsKKworCXRtcF9jeHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUo Q3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCQkiRk9SRUFDSCBJTiBKU09OIEFSUkFZIHRl bXBvcmFyeSBjeHQiLAorCQkJCQkJCQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKiBj YXN0IHRvIGpzb25iICovCisJZXhwcmRhdHVtID0gZXhlY19jYXN0X3ZhbHVlKGVzdGF0ZSwgZXhw cmRhdHVtLCAmaXNudWxsLAorCQkJCQkJCQlleHBydHlwZWlkLCBleHBydHlwbW9kLAorCQkJCQkJ CQlKU09OQk9JRCwgLTEpOworCisJQXNzZXJ0KCFpc251bGwpOworCisJLyoKKwkgKiBXZSBtdXN0 IGNvcHkgdGhlIGFycmF5IGludG8gc3RtdF9tY29udGV4dCwgZWxzZSBpdCB3aWxsIGRpc2FwcGVh ciBpbgorCSAqIGV4ZWNfZXZhbF9jbGVhbnVwLiAgVGhpcyBpcyBhbm5veWluZywgYnV0IGNsZWFu dXAgd2lsbCBjZXJ0YWlubHkgaGFwcGVuCisJICogd2hpbGUgcnVubmluZyB0aGUgbG9vcCBib2R5 LCBzbyB3ZSBoYXZlIGxpdHRsZSBjaG9pY2UuCisJICovCisJamIgPSBEYXR1bUdldEpzb25iUENv cHkoZXhwcmRhdHVtKTsKKworCS8qIENsZWFuIHVwIGFueSBsZWZ0b3ZlciB0ZW1wb3JhcnkgbWVt b3J5ICovCisJZXhlY19ldmFsX2NsZWFudXAoZXN0YXRlKTsKKworCS8qCisJICogVGhpcyBpcyBj b21wYXRpYmxlIHdpdGgganNvbmJfYXJyYXlfZWxlbWVudC4gU1FML0pTT04gZnVuY3Rpb25zIGFy ZSBub3QKKwkgKiB0b28gc3RyaWN0IGxpa2UgUG9zdGdyZVNRTCBwcm9wcmlldGFyeSAob2xkIGpz b24pIGZ1bmN0aW9ucy4gSW4gU1FML0pTT04KKwkgKiBhIHNjYWxhciBpcyBlcXVhbCB0byBvbmUg ZWxlbWVudCBhcnJheS4gVGhlIGJhc2ljIHF1ZXN0aW9uIGlzIGlmIEZPUkVBQ0gKKwkgKiBzaG91 bGQgYmUgbW9yZSByZXN0cmljdGl2ZSBsaWtlIG9sZCBKU09OIGZ1bmN0aW9uLCBvciBsZXNzIHJl c3RyaWN0aXZlCisJICogbGlrZSBTUUwvSlNPTiBmdW5jdGlvbnMuCisJICovCisJaWYgKEpCX1JP T1RfSVNfU0NBTEFSKGpiKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RF X0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Np b24gbXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkiKSwKKwkJCQkgZXJyaGludCgiQ2Fubm90 IGl0ZXJhdGUgb3ZlciBhIHNjYWxhciB2YWx1ZS4iKSkpOworCWVsc2UgaWYgKEpCX1JPT1RfSVNf T0JKRUNUKGpiKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVz dCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkiKSwKKwkJCQkgZXJyZGV0YWlsKCJDYW5ub3QgaXRl cmF0ZSBvdmVyIGEgb2JqZWN0IHZhbHVlLiIpKSk7CisKKwlBc3NlcnQoSkJfUk9PVF9JU19BUlJB WShqYikpOworCisJLyogU2V0IHVwIHRoZSBsb29wIHZhcmlhYmxlIGFuZCBzZWUgaWYgaXQgaXMg b2YgYW4gYXJyYXkgdHlwZSAqLworCWxvb3BfdmFyID0gZXN0YXRlLT5kYXR1bXNbc3RtdC0+dmFy bm9dOworCisJcGxwZ3NxbF9leGVjX2dldF9kYXR1bV90eXBlX2luZm8oZXN0YXRlLCBsb29wX3Zh ciwKKwkJCQkJCQkJCSAmbG9vcF92YXJfdHlwaWQsICZsb29wX3Zhcl90eXBtb2QsCisJCQkJCQkJ CQkgJmxvb3BfdmFyX2NvbGxhdGlvbik7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KCZqYi0+ cm9vdCk7CisKKwl3aGlsZSAoKHIgPSBKc29uYkl0ZXJhdG9yTmV4dCgmaXQsICZqYnYsIHNraXBO ZXN0ZWQpKSAhPSBXSkJfRE9ORSkKKwl7CisJCXNraXBOZXN0ZWQgPSB0cnVlOworCisJCWlmIChy ID09IFdKQl9FTEVNKQorCQl7CisJCQlEYXR1bQkJdmFsOworCQkJT2lkCQkJdmFsdHlwaWQ7CisJ CQlpbnQzMgkJdmFsdHlwbW9kOworCQkJYm9vbAkJdmFsaXNudWxsOworCisJCQlmb3VuZCA9IHRy dWU7CQkJLyogbG9vcGVkIGF0IGxlYXN0IG9uY2UgKi8KKworCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKHRtcF9jeHQpOworCisJCQl2YWwgPSBKc29uYlZhbHVlVG9EYXR1bSgmamJ2LAorCQkJCQkJ CQkJJnZhbHR5cGlkLCAmdmFsdHlwbW9kLCAmdmFsaXNudWxsLAorCQkJCQkJCQkJbG9vcF92YXJf dHlwaWQsIGxvb3BfdmFyX3R5cG1vZCwKKwkJCQkJCQkJCSZjYWNoZSwgc3RtdF9tY29udGV4dCk7 CisKKwkJCS8qIGV4ZWNfYXNzaWduX3ZhbHVlIGFuZCBleGVjX3N0bXRzIG11c3QgcnVuIGluIHRo ZSBtYWluIGNvbnRleHQgKi8KKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsK KworCQkJLyogQXNzaWduIGN1cnJlbnQgZWxlbWVudC9zbGljZSB0byB0aGUgbG9vcCB2YXJpYWJs ZSAqLworCQkJZXhlY19hc3NpZ25fdmFsdWUoZXN0YXRlLCBsb29wX3ZhciwgdmFsLAorCQkJCQkJ CSAgdmFsaXNudWxsLCB2YWx0eXBpZCwgdmFsdHlwbW9kKTsKKworCQkJTWVtb3J5Q29udGV4dFJl c2V0KHRtcF9jeHQpOworCisJCQkvKgorCQkJICogRXhlY3V0ZSB0aGUgc3RhdGVtZW50cworCQkJ ICovCisJCQlyYyA9IGV4ZWNfc3RtdHMoZXN0YXRlLCBzdG10LT5ib2R5KTsKKworCQkJTE9PUF9S Q19QUk9DRVNTSU5HKHN0bXQtPmxhYmVsLCBicmVhayk7CisKKwkJCU1lbW9yeUNvbnRleHRTd2l0 Y2hUbyhzdG10X21jb250ZXh0KTsKKwkJfQorCX0KKworCS8qIFJlc3RvcmUgbWVtb3J5IGNvbnRl eHQgc3RhdGUgKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisJcG9wX3N0 bXRfbWNvbnRleHQoZXN0YXRlKTsKKworCS8qIFJlbGVhc2UgdGVtcG9yYXJ5IG1lbW9yeSwgaW5j bHVkaW5nIHRoZSBhcnJheSB2YWx1ZSAqLworCU1lbW9yeUNvbnRleHRSZXNldChzdG10X21jb250 ZXh0KTsKKworCS8qCisJICogU2V0IHRoZSBGT1VORCB2YXJpYWJsZSB0byBpbmRpY2F0ZSB0aGUg cmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgbG9vcAorCSAqIChuYW1lbHksIHdoZXRoZXIgd2UgbG9v cGVkIG9uZSBvciBtb3JlIHRpbWVzKS4gVGhpcyBtdXN0IGJlIHNldCBoZXJlIHNvCisJICogdGhh dCBpdCBkb2VzIG5vdCBpbnRlcmZlcmUgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIEZPVU5EIHZhcmlh YmxlIGluc2lkZQorCSAqIHRoZSBsb29wIHByb2Nlc3NpbmcgaXRzZWxmLgorCSAqLworCWV4ZWNf c2V0X2ZvdW5kKGVzdGF0ZSwgZm91bmQpOworCisJcmV0dXJuIHJjOworfQorCiAvKiAtLS0tLS0t LS0tCiAgKiBleGVjX3N0bXRfZm9yZWFjaF9hCQkJTG9vcCBvdmVyIGVsZW1lbnRzIG9yIHNsaWNl cyBvZiBhbiBhcnJheQogICoKQEAgLTU1MzcsNiArNTc4OCw1MSBAQCBwbHBnc3FsX2V4ZWNfZ2V0 X2RhdHVtX3R5cGVfaW5mbyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCWJyZWFrOwog CQkJfQogCisJCWNhc2UgUExQR1NRTF9EVFlQRV9ST1c6CisJCQl7CisJCQkJUExwZ1NRTF9yb3cg KnJvdyA9IChQTHBnU1FMX3JvdyAqKSBkYXR1bTsKKworCQkJCWlmICghcm93LT5yb3d0dXBkZXNj KQorCQkJCXsKKwkJCQkJaW50CQkJaTsKKworCQkJCQlyb3ctPnJvd3R1cGRlc2MgPSBDcmVhdGVU ZW1wbGF0ZVR1cGxlRGVzYyhyb3ctPm5maWVsZHMpOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCBy b3ctPm5maWVsZHM7IGkrKykKKwkJCQkJeworCQkJCQkJUExwZ1NRTF9kYXR1bSAqdmFyID0gZXN0 YXRlLT5kYXR1bXNbcm93LT52YXJub3NbaV1dOworCQkJCQkJT2lkCQkJdmFydHlwaWQ7CisJCQkJ CQlpbnQzMgkJdmFydHlwbW9kOworCQkJCQkJT2lkCQkJdmFyY29sbGF0aW9uOworCisJCQkJCQkv KgorCQkJCQkJICogV2UgY2Fubm90IHVzZSBmaWVsZG5hbWVzIGZvciB0dXBkZXNjZW50cnksIGJl Y2F1c2UKKwkJCQkJCSAqIHRoZXNlIG5hbWVzIGNhbiBiZSBzdWZmaXhlZCBieSBuYW1lIG9mIHJv dyB2YXJpYWJsZS4KKwkJCQkJCSAqIFVuZm9ydHVuYXRlbHksIHRoZSBQTHBnU1FMX3JlY2ZpZWxk IGlzIG5vdCBjYXN0ZWQgdG8KKwkJCQkJCSAqIFBMcGdTUUxfdmFyaWFibGUuCisJCQkJCQkgKi8K KwkJCQkJCXBscGdzcWxfZXhlY19nZXRfZGF0dW1fdHlwZV9pbmZvKGVzdGF0ZSwgdmFyLAorCQkJ CQkJCQkJCQkJCQkgJnZhcnR5cGlkLCAmdmFydHlwbW9kLAorCQkJCQkJCQkJCQkJCQkgJnZhcmNv bGxhdGlvbik7CisKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeShyb3ctPnJvd3R1cGRlc2MsIGkg KyAxLAorCQkJCQkJCQkJCSAgIHZhci0+cmVmbmFtZSwgdmFydHlwaWQsIHZhcnR5cG1vZCwKKwkJ CQkJCQkJCQkgICAwKTsKKwkJCQkJCVR1cGxlRGVzY0luaXRFbnRyeUNvbGxhdGlvbihyb3ctPnJv d3R1cGRlc2MsIGkgKyAxLAorCQkJCQkJCQkJCQkJCXZhcmNvbGxhdGlvbik7CisJCQkJCX0KKwor CQkJCQkvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHR5cGUvdHlwbW9kIHNldHRpbmcgKi8K KwkJCQkJQmxlc3NUdXBsZURlc2Mocm93LT5yb3d0dXBkZXNjKTsKKwkJCQl9CisKKwkJCQkqdHlw ZUlkID0gcm93LT5yb3d0dXBkZXNjLT50ZHR5cGVpZDsKKwkJCQkqdHlwTW9kID0gcm93LT5yb3d0 dXBkZXNjLT50ZHR5cG1vZDsKKwkJCQkvKiBjb21wb3NpdGUgdHlwZXMgYXJlIG5ldmVyIGNvbGxh dGFibGUgKi8KKwkJCQkqY29sbGF0aW9uID0gSW52YWxpZE9pZDsKKwkJCQlicmVhazsKKwkJCX0K KwogCQljYXNlIFBMUEdTUUxfRFRZUEVfUkVDOgogCQkJewogCQkJCVBMcGdTUUxfcmVjICpyZWMg PSAoUExwZ1NRTF9yZWMgKikgZGF0dW07CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfZnVuY3MuYyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9mdW5jcy5jCmluZGV4IDkyY2Q5MTE2 YzBlLi43NTExZmFiN2U2OCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNz LmMKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMKQEAgLTI1Myw2ICsyNTMsOCBA QCBwbHBnc3FsX3N0bXRfdHlwZW5hbWUoUExwZ1NRTF9zdG10ICpzdG10KQogCQkJcmV0dXJuIF8o IkZPUiBvdmVyIGN1cnNvciIpOwogCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0E6CiAJCQly ZXR1cm4gXygiRk9SRUFDSCBvdmVyIGFycmF5Iik7CisJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVB Q0hfSlNPTl9BOgorCQkJcmV0dXJuIF8oIkZPUkVBQ0ggb3ZlciBqc29uIGFycmF5Iik7CiAJCWNh c2UgUExQR1NRTF9TVE1UX0VYSVQ6CiAJCQlyZXR1cm4gKChQTHBnU1FMX3N0bXRfZXhpdCAqKSBz dG10KS0+aXNfZXhpdCA/ICJFWElUIiA6ICJDT05USU5VRSI7CiAJCWNhc2UgUExQR1NRTF9TVE1U X1JFVFVSTjoKQEAgLTQ2Nyw2ICs0NjksMTQgQEAgcGxwZ3NxbF9zdGF0ZW1lbnRfdHJlZV93YWxr ZXJfaW1wbChQTHBnU1FMX3N0bXQgKnN0bXQsCiAJCQl7CiAJCQkJUExwZ1NRTF9zdG10X2ZvcmVh Y2hfYSAqZnN0bXQgPSAoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10OwogCisJCQkJRV9X QUxLKGZzdG10LT5leHByKTsKKwkJCQlTX0xJU1RfV0FMSyhmc3RtdC0+Ym9keSk7CisJCQkJYnJl YWs7CisJCQl9CisJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BOgorCQkJeworCQkJ CVBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqZnN0bXQgPSAoUExwZ1NRTF9zdG10X2ZvcmVh Y2hfanNvbl9hICopIHN0bXQ7CisKIAkJCQlFX1dBTEsoZnN0bXQtPmV4cHIpOwogCQkJCVNfTElT VF9XQUxLKGZzdG10LT5ib2R5KTsKIAkJCQlicmVhazsKQEAgLTc5NSw2ICs4MDUsNyBAQCBzdGF0 aWMgdm9pZCBkdW1wX2ZvcmkoUExwZ1NRTF9zdG10X2ZvcmkgKnN0bXQpOwogc3RhdGljIHZvaWQg ZHVtcF9mb3JzKFBMcGdTUUxfc3RtdF9mb3JzICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfZm9y YyhQTHBnU1FMX3N0bXRfZm9yYyAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX2ZvcmVhY2hfYShQ THBnU1FMX3N0bXRfZm9yZWFjaF9hICpzdG10KTsKK3N0YXRpYyB2b2lkIGR1bXBfZm9yZWFjaF9q c29uX2EoUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1 bXBfZXhpdChQTHBnU1FMX3N0bXRfZXhpdCAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX3JldHVy bihQTHBnU1FMX3N0bXRfcmV0dXJuICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfcmV0dXJuX25l eHQoUExwZ1NRTF9zdG10X3JldHVybl9uZXh0ICpzdG10KTsKQEAgLTg2MSw2ICs4NzIsOSBAQCBk dW1wX3N0bXQoUExwZ1NRTF9zdG10ICpzdG10KQogCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNI X0E6CiAJCQlkdW1wX2ZvcmVhY2hfYSgoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10KTsK IAkJCWJyZWFrOworCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0pTT05fQToKKwkJCWR1bXBf Zm9yZWFjaF9qc29uX2EoKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqKSBzdG10KTsKKwkJ CWJyZWFrOwogCQljYXNlIFBMUEdTUUxfU1RNVF9FWElUOgogCQkJZHVtcF9leGl0KChQTHBnU1FM X3N0bXRfZXhpdCAqKSBzdG10KTsKIAkJCWJyZWFrOwpAQCAtMTE1Nyw2ICsxMTcxLDIxIEBAIGR1 bXBfZm9yZWFjaF9hKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKnN0bXQpCiAJcHJpbnRmKCIgICAg RU5ERk9SRUFDSEEiKTsKIH0KIAorc3RhdGljIHZvaWQKK2R1bXBfZm9yZWFjaF9qc29uX2EoUExw Z1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpzdG10KQoreworCWR1bXBfaW5kKCk7CisJcHJpbnRm KCJGT1JFQUNIQSB2YXIgJWQgIiwgc3RtdC0+dmFybm8pOworCXByaW50ZigiSU4gSlNPTiBBUlJB WSAiKTsKKwlkdW1wX2V4cHIoc3RtdC0+ZXhwcik7CisJcHJpbnRmKCJcbiIpOworCisJZHVtcF9z dG10cyhzdG10LT5ib2R5KTsKKworCWR1bXBfaW5kKCk7CisJcHJpbnRmKCIgICAgRU5ERk9SRUFD SEEiKTsKK30KKwogc3RhdGljIHZvaWQKIGR1bXBfb3BlbihQTHBnU1FMX3N0bXRfb3BlbiAqc3Rt dCkKIHsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9ncmFtLnkgYi9zcmMvcGwv cGxwZ3NxbC9zcmMvcGxfZ3JhbS55CmluZGV4IDUwMDllNTlhNzhmLi4yM2I0NjViMTBkNSAxMDA2 NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueQorKysgYi9zcmMvcGwvcGxwZ3Nx bC9zcmMvcGxfZ3JhbS55CkBAIC0xNzgsNiArMTc4LDcgQEAgc3RhdGljCXZvaWQJCQljaGVja19y YWlzZV9wYXJhbWV0ZXJzKFBMcGdTUUxfc3RtdF9yYWlzZSAqc3RtdCk7CiAJUExwZ1NRTF9kaWFn X2l0ZW0gKmRpYWdpdGVtOwogCVBMcGdTUUxfc3RtdF9mZXRjaCAqZmV0Y2g7CiAJUExwZ1NRTF9j YXNlX3doZW4gKmNhc2V3aGVuOworCVBMcGdTUUxfc3RtdF9mb3JlYWNoICpmb3JlYWNoOwogfQog CiAldHlwZSA8ZGVjbGhkcj4gZGVjbF9zZWN0CkBAIC0yMjAsNiArMjIxLDcgQEAgc3RhdGljCXZv aWQJCQljaGVja19yYWlzZV9wYXJhbWV0ZXJzKFBMcGdTUUxfc3RtdF9yYWlzZSAqc3RtdCk7CiAK ICV0eXBlIDxjYXNld2hlbj4JY2FzZV93aGVuCiAldHlwZSA8bGlzdD4JY2FzZV93aGVuX2xpc3Qg b3B0X2Nhc2VfZWxzZQorJXR5cGUgPGZvcmVhY2g+CWZvcmVhY2hfdHlwZQogCiAldHlwZSA8Ym9v bGVhbj4JZ2V0ZGlhZ19hcmVhX29wdAogJXR5cGUgPGxpc3Q+CWdldGRpYWdfbGlzdApAQCAtMzQx LDYgKzM0Myw3IEBAIHN0YXRpYwl2b2lkCQkJY2hlY2tfcmFpc2VfcGFyYW1ldGVycyhQTHBnU1FM X3N0bXRfcmFpc2UgKnN0bXQpOwogJXRva2VuIDxrZXl3b3JkPglLX1BSSU5UX1NUUklDVF9QQVJB TVMKICV0b2tlbiA8a2V5d29yZD4JS19QUklPUgogJXRva2VuIDxrZXl3b3JkPglLX1FVRVJZCisl dG9rZW4gPGtleXdvcmQ+CUtfSlNPTgogJXRva2VuIDxrZXl3b3JkPglLX1JBSVNFCiAldG9rZW4g PGtleXdvcmQ+CUtfUkVMQVRJVkUKICV0b2tlbiA8a2V5d29yZD4JS19SRVRVUk4KQEAgLTE2NzEs MTYgKzE2NzQsMjkgQEAgZm9yX3ZhcmlhYmxlCTogVF9EQVRVTQogCQkJCQl9CiAJCQkJOwogCi1z dG10X2ZvcmVhY2hfYQk6IG9wdF9sb29wX2xhYmVsIEtfRk9SRUFDSCBmb3JfdmFyaWFibGUgZm9y ZWFjaF9zbGljZSBLX0lOIEtfQVJSQVkgZXhwcl91bnRpbF9sb29wIGxvb3BfYm9keQorc3RtdF9m b3JlYWNoX2EJOiBvcHRfbG9vcF9sYWJlbCBLX0ZPUkVBQ0ggZm9yX3ZhcmlhYmxlIGZvcmVhY2hf c2xpY2UgS19JTiBmb3JlYWNoX3R5cGUgZXhwcl91bnRpbF9sb29wIGxvb3BfYm9keQogCQkJCQl7 Ci0JCQkJCQlQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICpuZXc7CisJCQkJCQlQTHBnU1FMX3N0bXRf Zm9yZWFjaCAqbmV3OwogCi0JCQkJCQluZXcgPSBwYWxsb2MwX29iamVjdChQTHBnU1FMX3N0bXRf Zm9yZWFjaF9hKTsKLQkJCQkJCW5ldy0+Y21kX3R5cGUgPSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9B OworCQkJCQkJbmV3ID0gJDY7CiAJCQkJCQluZXctPmxpbmVubyA9IHBscGdzcWxfbG9jYXRpb25f dG9fbGluZW5vKEAyLCB5eXNjYW5uZXIpOwogCQkJCQkJbmV3LT5zdG10aWQgPSArK3BscGdzcWxf Y3Vycl9jb21waWxlLT5uc3RhdGVtZW50czsKIAkJCQkJCW5ldy0+bGFiZWwgPSAkMTsKLQkJCQkJ CW5ldy0+c2xpY2UgPSAkNDsKKworCQkJCQkJaWYgKCQ0ID4gMCkKKwkJCQkJCXsKKwkJCQkJCQkv KiBzbGljaW5nIGlzIHN1cHBvcnRlZCBvbmx5IGJ5IEZPUkVBQ0ggSU4gQVJSQVkgKi8KKwkJCQkJ CQlpZiAobmV3LT5jbWRfdHlwZSA9PSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9BKQorCQkJCQkJCXsK KwkJCQkJCQkJKChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICopIG5ldyktPnNsaWNlID0gJDQ7CisJ CQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCQkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQkJCQkJIGVycm1zZygibm90IHpl cm8gc2xpY2UgaXMgYWxsb3dlZCBvbmx5IGZvciBhcnJheXMiKSwKKwkJCQkJCQkJCQkJCSBwYXJz ZXJfZXJycG9zaXRpb24oQDQpKSk7CisJCQkJCQl9CisKIAkJCQkJCW5ldy0+ZXhwciA9ICQ3Owog CQkJCQkJbmV3LT5ib2R5ID0gJDguc3RtdHM7CiAKQEAgLTE3MTksNiArMTczNSwxOSBAQCBmb3Jl YWNoX3NsaWNlCToKIAkJCQkJfQogCQkJCTsKIAorZm9yZWFjaF90eXBlCToKKwkJCQkgIEtfQVJS QVkKKwkJCQkJeworCQkJCQkJJCQgPSAoUExwZ1NRTF9zdG10X2ZvcmVhY2ggKikgcGFsbG9jMF9v YmplY3QoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSk7CisJCQkJCQkkJC0+Y21kX3R5cGUgPSBQTFBH U1FMX1NUTVRfRk9SRUFDSF9BOworCQkJCQl9CisJCQkJfCBLX0pTT04gS19BUlJBWQorCQkJCQl7 CisJCQkJCQkkJCA9IChQTHBnU1FMX3N0bXRfZm9yZWFjaCAqKSBwYWxsb2MwX29iamVjdChQTHBn U1FMX3N0bXRfZm9yZWFjaF9qc29uX2EpOworCQkJCQkJJCQtPmNtZF90eXBlID0gUExQR1NRTF9T VE1UX0ZPUkVBQ0hfSlNPTl9BOworCQkJCQl9CisJCQkJOworCiBzdG10X2V4aXQJCTogZXhpdF90 eXBlIG9wdF9sYWJlbCBvcHRfZXhpdGNvbmQKIAkJCQkJewogCQkJCQkJUExwZ1NRTF9zdG10X2V4 aXQgKm5ldzsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF91bnJlc2VydmVkX2t3 bGlzdC5oIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX3VucmVzZXJ2ZWRfa3dsaXN0LmgKaW5kZXgg NjM3OWU4NmM4Y2IuLmQ3NTg4ZDNiNGFkIDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMv cGxfdW5yZXNlcnZlZF9rd2xpc3QuaAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNl cnZlZF9rd2xpc3QuaApAQCAtNjksNiArNjksNyBAQCBQR19LRVlXT1JEKCJpbXBvcnQiLCBLX0lN UE9SVCkKIFBHX0tFWVdPUkQoImluZm8iLCBLX0lORk8pCiBQR19LRVlXT1JEKCJpbnNlcnQiLCBL X0lOU0VSVCkKIFBHX0tFWVdPUkQoImlzIiwgS19JUykKK1BHX0tFWVdPUkQoImpzb24iLCBLX0pT T04pCiBQR19LRVlXT1JEKCJsYXN0IiwgS19MQVNUKQogUEdfS0VZV09SRCgibG9nIiwgS19MT0cp CiBQR19LRVlXT1JEKCJtZXJnZSIsIEtfTUVSR0UpCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3Nx bC9zcmMvcGxwZ3NxbC5oIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaAppbmRleCBhZGRi MTRhOTk1OS4uYzU3YjFkYTliOTUgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBn c3FsLmgKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaApAQCAtMTEyLDYgKzExMiw3 IEBAIHR5cGVkZWYgZW51bSBQTHBnU1FMX3N0bXRfdHlwZQogCVBMUEdTUUxfU1RNVF9GT1JTLAog CVBMUEdTUUxfU1RNVF9GT1JDLAogCVBMUEdTUUxfU1RNVF9GT1JFQUNIX0EsCisJUExQR1NRTF9T VE1UX0ZPUkVBQ0hfSlNPTl9BLAogCVBMUEdTUUxfU1RNVF9FWElULAogCVBMUEdTUUxfU1RNVF9S RVRVUk4sCiAJUExQR1NRTF9TVE1UX1JFVFVSTl9ORVhULApAQCAtMjk5LDYgKzMwMCw3IEBAIHR5 cGVkZWYgc3RydWN0IFBMcGdTUUxfZGF0dW0KIHsKIAlQTHBnU1FMX2RhdHVtX3R5cGUgZHR5cGU7 CiAJaW50CQkJZG5vOworCWNoYXIJICAgKnJlZm5hbWU7CiB9IFBMcGdTUUxfZGF0dW07CiAKIC8q CkBAIC00NDQsOSArNDQ2LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9yZWNmaWVsZAogewog CVBMcGdTUUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlpbnQJCQlkbm87CisJY2hhcgkgICAqZmllbGRu YW1lOwkJLyogbmFtZSBvZiBmaWVsZCAqLwogCS8qIGVuZCBvZiBQTHBnU1FMX2RhdHVtIGZpZWxk cyAqLwogCi0JY2hhcgkgICAqZmllbGRuYW1lOwkJLyogbmFtZSBvZiBmaWVsZCAqLwogCWludAkJ CXJlY3BhcmVudG5vOwkvKiBkbm8gb2YgcGFyZW50IHJlY29yZCAqLwogCWludAkJCW5leHRmaWVs ZDsJCS8qIGRubyBvZiBuZXh0IGNoaWxkLCBvciAtMSBpZiBub25lICovCiAJdWludDY0CQlyZWN0 dXBsZWRlc2NpZDsgLyogcmVjb3JkJ3MgdHVwbGVkZXNjIElEIGFzIG9mIGxhc3QgbG9va3VwICov CkBAIC03NjYsNiArNzY4LDIwIEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfc3RtdF9keW5mb3Jz CiAJTGlzdAkgICAqcGFyYW1zOwkJCS8qIFVTSU5HIGV4cHJlc3Npb25zICovCiB9IFBMcGdTUUxf c3RtdF9keW5mb3JzOwogCisvKgorICogRk9SRUFDSCBsb29wIChhbmNlc3RvciBJTiBBUlJBWSBh bmQgSU4gSlNPTiBBUlJBWSBsb29wKQorICovCit0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRf Zm9yZWFjaAoreworCVBMcGdTUUxfc3RtdF90eXBlIGNtZF90eXBlOworCWludAkJCWxpbmVubzsK Kwl1bnNpZ25lZCBpbnQgc3RtdGlkOworCWNoYXIJICAgKmxhYmVsOworCWludAkJCXZhcm5vOwkJ CS8qIGxvb3AgdGFyZ2V0IHZhcmlhYmxlICovCisJUExwZ1NRTF9leHByICpleHByOwkJCS8qIHNl dCBleHByZXNzaW9uICovCisJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMg Ki8KK30gUExwZ1NRTF9zdG10X2ZvcmVhY2g7CisKIC8qCiAgKiBGT1JFQUNIIGl0ZW0gaW4gYXJy YXkgbG9vcAogICovCkBAIC03NzYsMTEgKzc5MiwyNyBAQCB0eXBlZGVmIHN0cnVjdCBQTHBnU1FM X3N0bXRfZm9yZWFjaF9hCiAJdW5zaWduZWQgaW50IHN0bXRpZDsKIAljaGFyCSAgICpsYWJlbDsK IAlpbnQJCQl2YXJubzsJCQkvKiBsb29wIHRhcmdldCB2YXJpYWJsZSAqLwotCWludAkJCXNsaWNl OwkJCS8qIHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAqLwogCVBMcGdTUUxfZXhwciAqZXhwcjsJCQkv KiBhcnJheSBleHByZXNzaW9uICovCiAJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRl bWVudHMgKi8KKwkvKiBlbmQgb2YgZmllbGRzIHRoYXQgbXVzdCBtYXRjaCBQTHBnU1FMX3N0bXRf Zm9yZWFjaCAqLworCWludAkJCXNsaWNlOwkJCS8qIHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAqLwog fSBQTHBnU1FMX3N0bXRfZm9yZWFjaF9hOwogCisvKgorICogRk9SRUFDSCBpdGVtIGluIGFycmF5 IGxvb3AKKyAqLwordHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hCit7 CisJUExwZ1NRTF9zdG10X3R5cGUgY21kX3R5cGU7CisJaW50CQkJbGluZW5vOworCXVuc2lnbmVk IGludCBzdG10aWQ7CisJY2hhcgkgICAqbGFiZWw7CisJaW50CQkJdmFybm87CQkJLyogbG9vcCB0 YXJnZXQgdmFyaWFibGUgKi8KKwlQTHBnU1FMX2V4cHIgKmV4cHI7CQkJLyogYXJyYXkgZXhwcmVz c2lvbiAqLworCUxpc3QJICAgKmJvZHk7CQkJLyogTGlzdCBvZiBzdGF0ZW1lbnRzICovCisJLyog ZW5kIG9mIGZpZWxkcyB0aGF0IG11c3QgbWF0Y2ggUExwZ1NRTF9zdG10X2ZvcmVhY2ggKi8KK30g UExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hOworCiAvKgogICogT1BFTiBhIGN1cnZhcgogICov CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwg Yi9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBlNWM3MTA2ZDFlCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsCkBAIC0wLDAgKzEs MjE0IEBACistLSBpbnB1dCBtdXN0IGJlIGEgSlNPTiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBu dW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgTlVMTCAtLSBmYWlsCisg IGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOwor CitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBh cnJheSAnMTAnIC0tIGZhaWwKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVu ZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisg IGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICd7fScgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ug bm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gbnVtZXJpYyB0byBu dW1lcmljCitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4g anNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90 aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gbnVtZXJpYyB0byBpbnQg YnkgY2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNv biBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNl ICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gdGVzdCBvZiBGT1VORCB2YXJp YWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBh cnJheSAnWzEwXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29w OworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7CiskJDsKKworLS0gdGVz dCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3Jl YWNoIHggaW4ganNvbiBhcnJheSAnW10nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4 OworICBlbmQgbG9vcDsKKyAgcmFpc2Ugbm90aWNlICdGT1VORDogJScsIGZvdW5kOworZW5kOwor JCQ7CisKKy0tIGNvbnZlcnNpb24gIjMuMTQiIHRvIGludCBzaG91bGQgdG8gZmFpbCBkdWUgSU8g Y2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBh cnJheSAnWyIxMCIsMjAsMzAsIjMuMTQiXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScs IHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggYm9vbGVhbjsK K2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbdHJ1ZSwgZmFsc2VdJworICBsb29w CisgIGlmIHggdGhlbgorICAgIHJhaXNlIG5vdGljZSAndHJ1ZSc7CisgIGVsc2UKKyAgICByYWlz ZSBub3RpY2UgJ2ZhbHNlJzsKKyAgZW5kIGlmOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCist LSBqc29uYiB0byBqc29uYgorZG8gJCQKK2RlY2xhcmUgeCBqc29uYjsKK2JlZ2luCisgIGZvcmVh Y2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AK KyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBq c29uYiB0byBqc29uCitkbyAkJAorZGVjbGFyZSB4IGpzb247CitiZWdpbgorICBmb3JlYWNoIHgg aW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGwsICJIaSJdJworICBsb29wCisgICAg cmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworLS0gaXRlcmF0 aW9uIG92ZXIgY29tcG9zaXRlcworZG8gJCQKK2RlY2xhcmUgeCBpbnQ7IHkgbnVtZXJpYzsgeiB2 YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5LCB6IGluIGpzb24gYXJyYXkgJ1t7fSwgeyJ6 IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBs b29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgeCwgeSwgejsKKyAgZW5k IGxvb3A7CitlbmQ7CiskJDsKKworY3JlYXRlIHR5cGUgdDMgYXMgKHggaW50LCB5IG51bWVyaWMs IHogdmFyY2hhcik7CisKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMg aW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAi eCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUs IHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAor ZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFjaCBjLngsIGMueSwgYy56IGluIGpzb24gYXJy YXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6 My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgYy54 LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZHJvcCB0eXBlIHQzOworCist LSB0YXJnZXQgY2FuIGJlIGEgYXJyYXkKK2RvICQkCitkZWNsYXJlIHggaW50W107CitiZWdpbgor ICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW1sxLDIsM10sWzQsNSw2XV0nCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJyUgJSAlJywgeFsxXSwgeFsyXSwgeFszXTsKKyAgZW5kIGxvb3A7Citl bmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBmb3JlYWNo IHggaW4ganNvbiBhcnJheSAnW1siSGkiLCJIZWxsbyJdLFsiSGVsbG8iLCJIaSJdXScKKyAgbG9v cAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwgeFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7 CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBmb3JlYWNoIHgg aW4ganNvbiBhcnJheSAnW1siSGkiLCJIZWxsbyJdLFsiSGVsbG8iLCJIaSJdXScKKyAgbG9vcAor ICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwgeFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7Cisk JDsKKworCitkbyAkJAorZGVjbGFyZSB4IGludFtdOyB5IHZhcmNoYXI7CitiZWdpbgorICBmb3Jl YWNoIHgsIHkgaW4ganNvbiBhcnJheSAnW3sieCI6WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0 LDUsNl0sICJ5IjoiSGkifV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAl JywgeFsxXSwgeFsyXSwgeFszXSwgeTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworY3JlYXRl IHR5cGUgdDIgYXMgKHggaW50W10sIHkgdmFyY2hhcik7CisKK2RvICQkCitkZWNsYXJlIGMgdDI7 CitiZWdpbgorICBmb3JlYWNoIGMgaW4ganNvbiBhcnJheSAnW3sieCI6WzEsMiwzXSwgInkiOiJI aSJ9LCB7IngiOls0LDUsNl0sICJ5IjoiSGkifV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2Ug JyUgJSAlLCB5OiAlJywgYy54WzFdLCBjLnhbMl0sIGMueFszXSwgYy55OworICBlbmQgbG9vcDsK K2VuZDsKKyQkOworCitkcm9wIHR5cGUgdDI7Ci0tIAoyLjUzLjAKCg== --000000000000878214064c1eeb5d--