From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sender4-pp-o90.zoho.com (sender4-pp-o90.zoho.com [136.143.188.90]) by sourceware.org (Postfix) with ESMTPS id B80243858C51; Sat, 9 Apr 2022 18:06:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B80243858C51 ARC-Seal: i=1; a=rsa-sha256; t=1649527560; cv=none; d=zohomail.com; s=zohoarc; b=iyrYiKJ61IOvU6nzVUST9tBi1i8r6atwtwpngSsURd9iP+1muiqtI4dlOU1tISXTMrAIGymjYa38noBceos7QnSDw0g/y3jnxqlfPp8KQBKoaxnwbs1w0vycSK0jnKPJEpHczFg2LhRrz4o7I+QOxeI2vyap7tfqnuJOg+RZdhQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1649527560; h=Content-Type:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:To; bh=iZEUExIpWx5T9GGND3zvOPTowqopRX9fVDmRly1YSnc=; b=WEnbOaEX3mgrNaiej9uwwagZLMGvfHQGwjFuxGxkDE8xItTjRbalQBRzxr3ipNs63Z9SkcMZ+gBv7SSVq1gS5xeP5s7t8VLRX3cLD1a8gj+o8s7EsBH1JdpZlH70/QjBo7ZKnPXzF7EFZ7tHkQgPYNYupiLdI03XM9zsTVumJt4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=zoho.com; spf=pass smtp.mailfrom=bouanto@zoho.com; dmarc=pass header.from= Received: from [192.168.1.174] (38.87.11.6 [38.87.11.6]) by mx.zohomail.com with SMTPS id 1649527558692336.59284420613096; Sat, 9 Apr 2022 11:05:58 -0700 (PDT) Message-ID: <0df71b1c19605b54908f71795c7a008b2a22c559.camel@zoho.com> Subject: Re: [PATCH] libgccjit: Add support for bitcasts [PR104071] From: Antoni Boucher To: David Malcolm , gcc-patches@gcc.gnu.org, jit@gcc.gnu.org Date: Sat, 09 Apr 2022 14:05:56 -0400 In-Reply-To: References: <13bdd05cfd7006a332ec785ab371356f0354db4d.camel@zoho.com> <19fe391c6c77e0e38acdcaf7e864651849913d46.camel@zoho.com> <1cb2b6d3e9a1afb6135a9dc1a97e85ba8c3a4a0d.camel@zoho.com> Content-Type: multipart/mixed; boundary="=-nWhfu23k4fVT92Z8k2Fe" User-Agent: Evolution 3.44.0 MIME-Version: 1.0 X-Zoho-Virus-Status: 1 X-ZohoMailClient: External X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, BODY_8BITS, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Apr 2022 18:06:09 -0000 --=-nWhfu23k4fVT92Z8k2Fe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Here's the updated patch. On Fri, 2022-04-08 at 15:22 -0400, David Malcolm wrote: > On Fri, 2022-01-21 at 18:41 -0500, Antoni Boucher wrote: > > Hi. > > Here's the updated patch. > >=20 >=20 > Thanks.=C2=A0 Review below: >=20 > [...snip...] >=20 > > diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc > > index 4c352e8c93d..6bf1e1ceee0 100644 > > --- a/gcc/jit/libgccjit.cc > > +++ b/gcc/jit/libgccjit.cc > > @@ -2405,6 +2405,34 @@ gcc_jit_context_new_cast (gcc_jit_context > > *ctxt, > > =C2=A0=C2=A0 return static_cast (ctxt->new_cast (loc= , > > rvalue, type)); > > =C2=A0} > > =C2=A0 > > +/* Public entrypoint.=C2=A0 See description in libgccjit.h. > > + > > +=C2=A0=C2=A0 After error-checking, the real work is done by the > > +=C2=A0=C2=A0 gcc::jit::recording::context::new_bitcast method in jit- > > recording.c.=C2=A0 */ > > + > > +gcc_jit_rvalue * > > +gcc_jit_context_new_bitcast (gcc_jit_context *ctxt, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 gcc_jit_location *loc, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 gcc_jit_rvalue *rvalue, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 gcc_jit_type *type) > > +{ > > +=C2=A0 RETURN_NULL_IF_FAIL (ctxt, NULL, loc, "NULL context"); > > +=C2=A0 JIT_LOG_FUNC (ctxt->get_logger ()); > > +=C2=A0 /* LOC can be NULL.=C2=A0 */ > > +=C2=A0 RETURN_NULL_IF_FAIL (rvalue, ctxt, loc, "NULL rvalue"); > > +=C2=A0 RETURN_NULL_IF_FAIL (type, ctxt, loc, "NULL type"); > > +=C2=A0 // TODO: check the sizes. > > +=C2=A0 /*RETURN_NULL_IF_FAIL_PRINTF3 ( > > +=C2=A0=C2=A0=C2=A0 is_valid_cast (rvalue->get_type (), type), > > +=C2=A0=C2=A0=C2=A0 ctxt, loc, > > +=C2=A0=C2=A0=C2=A0 "cannot cast %s from type: %s to type: %s", > > +=C2=A0=C2=A0=C2=A0 rvalue->get_debug_string (), > > +=C2=A0=C2=A0=C2=A0 rvalue->get_type ()->get_debug_string (), > > +=C2=A0=C2=A0=C2=A0 type->get_debug_string ());*/ >=20 > I think we agreed that we can't check the sizes at this point, so > this > commented-out check would be better replaced with a comment > explaining > that we have to defer the check to playback time, when we have the > trees. >=20 > > + > > +=C2=A0 return static_cast (ctxt->new_bitcast (loc, > > rvalue, type)); > > +} > > + > > =C2=A0/* Public entrypoint.=C2=A0 See description in libgccjit.h. > > =C2=A0 > > =C2=A0=C2=A0=C2=A0 After error-checking, the real work is done by the >=20 > [...snip...] >=20 > > diff --git a/gcc/testsuite/jit.dg/test-bitcast.c > > b/gcc/testsuite/jit.dg/test-bitcast.c > > new file mode 100644 > > index 00000000000..a092fa117e6 > > --- /dev/null > > +++ b/gcc/testsuite/jit.dg/test-bitcast.c > > @@ -0,0 +1,60 @@ > > +#include > > +#include > > +#include > > + > > +#include "libgccjit.h" > > + > > +#include "harness.h" > > + > > +void > > +create_code (gcc_jit_context *ctxt, void *user_data) > > +{ > > +=C2=A0 /* Let's try to inject the equivalent of: > > +int > > +my_bitcast (double x) > > +{ > > +=C2=A0=C2=A0 return bitcast(x, int); > > +} > > +=C2=A0=C2=A0 */ > > +=C2=A0 gcc_jit_type *int_type =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_get_int_type (ctxt, 4, 1); > > +=C2=A0 gcc_jit_type *float_type =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_get_type (ctxt, GCC_JIT_TYPE_FLOAT)= ; >=20 > This uses GCC_JIT_TYPE_FLOAT for the param... >=20 > > + > > +=C2=A0 gcc_jit_param *x =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_new_param ( > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ctxt, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 float_type, "x"); > > +=C2=A0 gcc_jit_param *params[1] =3D {x}; > > +=C2=A0 gcc_jit_function *func =3D > > +=C2=A0=C2=A0=C2=A0 gcc_jit_context_new_function (ctxt, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 NULL, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 GCC_JIT_FUNCTION_EXPORTED, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int_type, > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 "my_bitcast", > > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1, params, 0); >=20 > [..snip...] >=20 > > + > > +void > > +verify_code (gcc_jit_context *ctxt, gcc_jit_result *result) > > +{ > > +=C2=A0 typedef int (*my_bitcast_fn_type) (double); >=20 > ...but this uses "double".=C2=A0 Presumably these should agree, and have > the > same sizeof as the integer type. >=20 > > +=C2=A0 CHECK_NON_NULL (result); > > +=C2=A0 my_bitcast_fn_type my_bitcast =3D > > +=C2=A0=C2=A0=C2=A0 (my_bitcast_fn_type)gcc_jit_result_get_code (result= , > > "my_bitcast"); > > +=C2=A0 CHECK_NON_NULL (my_bitcast); > > +=C2=A0 int val =3D my_bitcast (-5.1298714); > > +=C2=A0 note ("my_bitcast returned: %d", val); > > +=C2=A0 CHECK_VALUE (val, 35569201); >=20 > Out of curiosity, is there any particular significance for these > values?=C2=A0 FWIW I rather like: > =C2=A0 http://evanw.github.io/float-toy/ > for directly manipulating the bits of floating point numbers. The given float values, when bitcast to an int, gives the given int value. >=20 >=20 > [...snip...] >=20 > > diff --git a/gcc/toplev.cc b/gcc/toplev.cc > > index 534da1462e8..bc4921974eb 100644 > > --- a/gcc/toplev.cc > > +++ b/gcc/toplev.cc > > @@ -2368,6 +2368,7 @@ toplev::finalize (void) > > =C2=A0=C2=A0 gcse_c_finalize (); > > =C2=A0=C2=A0 ipa_cp_c_finalize (); > > =C2=A0=C2=A0 ira_costs_c_finalize (); > > +=C2=A0 tree_cc_finalize (); > > =C2=A0 > > =C2=A0=C2=A0 /* save_decoded_options uses opts_obstack, so these must > > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 be cleaned up together.=C2=A0 */ > > diff --git a/gcc/tree.cc b/gcc/tree.cc > > index ae159ee20ce..fe9d9083026 100644 > > --- a/gcc/tree.cc > > +++ b/gcc/tree.cc > > @@ -6963,6 +6963,15 @@ build_reference_type (tree to_type) > > =C2=A0=C2=A0 (HOST_BITS_PER_WIDE_INT > 64 ? HOST_BITS_PER_WIDE_INT : 64= ) > > =C2=A0static GTY(()) tree nonstandard_integer_type_cache[2 * > > MAX_INT_CACHED_PREC + 2]; > > =C2=A0 > > +static void > > +clear_nonstandard_integer_type_cache (void) > > +{ > > +=C2=A0 for (size_t i =3D 0 ; i < 2 * MAX_INT_CACHED_PREC + 2 ; i++) > > +=C2=A0 { > > +=C2=A0=C2=A0=C2=A0 nonstandard_integer_type_cache[i] =3D NULL; > > +=C2=A0 } > > +} > > + > > =C2=A0/* Builds a signed or unsigned integer type of precision > > PRECISION. > > =C2=A0=C2=A0=C2=A0 Used for C bitfields whose precision does not match = that of > > =C2=A0=C2=A0=C2=A0 built-in target types.=C2=A0 */ > > @@ -14565,6 +14574,12 @@ get_attr_nonstring_decl (tree expr, tree > > *ref) > > =C2=A0=C2=A0 return NULL_TREE; > > =C2=A0} > > =C2=A0 > > +void > > +tree_cc_finalize (void) > > +{ > > +=C2=A0 clear_nonstandard_integer_type_cache (); > > +} > > + > > =C2=A0#if CHECKING_P > > =C2=A0 > > =C2=A0namespace selftest { > > diff --git a/gcc/tree.h b/gcc/tree.h > > index 30bc53c2996..bf886fc2472 100644 > > --- a/gcc/tree.h > > +++ b/gcc/tree.h > > @@ -5385,6 +5385,7 @@ extern bool real_minus_onep (const_tree); > > =C2=A0extern void init_ttree (void); > > =C2=A0extern void build_common_tree_nodes (bool); > > =C2=A0extern void build_common_builtin_nodes (void); > > +extern void tree_cc_finalize (void); > > =C2=A0extern tree build_nonstandard_integer_type (unsigned > > HOST_WIDE_INT, int); > > =C2=A0extern tree build_nonstandard_boolean_type (unsigned > > HOST_WIDE_INT); > > =C2=A0extern tree build_range_type (tree, tree, tree); >=20 > Looks OK to me, but am not officially a maintainer of these parts. >=20 > LGTM with those nits fixed - for next stage 1, or for trunk now if > the > release maintainers are OK with it. >=20 > Thanks again for the patch, and sorry about the belated review. >=20 > Dave >=20 >=20 >=20 --=-nWhfu23k4fVT92Z8k2Fe Content-Disposition: attachment; filename="0001-libgccjit-Add-support-for-bitcasts-PR104071.patch" Content-Type: text/x-patch; name="0001-libgccjit-Add-support-for-bitcasts-PR104071.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxOTU4NzljMTM1OTI1YTJiYzJkNTMzNzQ3MTZkYzRiNTdjNzlkODQzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRvbmkgQm91Y2hlciA8Ym91YW50b0B6b2hvLmNvbT4KRGF0 ZTogV2VkLCA5IEp1biAyMDIxIDE4OjI5OjE0IC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gbGliZ2Nj aml0OiBBZGQgc3VwcG9ydCBmb3IgYml0Y2FzdHMgW1BSMTA0MDcxXQoKMjAyMi0wNC0wOSAgQW50 b25pIEJvdWNoZXIgPGJvdWFudG9Aem9oby5jb20+CgpnY2Mvaml0LwoJUFIgaml0LzEwNDA3MQoJ KiBkb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAoTElCR0NDSklUX0FCSV8yMSk6IE5ldyBB QkkgdGFnLgoJKiBkb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3Q6IEFkZCBkb2N1bWVudGF0aW9u IGZvciB0aGUKCWZ1bmN0aW9uIGdjY19qaXRfY29udGV4dF9uZXdfYml0Y2FzdC4KCSogaml0LXBs YXliYWNrLmNjOiBOZXcgZnVuY3Rpb24gKG5ld19iaXRjYXN0KS4KCSogaml0LXBsYXliYWNrLmg6 IE5ldyBmdW5jdGlvbiAobmV3X2JpdGNhc3QpLgoJKiBqaXQtcmVjb3JkaW5nLmNjOiBOZXcgZnVu Y3Rpb25zIChuZXdfYml0Y2FzdCwKCWJpdGNhc3Q6OnJlcGxheV9pbnRvLCBiaXRjYXN0Ojp2aXNp dF9jaGlsZHJlbiwKCWJpdGNhc3Q6Om1ha2VfZGVidWdfc3RyaW5nLCBiaXRjYXN0Ojp3cml0ZV9y ZXByb2R1Y2VyKS4KCSogaml0LXJlY29yZGluZy5oOiBOZXcgY2xhc3MgKGJpdGNhc3QpIGFuZCBu ZXcgZnVuY3Rpb24KCShuZXdfYml0Y2FzdCwgYml0Y2FzdDo6cmVwbGF5X2ludG8sIGJpdGNhc3Q6 OnZpc2l0X2NoaWxkcmVuLAoJYml0Y2FzdDo6bWFrZV9kZWJ1Z19zdHJpbmcsIGJpdGNhc3Q6Ondy aXRlX3JlcHJvZHVjZXIsCgliaXRjYXN0OjpnZXRfcHJlY2VkZW5jZSkuCgkqIGxpYmdjY2ppdC5j YzogTmV3IGZ1bmN0aW9uIChnY2Nfaml0X2NvbnRleHRfbmV3X2JpdGNhc3QpCgkqIGxpYmdjY2pp dC5oOiBOZXcgZnVuY3Rpb24gKGdjY19qaXRfY29udGV4dF9uZXdfYml0Y2FzdCkKCSogbGliZ2Nj aml0Lm1hcCAoTElCR0NDSklUX0FCSV8yMSk6IE5ldyBBQkkgdGFnLgoKZ2NjL3Rlc3RzdWl0ZS8K CVBSIGppdC8xMDQwNzEKCSogaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oOiBBZGQgbmV3 IHRlc3QtYml0Y2FzdC4KCSogaml0LmRnL3Rlc3QtYml0Y2FzdC5jOiBOZXcgdGVzdC4KCSogaml0 LmRnL3Rlc3QtZXJyb3ItYmFkLWJpdGNhc3QuYzogTmV3IHRlc3QuCgkqIGppdC5kZy90ZXN0LWVy cm9yLWJhZC1iaXRjYXN0Mi5jOiBOZXcgdGVzdC4KCmdjYy8KCVBSIGppdC8xMDQwNzEKCSogdG9w bGV2LmNjOiBDYWxsIHRoZSBuZXcgZnVuY3Rpb24gdHJlZV9jY19maW5hbGl6ZSBpbgoJdG9wbGV2 OjpmaW5hbGl6ZS4KCSogdHJlZS5jYzogTmV3IGZ1bmN0aW9ucyAoY2xlYXJfbm9uc3RhbmRhcmRf aW50ZWdlcl90eXBlX2NhY2hlCglhbmQgdHJlZV9jY19maW5hbGl6ZSkgdG8gY2xlYXIgdGhlIGNh Y2hlIG9mIG5vbi1zdGFuZGFyZCBpbnRlZ2VyCgl0eXBlcyB0byBhdm9pZCBoYXZpbmcgaXNzdWVz IHdpdGggc29tZSBvcHRpbWl6YXRpb25zIG9mCgliaXRjYXN0IHdoZXJlIHRoZSBTU0FfTkFNRSB3 aWxsIGhhdmUgYSBzaXplIG9mIGEgY2FjaGVkCglpbnRlZ2VyIHR5cGUgdGhhdCBzaG91bGQgaGF2 ZSBiZWVuIGludmFsaWRhdGVkLCBjYXVzaW5nIGEKCWNvbXBhcmlzb24gb2YgaW50ZWdlciBjb25z dGFudCB0byBmYWlsLgoJKiB0cmVlLmg6IE5ldyBmdW5jdGlvbiAodHJlZV9jY19maW5hbGl6ZSku Ci0tLQogZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdCAgICAgICAgIHwgIDkg KysrCiBnY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdCAgICAgICAgICAgfCAxOSAr KysrKysKIGdjYy9qaXQvaml0LXBsYXliYWNrLmNjICAgICAgICAgICAgICAgICAgICAgICB8IDI3 ICsrKysrKysrCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAgICAgICAg fCAgNSArKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjICAgICAgICAgICAgICAgICAgICAgIHwg NjYgKysrKysrKysrKysrKysrKysrKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAg ICAgICAgICAgICAgIHwgMzIgKysrKysrKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAyMiArKysrKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAxNSArKysrKwogZ2NjL2ppdC9saWJnY2NqaXQubWFwICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwt bm9uLWZhaWxpbmctdGVzdHMuaCAgfCAxMCArKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3Qt Yml0Y2FzdC5jICAgICAgICAgICB8IDYwICsrKysrKysrKysrKysrKysrCiBnY2MvdGVzdHN1aXRl L2ppdC5kZy90ZXN0LWVycm9yLWJhZC1iaXRjYXN0LmMgfCA2MiArKysrKysrKysrKysrKysrKwog Li4uL2ppdC5kZy90ZXN0LWVycm9yLWJhZC1iaXRjYXN0Mi5jICAgICAgICAgIHwgNjIgKysrKysr KysrKysrKysrKysKIGdjYy90b3BsZXYuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAxICsKIGdjYy90cmVlLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IDE1ICsrKysrCiBnY2MvdHJlZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgMSArCiAxNiBmaWxlcyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtYml0Y2FzdC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1iYWQtYml0Y2FzdC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1iYWQtYml0Y2Fz dDIuYwoKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0eS5yc3Qg Yi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CmluZGV4IDE2Y2ViZTMxYTEw Li42MTBkOWRjMTc1ZiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmls aXR5LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0CkBAIC0z MDIsMyArMzAyLDEyIEBAIHRocmVhZC1sb2NhbCBzdG9yYWdlIG1vZGVsIG9mIGEgdmFyaWFibGU6 CiBzZWN0aW9uIG9mIGEgdmFyaWFibGU6CiAKICAgKiA6ZnVuYzpgZ2NjX2ppdF9sdmFsdWVfc2V0 X2xpbmtfc2VjdGlvbmAKKworLi4gX0xJQkdDQ0pJVF9BQklfMjE6CisKK2BgTElCR0NDSklUX0FC SV8yMWBgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYGBMSUJHQ0NKSVRfQUJJXzIxYGAgY292 ZXJzIHRoZSBhZGRpdGlvbiBvZiBhbiBBUEkgZW50cnlwb2ludCB0byBiaXRjYXN0IGEKK3ZhbHVl IGZyb20gb25lIHR5cGUgdG8gYW5vdGhlcjoKKworICAqIDpmdW5jOmBnY2Nfaml0X2NvbnRleHRf bmV3X2JpdGNhc3RgCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25z LnJzdCBiL2djYy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0CmluZGV4IDc5MWEyMDM5 OGNhLi5lMGI2ZjQyNmFlZSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNz aW9ucy5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QKQEAgLTY0 OSw2ICs2NDksMjUgQEAgVHlwZS1jb2VyY2lvbgogICAgICAqIGludCA8LT4gYm9vbAogICAgICAq IFAqICA8LT4gUSosIGZvciBwb2ludGVyIHR5cGVzIFAgYW5kIFEKIAorLi4gZnVuY3Rpb246OiBn Y2Nfaml0X3J2YWx1ZSAqXAorICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2JpdGNh c3QgKGdjY19qaXRfY29udGV4dCAqY3R4dCxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2NjX2ppdF9sb2NhdGlvbiAqbG9jLFwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbHVlLFwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKnR5cGUp CisKKyAgIEdpdmVuIGFuIHJ2YWx1ZSBvZiBULCBiaXRjYXN0IGl0IHRvIGFub3RoZXIgdHlwZSwg bWVhbmluZyB0aGF0IHRoaXMgd2lsbAorICAgZ2VuZXJhdGUgYSBuZXcgcnZhbHVlIGJ5IGludGVy cHJldGluZyB0aGUgYml0cyBvZiBgYHJ2YWx1ZWBgIHRvIHRoZSBsYXlvdXQKKyAgIG9mIGBgdHlw ZWBgLgorCisgICBUaGUgdHlwZSBvZiBydmFsdWUgbXVzdCBiZSB0aGUgc2FtZSBzaXplIGFzIHRo ZSBzaXplIG9mIGBgdHlwZWBgLgorCisgICBUaGlzIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIDpy ZWY6YExJQkdDQ0pJVF9BQklfMjFgOyB5b3UgY2FuIHRlc3QgZm9yCisgICBpdHMgcHJlc2VuY2Ug dXNpbmcKKworICAgLi4gY29kZS1ibG9jazo6IGMKKworICAgICAgI2lmZGVmIExJQkdDQ0pJVF9I QVZFX2djY19qaXRfY29udGV4dF9uZXdfYml0Y2FzdAorCiBMdmFsdWVzCiAtLS0tLS0tCiAKZGlm ZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmNjIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2su Y2MKaW5kZXggZDE4MzVjNzk4NjMuLmQyZWZhZTFjMTYzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2pp dC1wbGF5YmFjay5jYworKysgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYwpAQCAtMTM5MCw2ICsx MzkwLDMzIEBAIG5ld19jYXN0IChwbGF5YmFjazo6bG9jYXRpb24gKmxvYywKICAgcmV0dXJuIG5l dyBydmFsdWUgKHRoaXMsIHRfY2FzdCk7CiB9CiAKK3BsYXliYWNrOjpydmFsdWUgKgorcGxheWJh Y2s6OmNvbnRleHQ6OgorbmV3X2JpdGNhc3QgKGxvY2F0aW9uICpsb2MsCisJCSAgICAgICBydmFs dWUgKmV4cHIsCisJCSAgICAgICB0eXBlICp0eXBlXykKK3sKKyAgdHJlZSBleHByX3NpemUgPSBU WVBFX1NJWkUgKGV4cHItPmdldF90eXBlICgpLT5hc190cmVlICgpKTsKKyAgdHJlZSB0eXBlX3Np emUgPSBUWVBFX1NJWkUgKHR5cGVfLT5hc190cmVlICgpKTsKKyAgdHJlZSB0X2V4cHIgPSBleHBy LT5hc190cmVlICgpOworICB0cmVlIHRfZHN0X3R5cGUgPSB0eXBlXy0+YXNfdHJlZSAoKTsKKyAg aWYgKGV4cHJfc2l6ZSAhPSB0eXBlX3NpemUpCisgIHsKKyAgICBhY3RpdmVfcGxheWJhY2tfY3R4 dC0+YWRkX2Vycm9yIChsb2MsCisgICAgICAiYml0Y2FzdCB3aXRoIHR5cGVzIG9mIGRpZmZlcmVu dCBzaXplcyIpOworICAgIGZwcmludGYgKHN0ZGVyciwgImlucHV0IGV4cHJlc3Npb24gKHNpemU6 ICVsZCk6XG4iLAorICAgICAgdHJlZV90b191aHdpIChleHByX3NpemUpKTsKKyAgICBkZWJ1Z190 cmVlICh0X2V4cHIpOworICAgIGZwcmludGYgKHN0ZGVyciwgInJlcXVlc3RlZCB0eXBlIChzaXpl OiAlbGQpOlxuIiwKKyAgICAgIHRyZWVfdG9fdWh3aSAodHlwZV9zaXplKSk7CisgICAgZGVidWdf dHJlZSAodF9kc3RfdHlwZSk7CisgIH0KKyAgdHJlZSB0X2JpdGNhc3QgPSBidWlsZDEgKFZJRVdf Q09OVkVSVF9FWFBSLCB0X2RzdF90eXBlLCB0X2V4cHIpOworICBpZiAobG9jKQorICAgIHNldF90 cmVlX2xvY2F0aW9uICh0X2JpdGNhc3QsIGxvYyk7CisgIHJldHVybiBuZXcgcnZhbHVlICh0aGlz LCB0X2JpdGNhc3QpOworfQorCiAvKiBDb25zdHJ1Y3QgYSBwbGF5YmFjazo6bHZhbHVlIGluc3Rh bmNlICh3cmFwcGluZyBhIHRyZWUpIGZvciBhbgogICAgYXJyYXkgYWNjZXNzLiAgKi8KIApkaWZm IC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suaCBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgK aW5kZXggYzkzZDcwNTVkNDMuLjViMTA3YmU5ZDY5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5oCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKQEAgLTE4MCw2ICsxODAsMTEg QEAgcHVibGljOgogCSAgICBydmFsdWUgKmV4cHIsCiAJICAgIHR5cGUgKnR5cGVfKTsKIAorICBy dmFsdWUgKgorICBuZXdfYml0Y2FzdCAobG9jYXRpb24gKmxvYywKKwkgICAgICAgcnZhbHVlICpl eHByLAorCSAgICAgICB0eXBlICp0eXBlXyk7CisKICAgbHZhbHVlICoKICAgbmV3X2FycmF5X2Fj Y2VzcyAobG9jYXRpb24gKmxvYywKIAkJICAgIHJ2YWx1ZSAqcHRyLApkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCmluZGV4IDFl M2ZhZGZhY2Q3Li5lMTAyOTA4NmRhOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5n LmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jYwpAQCAtMTI0Miw2ICsxMjQyLDIyIEBA IHJlY29yZGluZzo6Y29udGV4dDo6bmV3X2Nhc3QgKHJlY29yZGluZzo6bG9jYXRpb24gKmxvYywK ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLyogQ3JlYXRlIGEgcmVjb3JkaW5nOjpiaXRjYXN0IGlu c3RhbmNlIGFuZCBhZGQgaXQgdG8gdGhpcyBjb250ZXh0J3MgbGlzdAorICAgb2YgbWVtZW50b3Mu CisKKyAgIEltcGxlbWVudHMgdGhlIHBvc3QtZXJyb3ItY2hlY2tpbmcgcGFydCBvZgorICAgZ2Nj X2ppdF9jb250ZXh0X25ld19iaXRjYXN0LiAgKi8KKworcmVjb3JkaW5nOjpydmFsdWUgKgorcmVj b3JkaW5nOjpjb250ZXh0OjpuZXdfYml0Y2FzdCAobG9jYXRpb24gKmxvYywKKwkJCQkgcnZhbHVl ICpleHByLAorCQkJCSB0eXBlICp0eXBlXykKK3sKKyAgcmVjb3JkaW5nOjpydmFsdWUgKnJlc3Vs dCA9IG5ldyBiaXRjYXN0ICh0aGlzLCBsb2MsIGV4cHIsIHR5cGVfKTsKKyAgcmVjb3JkIChyZXN1 bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBDcmVhdGUgYSByZWNvcmRpbmc6OmNhbGwg aW5zdGFuY2UgYW5kIGFkZCBpdCB0byB0aGlzIGNvbnRleHQncyBsaXN0CiAgICBvZiBtZW1lbnRv cy4KIApAQCAtNTc0MCw2ICs1NzU2LDU2IEBAIHJlY29yZGluZzo6Y2FzdDo6d3JpdGVfcmVwcm9k dWNlciAocmVwcm9kdWNlciAmcikKIAkgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKGdldF90 eXBlICgpKSk7CiB9CiAKKy8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJl Y29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KKyAgIGZvciByZWNvcmRpbmc6OmJpdGNhc3Qu ICAqLworCit2b2lkCityZWNvcmRpbmc6OmJpdGNhc3Q6OnJlcGxheV9pbnRvIChyZXBsYXllciAq cikKK3sKKyAgc2V0X3BsYXliYWNrX29iaiAoci0+bmV3X2JpdGNhc3QgKHBsYXliYWNrX2xvY2F0 aW9uIChyLCBtX2xvYyksCisJCQkJICAgIG1fcnZhbHVlLT5wbGF5YmFja19ydmFsdWUgKCksCisJ CQkJICAgIGdldF90eXBlICgpLT5wbGF5YmFja190eXBlICgpKSk7Cit9CisKKy8qIEltcGxlbWVu dGF0aW9uIG9mIHB1cmUgdmlydHVhbCBob29rIHJlY29yZGluZzo6cnZhbHVlOjp2aXNpdF9jaGls ZHJlbgorICAgZm9yIHJlY29yZGluZzo6Yml0Y2FzdC4gICovCit2b2lkCityZWNvcmRpbmc6OmJp dGNhc3Q6OnZpc2l0X2NoaWxkcmVuIChydmFsdWVfdmlzaXRvciAqdikKK3sKKyAgdi0+dmlzaXQg KG1fcnZhbHVlKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgcmVjb3JkaW5nOjptZW1lbnRv OjptYWtlX2RlYnVnX3N0cmluZyBmb3IKKyAgIGNhc3RzLiAgKi8KKworcmVjb3JkaW5nOjpzdHJp bmcgKgorcmVjb3JkaW5nOjpiaXRjYXN0OjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICBlbnVt IHByZWNlZGVuY2UgcHJlYyA9IGdldF9wcmVjZWRlbmNlICgpOworICByZXR1cm4gc3RyaW5nOjpm cm9tX3ByaW50ZiAobV9jdHh0LAorCQkJICAgICAgImJpdGNhc3QoJXMsICVzKSIsCisJCQkgICAg ICBtX3J2YWx1ZS0+Z2V0X2RlYnVnX3N0cmluZ19wYXJlbnMgKHByZWMpLAorCQkJICAgICAgZ2V0 X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBv ZiByZWNvcmRpbmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVjZXIgZm9yIGNhc3RzLiAgKi8KKwor dm9pZAorcmVjb3JkaW5nOjpiaXRjYXN0Ojp3cml0ZV9yZXByb2R1Y2VyIChyZXByb2R1Y2VyICZy KQoreworICBjb25zdCBjaGFyICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlzLCAicnZhbHVl Iik7CisgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVlIColcyA9XG4iCisJICAgIiAgICBnY2Nf aml0X2NvbnRleHRfbmV3X2JpdGNhc3QgKCVzLFxuIgorCSAgICIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAlcywgLyogZ2NjX2ppdF9sb2NhdGlvbiAqbG9jICovXG4iCisJICAgIiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzLCAvKiBnY2Nfaml0X3J2YWx1ZSAqcnZh bHVlICovXG4iCisJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzKTsgLyog Z2NjX2ppdF90eXBlICp0eXBlICovXG4iLAorCSAgIGlkLAorCSAgIHIuZ2V0X2lkZW50aWZpZXIg KGdldF9jb250ZXh0ICgpKSwKKwkgICByLmdldF9pZGVudGlmaWVyIChtX2xvYyksCisJICAgci5n ZXRfaWRlbnRpZmllcl9hc19ydmFsdWUgKG1fcnZhbHVlKSwKKwkgICByLmdldF9pZGVudGlmaWVy X2FzX3R5cGUgKGdldF90eXBlICgpKSk7Cit9CisKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBj bGFzcyBnY2M6OmppdDo6cmVjb3JkaW5nOjpiYXNlX2NhbGwuICAqLwogCiAvKiBUaGUgY29uc3Ry dWN0b3IgZm9yIGdjYzo6aml0OjpyZWNvcmRpbmc6OmJhc2VfY2FsbC4gICovCmRpZmYgLS1naXQg YS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmluZGV4 IDg0NmQ2NWNiMjAyLi5lZDAzYjNhMjRjOCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3Jk aW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTIwNSw2ICsyMDUsMTEgQEAg cHVibGljOgogCSAgICBydmFsdWUgKmV4cHIsCiAJICAgIHR5cGUgKnR5cGVfKTsKIAorICBydmFs dWUgKgorICBuZXdfYml0Y2FzdCAobG9jYXRpb24gKmxvYywKKwkgICAgICAgcnZhbHVlICpleHBy LAorCSAgICAgICB0eXBlICp0eXBlXyk7CisKICAgbHZhbHVlICoKICAgbmV3X2FycmF5X2FjY2Vz cyAobG9jYXRpb24gKmxvYywKIAkJICAgIHJ2YWx1ZSAqcHRyLApAQCAtMTY5MSw2ICsxNjk2LDMz IEBAIHByaXZhdGU6CiAgIHJ2YWx1ZSAqbV9ydmFsdWU7CiB9OwogCitjbGFzcyBiaXRjYXN0IDog cHVibGljIHJ2YWx1ZQoreworcHVibGljOgorICBiaXRjYXN0IChjb250ZXh0ICpjdHh0LAorCSAg IGxvY2F0aW9uICpsb2MsCisJICAgcnZhbHVlICphLAorCSAgIHR5cGUgKnR5cGVfKQorICA6IHJ2 YWx1ZSAoY3R4dCwgbG9jLCB0eXBlXyksCisgICAgbV9ydmFsdWUgKGEpCisgIHt9CisKKyAgdm9p ZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKnIpIEZJTkFMIE9WRVJSSURFOworCisgIHZvaWQgdmlz aXRfY2hpbGRyZW4gKHJ2YWx1ZV92aXNpdG9yICp2KSBGSU5BTCBPVkVSUklERTsKKworcHJpdmF0 ZToKKyAgc3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgRklOQUwgT1ZFUlJJREU7CisgIHZv aWQgd3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgRklOQUwgT1ZFUlJJREU7CisgIGVu dW0gcHJlY2VkZW5jZSBnZXRfcHJlY2VkZW5jZSAoKSBjb25zdCBGSU5BTCBPVkVSUklERQorICB7 CisgICAgcmV0dXJuIFBSRUNFREVOQ0VfQ0FTVDsKKyAgfQorCitwcml2YXRlOgorICBydmFsdWUg Km1fcnZhbHVlOworfTsKKwogY2xhc3MgYmFzZV9jYWxsIDogcHVibGljIHJ2YWx1ZQogewogIHB1 YmxpYzoKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNjIGIvZ2NjL2ppdC9saWJnY2Nq aXQuY2MKaW5kZXggNGMzNTJlOGM5M2QuLjM1MzUyMDM5NzVjIDEwMDY0NAotLS0gYS9nY2Mvaml0 L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwpAQCAtMjQwNSw2ICsyNDA1 LDI4IEBAIGdjY19qaXRfY29udGV4dF9uZXdfY2FzdCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAog ICByZXR1cm4gc3RhdGljX2Nhc3QgPGdjY19qaXRfcnZhbHVlICo+IChjdHh0LT5uZXdfY2FzdCAo bG9jLCBydmFsdWUsIHR5cGUpKTsKIH0KIAorLyogUHVibGljIGVudHJ5cG9pbnQuICBTZWUgZGVz Y3JpcHRpb24gaW4gbGliZ2Njaml0LmguCisKKyAgIEFmdGVyIGVycm9yLWNoZWNraW5nLCB0aGUg cmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCisgICBnY2M6OmppdDo6cmVjb3JkaW5nOjpjb250ZXh0 OjpuZXdfYml0Y2FzdCBtZXRob2QgaW4gaml0LXJlY29yZGluZy5jLiAgKi8KKworZ2NjX2ppdF9y dmFsdWUgKgorZ2NjX2ppdF9jb250ZXh0X25ld19iaXRjYXN0IChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsCisJCQkgICAgIGdjY19qaXRfbG9jYXRpb24gKmxvYywKKwkJCSAgICAgZ2NjX2ppdF9ydmFs dWUgKnJ2YWx1ZSwKKwkJCSAgICAgZ2NjX2ppdF90eXBlICp0eXBlKQoreworICBSRVRVUk5fTlVM TF9JRl9GQUlMIChjdHh0LCBOVUxMLCBsb2MsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19G VU5DIChjdHh0LT5nZXRfbG9nZ2VyICgpKTsKKyAgLyogTE9DIGNhbiBiZSBOVUxMLiAgKi8KKyAg UkVUVVJOX05VTExfSUZfRkFJTCAocnZhbHVlLCBjdHh0LCBsb2MsICJOVUxMIHJ2YWx1ZSIpOwor ICBSRVRVUk5fTlVMTF9JRl9GQUlMICh0eXBlLCBjdHh0LCBsb2MsICJOVUxMIHR5cGUiKTsKKyAg LyogV2UgY2Fubm90IGNoZWNrIGlmIHRoZSBzaXplIG9mIHJ2YWx1ZSBtYXRjaGVzIHRoZSBzaXpl IG9mIHR5cGUgaGVyZSwgc28KKyAgIHdlJ2xsIGRvIGl0IGF0IHBsYXliYWNrLiAqLworCisgIHJl dHVybiBzdGF0aWNfY2FzdCA8Z2NjX2ppdF9ydmFsdWUgKj4gKGN0eHQtPm5ld19iaXRjYXN0IChs b2MsIHJ2YWx1ZSwgdHlwZSkpOworfQorCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNj cmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSBy ZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lmgg Yi9nY2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IDJhNWZmYWNiMWZlLi45NjBlNGY0MjYxZSAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBA IC0xMjA2LDYgKzEyMDYsMjEgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19jYXN0IChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCiAJCQkgIGdjY19qaXRfcnZhbHVlICpydmFsdWUsCiAJCQkgIGdjY19qaXRf dHlwZSAqdHlwZSk7CiAKKy8qIFJlaW50ZXJwcmV0IGEgdmFsdWUgYXMgYW5vdGhlciB0eXBlLgor CisjZGVmaW5lIExJQkdDQ0pJVF9IQVZFX2djY19qaXRfY29udGV4dF9uZXdfYml0Y2FzdAorCisg ICBUaGUgdHlwZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBzaXplLgorCisgICBUaGlzIEFQSSBlbnRy eXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzIxOyB5b3UgY2FuIHRlc3QgZm9yIGl0 cworICAgcHJlc2VuY2UgdXNpbmcKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX2djY19qaXRf Y29udGV4dF9uZXdfYml0Y2FzdCAgKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0 X2NvbnRleHRfbmV3X2JpdGNhc3QgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJCSAgICAgZ2Nj X2ppdF9sb2NhdGlvbiAqbG9jLAorCQkJICAgICBnY2Nfaml0X3J2YWx1ZSAqcnZhbHVlLAorCQkJ ICAgICBnY2Nfaml0X3R5cGUgKnR5cGUpOworCiBleHRlcm4gZ2NjX2ppdF9sdmFsdWUgKgogZ2Nj X2ppdF9jb250ZXh0X25ld19hcnJheV9hY2Nlc3MgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKIAkJ CQkgIGdjY19qaXRfbG9jYXRpb24gKmxvYywKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0 Lm1hcCBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcAppbmRleCBmMzczZmQzOWFjNy4uMzhjMzU1NDM3 YmYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0Lm1hcAorKysgYi9nY2Mvaml0L2xpYmdj Y2ppdC5tYXAKQEAgLTIzOCw4ICsyMzgsMTcgQEAgTElCR0NDSklUX0FCSV8xOCB7CiB9IExJQkdD Q0pJVF9BQklfMTc7CiAKIExJQkdDQ0pJVF9BQklfMTkgeworICBnbG9iYWw6CiAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19hcnJheV9jb25zdHJ1Y3RvcjsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3 X3N0cnVjdF9jb25zdHJ1Y3RvcjsKICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3VuaW9uX2NvbnN0 cnVjdG9yOwogICAgIGdjY19qaXRfZ2xvYmFsX3NldF9pbml0aWFsaXplcl9ydmFsdWU7CiB9IExJ QkdDQ0pJVF9BQklfMTg7CisKK0xJQkdDQ0pJVF9BQklfMjAgeworfSBMSUJHQ0NKSVRfQUJJXzE5 OworCitMSUJHQ0NKSVRfQUJJXzIxIHsKKyAgZ2xvYmFsOgorICAgIGdjY19qaXRfY29udGV4dF9u ZXdfYml0Y2FzdDsKK30gTElCR0NDSklUX0FCSV8yMDsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3Vp dGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5oIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv YWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKaW5kZXggMjlhZmUwNjRkYjYuLjY1NjM1MWVkY2UxIDEw MDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAor KysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaApAQCAtNzcs NiArNzcsMTMgQEAKIC8qIHRlc3QtYnVpbHRpbi11bnJlYWNoYWJsZS5jOiBXZSBkb24ndCBhZGQg dGhpcyBvbmUsIHNpbmNlIGl0IHRvdWNoZXMKICAgIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2Yg dGhlIGNvbnRleHQgYXMgYSB3aG9sZS4gICovCiAKKy8qIHRlc3QtYml0Y2FzdC5jICovCisjZGVm aW5lIGNyZWF0ZV9jb2RlIGNyZWF0ZV9jb2RlX2JpdGNhc3QKKyNkZWZpbmUgdmVyaWZ5X2NvZGUg dmVyaWZ5X2NvZGVfYml0Y2FzdAorI2luY2x1ZGUgInRlc3QtYml0Y2FzdC5jIgorI3VuZGVmIGNy ZWF0ZV9jb2RlCisjdW5kZWYgdmVyaWZ5X2NvZGUKKwogLyogdGVzdC1jYWxsaW5nLWV4dGVybmFs LWZ1bmN0aW9uLmMgKi8KICNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY2FsbGluZ19l eHRlcm5hbF9mdW5jdGlvbgogI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9jYWxsaW5n X2V4dGVybmFsX2Z1bmN0aW9uCkBAIC00MDAsNiArNDA3LDkgQEAgY29uc3Qgc3RydWN0IHRlc3Rj YXNlIHRlc3RjYXNlc1tdID0gewogICB7ImJ1aWx0aW4tbWVtY3B5IiwKICAgIGNyZWF0ZV9jb2Rl X2J1aWx0aW5fbWVtY3B5LAogICAgdmVyaWZ5X2NvZGVfYnVpbHRpbl9tZW1jcHl9LAorICB7ImJp dGNhc3QiLAorICAgY3JlYXRlX2NvZGVfYml0Y2FzdCwKKyAgIHZlcmlmeV9jb2RlX2JpdGNhc3R9 LAogICB7ImNhbGxpbmdfZXh0ZXJuYWxfZnVuY3Rpb24iLAogICAgY3JlYXRlX2NvZGVfY2FsbGlu Z19leHRlcm5hbF9mdW5jdGlvbiwKICAgIHZlcmlmeV9jb2RlX2NhbGxpbmdfZXh0ZXJuYWxfZnVu Y3Rpb259LApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1iaXRjYXN0LmMg Yi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWJpdGNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uMTZkODg5ZDNhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2ppdC5kZy90ZXN0LWJpdGNhc3QuYwpAQCAtMCwwICsxLDYwIEBACisjaW5jbHVk ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwor I2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitj cmVhdGVfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7Cisg IC8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CitpbnQKK215X2JpdGNh c3QgKGZsb2F0IHgpCit7CisgICByZXR1cm4gYml0Y2FzdCh4LCBpbnQpOworfQorICAgKi8KKyAg Z2NjX2ppdF90eXBlICppbnRfdHlwZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF9pbnRfdHlw ZSAoY3R4dCwgNCwgMSk7CisgIGdjY19qaXRfdHlwZSAqZmxvYXRfdHlwZSA9CisgICAgZ2NjX2pp dF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfRkxPQVQpOworCisgIGdjY19q aXRfcGFyYW0gKnggPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKAorICAgICAgY3R4 dCwKKyAgICAgIE5VTEwsCisgICAgICBmbG9hdF90eXBlLCAieCIpOworICBnY2Nfaml0X3BhcmFt ICpwYXJhbXNbMV0gPSB7eH07CisgIGdjY19qaXRfZnVuY3Rpb24gKmZ1bmMgPQorICAgIGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsCisJCQkJICBOVUxMLAorCQkJCSAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkgIGludF90eXBlLAorCQkJCSAgIm15X2JpdGNhc3Qi LAorCQkJCSAgMSwgcGFyYW1zLCAwKTsKKworICBnY2Nfaml0X2Jsb2NrICppbml0aWFsID0KKyAg ICBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZnVuYywgImluaXRpYWwiKTsKKworICBnY2Nf aml0X2Jsb2NrX2VuZF93aXRoX3JldHVybihpbml0aWFsLCBOVUxMLAorICAgIGdjY19qaXRfY29u dGV4dF9uZXdfYml0Y2FzdChjdHh0LAorICAgICAgICBOVUxMLAorICAgICAgICBnY2Nfaml0X3Bh cmFtX2FzX3J2YWx1ZSh4KSwKKyAgICAgICAgaW50X3R5cGUKKyAgICApKTsKK30KKwordm9pZAor dmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3Vs dCkKK3sKKyAgdHlwZWRlZiBpbnQgKCpteV9iaXRjYXN0X2ZuX3R5cGUpIChmbG9hdCk7CisgIENI RUNLX05PTl9OVUxMIChyZXN1bHQpOworICBteV9iaXRjYXN0X2ZuX3R5cGUgbXlfYml0Y2FzdCA9 CisgICAgKG15X2JpdGNhc3RfZm5fdHlwZSlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0 LCAibXlfYml0Y2FzdCIpOworICBDSEVDS19OT05fTlVMTCAobXlfYml0Y2FzdCk7CisgIGludCB2 YWwgPSBteV9iaXRjYXN0ICgtNS4xMjk4NzE0KTsKKyAgbm90ZSAoIm15X2JpdGNhc3QgcmV0dXJu ZWQ6ICVkIiwgdmFsKTsKKyAgQ0hFQ0tfVkFMVUUgKHZhbCwgMzU1NjkyMDEpOworfQpkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1iYWQtYml0Y2FzdC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1lcnJvci1iYWQtYml0Y2FzdC5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDI4OTA2MDVhZAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItYmFkLWJpdGNhc3QuYwpAQCAtMCwwICsx LDYyIEBACisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1 ZGUgImxpYmdjY2ppdC5oIgorCisjaW5jbHVkZSAiaGFybmVzcy5oIgorCit2b2lkCitjcmVhdGVf Y29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCB2b2lkICp1c2VyX2RhdGEpCit7CisgIC8qIExl dCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6CisKKyAgICAgaW50CisgICAgIHRl c3RfZm4gKCkKKyAgICAgeworICAgICAgIGNoYXIgZls0MDk2XTsKKyAgICAgICByZXR1cm4gYml0 Y2FzdChmLCBpbnQpOworICAgICB9CisKKyAgICAgYW5kIHZlcmlmeSB0aGF0IHRoZSBBUEkgY29t cGxhaW5zIGFib3V0IHRoZSBiYWQgY2FzdC4KKyAgKi8KKyAgZ2NjX2ppdF90eXBlICppbnRfdHlw ZSA9CisgICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5U KTsKKyAgZ2NjX2ppdF90eXBlICpjaGFyX3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9nZXRf dHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0NIQVIpOworCisKKyAgZ2NjX2ppdF90eXBlICphcnJh eV90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsIE5VTEws IGNoYXJfdHlwZSwgNDA5Nik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqdGVzdF9mbiA9CisgICAg Z2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVMTCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludF90eXBlLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ0ZXN0X2ZuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICBnY2Nf aml0X2x2YWx1ZSAqZiA9CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9uZXdfbG9jYWwgKAorICAgICAg dGVzdF9mbiwKKyAgICAgIE5VTEwsCisgICAgICBhcnJheV90eXBlLCAiZiIpOworCisgIGdjY19q aXRfYmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKHRlc3RfZm4sIE5V TEwpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuICgKKyAgICBibG9jaywgTlVM TCwKKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2JpdGNhc3QgKGN0eHQsIE5VTEwsCisJCQkgICAg ICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYpLAorCQkJICAgICAgaW50X3R5cGUpKTsKK30K Kwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1 bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfVkFMVUUgKHJlc3VsdCwgTlVMTCk7CisKKyAgLyogVmVy aWZ5IHRoYXQgdGhlIGNvcnJlY3QgZXJyb3IgbWVzc2FnZSB3YXMgZW1pdHRlZC4gICovCisgIENI RUNLX1NUUklOR19WQUxVRSAoZ2NjX2ppdF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCks CisJCSAgICAgICJiaXRjYXN0IHdpdGggdHlwZXMgb2YgZGlmZmVyZW50IHNpemVzIik7Cit9CisK ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItYmFkLWJpdGNhc3Qy LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWJhZC1iaXRjYXN0Mi5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MDJhZTQwNzA3NgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItYmFkLWJpdGNhc3QyLmMK QEAgLTAsMCArMSw2MiBAQAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ CisKKyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9p ZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQor eworICAvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50IG9mOgorCisgICAgIGNo YXJbNDA5Nl0KKyAgICAgdGVzdF9mbiAoKQorICAgICB7CisgICAgICAgaW50IGY7CisgICAgICAg cmV0dXJuIGJpdGNhc3QoZiwgY2hhcls0MDk2XSk7CisgICAgIH0KKworICAgICBhbmQgdmVyaWZ5 IHRoYXQgdGhlIEFQSSBjb21wbGFpbnMgYWJvdXQgdGhlIGJhZCBjYXN0LgorICAqLworICBnY2Nf aml0X3R5cGUgKmludF90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQs IEdDQ19KSVRfVFlQRV9JTlQpOworICBnY2Nfaml0X3R5cGUgKmNoYXJfdHlwZSA9CisgICAgZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfQ0hBUik7CisKKworICBn Y2Nfaml0X3R5cGUgKmFycmF5X3R5cGUgPQorICAgIGdjY19qaXRfY29udGV4dF9uZXdfYXJyYXlf dHlwZSAoY3R4dCwgTlVMTCwgY2hhcl90eXBlLCA0MDk2KTsKKworICBnY2Nfaml0X2Z1bmN0aW9u ICp0ZXN0X2ZuID0KKyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQ T1JURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfdHlwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9mbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwKTsKKyAgZ2NjX2ppdF9sdmFsdWUgKmYgPQorICAgIGdjY19qaXRfZnVuY3Rpb25f bmV3X2xvY2FsICgKKyAgICAgIHRlc3RfZm4sCisgICAgICBOVUxMLAorICAgICAgaW50X3R5cGUs ICJmIik7CisKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19i bG9jayAodGVzdF9mbiwgTlVMTCk7CisKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4g KAorICAgIGJsb2NrLCBOVUxMLAorICAgIGdjY19qaXRfY29udGV4dF9uZXdfYml0Y2FzdCAoY3R4 dCwgTlVMTCwKKwkJCSAgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZiksCisJCQkgICAg ICBhcnJheV90eXBlKSk7Cit9CisKK3ZvaWQKK3ZlcmlmeV9jb2RlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsIGdjY19qaXRfcmVzdWx0ICpyZXN1bHQpCit7CisgIENIRUNLX1ZBTFVFIChyZXN1bHQs IE5VTEwpOworCisgIC8qIFZlcmlmeSB0aGF0IHRoZSBjb3JyZWN0IGVycm9yIG1lc3NhZ2Ugd2Fz IGVtaXR0ZWQuICAqLworICBDSEVDS19TVFJJTkdfVkFMVUUgKGdjY19qaXRfY29udGV4dF9nZXRf Zmlyc3RfZXJyb3IgKGN0eHQpLAorCQkgICAgICAiYml0Y2FzdCB3aXRoIHR5cGVzIG9mIGRpZmZl cmVudCBzaXplcyIpOworfQorCmRpZmYgLS1naXQgYS9nY2MvdG9wbGV2LmNjIGIvZ2NjL3RvcGxl di5jYwppbmRleCA1MzRkYTE0NjJlOC4uYmM0OTIxOTc0ZWIgMTAwNjQ0Ci0tLSBhL2djYy90b3Bs ZXYuY2MKKysrIGIvZ2NjL3RvcGxldi5jYwpAQCAtMjM2OCw2ICsyMzY4LDcgQEAgdG9wbGV2Ojpm aW5hbGl6ZSAodm9pZCkKICAgZ2NzZV9jX2ZpbmFsaXplICgpOwogICBpcGFfY3BfY19maW5hbGl6 ZSAoKTsKICAgaXJhX2Nvc3RzX2NfZmluYWxpemUgKCk7CisgIHRyZWVfY2NfZmluYWxpemUgKCk7 CiAKICAgLyogc2F2ZV9kZWNvZGVkX29wdGlvbnMgdXNlcyBvcHRzX29ic3RhY2ssIHNvIHRoZXNl IG11c3QKICAgICAgYmUgY2xlYW5lZCB1cCB0b2dldGhlci4gICovCmRpZmYgLS1naXQgYS9nY2Mv dHJlZS5jYyBiL2djYy90cmVlLmNjCmluZGV4IGFlMTU5ZWUyMGNlLi5mZTlkOTA4MzAyNiAxMDA2 NDQKLS0tIGEvZ2NjL3RyZWUuY2MKKysrIGIvZ2NjL3RyZWUuY2MKQEAgLTY5NjMsNiArNjk2Mywx NSBAQCBidWlsZF9yZWZlcmVuY2VfdHlwZSAodHJlZSB0b190eXBlKQogICAoSE9TVF9CSVRTX1BF Ul9XSURFX0lOVCA+IDY0ID8gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA6IDY0KQogc3RhdGljIEdU WSgoKSkgdHJlZSBub25zdGFuZGFyZF9pbnRlZ2VyX3R5cGVfY2FjaGVbMiAqIE1BWF9JTlRfQ0FD SEVEX1BSRUMgKyAyXTsKIAorc3RhdGljIHZvaWQKK2NsZWFyX25vbnN0YW5kYXJkX2ludGVnZXJf dHlwZV9jYWNoZSAodm9pZCkKK3sKKyAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgMiAqIE1BWF9J TlRfQ0FDSEVEX1BSRUMgKyAyIDsgaSsrKQorICB7CisgICAgbm9uc3RhbmRhcmRfaW50ZWdlcl90 eXBlX2NhY2hlW2ldID0gTlVMTDsKKyAgfQorfQorCiAvKiBCdWlsZHMgYSBzaWduZWQgb3IgdW5z aWduZWQgaW50ZWdlciB0eXBlIG9mIHByZWNpc2lvbiBQUkVDSVNJT04uCiAgICBVc2VkIGZvciBD IGJpdGZpZWxkcyB3aG9zZSBwcmVjaXNpb24gZG9lcyBub3QgbWF0Y2ggdGhhdCBvZgogICAgYnVp bHQtaW4gdGFyZ2V0IHR5cGVzLiAgKi8KQEAgLTE0NTY1LDYgKzE0NTc0LDEyIEBAIGdldF9hdHRy X25vbnN0cmluZ19kZWNsICh0cmVlIGV4cHIsIHRyZWUgKnJlZikKICAgcmV0dXJuIE5VTExfVFJF RTsKIH0KIAordm9pZAordHJlZV9jY19maW5hbGl6ZSAodm9pZCkKK3sKKyAgY2xlYXJfbm9uc3Rh bmRhcmRfaW50ZWdlcl90eXBlX2NhY2hlICgpOworfQorCiAjaWYgQ0hFQ0tJTkdfUAogCiBuYW1l c3BhY2Ugc2VsZnRlc3QgewpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUuaCBiL2djYy90cmVlLmgKaW5k ZXggMzBiYzUzYzI5OTYuLmJmODg2ZmMyNDcyIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5oCisrKyBi L2djYy90cmVlLmgKQEAgLTUzODUsNiArNTM4NSw3IEBAIGV4dGVybiBib29sIHJlYWxfbWludXNf b25lcCAoY29uc3RfdHJlZSk7CiBleHRlcm4gdm9pZCBpbml0X3R0cmVlICh2b2lkKTsKIGV4dGVy biB2b2lkIGJ1aWxkX2NvbW1vbl90cmVlX25vZGVzIChib29sKTsKIGV4dGVybiB2b2lkIGJ1aWxk X2NvbW1vbl9idWlsdGluX25vZGVzICh2b2lkKTsKK2V4dGVybiB2b2lkIHRyZWVfY2NfZmluYWxp emUgKHZvaWQpOwogZXh0ZXJuIHRyZWUgYnVpbGRfbm9uc3RhbmRhcmRfaW50ZWdlcl90eXBlICh1 bnNpZ25lZCBIT1NUX1dJREVfSU5ULCBpbnQpOwogZXh0ZXJuIHRyZWUgYnVpbGRfbm9uc3RhbmRh cmRfYm9vbGVhbl90eXBlICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKTsKIGV4dGVybiB0cmVlIGJ1 aWxkX3JhbmdlX3R5cGUgKHRyZWUsIHRyZWUsIHRyZWUpOwotLSAKMi4yNi4yLjcuZzE5ZGI5Y2Zi NjguZGlydHkKCg== --=-nWhfu23k4fVT92Z8k2Fe--