From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 96712 invoked by alias); 9 Mar 2015 14:00:45 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 96689 invoked by uid 89); 9 Mar 2015 14:00:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=2.2 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_FROM_URIBL_PCCC,RCVD_IN_DNSWL_LOW,SPF_PASS,UNSUBSCRIBE_BODY autolearn=no version=3.3.2 X-HELO: mail-vc0-f169.google.com Received: from mail-vc0-f169.google.com (HELO mail-vc0-f169.google.com) (209.85.220.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 09 Mar 2015 14:00:23 +0000 Received: by mail-vc0-f169.google.com with SMTP id im6so17424976vcb.0 for ; Mon, 09 Mar 2015 07:00:20 -0700 (PDT) X-Received: by 10.52.29.235 with SMTP id n11mr33624456vdh.75.1425909620624; Mon, 09 Mar 2015 07:00:20 -0700 (PDT) MIME-Version: 1.0 Received: by 10.53.9.230 with HTTP; Mon, 9 Mar 2015 06:59:59 -0700 (PDT) From: Andrew Sutton Date: Mon, 09 Mar 2015 14:00:00 -0000 Message-ID: Subject: [c++-concepts] Constraint processing updates To: gcc-patches , Jason Merrill , Ville Voutilainen , Braden Obrzut Content-Type: multipart/mixed; boundary=20cf3079bd8e6b7bb20510db7441 X-SW-Source: 2015-03/txt/msg00465.txt.bz2 --20cf3079bd8e6b7bb20510db7441 Content-Type: text/plain; charset=UTF-8 Content-length: 15299 Now that the concepts PDTS has shipped, I've had time to finish a very large backlog of changes to the implementation. The attached patch (probably non-conforming since it's a git patch) brings constraint processing much more into line with the current specification. Sorry for the big patch, but doing it in small patches would have left the branch broken for about a month. Here is a high-level summary of changes: - Move constraints out of declaration nodes and into a separate hash table (and actually make that work with the GC so nodes don't magically change when compiling -- I hate you, GC). - Define constraints as a completely separate set of nodes that do not interoperate with the usual expression processing (these nodes end in _CONSTR). Making constraints completely separate from expressions brings a much greater clarity to the constraint processing rules. - Redefine constraint normalization in terms of constraints instead of expressions. Implement concept lifting (inlining of concept definitions to make things SFINAE friendly) and the transformation of expressions and constraints as subroutines of normalization. - Define associated constraints as constraints and not expressions. - Define reqiurements (the things in a requires-expr) separately from expressions (these nodes end in _REQ). This also makes processing requires-expressions much more clear with respect to the usual rules for expression processing. - Clean up the value/type dependence characterization of requires expressions, and make sure that constexpr evaluation doesn't try to fold them. - Only ask to satisfy/instantiate constraints when actually needed. Don't conflate substitution and instantiation (this clears up some long-standing ambiguities in the implementation). - Tentatively rewrite diagnostics so they don't fully recurse and enumerate all possible constraint failures. We probably want a flag to control this. And the actual output of constraints is not ideal (a bit hacky for now). Needs work. - Extend the TS to allow the use of concepts in non-SFNINAE contexts such as static_assertions and if statements. This will probably introduce some new regressions, but thus far, compiler stability seems to have improved significantly. Below are the ChangeLog entries from a series of git commits that have gone into this patch. 2015-03-03 Andrew Sutton Rewrite to use new constraint model. * gcc/cp/call.c (add_function_candidate): Use new constraint checking interface. (build_new_function_call): Evaluate concepts when selected by overload resolution. * gcc/cp/class.c (resolve_address_of_overloaded_function): Use new constraint interface. * gcc/cp/constexpr.c (cxx_eval_constant_expression): Don't try to constexpr evaluate a requires-expression. (potential_constant_expression_1): Stop using old requires/constraint features. gcc/cp/constraint.cc: Much rewriting, reorganization, refactoring to support new constraint/requirement terms. (lift_function_definition): New. Factor lifting code out of lift_call for reuse in evaluate_function_concept. (lift_variable_intializer): New. Factor lifting code out of lift_var for reuse in evaluate_variable_concept. (lift_template_id): Restore checking code for mis-written variable concepts. (lift_requires_expr): Handle these separately. (xform_*_requirement): New. Transform requires-expressions into constraints. (get/set/remove_constraints, decl_constraints): Move to pt.c to allow for garbage collection. (processing_constraint): Kill this global. (diagnose_*): Update diagnostics to use the new constraint interface. * gcc/cp/cp-objcp-common.c (cp_common_init_ts): Remove typing of old nodes. * gcc/cp/cp-tree.def: Add new nodes for requirements and constraints. Remove previous constraint/req nodes. gcc/cp/cp-tree.h (COMPOUND_REQ_NOEXCEPT_P): New. (ICONV_CONSTR_EXPR, ICONV_CONSTR_TYPE): Fix operands. (constraint_p, make_predicate_constraint_p, valid_constraints_p): New. (misc): Remove unused declarations. gcc/cp/cxx-pretty-print.c: Reorganize/rewrite for new constraint model. (primary_expression, expression): Remove unused nodes, add options for constraints gcc/cp/cxx-pretty-print.h: Declare new functions for pretty printing. gcc/cp/decl.c (duplicate_decls): Only reclaim when flag_concepts is on. (grokfndecl): Associate predicate constraints. gcc/cp/decl2.c (mark_used): Don't instantiate concepts. gcc/cp/error.c (dump_expr): Handle new constraints. gcc/cp/method.c (implicitly_declare_fn): Use new constraint interface. gcc/cp/parser.c (make_call_declarator): Pass a requires-clause for call declarators. (cp_parser_type_name): Take a flag to indicate the presence of a pre-parsed 'typename'. (cp_parser_requires_expression): Move sentinel into function. (cp_parser_type_requirement): Parse type requirements in accordance with Concepts TS. (cp_parser_compound_requirement): Parse compound requirements in accordance with Concepts TS. Remove constexpr requirements. (cp_parser_template_declaration_after_export): Associate predicate constraints. gcc/cp/pt.c (get_template_for_ordering): New. Extract a template decl from a list of candidates. (lookup_template_class_1): Use new constraint interface. (tsubst_pack_conjunction): Build an expression, not constraints. (tsubst_decl): Only associate constraints when substituting through members. (tsubst): Kill subst rules for old nodes. (most_specialized_partial_spec): Save candidates correctly in the presence of constraints. (always_instantiate_p): Never always instantiate a concept. (type_dependent_expression_p): Requires expressions have type bool. (decl_constraints): Moved from constraint.cc, use hash_table instead of hash_map. gcc/cp/semantics.c (finish_call_expr): Remove constraints from functions, not overload sets. (finish_template_variable): Evaluate variable concepts by determining satisfaction. gcc/cp/typeck.c (cp_build_function_call_vec): Use new concept interface. gcc/cp/testsuite/g++.dg/concepts/*: Update tests to match syntax, diagnostics. gcc/cp/testsuite/g++.dg/concepts/req1.C: Test requires-expression with no parens. 2015-02-25 Braden Obrzut * gcc/cp/constraint.cc (lift_operands): New. (lift_call): Lift operands on function calls and don't use tsubst_constraint_expr. (lift_var): Don't use tsubst_constraint_expr. (lift_constraints): Use the returned number of operands for most nodes and also lift from TREE_LISTs. 2015-02-17 Braden Obrzut * gcc/cp/constraint.cc (lift_call): Converted from normalize_call. (lift_var): Converted from normalize_var. (lift_template_id): Converted from normalize_template_id. (lift_constraints): Implemented. 2015-02-16 Andrew Sutton * gcc/cp/cp-tree.h: (EXPR_CONSTR_EXPR, TYPE_CONSTR_TYPE): Fix typos in macro names. * gcc/cp/constraint.cc: (check_constraint*): New. Rewrite the constraint checking implementation so that it matches the wording and rules in n4377. 2015-02-10 Andrew Sutton * gcc/cp/logic.cc: Rewrite to use new constraint model and update formatting. * gcc/cp/constraint.cc: Documentation and organization. 2015-02-10 Andrew Sutton * gcc/cp/cp-tree.h (is_constraint): Make static. 2015-02-09 Andrew Sutton Rewrite normalization in terms of constraints. * gcc/cp/cp-tree.h (is_constraint): New. * gcc/cp/constraint.cc (normalize_*): Rewrite the previous normalization model so that it conforms with the specification. Normalization applies to constraints. Transformation of expressions into constraints now happens in two phases: lifting concept definitions, and the actual transformation. (tranform_expression, xform_*): New. Define transformation of expressions into constraints. (lift_constraints): New. Stubbed out inlining function. 2015-02-09 Andrew Sutton Start refactoring constraints to match the specification. * gcc/cp/cp-tree.def: Add new TREECODEs for constraints. * gcc/cp/cp-tree.h: Add accessor macros for constraint operands. 2015-02-05 Braden Obrzut * gcc/cp/constexpr.c (potential_constant_expression_1): Readded missing cases from previous merge from trunk. * gcc/cp/cxx-pretty-print.c (pp_cxx_trait_expression): Restored CPTK_IS_CONVERTIBLE_TO for the time being since the constraint code relies on it. * gcc/cp/semantics.c (finish_trait_expr): Likewise. * gcc/testsuite/g++.dg/concepts/req9.C: New test. 2015-02-03 Braden Obrzut * gcc/cp/class.c (build_clone): Clone constraints. * gcc/cp/constraint.cc (normalize_atom): Update diagnostic. (normalize_constraints): Return error_mark_node if normalization fails. (get_constraints): Access constraints through hash map. (set_constraints): Set constraints through hash map. (remove_constraints): Access constraints through hash map. (associate_classtype_constraints): New. (init_leading_requirements): Removed. (init_trailing_requirements): Removed. (update_leadng_requirements): Removed. (update_trailing_requirements): Removed. (save_leading_constraints): Removed. (save_trailing_constraints): Removed. (finish_template_constraints): Removed. (build_constraints): New. Builds CONSTRAINT_INFO from requirements. (finish_concept_introduction): Check generated parameters for errors. (tsubst_constraint_info): Update implementation. (equivalent_constraints): Check input types. (subsumes_constraints): Update implementation. (at_least_as_constrained): New. Check if a decl's constraints subsumes another. (diagnose_constraints): Temporarily simplify diagnostics. * gcc/cp/cp-tree.h (tree_constraint_info): Refactor the way constraints are stored. (CI_TEMPLATE_REQS): Renamed from CI_LEADING_REQS. (CI_DECLARATOR_REQS): Renamed from CI_TRAILING_REQS. (CI_ASSOCIATED_CONSTRAINTS): New. (CI_NORMALIZED_CONSTRAINTS): New. (CI_ASSOCIATED_REQS): Removed. (saved_scope): Save template requirements. (current_template_reqs): Removed. (lang_decl_min): Replace requires_clause (trailing requirements) with more generic constraint_info. * gcc/cp/cxx-pretty-print.c (cxx_pretty_printer::declarator): Print requires clause. (pp_cxx_function_definition): Moved requires clause printing to above. (pp_cxx_init_declarator): Likewise. (pp_cxx_template_declaration): Update implementation to get requirements from CONSTRAINT_INFO. * gcc/cp/decl.c (duplicate_decls): Remove constraints before reclaiming memory. (is_class_template_or_specialization): New. (get_leading_constraints): Removed. (adjust_fn_constraints): Removed. (grokfndecl): Update implementation to other changes. (get_trailing_requires_clause): New. (grokdeclarator): Pass trailing requires clause to grokfndecl. (xref_tag_1): Check overload constraints. * gcc/cp/error.c (dump_template_decl): Print requires clause. (dump_function_decl): Update implementation for accessing requirements. * gcc/cp/logic.cc (subsumes_constraints_nonnull): Update CI_ASSOCIATED_REQS usage. * gcc/cp/method.c (implicitly_declare_fn): Copy constraints of inherited constructors. * gcc/cp/parser.c (cp_parser_lambda_expression): Remove now unneeded template requirements saving. (cp_parser_type_parameter): Likewise. (cp_parser_template_argument_list): Unwrap template_template_parms when produced by short hand notation with function concepts. (cp_parser_alias_declaration): Attach constraints to aliases. (cp_manage_requirements): Removed. (cp_parser_trailing_requirements_clause): Renamed from cp_parser_trailing_requirements. (cp_parser_init_declarator): Removed now unneeded requirements saving. (cp_parser_basic_declarator): Separated from cp_parser_declarator. (cp_parser_declarator): Parses trailing requires clause if cp_parser_basic_declarator succeeds. (cp_parser_class_specifier_1): Associate constaints with type. (cp_parser_member_declaration): Remove unneeded template requirement saving. (cp_parser_template_declaration_after_export): Likewise. (cp_parser_single_declaration): Associate constraints. (cp_parser_late_parsing_for_member): Remove unneeded template requirement saving. (synthesize_implicit_template_parm): Likewise. * gcc/cp/pt.c (maybe_new_partial_specialization): Update implementation. (process_template_parm): Removed unneeded template requirement saving. (build_template_decl): Handle constraints. (process_partial_specialization): Update constraint access and check that specialization is more specialized. (push_template_decl_real): Update constraint access. (add_inherited_template_parms): Removed constraint handling. (tsubst_pack_conjuction): Update implemenation. (tsubst_decl): Changed constraint propagation. (more_specialized_fn): Update constraint access. (most_specialized_partial_spec): Update constraint access. * gcc/cp/ptree.c (cxx_print_xnode): Update constraint access. * gcc/cp/semantics.c (finish_call_expr): Remove constraints. (finish_template_template_parm): Update constraint access. * gcc/testsuite/g++.dg/concepts/alias4.C: Mark xfail. * gcc/testsuite/g++.dg/concepts/class.C: Check for escape hatch. * gcc/testsuite/g++.dg/concepts/class6.C: Added diagnostic. * gcc/testsuite/g++.dg/concepts/inherit-ctor1.C: Improved test case. * gcc/testsuite/g++.dg/concepts/inherit-ctor2.C: Updated diagnostic. * gcc/testsuite/g++.dg/concepts/inherit-ctor4.C: Updated diagnostic. * gcc/testsuite/g++.dg/concepts/intro4.C: Updated diagnostics. * gcc/testsuite/g++.dg/concepts/req4.C: Updated diagnostic. * gcc/testsuite/g++.dg/concepts/req5.C: Updated diagnostic. Andrew Sutton --20cf3079bd8e6b7bb20510db7441 Content-Type: text/x-patch; charset=US-ASCII; name="cstr-proc-rewrite.patch" Content-Disposition: attachment; filename="cstr-proc-rewrite.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i71x815r0 Content-length: 290531 ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZy5jb25jZXB0cyBiL0NoYW5nZUxvZy5j b25jZXB0cwppbmRleCA0ZTA0YWFkLi5iZmQ0MDAyIDEwMDY0NAotLS0gYS9D aGFuZ2VMb2cuY29uY2VwdHMKKysrIGIvQ2hhbmdlTG9nLmNvbmNlcHRzCkBA IC0xLDMgKzEsMTQxIEBACisyMDE1LTAzLTAzICBBbmRyZXcgU3V0dG9uICA8 YW5kcmV3Lm4uc3V0dG9uQGdtYWlsLmNvbT4KKworCVJld3JpdGUgdG8gdXNl IG5ldyBjb25zdHJhaW50IG1vZGVsLgorCSogZ2NjL2NwL2NhbGwuYyAoYWRk X2Z1bmN0aW9uX2NhbmRpZGF0ZSk6IFVzZSBuZXcgY29uc3RyYWludAorCWNo ZWNraW5nIGludGVyZmFjZS4KKwkoYnVpbGRfbmV3X2Z1bmN0aW9uX2NhbGwp OiBFdmFsdWF0ZSBjb25jZXB0cyB3aGVuIHNlbGVjdGVkCisJYnkgb3Zlcmxv YWQgcmVzb2x1dGlvbi4KKwkqIGdjYy9jcC9jbGFzcy5jIChyZXNvbHZlX2Fk ZHJlc3Nfb2Zfb3ZlcmxvYWRlZF9mdW5jdGlvbik6CisJVXNlIG5ldyBjb25z dHJhaW50IGludGVyZmFjZS4KKwkqIGdjYy9jcC9jb25zdGV4cHIuYyAoY3h4 X2V2YWxfY29uc3RhbnRfZXhwcmVzc2lvbik6IERvbid0IAorCXRyeSB0byBj b25zdGV4cHIgZXZhbHVhdGUgYSByZXF1aXJlcy1leHByZXNzaW9uLgorCShw b3RlbnRpYWxfY29uc3RhbnRfZXhwcmVzc2lvbl8xKTogU3RvcCB1c2luZyBv bGQKKwlyZXF1aXJlcy9jb25zdHJhaW50IGZlYXR1cmVzLgorCWdjYy9jcC9j b25zdHJhaW50LmNjOiBNdWNoIHJld3JpdGluZywgcmVvcmdhbml6YXRpb24s IHJlZmFjdG9yaW5nCisJdG8gc3VwcG9ydCBuZXcgY29uc3RyYWludC9yZXF1 aXJlbWVudCB0ZXJtcy4KKwkobGlmdF9mdW5jdGlvbl9kZWZpbml0aW9uKTog TmV3LiBGYWN0b3IgbGlmdGluZyBjb2RlIG91dCBvZgorCWxpZnRfY2FsbCBm b3IgcmV1c2UgaW4gZXZhbHVhdGVfZnVuY3Rpb25fY29uY2VwdC4KKwkobGlm dF92YXJpYWJsZV9pbnRpYWxpemVyKTogTmV3LiBGYWN0b3IgbGlmdGluZyBj b2RlIG91dCBvZgorCWxpZnRfdmFyIGZvciByZXVzZSBpbiBldmFsdWF0ZV92 YXJpYWJsZV9jb25jZXB0LgorCShsaWZ0X3RlbXBsYXRlX2lkKTogUmVzdG9y ZSBjaGVja2luZyBjb2RlIGZvciBtaXMtd3JpdHRlbgorCXZhcmlhYmxlIGNv bmNlcHRzLgorCShsaWZ0X3JlcXVpcmVzX2V4cHIpOiBIYW5kbGUgdGhlc2Ug c2VwYXJhdGVseS4KKwkoeGZvcm1fKl9yZXF1aXJlbWVudCk6IE5ldy4gVHJh bnNmb3JtIHJlcXVpcmVzLWV4cHJlc3Npb25zCisJaW50byBjb25zdHJhaW50 cy4KKwkoZ2V0L3NldC9yZW1vdmVfY29uc3RyYWludHMsIGRlY2xfY29uc3Ry YWludHMpOiBNb3ZlIHRvCisJcHQuYyB0byBhbGxvdyBmb3IgZ2FyYmFnZSBj b2xsZWN0aW9uLgorCShwcm9jZXNzaW5nX2NvbnN0cmFpbnQpOiBLaWxsIHRo aXMgZ2xvYmFsLgorCShkaWFnbm9zZV8qKTogVXBkYXRlIGRpYWdub3N0aWNz IHRvIHVzZSB0aGUgbmV3IGNvbnN0cmFpbnQKKwlpbnRlcmZhY2UuCisJKiBn Y2MvY3AvY3Atb2JqY3AtY29tbW9uLmMgKGNwX2NvbW1vbl9pbml0X3RzKTog UmVtb3ZlIHR5cGluZworCW9mIG9sZCBub2Rlcy4KKwkqIGdjYy9jcC9jcC10 cmVlLmRlZjogQWRkIG5ldyBub2RlcyBmb3IgcmVxdWlyZW1lbnRzIGFuZAor CWNvbnN0cmFpbnRzLiBSZW1vdmUgcHJldmlvdXMgY29uc3RyYWludC9yZXEg bm9kZXMuCisJZ2NjL2NwL2NwLXRyZWUuaCAoQ09NUE9VTkRfUkVRX05PRVhD RVBUX1ApOiBOZXcuCisJKElDT05WX0NPTlNUUl9FWFBSLCBJQ09OVl9DT05T VFJfVFlQRSk6IEZpeCBvcGVyYW5kcy4KKwkoY29uc3RyYWludF9wLCBtYWtl X3ByZWRpY2F0ZV9jb25zdHJhaW50X3AsIHZhbGlkX2NvbnN0cmFpbnRzX3Ap OiBOZXcuCisJKG1pc2MpOiBSZW1vdmUgdW51c2VkIGRlY2xhcmF0aW9ucy4K KwlnY2MvY3AvY3h4LXByZXR0eS1wcmludC5jOiBSZW9yZ2FuaXplL3Jld3Jp dGUgZm9yIG5ldyBjb25zdHJhaW50CisJbW9kZWwuCisJKHByaW1hcnlfZXhw cmVzc2lvbiwgZXhwcmVzc2lvbik6IFJlbW92ZSB1bnVzZWQgbm9kZXMsIGFk ZCBvcHRpb25zIAorCWZvciBjb25zdHJhaW50cworCWdjYy9jcC9jeHgtcHJl dHR5LXByaW50Lmg6IERlY2xhcmUgbmV3IGZ1bmN0aW9ucyBmb3IgcHJldHR5 CisJcHJpbnRpbmcuCisJZ2NjL2NwL2RlY2wuYyAoZHVwbGljYXRlX2RlY2xz KTogT25seSByZWNsYWltIHdoZW4gZmxhZ19jb25jZXB0cworCWlzIG9uLgor CShncm9rZm5kZWNsKTogQXNzb2NpYXRlIHByZWRpY2F0ZSBjb25zdHJhaW50 cy4KKwlnY2MvY3AvZGVjbDIuYyAobWFya191c2VkKTogRG9uJ3QgaW5zdGFu dGlhdGUgY29uY2VwdHMuCisJZ2NjL2NwL2Vycm9yLmMgKGR1bXBfZXhwcik6 IEhhbmRsZSBuZXcgY29uc3RyYWludHMuCisJZ2NjL2NwL21ldGhvZC5jIChp bXBsaWNpdGx5X2RlY2xhcmVfZm4pOiBVc2UgbmV3IGNvbnN0cmFpbnQKKwlp bnRlcmZhY2UuCisJZ2NjL2NwL3BhcnNlci5jIChtYWtlX2NhbGxfZGVjbGFy YXRvcik6IFBhc3MgYSByZXF1aXJlcy1jbGF1c2UgZm9yCisJY2FsbCBkZWNs YXJhdG9ycy4KKwkoY3BfcGFyc2VyX3R5cGVfbmFtZSk6IFRha2UgYSBmbGFn IHRvIGluZGljYXRlIHRoZSBwcmVzZW5jZSBvZgorCWEgcHJlLXBhcnNlZCAn dHlwZW5hbWUnLgorCShjcF9wYXJzZXJfcmVxdWlyZXNfZXhwcmVzc2lvbik6 IE1vdmUgc2VudGluZWwgaW50byBmdW5jdGlvbi4KKwkoY3BfcGFyc2VyX3R5 cGVfcmVxdWlyZW1lbnQpOiBQYXJzZSB0eXBlIHJlcXVpcmVtZW50cyBpbiBh Y2NvcmRhbmNlCisJd2l0aCBDb25jZXB0cyBUUy4KKwkoY3BfcGFyc2VyX2Nv bXBvdW5kX3JlcXVpcmVtZW50KTogUGFyc2UgY29tcG91bmQgcmVxdWlyZW1l bnRzIGluCisJYWNjb3JkYW5jZSB3aXRoIENvbmNlcHRzIFRTLiBSZW1vdmUg Y29uc3RleHByIHJlcXVpcmVtZW50cy4KKwkoY3BfcGFyc2VyX3RlbXBsYXRl X2RlY2xhcmF0aW9uX2FmdGVyX2V4cG9ydCk6IEFzc29jaWF0ZQorCXByZWRp Y2F0ZSBjb25zdHJhaW50cy4KKwlnY2MvY3AvcHQuYyAoZ2V0X3RlbXBsYXRl X2Zvcl9vcmRlcmluZyk6IE5ldy4gRXh0cmFjdCBhIHRlbXBsYXRlCisJZGVj bCBmcm9tIGEgbGlzdCBvZiBjYW5kaWRhdGVzLgorCShsb29rdXBfdGVtcGxh dGVfY2xhc3NfMSk6IFVzZSBuZXcgY29uc3RyYWludCBpbnRlcmZhY2UuCisJ KHRzdWJzdF9wYWNrX2Nvbmp1bmN0aW9uKTogQnVpbGQgYW4gZXhwcmVzc2lv biwgbm90IGNvbnN0cmFpbnRzLgorCSh0c3Vic3RfZGVjbCk6IE9ubHkgYXNz b2NpYXRlIGNvbnN0cmFpbnRzIHdoZW4gc3Vic3RpdHV0aW5nCisJdGhyb3Vn aCBtZW1iZXJzLgorCSh0c3Vic3QpOiBLaWxsIHN1YnN0IHJ1bGVzIGZvciBv bGQgbm9kZXMuCisJKG1vc3Rfc3BlY2lhbGl6ZWRfcGFydGlhbF9zcGVjKTog U2F2ZSBjYW5kaWRhdGVzIGNvcnJlY3RseQorCWluIHRoZSBwcmVzZW5jZSBv ZiBjb25zdHJhaW50cy4KKwkoYWx3YXlzX2luc3RhbnRpYXRlX3ApOiBOZXZl ciBhbHdheXMgaW5zdGFudGlhdGUgYSBjb25jZXB0LgorCSh0eXBlX2RlcGVu ZGVudF9leHByZXNzaW9uX3ApOiBSZXF1aXJlcyBleHByZXNzaW9ucyBoYXZl IHR5cGUgYm9vbC4KKwkoZGVjbF9jb25zdHJhaW50cyk6IE1vdmVkIGZyb20g Y29uc3RyYWludC5jYywgdXNlIGhhc2hfdGFibGUKKwlpbnN0ZWFkIG9mIGhh c2hfbWFwLgorCWdjYy9jcC9zZW1hbnRpY3MuYyAoZmluaXNoX2NhbGxfZXhw cik6IFJlbW92ZSBjb25zdHJhaW50cyBmcm9tCisJZnVuY3Rpb25zLCBub3Qg b3ZlcmxvYWQgc2V0cy4KKwkoZmluaXNoX3RlbXBsYXRlX3ZhcmlhYmxlKTog RXZhbHVhdGUgdmFyaWFibGUgY29uY2VwdHMgYnkKKwlkZXRlcm1pbmluZyBz YXRpc2ZhY3Rpb24uCisJZ2NjL2NwL3R5cGVjay5jIChjcF9idWlsZF9mdW5j dGlvbl9jYWxsX3ZlYyk6IFVzZSBuZXcgY29uY2VwdCAKKwlpbnRlcmZhY2Uu CisJZ2NjL2NwL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvKjogVXBkYXRl IHRlc3RzIHRvIG1hdGNoIHN5bnRheCwKKwlkaWFnbm9zdGljcy4KKwlnY2Mv Y3AvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXExLkM6IFRlc3QgcmVx dWlyZXMtZXhwcmVzc2lvbgorCXdpdGggbm8gcGFyZW5zLgorCisyMDE1LTAy LTI1ICBCcmFkZW4gT2JyenV0ICA8YWRtaW5AbWFuaWFjc3ZhdWx0Lm5ldD4K KworCSogZ2NjL2NwL2NvbnN0cmFpbnQuY2MgKGxpZnRfb3BlcmFuZHMpOiBO ZXcuCisJKGxpZnRfY2FsbCk6IExpZnQgb3BlcmFuZHMgb24gZnVuY3Rpb24g Y2FsbHMgYW5kIGRvbid0IHVzZQorCXRzdWJzdF9jb25zdHJhaW50X2V4cHIu CisJKGxpZnRfdmFyKTogRG9uJ3QgdXNlIHRzdWJzdF9jb25zdHJhaW50X2V4 cHIuCisJKGxpZnRfY29uc3RyYWludHMpOiBVc2UgdGhlIHJldHVybmVkIG51 bWJlciBvZiBvcGVyYW5kcyBmb3IgbW9zdCBub2RlcworCWFuZCBhbHNvIGxp ZnQgZnJvbSBUUkVFX0xJU1RzLgorCisyMDE1LTAyLTE3ICBCcmFkZW4gT2Jy enV0ICA8YWRtaW5AbWFuaWFjc3ZhdWx0Lm5ldD4KKworCSogZ2NjL2NwL2Nv bnN0cmFpbnQuY2MgKGxpZnRfY2FsbCk6IENvbnZlcnRlZCBmcm9tIG5vcm1h bGl6ZV9jYWxsLgorCShsaWZ0X3Zhcik6IENvbnZlcnRlZCBmcm9tIG5vcm1h bGl6ZV92YXIuCisJKGxpZnRfdGVtcGxhdGVfaWQpOiBDb252ZXJ0ZWQgZnJv bSBub3JtYWxpemVfdGVtcGxhdGVfaWQuCisJKGxpZnRfY29uc3RyYWludHMp OiBJbXBsZW1lbnRlZC4KKworMjAxNS0wMi0xNiAgQW5kcmV3IFN1dHRvbiAg PGFuZHJldy5uLnN1dHRvbkBnbWFpbC5jb20+CisKKwkqIGdjYy9jcC9jcC10 cmVlLmg6IChFWFBSX0NPTlNUUl9FWFBSLCBUWVBFX0NPTlNUUl9UWVBFKTog Rml4IAorCXR5cG9zIGluIG1hY3JvIG5hbWVzLgorCSogZ2NjL2NwL2NvbnN0 cmFpbnQuY2M6IChjaGVja19jb25zdHJhaW50Kik6IE5ldy4gUmV3cml0ZSB0 aGUKKwljb25zdHJhaW50IGNoZWNraW5nIGltcGxlbWVudGF0aW9uIHNvIHRo YXQgaXQgbWF0Y2hlcyB0aGUKKwl3b3JkaW5nIGFuZCBydWxlcyBpbiBuNDM3 Ny4KKworMjAxNS0wMi0xMCAgQW5kcmV3IFN1dHRvbiAgPGFuZHJldy5uLnN1 dHRvbkBnbWFpbC5jb20+CisKKwkqIGdjYy9jcC9sb2dpYy5jYzogUmV3cml0 ZSB0byB1c2UgbmV3IGNvbnN0cmFpbnQgbW9kZWwgYW5kCisJdXBkYXRlIGZv cm1hdHRpbmcuCisJKiBnY2MvY3AvY29uc3RyYWludC5jYzogRG9jdW1lbnRh dGlvbiBhbmQgb3JnYW5pemF0aW9uLgorCisyMDE1LTAyLTEwICBBbmRyZXcg U3V0dG9uICA8YW5kcmV3Lm4uc3V0dG9uQGdtYWlsLmNvbT4KKworCSogZ2Nj L2NwL2NwLXRyZWUuaCAoaXNfY29uc3RyYWludCk6IE1ha2Ugc3RhdGljLgor CisyMDE1LTAyLTA5ICBBbmRyZXcgU3V0dG9uICA8YW5kcmV3Lm4uc3V0dG9u QGdtYWlsLmNvbT4KKworCVJld3JpdGUgbm9ybWFsaXphdGlvbiBpbiB0ZXJt cyBvZiBjb25zdHJhaW50cy4KKwkqIGdjYy9jcC9jcC10cmVlLmggKGlzX2Nv bnN0cmFpbnQpOiBOZXcuCisJKiBnY2MvY3AvY29uc3RyYWludC5jYyAobm9y bWFsaXplXyopOiBSZXdyaXRlIHRoZSBwcmV2aW91cyBub3JtYWxpemF0aW9u CisJbW9kZWwgc28gdGhhdCBpdCBjb25mb3JtcyB3aXRoIHRoZSBzcGVjaWZp Y2F0aW9uLiBOb3JtYWxpemF0aW9uIGFwcGxpZXMKKwl0byBjb25zdHJhaW50 cy4gVHJhbnNmb3JtYXRpb24gb2YgZXhwcmVzc2lvbnMgaW50byBjb25zdHJh aW50cyBub3cKKwloYXBwZW5zIGluIHR3byBwaGFzZXM6IGxpZnRpbmcgY29u Y2VwdCBkZWZpbml0aW9ucywgYW5kIHRoZSBhY3R1YWwKKwl0cmFuc2Zvcm1h dGlvbi4KKwkodHJhbmZvcm1fZXhwcmVzc2lvbiwgeGZvcm1fKik6IE5ldy4g RGVmaW5lIHRyYW5zZm9ybWF0aW9uIG9mIAorCWV4cHJlc3Npb25zIGludG8g Y29uc3RyYWludHMuCisJKGxpZnRfY29uc3RyYWludHMpOiBOZXcuIFN0dWJi ZWQgb3V0IGlubGluaW5nIGZ1bmN0aW9uLgorCisyMDE1LTAyLTA5ICBBbmRy ZXcgU3V0dG9uICA8YW5kcmV3Lm4uc3V0dG9uQGdtYWlsLmNvbT4KKworCVN0 YXJ0IHJlZmFjdG9yaW5nIGNvbnN0cmFpbnRzIHRvIG1hdGNoIHRoZSBzcGVj aWZpY2F0aW9uLgorCSogZ2NjL2NwL2NwLXRyZWUuZGVmOiBBZGQgbmV3IFRS RUVDT0RFcyBmb3IgY29uc3RyYWludHMuCisJKiBnY2MvY3AvY3AtdHJlZS5o OiBBZGQgYWNjZXNzb3IgbWFjcm9zIGZvciBjb25zdHJhaW50IG9wZXJhbmRz LgorCiAyMDE1LTAyLTA1ICBCcmFkZW4gT2JyenV0ICA8YWRtaW5AbWFuaWFj c3ZhdWx0Lm5ldD4KIAogCSogZ2NjL2NwL2NvbnN0ZXhwci5jIChwb3RlbnRp YWxfY29uc3RhbnRfZXhwcmVzc2lvbl8xKTogUmVhZGRlZCBtaXNzaW5nCmRp ZmYgLS1naXQgYS9nY2MvY3AvY2FsbC5jIGIvZ2NjL2NwL2NhbGwuYwppbmRl eCA1NzZkMzFlLi5iZjU2NGUzIDEwMDY0NAotLS0gYS9nY2MvY3AvY2FsbC5j CisrKyBiL2djYy9jcC9jYWxsLmMKQEAgLTE5OTQsMTcgKzE5OTQsMTYgQEAg YWRkX2Z1bmN0aW9uX2NhbmRpZGF0ZSAoc3RydWN0IHpfY2FuZGlkYXRlICoq Y2FuZGlkYXRlcywKICAgICAgIHJlYXNvbiA9IGFyaXR5X3JlamVjdGlvbiAo Zmlyc3RfYXJnLCBpICsgcmVtYWluaW5nLCBsZW4pOwogICAgIH0KIAotICAv LyBTZWNvbmQsIGEgY29uc3RyYWluZWQgZnVuY3Rpb24gaXMgbm90IHZpYWJs ZSBpZiBpdHMgY29uc3RyYWludHMgYXJlIG5vdAotICAvLyBzYXRpc2ZpZWQu Ci0gIGlmICh2aWFibGUgJiYgZmxhZ19jb25jZXB0cykgewotICAgIGlmICh0 cmVlIGNpID0gZ2V0X2NvbnN0cmFpbnRzIChmbikpIHsKLSAgICAgIGlmICgh Y2hlY2tfY29uc3RyYWludHMgKGNpKSkKKyAgLyogU2Vjb25kLCBmb3IgYSBm dW5jdGlvbiB0byBiZSB2aWFibGUsIGl0J3MgY29uc3RyYWludHMgbXVzdCBi ZQorICAgICBzYXRpc2ZpZWQuICovCisgIGlmIChmbGFnX2NvbmNlcHRzICYm IHZpYWJsZSkgCisgICAgeworICAgICAgaWYgKCFjb25zdHJhaW50c19zYXRp c2ZpZWRfcCAoZm4pKQogICAgICAgICB7CiAgICAgICAgICAgcmVhc29uID0g Y29uc3RyYWludF9mYWlsdXJlIChmbik7CiAgICAgICAgICAgdmlhYmxlID0g ZmFsc2U7CiAgICAgICAgIH0KICAgICB9Ci0gIH0KIAogICAvKiBXaGVuIGxv b2tpbmcgZm9yIGEgZnVuY3Rpb24gZnJvbSBhIHN1Ym9iamVjdCBmcm9tIGFu IGltcGxpY2l0CiAgICAgIGNvcHkvbW92ZSBjb25zdHJ1Y3Rvci9vcGVyYXRv cj0sIGRvbid0IGNvbnNpZGVyIGFueXRoaW5nIHRoYXQgdGFrZXMgKGEKQEAg LTQxMjQsNyArNDEyMywyOSBAQCBidWlsZF9uZXdfZnVuY3Rpb25fY2FsbCAo dHJlZSBmbiwgdmVjPHRyZWUsIHZhX2djPiAqKmFyZ3MsIGJvb2wga29lbmln X3AsCiAgICAgICAgICB0aHJvdWdoIGZsYWdzIHNvIHRoYXQgbGF0ZXIgd2Ug Y2FuIHVzZSBpdCB0byBkZWNpZGUgd2hldGhlciB0byB3YXJuCiAgICAgICAg ICBhYm91dCBwZWN1bGlhciBudWxsIHBvaW50ZXIgY29udmVyc2lvbi4gICov CiAgICAgICBpZiAoVFJFRV9DT0RFIChmbikgPT0gVEVNUExBVEVfSURfRVhQ UikKLSAgICAgICAgZmxhZ3MgfD0gTE9PS1VQX0VYUExJQ0lUX1RNUExfQVJH UzsKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIG92ZXJsb2FkIHJlc29s dXRpb24gc2VsZWN0cyBhIHNwZWNpYWxpemF0aW9uIG9mIGEKKyAgICAgICAg ICAgICBmdW5jdGlvbiBjb25jZXB0LCB0aGUgZXhwcmVzc2lvbiBpcyB0cnVl IGlmIHRoZQorICAgICAgICAgICAgIGNvbnN0cmFpbnRzIGFyZSBzYXRpc2Zp ZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4gCisKKyAgICAgICAgICAgICBOT1RF OiBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiBDb25jZXB0cyBMaXRlIFRTIHRo YXQKKyAgICAgICAgICAgICBhbGxvd3MgY29uc3RyYWludHMgdG8gYmUgdXNl ZCBpbiBleHByZXNzaW9ucy4gKi8KKyAgICAgICAgICBpZiAoZmxhZ19jb25j ZXB0cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgdHJlZSB0bXBs ID0gREVDTF9USV9URU1QTEFURSAoY2FuZC0+Zm4pOworICAgICAgICAgICAg ICB0cmVlIGRlY2wgPSBERUNMX1RFTVBMQVRFX1JFU1VMVCAodG1wbCk7Cisg ICAgICAgICAgICAgIGlmIChERUNMX0RFQ0xBUkVEX0NPTkNFUFRfUCAoZGVj bCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgdHJl ZSB0YXJncyA9IERFQ0xfVElfQVJHUyAoY2FuZC0+Zm4pOworICAgICAgICAg ICAgICAgICAgdHJlZSBldmFsID0gZXZhbHVhdGVfZnVuY3Rpb25fY29uY2Vw dCAoZGVjbCwgdGFyZ3MpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2 YWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisKKyAg ICAgICAgICBmbGFncyB8PSBMT09LVVBfRVhQTElDSVRfVE1QTF9BUkdTOwor ICAgICAgICB9CisKICAgICAgIHJlc3VsdCA9IGJ1aWxkX292ZXJfY2FsbCAo Y2FuZCwgZmxhZ3MsIGNvbXBsYWluKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh L2djYy9jcC9jbGFzcy5jIGIvZ2NjL2NwL2NsYXNzLmMKaW5kZXggYWMyZDQ0 NC4uMjdjZDhkYSAxMDA2NDQKLS0tIGEvZ2NjL2NwL2NsYXNzLmMKKysrIGIv Z2NjL2NwL2NsYXNzLmMKQEAgLTc0ODMsMTEgKzc0ODMsMTEgQEAgcmVzb2x2 ZV9hZGRyZXNzX29mX292ZXJsb2FkZWRfZnVuY3Rpb24gKHRyZWUgdGFyZ2V0 X3R5cGUsCiAJICAgIC8qIEluc3RhbnRpYXRpb24gZmFpbGVkLiAgKi8KIAkg ICAgY29udGludWU7CiAKLSAgICAgICAgICAvLyBDb25zdHJhaW50cyBtdXN0 IGJlIHNhdGlzZmllZC4gTm90ZSB0aGF0IHRoaXMgaXMgZG9uZQotICAgICAg ICAgIC8vIGJlZm9yZSByZXR1cm4gdHlwZSBkZWR1Y3Rpb24uCi0gICAgICAg ICAgaWYgKHRyZWUgY2kgPSBnZXRfY29uc3RyYWludHMgKGluc3RhbnRpYXRp b24pKQotICAgICAgICAgICAgaWYgKCFjaGVja19jb25zdHJhaW50cyAoY2kp KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIC8qIENv bnN0cmFpbnRzIG11c3QgYmUgc2F0aXNmaWVkLiBUaGlzIGlzIGRvbmUgYmVm b3JlCisgICAgICAgICAgICAgcmV0dXJuIHR5cGUgZGVkdWN0aW9uIHNpbmNl IHRoYXQgaW5zdGFudGlhdGVzIHRoZQorICAgICAgICAgICAgIGRlY2xhcmF0 aW9uLiAqLworICAgICAgICAgIGlmIChmbGFnX2NvbmNlcHRzICYmICFjb25z dHJhaW50c19zYXRpc2ZpZWRfcCAoaW5zdGFudGlhdGlvbikpCisgICAgICAg ICAgICBjb250aW51ZTsKIAogCSAgLyogQW5kIG5vdyBmb3JjZSBpbnN0YW50 aWF0aW9uIHRvIGRvIHJldHVybiB0eXBlIGRlZHVjdGlvbi4gICovCiAJICBp ZiAodW5kZWR1Y2VkX2F1dG9fZGVjbCAoaW5zdGFudGlhdGlvbikpCmRpZmYg LS1naXQgYS9nY2MvY3AvY29uc3RleHByLmMgYi9nY2MvY3AvY29uc3RleHBy LmMKaW5kZXggNjA2Mzc5YS4uMTg4MDg3OSAxMDA2NDQKLS0tIGEvZ2NjL2Nw L2NvbnN0ZXhwci5jCisrKyBiL2djYy9jcC9jb25zdGV4cHIuYwpAQCAtMjcz MCw2ICsyNzMwLDE1IEBAIGN4eF9ldmFsX2NvbnN0YW50X2V4cHJlc3Npb24g KGNvbnN0IGNvbnN0ZXhwcl9jdHggKmN0eCwgdHJlZSB0LAogCX0KICAgICAg IGJyZWFrOwogCisgICAgY2FzZSBSRVFVSVJFU19FWFBSOgorICAgICAgLyog QSByZXF1aXJlcy1leHByZXNzaW9uIGFwcGVhcmluZyBhcyB0aGUgaW5pdGlh bGl6ZXIgb2YKKyAgICAgICAgIHZhcmlhYmxlIGNvbmNlcHQgaXMgZXZhbHVh dGVkIGFzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KKyAgICAgICAgIFdlIGNh bid0IGFjdHVhbGx5IGV2YWx1YXRlIGl0IGJlY2F1c2Ugd2UndmUgZGVmaW5l ZAorICAgICAgICAgdGhvc2UgdG8gYmUgaW5zdGFudGlhdGlvbiBkZXBlbmRl bnQuICovCisgICAgICBnY2NfYXNzZXJ0IChwcm9jZXNzaW5nX3RlbXBsYXRl X2RlY2wpOworICAgICAgKm5vbl9jb25zdGFudF9wID0gdHJ1ZTsKKyAgICAg IHJldHVybiB0OworCiAgICAgZGVmYXVsdDoKICAgICAgIGludGVybmFsX2Vy cm9yICgidW5leHBlY3RlZCBleHByZXNzaW9uICVxRSBvZiBraW5kICVzIiwg dCwKIAkJICAgICAgZ2V0X3RyZWVfY29kZV9uYW1lIChUUkVFX0NPREUgKHQp KSk7CkBAIC0zMDIyLDEyICszMDMxLDYgQEAgcG90ZW50aWFsX2NvbnN0YW50 X2V4cHJlc3Npb25fMSAodHJlZSB0LCBib29sIHdhbnRfcnZhbCwgdHN1YnN0 X2ZsYWdzX3QgZmxhZ3MpCiAgICAgY2FzZSBVU0lOR19ERUNMOgogICAgIGNh c2UgUExBQ0VIT0xERVJfRVhQUjoKICAgICBjYXNlIFJFUVVJUkVTX0VYUFI6 Ci0gICAgY2FzZSBFWFBSX1JFUToKLSAgICBjYXNlIFRZUEVfUkVROgotICAg IGNhc2UgTkVTVEVEX1JFUToKLSAgICBjYXNlIFZBTElERVhQUl9FWFBSOgot ICAgIGNhc2UgVkFMSURUWVBFX0VYUFI6Ci0gICAgY2FzZSBDT05TVEVYUFJf RVhQUjoKICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBBR0dSX0lO SVRfRVhQUjoKZGlmZiAtLWdpdCBhL2djYy9jcC9jb25zdHJhaW50LmNjIGIv Z2NjL2NwL2NvbnN0cmFpbnQuY2MKaW5kZXggYTY5ZTcxNy4uMWQ3NThkZSAx MDA2NDQKLS0tIGEvZ2NjL2NwL2NvbnN0cmFpbnQuY2MKKysrIGIvZ2NjL2Nw L2NvbnN0cmFpbnQuY2MKQEAgLTM2LDQ4ICszNiw2OSBAQCBhbG9uZyB3aXRo IEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2lu Y2x1ZGUgInRyZWUtaXRlcmF0b3IuaCIKICNpbmNsdWRlICJ2ZWMuaCIKICNp bmNsdWRlICJ0YXJnZXQuaCIKLSNpbmNsdWRlICJiaXRtYXAuaCIKLSNpbmNs dWRlICJoYXNoLW1hcC5oIgorI2luY2x1ZGUgImhhc2gtdGFibGUuaCIKIAot Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KLS8vIFJlcXVp cmVtZW50IENvbnN0cnVjdGlvbgotLy8KLS8vIEZhY2lsaXRpZXMgZm9yIGJ1 aWxkaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGVtcGxhdGUgcmVxdWlyZW1lbnRz LgotLy8KLS8vIFRPRE86IFNpbXBseSBhc3NpZ25pbmcgYm9vbGVhbl90eXBl X25vZGUgdG8gdGhlIHJlc3VsdCB0eXBlIG9mIHRoZQotLy8gZXhwcmVzc2lv biBzZWVtcyByaWdodCBmb3IgY29uc3RyYWludHMsIGJ1dCBpbiB0aGUgbG9u Zy10ZXJtIHdlIG1pZ2h0IHdhbnQKLS8vIHRvIGJlIG1vcmUgZmxleGlibGUg KGkuZS4sIGFsbG93IHNvbWUgZm9ybSBvZiBvdmVybG9hZCByZXNvbHV0aW9u PykuCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICBPcGVyYXRpb25zIG9uIGNvbnN0cmFpbnRzCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vLyBDcmVhdGUg YSBuZXcgbG9naWNhbCBub2RlIGpvaW5pbmcgdGhlIHN1YmV4cHJlc3Npb25z IGEgYW5kIGIuCi1zdGF0aWMgaW5saW5lIHRyZWUKLWpvaW5fcmVxdWlyZW1l bnRzICh0cmVlX2NvZGUgYywgdHJlZSBhLCB0cmVlIGIpCisvKiBSZXR1cm5z IHRydWUgaWYgQyBpcyBhIGNvbnN0cmFpbnQgdHJlZSBjb2RlLiAqLworc3Rh dGljIGlubGluZSBib29sCitjb25zdHJhaW50X3AgKHRyZWVfY29kZSBjKQog ewotICBnY2NfYXNzZXJ0IChhICE9IE5VTExfVFJFRSAmJiBiICE9IE5VTExf VFJFRSk7Ci0gIGdjY19hc3NlcnQgKGMgPT0gVFJVVEhfQU5ESUZfRVhQUiB8 fCBjID09IFRSVVRIX09SSUZfRVhQUik7Ci0gIHJldHVybiBidWlsZF9taW4g KGMsIGJvb2xlYW5fdHlwZV9ub2RlLCBhLCBiKTsKKyAgcmV0dXJuIFBSRURf Q09OU1RSIDw9IGMgJiYgYyA8PSBESVNKX0NPTlNUUjsKIH0KIAotLy8gUmV0 dXJucyB0aGUgY29uanVuY3Rpb24gb2YgdHdvIHJlcXVpcmVtZW50cyBBIGFu ZCBCLCB3aGVyZSBBIGFuZCBCIGFyZQotLy8gcmVkdWNlZCB0ZXJtcyBpbiB0 aGUgY29uc3RyYWludHMgbGFuZ3VhZ2UuIE5vdGUgdGhhdCBjb25qb2luaW5n IGEgbm9uLW51bGwKLS8vIGV4cHJlc3Npb24gd2l0aCAgTlVMTF9UUkVFIGlz IGFuIGlkZW50aXR5IG9wZXJhdGlvbi4gVGhhdCBpcywgZm9yCi0vLyBub24t bnVsbCBBLAotLy8KLS8vICAgIGNvbmpvaW5fY29uc3RyYWludHMoYSwgTlVM TF9UUkVFKSA9PSBhCi0vLwotLy8gSWYgYm90aCBBIGFuZCBCIGFyZSBOVUxM X1RSRUUsIHRoZSByZXN1bHQgaXMgYWxzbyBOVUxMX1RSRUUuCisvKiBSZXR1 cm5zIHRydWUgaWYgVCBpcyBhIGNvbnN0cmFpbnQuICovCitib29sCitjb25z dHJhaW50X3AgKHRyZWUgdCkKK3sKKyAgcmV0dXJuIGNvbnN0cmFpbnRfcCAo VFJFRV9DT0RFICh0KSk7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiBUIGNh biBiZSB1c2VkIGFzICBhIHByZWRpY2F0ZSBjb25zdHJhaW50LiAqLworc3Rh dGljIGlubGluZSBib29sCit2YWxpZF9wcmVkaWNhdGVfcCAodHJlZSB0KQor eworICByZXR1cm4gQ09OU1RBTlRfQ0xBU1NfUCAodCkgfHwgRVhQUl9QICh0 KSB8fCB0ID09IGVycm9yX21hcmtfbm9kZTsKK30KKworLyogTWFrZSBhIHBy ZWRpY2F0ZSBjb25zdHJhaW50IGZyb20gdGhlIGdpdmVuIGV4cHJlc3Npb24u ICovCit0cmVlCittYWtlX3ByZWRpY2F0ZV9jb25zdHJhaW50ICh0cmVlIGV4 cHIpCit7CisgIGlmICghdmFsaWRfcHJlZGljYXRlX3AgKGV4cHIpKQorICAg IGRlYnVnX3RyZWUgKGV4cHIpOworICBnY2NfYXNzZXJ0KHZhbGlkX3ByZWRp Y2F0ZV9wIChleHByKSk7CisgIHJldHVybiBidWlsZF9udCAoUFJFRF9DT05T VFIsIGV4cHIpOworfQorCisvKiBSZXR1cm5zIHRoZSBjb25qdW5jdGlvbiBv ZiB0d28gY29uc3RyYWludHMgQSBhbmQgQi4gTm90ZSB0aGF0IAorICAgY29u am9pbmluZyBhIG5vbi1udWxsIGNvbnN0cmFpbnQgd2l0aCBOVUxMX1RSRUUg aXMgYW4gaWRlbnRpdHkgCisgICBvcGVyYXRpb24uIFRoYXQgaXMsIGZvciBu b24tbnVsbCBBLAorCisgICAgICBjb25qb2luX2NvbnN0cmFpbnRzKGEsIE5V TExfVFJFRSkgPT0gYQorCisgICBhbmQKKworICAgICAgY29uam9pbl9jb25z dHJhaW50cyAoTlVMTF9UUkVFLCBhKSA9PSBhCisKKyAgIElmIGJvdGggQSBh bmQgQiBhcmUgTlVMTF9UUkVFLCB0aGUgcmVzdWx0IGlzIGFsc28gTlVMTF9U UkVFLiAqLwogdHJlZQogY29uam9pbl9jb25zdHJhaW50cyAodHJlZSBhLCB0 cmVlIGIpCiB7CisgIGdjY19hc3NlcnQgKGEgPyBjb25zdHJhaW50X3AgKGEp IDogdHJ1ZSk7CisgIGdjY19hc3NlcnQgKGIgPyBjb25zdHJhaW50X3AgKGIp IDogdHJ1ZSk7CiAgIGlmIChhKQotICAgIHJldHVybiBiID8gam9pbl9yZXF1 aXJlbWVudHMgKFRSVVRIX0FORElGX0VYUFIsIGEsIGIpIDogYTsKKyAgICBy ZXR1cm4gYiA/IGJ1aWxkX250IChDT05KX0NPTlNUUiwgYSwgYikgOiBhOwog ICBlbHNlIGlmIChiKQogICAgIHJldHVybiBiOwogICBlbHNlCiAgICAgcmV0 dXJuIE5VTExfVFJFRTsKIH0KIAotLy8gVHJhbnNmb3JtIHRoZSBsaXN0IG9m IGV4cHJlc3Npb25zIGluIHRoZSBUIGludG8gYSBjb25qdW5jdGlvbgotLy8g b2YgcmVxdWlyZW1lbnRzLiBUIG11c3QgYmUgYSBUUkVFX1ZFQy4KKy8qIFRy YW5zZm9ybSB0aGUgdmVjdG9yIG9mIGV4cHJlc3Npb25zIGluIHRoZSBUIGlu dG8gYSBjb25qdW5jdGlvbgorICAgb2YgcmVxdWlyZW1lbnRzLiBUIG11c3Qg YmUgYSBUUkVFX1ZFQy4gKi8KIHRyZWUKIGNvbmpvaW5fY29uc3RyYWludHMg KHRyZWUgdCkKIHsKQEAgLTg4LDE4ICsxMDksMTggQEAgY29uam9pbl9jb25z dHJhaW50cyAodHJlZSB0KQogICByZXR1cm4gcjsKIH0KIAorLyotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAg UmVzb2x1dGlvbiBvZiBxdWFsaWZpZWQgY29uY2VwdCBuYW1lcworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gLy8KLS8vIENvbnN0cmFpbnQgUmVzb2x1dGlv bgotLy8KLS8vIFRoaXMgZmFjaWxpdHkgaXMgdXNlZCB0byByZXNvbHZlIGNv bnN0cmFpbnQgY2hlY2tzIGZyb20gcmVxdWlyZW1lbnQKLS8vIGV4cHJlc3Np b25zLiBBIGNvbnN0cmFpbnQgY2hlY2sgaXMgYSBjYWxsIHRvIGEgZnVuY3Rp b24gdGVtcGxhdGUgZGVjbGFyZWQKLS8vIHdpdGggdGhlIGtleXdvcmQgJ2Nv bmNlcHQnLgotLy8KLS8vIFRoZSByZXN1bHQgb2YgcmVzb2x1dGlvbiBpcyBh IHBhaXIgKGEgVFJFRV9MSVNUKSB3aG9zZSB2YWx1ZSBpcyB0aGUKLS8vIG1h dGNoZWQgZGVjbGFyYXRpb24sIGFuZCB3aG9zZSBwdXJwb3NlIGNvbnRhaW5z IHRoZSBjb2VyY2VkIHRlbXBsYXRlCi0vLyBhcmd1bWVudHMgdGhhdCBjYW4g YmUgc3Vic3RpdHV0ZWQgaW50byB0aGUgY2FsbC4KKy8qIFRoaXMgZmFjaWxp dHkgaXMgdXNlZCB0byByZXNvbHZlIGNvbnN0cmFpbnQgY2hlY2tzIGZyb20g CisgICByZXF1aXJlbWVudCBleHByZXNzaW9ucy4gQSBjb25zdHJhaW50IGNo ZWNrIGlzIGEgY2FsbCB0byAKKyAgIGEgZnVuY3Rpb24gdGVtcGxhdGUgZGVj bGFyZWQgd2l0aCB0aGUga2V5d29yZCAnY29uY2VwdCcuCiAKKyAgIFRoZSBy ZXN1bHQgb2YgcmVzb2x1dGlvbiBpcyBhIHBhaXIgKGEgVFJFRV9MSVNUKSB3 aG9zZSB2YWx1ZSAKKyAgIGlzIHRoZSBtYXRjaGVkIGRlY2xhcmF0aW9uLCBh bmQgd2hvc2UgcHVycG9zZSBjb250YWlucyB0aGUgCisgICBjb2VyY2VkIHRl bXBsYXRlIGFyZ3VtZW50cyB0aGF0IGNhbiBiZSBzdWJzdGl0dXRlZCBpbnRv IHRoZSAKKyAgIGNhbGwuICAqLwogCiAvLyBHaXZlbiBhbiBvdmVybG9hZCBz ZXQgT1ZMLCB0cnkgdG8gZmluZCBhIHVuaXF1ZSBkZWZpbml0aW9uIHRoYXQg Y2FuIGJlCiAvLyBpbnN0YW50aWF0ZWQgYnkgdGhlIHRlbXBsYXRlIGFyZ3Vt ZW50cyBBUkdTLgpAQCAtMTY5LDcgKzE5MCw3IEBAIHJlc29sdmVfY29uc3Ry YWludF9jaGVjayAodHJlZSBjYWxsKQogCiAgIC8vIEEgY29uc3RyYWludCBj aGVjayBtdXN0IGJlIG9ubHkgYSB0ZW1wbGF0ZS1pZCBleHByZXNzaW9uLiBJ ZgogICAvLyBpdCdzIGEgY2FsbCB0byBhIGJhc2UtbGluaywgaXRzIGZ1bmN0 aW9uKHMpIHNob3VsZCBiZSBhCi0gIC8vIHRlbXBsYXRlLWlkIGV4cHJlc3Nz b24uIElmIHRoaXMgaXMgbm90IGEgdGVtcGxhdGUtaWQsIHRoZW4gaXQKKyAg Ly8gdGVtcGxhdGUtaWQgZXhwcmVzc2lvbi4gSWYgdGhpcyBpcyBub3QgYSB0 ZW1wbGF0ZS1pZCwgdGhlbiBpdAogICAvLyBjYW5ub3QgYmUgYSBjb25jZXB0 LWNoZWNrLgogICB0cmVlIHRhcmdldCA9IENBTExfRVhQUl9GTiAoY2FsbCk7 CiAgIGlmIChCQVNFTElOS19QICh0YXJnZXQpKQpAQCAtMTgwLDEzICsyMDEs MjEgQEAgcmVzb2x2ZV9jb25zdHJhaW50X2NoZWNrICh0cmVlIGNhbGwpCiAg IC8vIEdldCB0aGUgb3ZlcmxvYWQgc2V0IGFuZCB0ZW1wbGF0ZSBhcmd1bWVu dHMgYW5kIHRyeSB0bwogICAvLyByZXNvbHZlIHRoZSB0YXJnZXQuCiAgIHRy ZWUgb3ZsID0gVFJFRV9PUEVSQU5EICh0YXJnZXQsIDApOworICAKKyAgLyog VGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwgb2YgYSB2YXJpYWJsZSBjb25jZXB0 Li4uIGlsbC1mb3JtZWQuICovCisgIGlmIChUUkVFX0NPREUgKG92bCkgPT0g VEVNUExBVEVfREVDTCkKKyAgICB7CisgICAgICBlcnJvciAoImZ1bmN0aW9u IGNhbGwgb2YgdmFyaWFibGUgY29uY2VwdCAlcUUiLCBjYWxsKTsKKyAgICAg IHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgfQorCiAgIHRyZWUgYXJn cyA9IFRSRUVfT1BFUkFORCAodGFyZ2V0LCAxKTsKICAgcmV0dXJuIHJlc29s dmVfY29uc3RyYWludF9jaGVjayAob3ZsLCBhcmdzKTsKIH0KIAogLy8gR2l2 ZW4gYSBjYWxsIGV4cHJlc3Npb24gb3IgdGVtcGxhdGUtaWQgZXhwcmVzc2lv biB0byBhIGNvbmNlcHQsIEVYUFIsCiAvLyBwb3NzaWJseSBpbmNsdWRpbmcg YSBwbGFjZWhvbGRlciBhcmd1bWVudCwgZGVkdWNlIHRoZSBjb25jZXB0IGJl aW5nIGNoZWNrZWQKLS8vIGFuZCB0aGUgcHJvdG90eXBlIHBhcmFlbXRlci4g IFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uc3RyYWludCBhbmQgcHJvdG90eXBl CisvLyBhbmQgdGhlIHByb3RvdHlwZSBwYXJhbWV0ZXIuICBSZXR1cm5zIHRy dWUgaWYgdGhlIGNvbnN0cmFpbnQgYW5kIHByb3RvdHlwZQogLy8gY2FuIGJl IGRlZHVjZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4gTm90ZSB0aGF0IHRoZSBD SEVDSyBhbmQgUFJPVE8gYXJndW1lbnRzCiAvLyBhcmUgc2V0IHRvIE5VTExf VFJFRSBpZiB0aGlzIHJldHVybnMgZmFsc2UuCiBib29sCkBAIC0yMDUsNyAr MjM0LDggQEAgZGVkdWNlX2NvbnN0cmFpbmVkX3BhcmFtZXRlciAodHJlZSBl eHByLCB0cmVlJiBjaGVjaywgdHJlZSYgcHJvdG8pCiAgIGVsc2UgaWYgKFRS RUVfQ09ERSAoZXhwcikgPT0gQ0FMTF9FWFBSKQogICAgIHsKICAgICAgIC8v IFJlc29sdmUgdGhlIGNvbnN0cmFpbnQgY2hlY2sgdG8gZGVkdWNlIHRoZSBw cm90b3R5cGUgcGFyYW1ldGVyLgotICAgICAgaWYgKHRyZWUgaW5mbyA9IHJl c29sdmVfY29uc3RyYWludF9jaGVjayAoZXhwcikpCisgICAgICB0cmVlIGlu Zm8gPSByZXNvbHZlX2NvbnN0cmFpbnRfY2hlY2sgKGV4cHIpOworICAgICAg aWYgKGluZm8gJiYgaW5mbyAhPSBlcnJvcl9tYXJrX25vZGUpCiAgICAgICAg IHsKICAgICAgICAgICAvLyBHZXQgZnVuY3Rpb24gYW5kIGFyZ3VtZW50IGZy b20gdGhlIHJlc29sdmVkIGNoZWNrIGV4cHJlc3Npb24gYW5kCiAgICAgICAg ICAgLy8gdGhlIHByb3RvdHlwZSBwYXJhbWV0ZXIuIE5vdGUgdGhhdCBpZiB0 aGUgZmlyc3QgYXJndW1lbnQgd2FzIGEKQEAgLTI0Nyw3ICsyNzcsOCBAQCBk ZWR1Y2VfY29uY2VwdF9pbnRyb2R1Y3Rpb24gKHRyZWUgZXhwcikKICAgZWxz ZSBpZiAoVFJFRV9DT0RFIChleHByKSA9PSBDQUxMX0VYUFIpCiAgICAgewog ICAgICAgLy8gUmVzb2x2ZSB0aGUgY29uc3RyYWludCBjaGVjayBhbmQgcmV0 dXJuIGFyZ3VtZW50cy4KLSAgICAgIGlmICh0cmVlIGluZm8gPSByZXNvbHZl X2NvbnN0cmFpbnRfY2hlY2sgKGV4cHIpKQorICAgICAgdHJlZSBpbmZvID0g cmVzb2x2ZV9jb25zdHJhaW50X2NoZWNrIChleHByKTsKKyAgICAgIGlmIChp bmZvICYmIGluZm8gIT0gZXJyb3JfbWFya19ub2RlKQogICAgICAgICByZXR1 cm4gVFJFRV9QVVJQT1NFIChpbmZvKTsKICAgICAgIHJldHVybiBOVUxMX1RS RUU7CiAgICAgfQpAQCAtMjU1LDQ5NiArMjg2LDU2NSBAQCBkZWR1Y2VfY29u Y2VwdF9pbnRyb2R1Y3Rpb24gKHRyZWUgZXhwcikKICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CiB9CiAKK25hbWVzcGFjZSB7CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIExp ZnRpbmcgb2YgY29uY2VwdCBkZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gLy8KLS8vIERlY2xhcmF0aW9ucwordHJlZSBsaWZ0X2NvbnN0 cmFpbnRzICh0cmVlKTsKIAotLy8gQ2hlY2sgdGhhdCBGTiBzYXRpc2ZpZXMg dGhlIHN0cnVjdHVyYWwgcmVxdWlyZW1lbnRzIG9mIGEKLS8vIGZ1bmN0aW9u IGNvbmNlcHQgZGVmaW5pdGlvbi4KKy8qIElmIHRoZSB0cmVlIFQgaGFzIG9w ZXJhbmRzLCB0aGVuIGxpZnQgYW55IGNvbmNlcHRzIG91dCBvZiB0aGVtLiAg Ki8KIHRyZWUKLWNoZWNrX2Z1bmN0aW9uX2NvbmNlcHQgKHRyZWUgZm4pCits aWZ0X29wZXJhbmRzICh0cmVlIHQpCiB7Ci0gIGxvY2F0aW9uX3QgbG9jID0g REVDTF9TT1VSQ0VfTE9DQVRJT04gKGZuKTsKKyAgaWYgKGludCBuID0gdHJl ZV9vcGVyYW5kX2xlbmd0aCAodCkpCisgICAgeworICAgICAgdCA9IGNvcHlf bm9kZSAodCk7CisgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkK KyAgICAgICAgVFJFRV9PUEVSQU5EICh0LCBpKSA9IGxpZnRfY29uc3RyYWlu dHMgKFRSRUVfT1BFUkFORCAodCwgaSkpOworICAgIH0KKyAgcmV0dXJuIHQ7 Cit9CiAKLSAgLy8gQ2hlY2sgdGhhdCB0aGUgZnVuY3Rpb24gaXMgY29tcHJp c2VkIG9mIG9ubHkgYSBzaW5nbGUKLSAgLy8gcmV0dXJuIHN0YXRlbWVudC4K Ky8qIElubGluZSBhIGZ1bmN0aW9uIChjb25jZXB0KSBkZWZpbml0aW9uIGJ5 IHN1YnN0aXR1dGluZworICAgQVJHUyBpbnRvIGl0cyBib2R5LiAqLwordHJl ZQorbGlmdF9mdW5jdGlvbl9kZWZpbml0aW9uICh0cmVlIGZuLCB0cmVlIGFy Z3MpCit7CisgIC8qIEV4dHJhY3QgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9u IG1pbnVzIHRoZSByZXR1cm4gZXhwcmVzc2lvbi4gICovCiAgIHRyZWUgYm9k eSA9IERFQ0xfU0FWRURfVFJFRSAoZm4pOworICBpZiAoIWJvZHkpCisgICAg cmV0dXJuIGVycm9yX21hcmtfbm9kZTsKICAgaWYgKFRSRUVfQ09ERSAoYm9k eSkgPT0gQklORF9FWFBSKQogICAgIGJvZHkgPSBCSU5EX0VYUFJfQk9EWSAo Ym9keSk7Ci0KLSAgLy8gU29tZXRpbWVzIGEgZnVuY3Rpb24gY2FsbCByZXN1 bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBjbGVhbiB1cAotICAvLyBwb2ludHMu IEFsbG93IHRoZXNlIHRvIGJlIHByZXNlcnZlZCBpbiB0aGUgYm9keSBvZiB0 aGUKLSAgLy8gY29uc3RyYWludCwgYXMgd2UgbWlnaHQgYWN0dWFsbHkgbmVl ZCB0aGVtIGZvciBzb21lIGNvbnN0ZXhwcgotICAvLyBldmFsdWF0aW9ucy4K LSAgaWYgKFRSRUVfQ09ERSAoYm9keSkgPT0gQ0xFQU5VUF9QT0lOVF9FWFBS KQotICAgIGJvZHkgPSBUUkVFX09QRVJBTkQgKGJvZHksIDApOwotCisgIAor ICAvKiBGSVhNRTogV2h5IGlzbid0IHRoaXMgYmVpbmcgY2hlY2tlZCBhdCB0 aGUgcG9pbnQgb2YgZGVmaW5pdGlvbj8gKi8KICAgaWYgKFRSRUVfQ09ERSAo Ym9keSkgIT0gUkVUVVJOX0VYUFIpCi0gICAgZXJyb3JfYXQgKGxvYywgImZ1 bmN0aW9uIGNvbmNlcHQgZGVmaW5pdGlvbiAlcUQgaGFzIG11bHRpcGxlIHN0 YXRlbWVudHMiLAotICAgICAgICAgICAgICBmbik7Ci0KLSAgcmV0dXJuIE5V TExfVFJFRTsKLX0KKyAgICB7CisgICAgICBlcnJvcl9hdCAoREVDTF9TT1VS Q0VfTE9DQVRJT04gKGZuKSwKKyAgICAgICAgICAgICAgICAiY29uY2VwdCBk ZWZpbml0aW9uICVxRCBoYXMgbXVsdGlwbGUgc3RhdGVtZW50cyIsIGZuKTsK KyAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgfQogCisgIGdj Y19hc3NlcnQgKFRSRUVfQ09ERSAoYm9keSkgPT0gUkVUVVJOX0VYUFIpOwor ICBib2R5ID0gVFJFRV9PUEVSQU5EIChib2R5LCAwKTsKIAotLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KLS8vIE5vcm1hbGl6YXRpb24K LS8vCi0vLyBOb3JtYWxpemUgYSB0ZW1wbGF0ZSByZXF1aXJlbWVudCB0byBh IGxvZ2ljYWwgZm9ybXVsYSB3cml0dGVuIGluIHRlcm1zIG9mCi0vLyBhdG9t aWMgcHJvcG9zaXRpb25zLCByZXR1cmluZyB0aGUgbmV3IGV4cHJlc3Npb24u ICBJZiB0aGUgZXhwcmVzc2lvbiBjYW5ub3QKLS8vIGJlIG5vcm1hbGl6ZWQs IGEgTlVMTF9UUkVFIGlzIHJldHVybmVkLgorICAvKiBTdWJzdGl0dXRlIHRl bXBsYXRlIGFyZ3VtZW50cyB0byBwcm9kdWNlIG91ciBpbmxpbmUgZXhwcmVz c2lvbi4gICovCisgIHRyZWUgcmVzdWx0ID0gdHN1YnN0X2V4cHIgKGJvZHks IGFyZ3MsIHRmX25vbmUsIE5VTExfVFJFRSwgZmFsc2UpOworICBpZiAocmVz dWx0ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICByZXR1cm4gZXJyb3JfbWFy a19ub2RlOwogCi1uYW1lc3BhY2UgeworICByZXR1cm4gbGlmdF9jb25zdHJh aW50cyAocmVzdWx0KTsKK30KIAotLy8gSGVscGVyIGZ1bmN0aW9ucwotdHJl ZSBub3JtYWxpemVfY29uc3RyYWludHMgKHRyZWUpOwotdHJlZSBub3JtYWxp emVfbm9kZSAodHJlZSk7Ci10cmVlIG5vcm1hbGl6ZV9leHByICh0cmVlKTsK LXRyZWUgbm9ybWFsaXplX3N0bXQgKHRyZWUpOwotdHJlZSBub3JtYWxpemVf ZGVjbCAodHJlZSk7Ci10cmVlIG5vcm1hbGl6ZV9taXNjICh0cmVlKTsKLXRy ZWUgbm9ybWFsaXplX2xvZ2ljYWwgKHRyZWUpOwotdHJlZSBub3JtYWxpemVf Y2FsbCAodHJlZSk7Ci10cmVlIG5vcm1hbGl6ZV9yZXF1aXJlcyAodHJlZSk7 Ci10cmVlIG5vcm1hbGl6ZV9leHByX3JlcSAodHJlZSk7Ci10cmVlIG5vcm1h bGl6ZV90eXBlX3JlcSAodHJlZSk7Ci10cmVlIG5vcm1hbGl6ZV9uZXN0ZWRf cmVxICh0cmVlKTsKLXRyZWUgbm9ybWFsaXplX3ZhciAodHJlZSk7Ci10cmVl IG5vcm1hbGl6ZV9jbGVhbnVwX3BvaW50ICh0cmVlKTsKLXRyZWUgbm9ybWFs aXplX3RlbXBsYXRlX2lkICh0cmVlKTsKLXRyZWUgbm9ybWFsaXplX2F0b20g KHRyZWUpOwotCi0vLyBSZWR1Y2UgdGhlIHJlcXVpcmVtZW50IFQgaW50byBh IGxvZ2ljYWwgZm9ybXVsYSB3cml0dGVuIGluIHRlcm1zIG9mCi0vLyBhdG9t aWMgcHJvcG9zaXRpb25zLgorLyogSW5saW5lIGEgcmVmZXJlbmNlIHRvIGEg ZnVuY3Rpb24gY29uY2VwdC4gICovCiB0cmVlCi1ub3JtYWxpemVfbm9kZSAo dHJlZSB0KQorbGlmdF9jYWxsICh0cmVlIHQpCiB7Ci0gIHN3aXRjaCAoVFJF RV9DT0RFX0NMQVNTIChUUkVFX0NPREUgKHQpKSkKLSAgICB7Ci0gICAgY2Fz ZSB0Y2NfdW5hcnk6Ci0gICAgY2FzZSB0Y2NfYmluYXJ5OgotICAgIGNhc2Ug dGNjX2V4cHJlc3Npb246Ci0gICAgY2FzZSB0Y2NfdmxfZXhwOgotICAgICAg cmV0dXJuIG5vcm1hbGl6ZV9leHByICh0KTsKLQotICAgIGNhc2UgdGNjX3N0 YXRlbWVudDoKLSAgICAgIHJldHVybiBub3JtYWxpemVfc3RtdCAodCk7Ci0K LSAgICBjYXNlIHRjY19kZWNsYXJhdGlvbjoKLSAgICAgIHJldHVybiBub3Jt YWxpemVfZGVjbCAodCk7Ci0KLSAgICBjYXNlIHRjY19leGNlcHRpb25hbDoK LSAgICAgIHJldHVybiBub3JtYWxpemVfbWlzYyAodCk7Ci0KLSAgICAvLyBU aGVzZSBraW5kcyBvZiBleHByZXNzaW9ucyBhcmUgYXRvbWljLgotICAgIGNh c2UgdGNjX2NvbnN0YW50OgotICAgIGNhc2UgdGNjX3JlZmVyZW5jZToKLSAg ICBjYXNlIHRjY19jb21wYXJpc29uOgotICAgICAgcmV0dXJuIHQ7CisgIC8q IFRyeSB0byByZXNvbHZlIHRoaXMgZnVuY3Rpb24gY2FsbCBhcyBhIGNvbmNl cHQuICBJZiBub3QsIHRoZW4gCisgICAgIGl0IGNhbiBiZSByZXR1cm5lZCBh cy1pcy4gICovCisgIHRyZWUgY2hlY2sgPSByZXNvbHZlX2NvbnN0cmFpbnRf Y2hlY2sgKHQpOworICBpZiAoIWNoZWNrKQorICAgICAgcmV0dXJuIGxpZnRf b3BlcmFuZHMgKHQpOworICBpZiAoY2hlY2sgPT0gZXJyb3JfbWFya19ub2Rl KQorICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAKLSAgICBkZWZhdWx0 OgotICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOwotICAgIH0KLSAgcmV0dXJu IE5VTExfVFJFRTsKKyAgdHJlZSBmbiA9IFRSRUVfVkFMVUUgKGNoZWNrKTsK KyAgdHJlZSBhcmdzID0gVFJFRV9QVVJQT1NFIChjaGVjayk7CisgIHJldHVy biBsaWZ0X2Z1bmN0aW9uX2RlZmluaXRpb24gKGZuLCBhcmdzKTsKIH0KIAot Ly8gUmVkdWN0aW9uIHJ1bGVzIGZvciB0aGUgZXhwcmVzc2lvbiBub2RlIFQu CiB0cmVlCi1ub3JtYWxpemVfZXhwciAodHJlZSB0KQorbGlmdF92YXJpYWJs ZV9pbml0aWFsaXplciAodHJlZSB2YXIsIHRyZWUgYXJncykKIHsKLSAgc3dp dGNoIChUUkVFX0NPREUgKHQpKQotICAgIHsKLSAgICBjYXNlIFRSVVRIX0FO RElGX0VYUFI6Ci0gICAgY2FzZSBUUlVUSF9PUklGX0VYUFI6Ci0gICAgICBy ZXR1cm4gbm9ybWFsaXplX2xvZ2ljYWwgKHQpOwotCi0gICAgY2FzZSBDQUxM X0VYUFI6Ci0gICAgICByZXR1cm4gbm9ybWFsaXplX2NhbGwgKHQpOwotCi0g ICAgY2FzZSBSRVFVSVJFU19FWFBSOgotICAgICAgcmV0dXJuIG5vcm1hbGl6 ZV9yZXF1aXJlcyAodCk7Ci0KLSAgICBjYXNlIEVYUFJfUkVROgotICAgICAg cmV0dXJuIG5vcm1hbGl6ZV9leHByX3JlcSAodCk7Ci0KLSAgICBjYXNlIFRZ UEVfUkVROgotICAgICAgcmV0dXJuIG5vcm1hbGl6ZV90eXBlX3JlcSAodCk7 Ci0KLSAgICBjYXNlIE5FU1RFRF9SRVE6Ci0gICAgICByZXR1cm4gbm9ybWFs aXplX25lc3RlZF9yZXEgKHQpOwotCi0gICAgY2FzZSBURU1QTEFURV9JRF9F WFBSOgotICAgICAgcmV0dXJuIG5vcm1hbGl6ZV90ZW1wbGF0ZV9pZCAodCk7 Ci0KLSAgICBjYXNlIEJJTkRfRVhQUjoKLSAgICAgIHJldHVybiBub3JtYWxp emVfbm9kZSAoQklORF9FWFBSX0JPRFkgKHQpKTsKKyAgLyogRXh0cmFjdCB0 aGUgYm9keSBmcm9tIHRoZSB2YXJpYWJsZSBpbml0aWFsaXplci4gICovCisg IHRyZWUgaW5pdCA9IERFQ0xfSU5JVElBTCAodmFyKTsKKyAgaWYgKCFpbml0 KQorICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAKLSAgICBjYXNlIENM RUFOVVBfUE9JTlRfRVhQUjoKLSAgICAgIHJldHVybiBub3JtYWxpemVfY2xl YW51cF9wb2ludCAodCk7CisgIC8qIFN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50 cyB0byBmb3JtIG91ciBuZXcgaW5saW5lIGV4cHJlc3Npb24uICAqLworICB0 cmVlIHJlc3VsdCA9IHRzdWJzdF9leHByIChpbml0LCBhcmdzLCB0Zl9ub25l LCBOVUxMX1RSRUUsIGZhbHNlKTsKKyAgaWYgKHJlc3VsdCA9PSBlcnJvcl9t YXJrX25vZGUpCisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIAotICAg IC8vIERvIG5vdCByZWN1cnNlLgotICAgIGNhc2UgVEFHX0RFRk46Ci0gICAg ICByZXR1cm4gTlVMTF9UUkVFOworICByZXR1cm4gbGlmdF9jb25zdHJhaW50 cyAocmVzdWx0KTsKK30KIAotICAgIC8vIEV2ZXJ5dGhpbmcgZWxzZSBpcyBh dG9taWMuCi0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiBub3JtYWxpemVf YXRvbSAodCk7Ci0gICAgfQorLyogSW5saW5lIGEgcmVmZXJlbmNlIHRvIGEg dmFyaWFibGUgY29uY2VwdC4gICovCit0cmVlCitsaWZ0X3ZhciAodHJlZSB0 KQoreworICB0cmVlIHRtcGwgPSBUUkVFX09QRVJBTkQgKHQsIDApOworICB0 cmVlIGFyZ3MgPSBUUkVFX09QRVJBTkQgKHQsIDEpOworICB0cmVlIGRlY2wg PSBERUNMX1RFTVBMQVRFX1JFU1VMVCAodG1wbCk7CisgIGlmICghREVDTF9E RUNMQVJFRF9DT05DRVBUX1AgKGRlY2wpKQorICAgIHJldHVybiB0OworICBy ZXR1cm4gbGlmdF92YXJpYWJsZV9pbml0aWFsaXplciAoZGVjbCwgYXJncyk7 CiB9CiAKLS8vIFJlZHVjdGlvbiBydWxlcyBmb3IgdGhlIHN0YXRlbWVudCBU LgorLyogRGV0ZXJtaW5lIGlmIGEgdGVtcGxhdGUtaWQgaXMgYSB2YXJpYWJs ZSBjb25jZXB0IGFuZCBpbmxpbmUuICAqLwogdHJlZQotbm9ybWFsaXplX3N0 bXQgKHRyZWUgdCkKK2xpZnRfdGVtcGxhdGVfaWQgKHRyZWUgdCkKIHsKLSAg c3dpdGNoIChUUkVFX0NPREUgKHQpKQotICAgIHsKLSAgICAvLyBSZWR1Y2Ug dGhlIHJldHVybmVkIGV4cHJlc3Npb24uCi0gICAgY2FzZSBSRVRVUk5fRVhQ UjoKLSAgICAgIHJldHVybiBub3JtYWxpemVfbm9kZSAoVFJFRV9PUEVSQU5E ICh0LCAwKSk7CisgIGlmICh2YXJpYWJsZV9jb25jZXB0X3AgKFRSRUVfT1BF UkFORCAodCwgMCkpKQorICAgIHJldHVybiBsaWZ0X3ZhciAodCk7CiAKLSAg ICAvLyBUaGVzZSBzdGF0ZW1lbnRzIGRvIG5vdCBpbnRyb2R1Y2UgcHJvcG9z aXRpb25zCi0gICAgLy8gaW4gdGhlIGNvbnN0cmFpbnRzIGxhbmd1YWdlLiBE byBub3QgcmVjdXJzZS4KLSAgICBjYXNlIERFQ0xfRVhQUjoKLSAgICBjYXNl IFVTSU5HX1NUTVQ6Ci0gICAgICByZXR1cm4gTlVMTF9UUkVFOworICAvKiBD aGVjayB0aGF0IHdlIGRpZG4ndCByZWZlciB0byBhIGZ1bmN0aW9uIGNvbmNl cHQgbGlrZQorICAgICAgYSB2YXJpYWJsZS4KIAotICAgIGRlZmF1bHQ6Ci0g ICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgIFRPRE86IEFkZCBhIG5v dGUgb24gaG93IHRvIGZpeCB0aGlzLiAgKi8KKyAgdHJlZSB0bXBsID0gVFJF RV9PUEVSQU5EICh0LCAwKTsKKyAgaWYgKFRSRUVfQ09ERSAodG1wbCkgPT0g T1ZFUkxPQUQpCisgICAgeworICAgICAgdHJlZSBmbiA9IE9WTF9GVU5DVElP TiAodG1wbCk7CisgICAgICBpZiAoVFJFRV9DT0RFIChmbikgPT0gVEVNUExB VEVfREVDTCAKKyAgICAgICAgICAmJiBERUNMX0RFQ0xBUkVEX0NPTkNFUFRf UCAoREVDTF9URU1QTEFURV9SRVNVTFQgKGZuKSkpCisgICAgICAgIHsKKyAg ICAgICAgICBlcnJvciAoImludmFsaWQgcmVmZXJlbmNlIHRvIGZ1bmN0aW9u IGNvbmNlcHQgJXFEIiwgZm4pOworICAgICAgICAgIHJldHVybiBlcnJvcl9t YXJrX25vZGU7CisgICAgICAgIH0KICAgICB9Ci0gIHJldHVybiBOVUxMX1RS RUU7CisKKyAgcmV0dXJuIHQ7CiB9CiAKLS8vIFJlZHVjdGlvbiBydWxlcyBm b3IgdGhlIGRlY2xhcmF0aW9uIFQuCisvKiBMaWZ0IGFueSBjb25zdHJhaW50 cyBhcHBlYXJpbmcgaW4gYSBuZXN0ZWQgcmVxdWlyZW1lbnQgb2YKKyAgIGEg cmVxdWlyZXMtZXhwcmVzc2lvbi4gKi8KIHRyZWUKLW5vcm1hbGl6ZV9kZWNs ICh0cmVlIHQpCitsaWZ0X3JlcXVpcmVzX2V4cHIgKHRyZWUgdCkKIHsKLSAg c3dpdGNoIChUUkVFX0NPREUgKHQpKQorICB0cmVlIHBhcm1zID0gVFJFRV9P UEVSQU5EICh0LCAwKTsKKyAgdHJlZSByZXFzID0gVFJFRV9PUEVSQU5EICh0 LCAxKTsKKyAgdHJlZSByZXN1bHQgPSBOVUxMX1RSRUU7CisgIGZvciAoOyBy ZXFzICE9IE5VTExfVFJFRTsgcmVxcyA9IFRSRUVfQ0hBSU4gKHJlcXMpKQog ICAgIHsKLSAgICAvLyBSZWZlcmVuY2VzIHRvIHZhciBkZWNscyBhcmUgYXRv bWljLgotICAgIGNhc2UgVkFSX0RFQ0w6Ci0gICAgICByZXR1cm4gdDsKLQot ICAgIGRlZmF1bHQ6Ci0gICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAg ICB0cmVlIHJlcSA9IFRSRUVfVkFMVUUgKHJlcXMpOworICAgICAgaWYgKFRS RUVfQ09ERSAocmVxKSA9PSBORVNURURfUkVRKQorICAgICAgICB7CisgICAg ICAgICAgdHJlZSBleHByID0gbGlmdF9jb25zdHJhaW50cyAoVFJFRV9PUEVS QU5EIChyZXEsIDApKTsKKyAgICAgICAgICByZXEgPSBmaW5pc2hfbmVzdGVk X3JlcXVpcmVtZW50IChleHByKTsKKyAgICAgICAgfQorICAgICAgcmVzdWx0 ID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHJlcSwgcmVzdWx0KTsKICAgICB9 Ci0gIHJldHVybiBOVUxMX1RSRUU7CisgIHJldHVybiBmaW5pc2hfcmVxdWly ZXNfZXhwciAocGFybXMsIHJlc3VsdCk7CiB9CiAKLS8vIFJlZHVjdGlvbiBy dWxlcyBmb3IgdGhlIG5vZGUgVC4KLXRyZWUKLW5vcm1hbGl6ZV9taXNjICh0 cmVlIHQpCisvKiBJbmxpbmUgcmVmZXJlbmNlcyB0byBzcGVjaWFsaXphdGlv bnMgb2YgY29uY2VwdHMuICAqLwordHJlZSAKK2xpZnRfY29uc3RyYWludHMg KHRyZWUgdCkKIHsKKyAgaWYgKHQgPT0gTlVMTF9UUkVFKQorICAgIHJldHVy biBOVUxMX1RSRUU7CisgIAorICBpZiAodCA9PSBlcnJvcl9tYXJrX25vZGUp CisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKworICAvKiBDb25jZXB0 cyBjYW4gYmUgcmVmZXJyZWQgdG8gYnkgY2FsbCBvciB2YXJpYWJsZS4gQWxs IG90aGVyCisgICAgIG5vZGVzIGFyZSBwcmVzZXJ2ZWQuICAqLwogICBzd2l0 Y2ggKFRSRUVfQ09ERSAodCkpCiAgICAgewotICAgIC8vIEFsbCBvZiB0aGVz ZSBhcmUgYXRvbWljLgotICAgIGNhc2UgRVJST1JfTUFSSzoKLSAgICBjYXNl IFRSQUlUX0VYUFI6Ci0gICAgY2FzZSBDT05TVFJVQ1RPUjoKLSAgICAgIHJl dHVybiB0OworICAgIGNhc2UgQ0FMTF9FWFBSOgorICAgICAgcmV0dXJuIGxp ZnRfY2FsbCAodCk7CisgICAgCisgICAgY2FzZSBURU1QTEFURV9JRF9FWFBS OgorICAgICAgcmV0dXJuIGxpZnRfdGVtcGxhdGVfaWQgKHQpOworICAgIAor ICAgIGNhc2UgUkVRVUlSRVNfRVhQUjoKKyAgICAgIHJldHVybiBsaWZ0X3Jl cXVpcmVzX2V4cHIgKHQpOwogCi0gICAgLy8gVGhpcyBzaG91bGQgaGF2ZSBi ZWVuIGNhdWdodCBhcyBhbiBlcnJvci4KLSAgICBjYXNlIFNUQVRFTUVOVF9M SVNUOgotICAgICAgcmV0dXJuIE5VTExfVFJFRTsKKyAgICBjYXNlIFRSRUVf TElTVDoKKyAgICAgIHsKKyAgICAgICAgdCA9IGNvcHlfbm9kZSAodCk7Cisg ICAgICAgIFRSRUVfVkFMVUUgKHQpID0gbGlmdF9jb25zdHJhaW50cyAoVFJF RV9WQUxVRSAodCkpOworICAgICAgICBUUkVFX0NIQUlOICh0KSA9IGxpZnRf Y29uc3RyYWludHMgKFRSRUVfQ0hBSU4gKHQpKTsKKyAgICAgICAgcmV0dXJu IHQ7CisgICAgICB9CiAKICAgICBkZWZhdWx0OgotICAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOworICAgICAgcmV0dXJuIGxpZnRfb3BlcmFuZHMgKHQpOwog ICAgIH0KLSAgcmV0dXJuIE5VTExfVFJFRTsKIH0KIAotLy8gQ2hlY2sgdGhh dCB0aGUgbG9naWNhbCBleHByZXNzaW9uIGlzIG5vdCBhIHVzZXItZGVmaW5l ZCBvcGVyYXRvci4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50IG5vcm1hbGl6 YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3Ry ZWUgdHJhbnNmb3JtX2V4cHJlc3Npb24gKHRyZWUpOworCisvKiBDaGVjayB0 aGF0IHRoZSBsb2dpY2FsLW9yIG9yIGxvZ2ljYWwtYW5kIGV4cHJlc3Npb24g ZG9lcworICAgbm90IHJlc3VsdCBpbiBhIGNhbGwgdG8gYSB1c2VyLWRlZmlu ZWQgdXNlci1kZWZpbmVkIG9wZXJhdG9yIAorICAgKHRlbXAuY29uc3RyLm9w KS4gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2dpY2FsIG9wZXJhdG9yIGlzIAor ICAgYWRtaXNzaWJsZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAqLwogYm9vbAot Y2hlY2tfbG9naWNhbCAodHJlZSB0KQorY2hlY2tfbG9naWNhbF9leHByICh0 cmVlIHQpIAogewotICAvLyBXZSBjYW4ndCBkbyBtdWNoIGZvciB0eXBlIGRl cGVuZGVudCBleHByZXNzaW9ucy4KLSAgaWYgKHR5cGVfZGVwZW5kZW50X2V4 cHJlc3Npb25fcCAodCkgfHwgdmFsdWVfZGVwZW5kZW50X2V4cHJlc3Npb25f cCAodCkpCisgIC8qIFdlIGNhbid0IGRvIG11Y2ggZm9yIHR5cGUgZGVwZW5k ZW50IGV4cHJlc3Npb25zLiAqLworICBpZiAodHlwZV9kZXBlbmRlbnRfZXhw cmVzc2lvbl9wICh0KSkKICAgICByZXR1cm4gdHJ1ZTsKIAotICAvLyBSZXNv bHZlIHRoZSBsb2dpY2FsIG9wZXJhdG9yLiBOb3RlIHRoYXQgdGVtcGxhdGUg cHJvY2Vzc2luZyBpcwotICAvLyBkaXNhYmxlZCBzbyB3ZSBnZXQgdGhlIGFj dHVhbCBjYWxsIG9yIHRhcmdldCBleHByZXNzaW9uIGJhY2suCi0gIC8vIG5v dF9wcm9jZXNzaW5nX3RlbXBsYXRlX3NlbnRpbmVsIHNlbnRpbmVsOworICAv KiBSZXNvbHZlIHRoZSBsb2dpY2FsIG9wZXJhdG9yLiBOb3RlIHRoYXQgdGVt cGxhdGUgcHJvY2Vzc2luZyBpcworICAgICBkaXNhYmxlZCBzbyB3ZSBnZXQg dGhlIGFjdHVhbCBjYWxsIG9yIHRhcmdldCBleHByZXNzaW9uIGJhY2suCisg ICAgIG5vdF9wcm9jZXNzaW5nX3RlbXBsYXRlX3NlbnRpbmVsIHNlbnRpbmVs LiAqLwogICB0cmVlIGFyZzEgPSBUUkVFX09QRVJBTkQgKHQsIDApOwogICB0 cmVlIGFyZzIgPSBUUkVFX09QRVJBTkQgKHQsIDEpOwotCiAgIHRyZWUgb3Zs ID0gTlVMTF9UUkVFOwotICB0cmVlIGV4cHIgPSBidWlsZF9uZXdfb3AgKGlu cHV0X2xvY2F0aW9uLCBUUkVFX0NPREUgKHQpLCBMT09LVVBfTk9STUFMLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIC8qYXJn MyovTlVMTF9UUkVFLAorICB0cmVlIGV4cHIgPSBidWlsZF9uZXdfb3AgKGlu cHV0X2xvY2F0aW9uLCBUUkVFX0NPREUgKHQpLCBMT09LVVBfTk9STUFMLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCAvKmFy ZzMqL05VTExfVFJFRSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm92bCwgdGZfbm9uZSk7CiAgIGlmIChUUkVFX0NPREUgKGV4cHIpICE9IFRS RUVfQ09ERSAodCkpCiAgICAgewogICAgICAgZXJyb3IgKCJ1c2VyLWRlZmlu ZWQgb3BlcmF0b3IgJXFzIGluIGNvbnN0cmFpbnQgJXFFIiwKICAgICAgICAg ICAgICBvcGVyYXRvcl9uYW1lX2luZm9bVFJFRV9DT0RFICh0KV0ubmFtZSwg dCk7Ci0gICAgICA7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICBy ZXR1cm4gdHJ1ZTsKIH0KIAotLy8gUmVkdWN0aW9uIHJ1bGVzIGZvciB0aGUg YmluYXJ5IGxvZ2ljYWwgZXhwcmVzc2lvbiBUICgmJiBhbmQgfHwpLgotLy8K LS8vIEdlbmVyYXRlIGEgbmV3IGV4cHJlc3Npb24gZnJvbSB0aGUgcmVkdWNl ZCBvcGVyYW5kcy4gSWYgZWl0aGVyIG9wZXJhbmQKLS8vIGNhbm5vdCBiZSBy ZWR1Y2VkLCB0aGVuIHRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiBpcyBudWxs LgorLyogVHJhbnNmb3JtIGEgbG9naWNhbC1vciBvciBsb2dpY2FsLWFuZCBl eHByZXNzaW9uIGludG8gZWl0aGVyCisgICBhIGNvbmp1bmN0aW9uIG9yIGRp c2p1bmN0aW9uLiAqLwogdHJlZQotbm9ybWFsaXplX2xvZ2ljYWwgKHRyZWUg dCkKK3hmb3JtX2xvZ2ljYWwgKHRyZWUgdCwgdHJlZV9jb2RlIGMpCiB7Ci0g IGlmICghY2hlY2tfbG9naWNhbCAodCkpCi0gICAgcmV0dXJuIE5VTExfVFJF RTsKKyAgaWYgKCFjaGVja19sb2dpY2FsX2V4cHIgKHQpKQorICAgIHJldHVy biBlcnJvcl9tYXJrX25vZGU7CisgIHRyZWUgdDAgPSB0cmFuc2Zvcm1fZXhw cmVzc2lvbiAoVFJFRV9PUEVSQU5EICh0LCAwKSk7CisgIHRyZWUgdDEgPSB0 cmFuc2Zvcm1fZXhwcmVzc2lvbiAoVFJFRV9PUEVSQU5EICh0LCAxKSk7Cisg IHJldHVybiBidWlsZF9udCAoYywgdDAsIHQxKTsKK30KIAotICB0cmVlIGwg PSBub3JtYWxpemVfZXhwciAoVFJFRV9PUEVSQU5EICh0LCAwKSk7Ci0gIHRy ZWUgciA9IG5vcm1hbGl6ZV9leHByIChUUkVFX09QRVJBTkQgKHQsIDEpKTsK LSAgaWYgKGwgJiYgcikKLSAgICB7Ci0gICAgICB0cmVlIHJlc3VsdCA9IGNv cHlfbm9kZSAodCk7Ci0gICAgICBTRVRfRVhQUl9MT0NBVElPTiAocmVzdWx0 LCBFWFBSX0xPQ0FUSU9OICh0KSk7Ci0gICAgICBUUkVFX09QRVJBTkQgKHJl c3VsdCwgMCkgPSBsOwotICAgICAgVFJFRV9PUEVSQU5EIChyZXN1bHQsIDEp ID0gcjsKLSAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICBlbHNlCi0g ICAgcmV0dXJuIE5VTExfVFJFRTsKKy8qIEEgc2ltcGxlIHJlcXVpcmVtZW50 IFQgaW50cm9kdWNlcyBhbiBleHByZXNzaW9uIGNvbnN0cmFpbnQKKyAgIGZv ciBpdHMgZXhwcmVzc2lvbi4gKi8KK2lubGluZSB0cmVlCit4Zm9ybV9zaW1w bGVfcmVxdWlyZW1lbnQgKHRyZWUgdCkKK3sKKyAgcmV0dXJuIGJ1aWxkX250 IChFWFBSX0NPTlNUUiwgVFJFRV9PUEVSQU5EICh0LCAwKSk7CiB9CiAKLS8v IERvIGEgY3Vyc29yeSBpbnZlc3RpZ2F0aW9uIG9mIHRoZSB0YXJnZXQgaW4g dGhlIGNhbGwgZXhwcmVzc2lvbgotLy8gd2l0aCB0aGUgYWltIG9mIGVhcmx5 IGRpYWdub3NpcyBvZiBpbGwtZm9ybWVkIGNvbnN0cmFpbnRzLgotaW5saW5l IGJvb2wKLWNoZWNrX2NhbGwgKHRyZWUgdCkKKy8qIEEgdHlwZSByZXF1aXJl bWVudCBUIGludHJvZHVjZSBhIHR5cGUgY29uc3RyYWludCBmb3IgaXRzCisg ICB0eXBlLiAqLworaW5saW5lIHRyZWUKK3hmb3JtX3R5cGVfcmVxdWlyZW1l bnQgKHRyZWUgdCkKIHsKLSAgdHJlZSB0YXJnZXQgPSBDQUxMX0VYUFJfRk4g KHQpOwotICBpZiAoVFJFRV9DT0RFICh0YXJnZXQpICE9IFRFTVBMQVRFX0lE X0VYUFIpCi0gICAgcmV0dXJuIHRydWU7Ci0gIHRyZWUgdG1wbCA9IFRSRUVf T1BFUkFORCAodGFyZ2V0LCAwKTsKLSAgaWYgKFRSRUVfQ09ERSAodG1wbCkg IT0gVEVNUExBVEVfREVDTCkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgdHJlZSBk ZWNsID0gREVDTF9URU1QTEFURV9SRVNVTFQgKHRtcGwpOwotICBpZiAoVFJF RV9DT0RFIChkZWNsKSA9PSBWQVJfREVDTCAmJiBERUNMX0RFQ0xBUkVEX0NP TkNFUFRfUCAoZGVjbCkpCi0gICAgewotICAgICAgZXJyb3IgKCJpbnZhbGlk IGNvbnN0cmFpbnQgJXFFIiwgdCk7Ci0gICAgICBpbmZvcm0gKGlucHV0X2xv Y2F0aW9uLCAiZGlkIHlvdSBtZWFuICVxRSIsIHRhcmdldCk7Ci0gICAgICBy ZXR1cm4gZmFsc2U7Ci0gICAgfQotICByZXR1cm4gdHJ1ZTsKKyAgcmV0dXJu IGJ1aWxkX250IChUWVBFX0NPTlNUUiwgVFJFRV9PUEVSQU5EICh0LCAwKSk7 CiB9CiAKLS8vIFJlZHVjdGlvbiBydWxlcyBmb3IgdGhlIGNhbGwgZXhwcmVz c2lvbiBULgotLy8KLS8vIElmIFQgaXMgYSBjYWxsIHRvIGEgY29uc3RyYWlu dCBpbnN0YW50aWF0ZSBpdHMgZGVmaW5pdGlvbiBhbmQKLS8vIHJlY3Vyc2l2 ZWx5IHJlZHVjZSBpdHMgcmV0dXJuZWQgZXhwcmVzc2lvbi4KKy8qIEEgY29t cG91bmQgcmVxdWlyZW1lbnQgVCBpbnRyb2R1Y2VzIGEgY29uanVuY3Rpb24g b2YgY29uc3RyYWludHMKKyAgIGRlcGVuZGluZyBvbiBpdHMgZm9ybS4gVGhl IGNvbmp1bmN0aW9uIGFsd2F5cyBpbmNsdWRlcworICAgYW4gZXhwcmVzc2lv biBjb25zdHJhaW50IGZvciB0aGUgZXhwcmVzc2lvbiBvZiB0aGUgcmVxdWly ZW1lbnQuCisgICBJZiBhIHRyYWlsaW5nIHJldHVybiB0eXBlIHdhcyBzcGVj aWZpZWQsIHRoZSBjb25qdW5jdGlvbiBpbmNsdWRlcworICAgZWl0aGVyIGFu IGltcGxpY2l0IGNvbnZlcnNpb24gY29uc3RyYWludCBvciBhbiBhcmd1bWVu dAorICAgZGVkdWN0aW9uIGNvbnN0cmFpbnQuIElmIHRoZSBub2V4Y2VwdCBz cGVjaWZpZXIgaXMgcHJlc2VudCwgdGhlCisgICBjb25qdW5jdGlvbiBpbmNs dWRlcyBhbiBleGNlcHRpb24gY29uc3RyYWludC4gKi8KIHRyZWUKLW5vcm1h bGl6ZV9jYWxsICh0cmVlIHQpCit4Zm9ybV9jb21wb3VuZF9yZXF1aXJlbWVu dCAodHJlZSB0KQogewotICBpZiAoIWNoZWNrX2NhbGwgKHQpKQotICAgIHJl dHVybiBOVUxMX1RSRUU7CisgIHRyZWUgZXhwciA9IFRSRUVfT1BFUkFORCAo dCwgMCk7CisgIHRyZWUgY29uc3RyID0gYnVpbGRfbnQgKEVYUFJfQ09OU1RS LCBUUkVFX09QRVJBTkQgKHQsIDApKTsKIAotICAvLyBJcyB0aGUgZnVuY3Rp b24gY2FsbCBhY3R1YWxseSBhIGNvbnN0cmFpbnQgY2hlY2s/IElmIG5vdCwg dGhlbiBpdCdzCi0gIC8vIGFuIGF0b20sIGFuZCBuZWVkcyB0byBiZSB0cmVh dGVkIGFzIHN1Y2guCi0gIHRyZWUgY2hlY2sgPSByZXNvbHZlX2NvbnN0cmFp bnRfY2hlY2sgKHQpOwotICBpZiAoIWNoZWNrKQotICAgIHJldHVybiBub3Jt YWxpemVfYXRvbSAodCk7Ci0KLSAgdHJlZSBmbiA9IFRSRUVfVkFMVUUgKGNo ZWNrKTsKLSAgdHJlZSBhcmdzID0gVFJFRV9QVVJQT1NFIChjaGVjayk7Cisg IC8qIElmIGEgdHlwZSBpcyBnaXZlbiwgYXBwZW5kIGFuIGltcGxpY2l0IGNv bnZlcnNpb24gb3IKKyAgICAgYXJndW1lbnQgZGVkdWN0aW9uIGNvbnN0cmFp bnQuIAogCi0gIC8vIE5vcm1hbGl6ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rp b24gaW50byB0aGUgY29uc3RyYWludHMgbGFuZ3VhZ2UuCi0gIHRyZWUgYm9k eSA9IG5vcm1hbGl6ZV9jb25zdHJhaW50cyAoREVDTF9TQVZFRF9UUkVFIChm bikpOwotICBpZiAoIWJvZHkpCi0gICAgcmV0dXJuIGVycm9yX21hcmtfbm9k ZTsKKyAgICAgRklYTUU6IEhhbmRsZSBhcmd1bWVudCBkZWR1Y3Rpb24gY29u c3RyYWludHMuICovCisgIGlmICh0cmVlIHR5cGUgPSBUUkVFX09QRVJBTkQg KHQsIDEpKSAKKyAgICB7CisgICAgICB0cmVlIGljb252ID0gYnVpbGRfbnQg KElDT05WX0NPTlNUUiwgZXhwciwgdHlwZSk7CisgICAgICBjb25zdHIgPSBj b25qb2luX2NvbnN0cmFpbnRzIChjb25zdHIsIGljb252KTsKKyAgICB9CiAK LSAgLy8gSW5zdGFudGlhdGUgdGhlIHJlZHVjZWQgcmVzdWx0cyB1c2luZyB0 aGUgZGVkdWNlZCBhcmdzLgotICB0cmVlIHJlc3VsdCA9IHRzdWJzdF9jb25z dHJhaW50X2V4cHIgKGJvZHksIGFyZ3MsIHRydWUpOwotICBpZiAocmVzdWx0 ID09IGVycm9yX21hcmtfbm9kZSkKLSAgICByZXR1cm4gZXJyb3JfbWFya19u b2RlOworICAvKiBJZiBub2V4Y2VwdCBpcyBwcmVzZW50LCBhcHBlbmQgYW4g ZXhjZXB0aW9uIGNvbnN0cmFpbnQuICovCisgIGlmIChDT01QT1VORF9SRVFf Tk9FWENFUFRfUCAodCkpCisgICAgeworICAgICAgdHJlZSBleGNlcHQgPSBi dWlsZF9udCAoRVhDRVBUX0NPTlNUUiwgZXhwcik7CisgICAgICBjb25zdHIg PSBjb25qb2luX2NvbnN0cmFpbnRzIChjb25zdHIsIGV4Y2VwdCk7CisgICAg fQogCi0gIHJldHVybiByZXN1bHQ7CisgIHJldHVybiBjb25zdHI7CiB9CiAK LS8vIFJlZHVjdGlvbiBydWxlcyBmb3IgYSB2YXJpYWJsZSB0ZW1wbGF0ZS1p ZCBULgotLy8KLS8vIElmIFQgaXMgYSBjb25zdHJhaW50LCBpbnN0YW50aWF0 ZSBpdHMgaW5pdGlhbGl6ZXIgYW5kIHJlY3Vyc2l2ZWx5IHJlZHVjZSBpdHMK LS8vIGV4cHJlc3Npb24uCi10cmVlCi1ub3JtYWxpemVfdmFyICh0cmVlIHQp CisvKiBBIG5lc3RlZCByZXF1aXJlbWVudCBUIGludHJvZHVjZXMgYSBjb25q dW5jdGlvbiBvZiBjb25zdHJhaW50cworICAgY29ycmVzcG9uZGluZyB0byBp dHMgY29uc3RyYWludC1leHByZXNzaW9uLiAqLworaW5saW5lIHRyZWUKK3hm b3JtX25lc3RlZF9yZXF1aXJlbWVudCAodHJlZSB0KQogewotICB0cmVlIGRl Y2wgPSBERUNMX1RFTVBMQVRFX1JFU1VMVCAoVFJFRV9PUEVSQU5EICh0LCAw KSk7Ci0gIGlmICghREVDTF9ERUNMQVJFRF9DT05DRVBUX1AgKGRlY2wpKQot ICAgIHJldHVybiB0OwotCi0gIC8vIFJlZHVjZSB0aGUgaW5pdGlhbGl6ZXIg b2YgdGhlIHZhcmlhYmxlIGludG8gdGhlIGNvbnN0cmFpbnRzIGxhbmd1YWdl LgotICB0cmVlIGJvZHkgPSBub3JtYWxpemVfY29uc3RyYWludHMgKERFQ0xf SU5JVElBTCAoZGVjbCkpOwotICBpZiAoIWJvZHkpCi0gICAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKKyAgcmV0dXJuIHRyYW5zZm9ybV9leHByZXNzaW9u IChUUkVFX09QRVJBTkQgKHQsIDApKTsKK30KIAotICAvLyBJbnN0YW50aWF0 ZSB0aGUgcmVkdWNlZCByZXN1bHRzLgotICB0cmVlIHJlc3VsdCA9IHRzdWJz dF9jb25zdHJhaW50X2V4cHIgKGJvZHksIFRSRUVfT1BFUkFORCAodCwgMSks IGZhbHNlKTsKLSAgaWYgKHJlc3VsdCA9PSBlcnJvcl9tYXJrX25vZGUpCi0g ICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKy8qIFRyYW5zZm9ybSBhIHJl cXVpcmVtZW50IFQgaW50byBvbmUgb3IgbW9yZSBjb25zdHJhaW50cy4gKi8K K3RyZWUgCit4Zm9ybV9yZXF1aXJlbWVudCAodHJlZSB0KQoreworICBzd2l0 Y2ggKFRSRUVfQ09ERSAodCkpCisgIHsKKyAgY2FzZSBTSU1QTEVfUkVROgor ICAgIHJldHVybiB4Zm9ybV9zaW1wbGVfcmVxdWlyZW1lbnQgKHQpOworICAK KyAgY2FzZSBUWVBFX1JFUToKKyAgICByZXR1cm4geGZvcm1fdHlwZV9yZXF1 aXJlbWVudCAodCk7CisgIAorICBjYXNlIENPTVBPVU5EX1JFUToKKyAgICBy ZXR1cm4geGZvcm1fY29tcG91bmRfcmVxdWlyZW1lbnQgKHQpOworICAKKyAg Y2FzZSBORVNURURfUkVROgorICAgIHJldHVybiB4Zm9ybV9uZXN0ZWRfcmVx dWlyZW1lbnQgKHQpOworCisgIGRlZmF1bHQ6CisgICAgZ2NjX3VucmVhY2hh YmxlICgpOworICB9CisgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7Cit9CiAK Ky8qIFRyYW5zZm9ybSBhIHNlcXVlbmNlIG9mIHJlcXVpcmVtZW50cyBpbnRv IGEgY29uanVuY3Rpb24gb2YKKyAgIGNvbnN0cmFpbnRzLiAqLwordHJlZQor eGZvcm1fcmVxdWlyZW1lbnRzICh0cmVlIHQpCit7CisgIHRyZWUgcmVzdWx0 ID0gTlVMTF9UUkVFOworICBmb3IgKDsgdDsgdCA9IFRSRUVfQ0hBSU4gKHQp KSB7CisgICAgdHJlZSBjb25zdHIgPSB4Zm9ybV9yZXF1aXJlbWVudCAoVFJF RV9WQUxVRSAodCkpOworICAgIHJlc3VsdCA9IGNvbmpvaW5fY29uc3RyYWlu dHMgKHJlc3VsdCwgY29uc3RyKTsKKyAgfQogICByZXR1cm4gcmVzdWx0Owog fQogCi0vLyBSZWR1Y3Rpb24gcnVsZXMgZm9yIHRoZSB0ZW1wbGF0ZS1pZCBU LgotLy8KLS8vIEl0IHR1cm5zIG91dCB0aGF0IHdlIG9mdGVuIGdldCByZXF1 aXJlbWVudHMgYmVpbmcgd3JpdHRlbiBsaWtlIHRoaXM6Ci0vLwotLy8gICAg dGVtcGxhdGU8dHlwZW5hbWUgVD4KLS8vICAgICAgcmVxdWlyZXMgRm9vPFQ+ Ci0vLyAgICB2b2lkIGYoKQotLy8KLS8vIFdoZXJlIEZvbzxUPiBzaG91bGQg YWN0dWFsbHkgYmUgd3JpdHRlbiBhcyBGb288VD4oKS4gR2VuZXJhdGUgYW4K LS8vIGVycm9yIGFuZCBzdWdnZXN0IHRoZSBpbXByb3ZlZCB3cml0aW5nLgor LyogVHJhbnNmb3JtIGEgcmVxdWlyZXMtZXhwcmVzc2lvbiBpbnRvIGEgcGFy YW1ldGVyaXplZCBjb25zdHJhaW50LiAqLwogdHJlZQotbm9ybWFsaXplX3Rl bXBsYXRlX2lkICh0cmVlIHQpCit4Zm9ybV9yZXF1aXJlc19leHByICh0cmVl IHQpCiB7Ci0gIHRyZWUgdG1wbCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0g IGlmICh2YXJpYWJsZV9jb25jZXB0X3AgKHRtcGwpKQotICAgIHJldHVybiBu b3JtYWxpemVfdmFyICh0KTsKKyAgdHJlZSBvcGVyYW5kID0geGZvcm1fcmVx dWlyZW1lbnRzIChUUkVFX09QRVJBTkQgKHQsIDEpKTsKKyAgaWYgKHRyZWUg cGFybXMgPSBUUkVFX09QRVJBTkQgKHQsIDApKQorICAgIHJldHVybiBidWls ZF9udCAoUEFSTV9DT05TVFIsIHBhcm1zLCBvcGVyYW5kKTsKICAgZWxzZQot ICAgIHsKLSAgICAgIGxvY2F0aW9uX3QgbG9jdXMgPSBFWFBSX0xPQ19PUl9M T0MgKHQsIGlucHV0X2xvY2F0aW9uKTsKLSAgICAgIGVycm9yX2F0IChsb2N1 cywgImludmFsaWQgY29uc3RyYWludCAlcUUiLCB0KTsKLQotICAgICAgdmVj PHRyZWUsIHZhX2djPiogYXJncyA9IE5VTEw7Ci0gICAgICB0cmVlIGMgPSBm aW5pc2hfY2FsbF9leHByICh0LCAmYXJncywgdHJ1ZSwgZmFsc2UsIDApOwot ICAgICAgaW5mb3JtIChsb2N1cywgImRpZCB5b3UgbWVhbiAlcUUiLCBjKTsK LQotICAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKLSAgICB9CisgICAg cmV0dXJuIG9wZXJhbmQ7CiB9CiAKLS8vIFJlZHVjZSBhbiBleHByZXNzaW9u IHJlcXVpcmVtZW50IGFzIGEgY29uanVuY3Rpb24gb2YgaXRzCi0vLyBpbmRp dmlkdWFsIGNvbnN0cmFpbnRzLgorLyogVHJhbnNmb3JtIGFuIGV4cHJlc3Np b24gaW50byBhbiBhdG9taWMgcHJlZGljYXRlIGNvbnN0cmFpbnQuIAorICAg IEFmdGVyIHN1YnN0aXR1dGlvbiwgdGhlIGV4cHJlc3Npb24gb2YgYSBwcmVk aWNhdGUgY29uc3RyYWludCBzaGFsbCAKKyAgICBoYXZlIHR5cGUgYm9vbCAo dGVtcC5jb25zdHIucHJlZCkuIEZvciBub24tdHlwZS0gZGVwZW5kZW50IAor ICAgIGV4cHJlc3Npb25zLCB3ZSBjYW4gY2hlY2sgdGhhdCBub3cuICovCiB0 cmVlCi1ub3JtYWxpemVfZXhwcl9yZXEgKHRyZWUgdCkKK3hmb3JtX2F0b21p YyAodHJlZSB0KSAKIHsKLSAgdHJlZSByID0gTlVMTF9UUkVFOwotICBmb3Ig KHRyZWUgbCA9IFRSRUVfT1BFUkFORCAodCwgMCk7IGw7IGwgPSBUUkVFX0NI QUlOIChsKSkKLSAgICByID0gY29uam9pbl9jb25zdHJhaW50cyAociwgbm9y bWFsaXplX2V4cHIgKFRSRUVfVkFMVUUgKGwpKSk7Ci0gIHJldHVybiByOwor ICBpZiAoIXR5cGVfZGVwZW5kZW50X2V4cHJlc3Npb25fcCAodCkpIAorICB7 CisgICAgdHJlZSB0eXBlID0gY3ZfdW5xdWFsaWZpZWQgKFRSRUVfVFlQRSAo dCkpOworICAgIGlmICghc2FtZV90eXBlX3AgKHR5cGUsIGJvb2xlYW5fdHlw ZV9ub2RlKSkKKyAgICAgIHsKKyAgICAgICAgZXJyb3IgKCJwcmVkaWNhdGUg Y29uc3RyYWludCAlcUUgZG9lcyBub3QgaGF2ZSB0eXBlICU8Ym9vbCU+Iiwg dCk7CisgICAgICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisgICAgICB9 CisgIH0KKyAgcmV0dXJuIGJ1aWxkX250IChQUkVEX0NPTlNUUiwgdCk7CiB9 CiAKLS8vIFJlZHVjZSBhIHR5cGUgcmVxdWlyZW1lbnQgYnkgcmV0dXJuaW5n IGl0cyB1bmRlcmx5aW5nCi0vLyBjb25zdHJhaW50LgorLyogVHJhbnNmb3Jt IGFuIGV4cHJlc3Npb24gaW50byBhIGNvbnN0cmFpbnQuICovCiB0cmVlCi1u b3JtYWxpemVfdHlwZV9yZXEgKHRyZWUgdCkKK3hmb3JtX2V4cHIgKHRyZWUg dCkKIHsKLSAgcmV0dXJuIFRSRUVfT1BFUkFORCAodCwgMCk7CisgIHN3aXRj aCAoVFJFRV9DT0RFICh0KSkKKyAgICB7CisgICAgY2FzZSBUUlVUSF9BTkRJ Rl9FWFBSOgorICAgICAgcmV0dXJuIHhmb3JtX2xvZ2ljYWwgKHQsIENPTkpf Q09OU1RSKTsKKyAgICAKKyAgICBjYXNlIFRSVVRIX09SSUZfRVhQUjoKKyAg ICAgIHJldHVybiB4Zm9ybV9sb2dpY2FsICh0LCBESVNKX0NPTlNUUik7Cisg ICAgCisgICAgY2FzZSBSRVFVSVJFU19FWFBSOgorICAgICAgcmV0dXJuIHhm b3JtX3JlcXVpcmVzX2V4cHIgKHQpOworICAgIAorICAgIGNhc2UgQklORF9F WFBSOiAgICAgICAgCisgICAgICByZXR1cm4gdHJhbnNmb3JtX2V4cHJlc3Np b24gKEJJTkRfRVhQUl9CT0RZICh0KSk7CisgICAgCisgICAgZGVmYXVsdDoK KyAgICAgIC8qIEFsbCBvdGhlciBjb25zdHJhaW50cyBhcmUgYXRvbWljLiAq LyAKKyAgICAgIHJldHVybiB4Zm9ybV9hdG9taWMgKHQpOworICAgIH0KIH0K IAotLy8gUmVkdWNlIGEgbmVzdGVkIHJlcXVpcmVtZW50IGJ5IHJldHVybmlu ZyBpdHMgb25seSBvcGVyYW5kLgorLyogVHJhbnNmb3JtIGEgc3RhdGVtZW50 IGludG8gYW4gZXhwcmVzc2lvbi4gKi8KIHRyZWUKLW5vcm1hbGl6ZV9uZXN0 ZWRfcmVxICh0cmVlIHQpCit4Zm9ybV9zdG10ICh0cmVlIHQpCiB7Ci0gIHJl dHVybiBUUkVFX09QRVJBTkQgKHQsIDApOworICBzd2l0Y2ggKFRSRUVfQ09E RSAodCkpCisgICAgeworICAgIGNhc2UgUkVUVVJOX0VYUFI6CisgICAgICBy ZXR1cm4gdHJhbnNmb3JtX2V4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAodCwg MCkpOworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7 CisgICAgfQorICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogfQogCi0vLyBS ZWR1Y2UgYSByZXF1aXJlcyBleHByIGJ5IHJlZHVjaW5nIGVhY2ggcmVxdWly ZW1lbnQgaW4gdHVybiwKLS8vIHJld3JpdGluZyB0aGUgbGlzdCBvZiByZXF1 aXJlbWVudHMgc28gdGhhdCB3ZSBlbmQgdXAgd2l0aCBhCi0vLyBsaXN0IG9m IGV4cHJlc3Npb25zLCBzb21lIG9mIHdoaWNoIG1heSBiZSBjb25qdW5jdGlv bnMuCisvLyBSZWR1Y3Rpb24gcnVsZXMgZm9yIHRoZSBkZWNsYXJhdGlvbiBU LgogdHJlZQotbm9ybWFsaXplX3JlcXVpcmVzICh0cmVlIHQpCit4Zm9ybV9k ZWNsICh0cmVlIHQpCiB7Ci0gIGZvciAodHJlZSBsID0gVFJFRV9PUEVSQU5E ICh0LCAxKTsgbDsgbCA9IFRSRUVfQ0hBSU4gKGwpKQotICAgIFRSRUVfVkFM VUUgKGwpID0gbm9ybWFsaXplX2V4cHIgKFRSRUVfVkFMVUUgKGwpKTsKLSAg cmV0dXJuIHQ7CisgIHN3aXRjaCAoVFJFRV9DT0RFICh0KSkKKyAgICB7Cisg ICAgY2FzZSBWQVJfREVDTDoKKyAgICAgIHJldHVybiB4Zm9ybV9hdG9taWMg KHQpOworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7 CisgICAgfQorICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogfQogCi0vLyBO b3JtYWxpemUgYSBjbGVhbnVwIHBvaW50IGJ5IG5vcm1hbGl6aW5nIHRoZSB1 bmRlcmx5aW5nCi0vLyBleHByZXNzaW9uLgorLyogVHJhbnNmb3JtIGFuIGV4 Y2VwdGlvbmFsIG5vZGUgaW50byBhIGNvbnN0cmFpbnQuICovCiB0cmVlCi1u b3JtYWxpemVfY2xlYW51cF9wb2ludCAodHJlZSB0KQoreGZvcm1fbWlzYyAo dHJlZSB0KQogewotICByZXR1cm4gbm9ybWFsaXplX25vZGUgKFRSRUVfT1BF UkFORCAodCwgMCkpOworICBzd2l0Y2ggKFRSRUVfQ09ERSAodCkpCisgICAg eworICAgIGNhc2UgVFJBSVRfRVhQUjoKKyAgICAgIHJldHVybiB4Zm9ybV9h dG9taWMgKHQpOworICAgIGNhc2UgQ09OU1RSVUNUT1I6CisgICAgICByZXR1 cm4geGZvcm1fYXRvbWljICh0KTsKKyAgICBkZWZhdWx0OgorICAgICAgZ2Nj X3VucmVhY2hhYmxlICgpOworICAgIH0KKyAgcmV0dXJuIGVycm9yX21hcmtf bm9kZTsKIH0KIAotLy8gTm9ybWFsaXplIGFuIGF0b21pYyBleHByZXNzaW9u IGJ5IHBlcmZvcm1pbmcgc29tZSBiYXNpYyBjaGVja3MuCi0vLyBJbiBwYXJ0 aWN1bGFyLCBpZiB0aGUgdHlwZSBpcyBrbm93biwgaXQgbXVzdCBiZSBjb252 ZXJ0aWJsZSB0bwotLy8gYm9vbC4KKworLyogVHJhbnNmb3JtIGEgbGlmdGVk IGV4cHJlc3Npb24gaW50byBhIGNvbnN0cmFpbnQuIFRoaXMgZWl0aGVyCisg ICByZXR1cm5zIGEgY29uc3RyYWludCwgb3IgaXQgcmV0dXJucyBlcnJvcl9t YXJrX25vZGUgd2hlbgorICAgYSBjb25zdHJhaW50IGNhbm5vdCBiZSBmb3Jt ZWQuICovCiB0cmVlCi1ub3JtYWxpemVfYXRvbSAodHJlZSB0KQordHJhbnNm b3JtX2V4cHJlc3Npb24gKHRyZWUgdCkKIHsKLSAgaWYgKCF0eXBlX2RlcGVu ZGVudF9leHByZXNzaW9uX3AgKHQpKQotICAgIGlmICghY2FuX2NvbnZlcnQg KGJvb2xlYW5fdHlwZV9ub2RlLCBUUkVFX1RZUEUgKHQpLCB0Zl9ub25lKSkK LSAgICAgIHsKLSAgICAgICAgZXJyb3IgKCJwcmVkaWNhdGUgY29uc3RyYWlu dCAlcUUgaXMgbm90IGNvbnZlcnRpYmxlIHRvICU8Ym9vbCU+IiwgdCk7Ci0g ICAgICAgIHJldHVybiBOVUxMX1RSRUU7Ci0gICAgICB9Ci0gIHJldHVybiB0 OwotfQotCi0vLyBSZWR1Y2UgdGhlIHJlcXVpcmVtZW50IFJFUVMgaW50byBh IGxvZ2ljYWwgZm9ybXVsYSB3cml0dGVuIGluIHRlcm1zIG9mCi0vLyBhdG9t aWMgcHJvcG9zaXRpb25zLgotdHJlZQotbm9ybWFsaXplX2NvbnN0cmFpbnRz ICh0cmVlIHJlcXMpCi17Ci0gIGlmICghcmVxcykKKyAgaWYgKCF0KSAKICAg ICByZXR1cm4gTlVMTF9UUkVFOwotCi0gICsrcHJvY2Vzc2luZ190ZW1wbGF0 ZV9kZWNsOwotICB0cmVlIGV4cHIgPSBub3JtYWxpemVfbm9kZSAocmVxcyk7 Ci0gIC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOwotCi0gIC8vIElmIHdl IGNvdWxkbid0IG5vcm1hbGl6ZSwgdGhlbiB0aGVzZSBjb25zdHJhaW50cyBh cmUgaWxsLWZvcm1lZC4KLSAgaWYgKCFleHByKQorIAorICBpZiAodCA9PSBl cnJvcl9tYXJrX25vZGUpCiAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsK IAotICByZXR1cm4gZXhwcjsKKyAgc3dpdGNoIChUUkVFX0NPREVfQ0xBU1Mg KFRSRUVfQ09ERSAodCkpKSAKKyAgICB7CisgICAgY2FzZSB0Y2NfdW5hcnk6 CisgICAgY2FzZSB0Y2NfYmluYXJ5OgorICAgIGNhc2UgdGNjX2V4cHJlc3Np b246CisgICAgY2FzZSB0Y2NfdmxfZXhwOgorICAgICAgcmV0dXJuIHhmb3Jt X2V4cHIgKHQpOworICAgIAorICAgIGNhc2UgdGNjX3N0YXRlbWVudDogICAK KyAgICAgIHJldHVybiB4Zm9ybV9zdG10ICh0KTsKKyAgICAKKyAgICBjYXNl IHRjY19kZWNsYXJhdGlvbjogCisgICAgICByZXR1cm4geGZvcm1fZGVjbCAo dCk7CisgICAgCisgICAgY2FzZSB0Y2NfZXhjZXB0aW9uYWw6IAorICAgICAg cmV0dXJuIHhmb3JtX21pc2MgKHQpOworICAgIAorICAgIGNhc2UgdGNjX2Nv bnN0YW50OgorICAgIGNhc2UgdGNjX3JlZmVyZW5jZToKKyAgICBjYXNlIHRj Y19jb21wYXJpc29uOgorICAgICAgLyogVGhlc2UgYXJlIGF0b21pYyBwcmVk aWNhdGUgY29uc3RyYWludHMuICovCisgICAgICByZXR1cm4geGZvcm1fYXRv bWljICh0KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAvKiBVbmhhbmRsZWQg bm9kZSBraW5kLiAqLworICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAg IH0KKyAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIH0KIAotfSAvLyBlbmQg bmFtZXNwYWNlCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludCBub3JtYWxpemF0 aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCit0cmVl IG5vcm1hbGl6ZV9jb25zdHJhaW50ICh0cmVlKTsKIAotLy8gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gLy8KLS8vIENvbnN0cmFpbnQgU2VtYW50 aWMgUHJvY2Vzc2luZwotLy8KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25z IGFyZSBjYWxsZWQgYnkgdGhlIHBhcnNlciBhbmQgc3Vic3RpdHV0aW9uIHJ1 bGVzCi0vLyB0byBjcmVhdGUgYW5kIGV2YWx1YXRlIGNvbnN0cmFpbnQtcmVs YXRlZCBub2Rlcy4KKy8qIFRoZSBub3JtYWwgZm9ybSBvZiB0aGUgZGlzanVu Y3Rpb24gVDAgL1wgVDEgaXMgdGhlIGNvbmp1bmN0aW9uCisgICBvZiB0aGUg bm9ybWFsIGZvcm0gb2YgVDAgYW5kIHRoZSBub3JtYWwgZm9ybSBvZiBUMSAq LworaW5saW5lIHRyZWUKK25vcm1hbGl6ZV9jb25qdW5jdGlvbiAodHJlZSB0 KQoreworICB0cmVlIHQwID0gbm9ybWFsaXplX2NvbnN0cmFpbnQgKFRSRUVf T1BFUkFORCAodCwgMCkpOworICB0cmVlIHQxID0gbm9ybWFsaXplX2NvbnN0 cmFpbnQgKFRSRUVfT1BFUkFORCAodCwgMSkpOworICByZXR1cm4gYnVpbGRf bnQgKENPTkpfQ09OU1RSLCB0MCwgdDEpOworfQorCisvKiBUaGUgbm9ybWFs IGZvcm0gb2YgdGhlIGRpc2p1bmN0aW9uIFQwIFwvIFQxIGlzIHRoZSBkaXNq dW5jdGlvbiAKKyAgIG9mIHRoZSBub3JtYWwgZm9ybSBvZiBUMCBhbmQgdGhl IG5vcm1hbCBmb3JtIG9mIFQxICovCitpbmxpbmUgdHJlZQorbm9ybWFsaXpl X2Rpc2p1bmN0aW9uICh0cmVlIHQpCit7CisgIHRyZWUgdDAgPSBub3JtYWxp emVfY29uc3RyYWludCAoVFJFRV9PUEVSQU5EICh0LCAwKSk7CisgIHRyZWUg dDEgPSBub3JtYWxpemVfY29uc3RyYWludCAoVFJFRV9PUEVSQU5EICh0LCAx KSk7CisgIHJldHVybiBidWlsZF9udCAoRElTSl9DT05TVFIsIHQwLCB0MSk7 Cit9CiAKLS8vIEEgbWFwcGluZyBmcm9tIGRlY2xhcmF0aW9ucyB0byBjb25z dHJhaW50IGluZm9ybWF0aW9uLiBOb3RlIHRoYXQgCi0vLyBib3RoIHRlbXBs YXRlcyBhbmQgdGhlaXIgdW5kZXJseWluZyBkZWNsYXJhdGlvbnMgYXJlIG1h cHBlZCB0byB0aGUgCi0vLyBzYW1lIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24u Ci1zdGF0aWMgaGFzaF9tYXA8dHJlZSwgdHJlZT4gZGVjbF9jb25zdHJhaW50 czsKKy8qIEEgcHJlZGljYXRlIGNvbnN0cmFpbnQgaXMgbm9ybWFsaXplZCBp biB0d28gc3RhZ2VzLiBGaXJzdCBhbGwKKyAgIHJlZmVyZW5jZXMgc3BlY2lh bGl6YXRpb25zIG9mIGNvbmNlcHRzIGFyZSByZXBsYWNlZCBieSB0aGVpcgor ICAgc3Vic3RpdHV0ZWQgZGVmaW5pdGlvbnMuIFRoZW4sIHRoZSByZXN1bHRp bmcgZXhwcmVzc2lvbiBpcworICAgdHJhbnNmb3JtZWQgaW50byBhIGNvbnN0 cmFpbnQgYnkgdHJhbnNmb3JtaW5nICYmIGV4cHJlc3Npb25zCisgICBpbnRv IGNvbmp1bmN0aW9ucyBhbmQgfHwgaW50byBkaXNqdW5jdGlvbnMuICovCit0 cmVlIAorbm9ybWFsaXplX3ByZWRpY2F0ZV9jb25zdHJhaW50ICh0cmVlIHQp Cit7CisgIHRyZWUgZXhwciA9IFBSRURfQ09OU1RSX0VYUFIgKHQpOworICB0 cmVlIGxpZnRlZCA9IGxpZnRfY29uc3RyYWludHMgKGV4cHIpOworICB0cmVl IGNvbnN0ciA9IHRyYW5zZm9ybV9leHByZXNzaW9uIChsaWZ0ZWQpOworICBy ZXR1cm4gY29uc3RyOworfQogCi0vLyBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBj b25zdHJhaW50cyBvZiBkZWNsYXJhdGlvbiBULiBJZiBUIGlzIG5vdAotLy8g Y29uc3RyYWluZWQsIHJldHVybiBOVUxMX1RSRUUuIE5vdGUgdGhhdCBUIG11 c3QgYmUgbm9uLW51bGwuCisvKiBUaGUgbm9ybWFsIGZvcm0gb2YgYSBwYXJh bWV0ZXJpemVkIGNvbnN0cmFpbnQgaXMgdGhlIG5vcm1hbAorICAgZm9ybSBv ZiBpdHMgb3BlcmFuZC4gKi8KIHRyZWUKLWdldF9jb25zdHJhaW50cyAodHJl ZSB0KQorbm9ybWFsaXplX3BhcmFtZXRlcml6ZWRfY29uc3RyYWludCAodHJl ZSB0KQogewotICBnY2NfYXNzZXJ0IChERUNMX1AgKHQpKTsKLSAgaWYgKFRS RUVfQ09ERSAodCkgPT0gVEVNUExBVEVfREVDTCkKLSAgICB0ID0gREVDTF9U RU1QTEFURV9SRVNVTFQgKHQpOwotICBpZiAodHJlZSAqciA9IGRlY2xfY29u c3RyYWludHMuZ2V0ICh0KSkKLSAgICByZXR1cm4gKnI7Ci0gIGVsc2UKLSAg ICByZXR1cm4gTlVMTF9UUkVFOworICB0cmVlIHBhcm1zID0gUEFSTV9DT05T VFJfUEFSTVMgKHQpOworICB0cmVlIG9wZXJhbmQgPSBub3JtYWxpemVfY29u c3RyYWludCAoUEFSTV9DT05TVFJfT1BFUkFORCAodCkpOworICByZXR1cm4g YnVpbGRfbnQgKFBBUk1fQ09OU1RSLCBwYXJtcywgb3BlcmFuZCk7CiB9CiAK LS8vIEFzc29jaWF0ZSB0aGUgZ2l2ZW4gY29uc3RyYWludCBpbmZvcm1hdGlv biB3aXRoIHRoZSBkZWNsYXJhdGlvbi4gRG9uJ3QKLS8vIGJ1aWxkIGFzc29j aWF0aW9ucyBpZiBjaSBpcyBOVUxMX1RSRUUuCi12b2lkCi1zZXRfY29uc3Ry YWludHMgKHRyZWUgdCwgdHJlZSBjaSkKKy8qIE5vcm1hbGl6ZSB0aGUgY29u c3RyYWludCBUIGJ5IHJlZHVjaW5nIGl0IHNvIHRoYXQgaXQgaXMKKyAgIGNv bXByaXNlZCBvZiBvbmx5IGNvbmp1bmN0aW9ucyBhbmQgZGlzanVuY3Rpb25z IG9mIGF0b21pYworICAgY29uc3RyYWludHMuICovCit0cmVlCitub3JtYWxp emVfY29uc3RyYWludCAodHJlZSB0KQogewotICBnY2NfYXNzZXJ0ICh0ICYm IERFQ0xfUCAodCkgJiYgVFJFRV9DT0RFICh0KSAhPSBURU1QTEFURV9ERUNM KTsKLSAgaWYgKCFjaSkKLSAgICByZXR1cm47Ci0KLSAgZ2NjX2Fzc2VydCAo IWRlY2xfY29uc3RyYWludHMuZ2V0ICh0KSk7Ci0gIGdjY19hc3NlcnQgKGNo ZWNrX2NvbnN0cmFpbnRfaW5mbyAoY2kpKTsKLSAgZGVjbF9jb25zdHJhaW50 cy5wdXQgKHQsIGNpKTsKKyAgaWYgKCF0KQorICAgIHJldHVybiBOVUxMX1RS RUU7CisgIAorICBzd2l0Y2ggKFRSRUVfQ09ERSAodCkpCisgICAgeworICAg ICAgY2FzZSBDT05KX0NPTlNUUjoKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6 ZV9jb25qdW5jdGlvbiAodCk7CisgICAgICAKKyAgICAgIGNhc2UgRElTSl9D T05TVFI6CisgICAgICAgIHJldHVybiBub3JtYWxpemVfZGlzanVuY3Rpb24g KHQpOworICAgICAgCisgICAgICBjYXNlIFBSRURfQ09OU1RSOgorICAgICAg ICByZXR1cm4gbm9ybWFsaXplX3ByZWRpY2F0ZV9jb25zdHJhaW50ICh0KTsK KyAgICAgIAorICAgICAgY2FzZSBQQVJNX0NPTlNUUjoKKyAgICAgICAgcmV0 dXJuIG5vcm1hbGl6ZV9wYXJhbWV0ZXJpemVkX2NvbnN0cmFpbnQgKHQpOwor ICAgICAgCisgICAgICBjYXNlIEVYUFJfQ09OU1RSOgorICAgICAgY2FzZSBU WVBFX0NPTlNUUjoKKyAgICAgIGNhc2UgSUNPTlZfQ09OU1RSOgorICAgICAg Y2FzZSBERURVQ1RfQ09OU1RSOgorICAgICAgY2FzZSBFWENFUFRfQ09OU1RS OgorICAgICAgICAvKiBUaGVzZSBjb25zdHJhaW50cyBhcmUgZGVmaW5lZCB0 byBiZSBhdG9taWMuICovCisgICAgICAgIHJldHVybiB0OworICAgICAgCisg ICAgICBkZWZhdWx0OgorICAgICAgICAvKiBDT05TVFIgd2FzIG5vdCBhIGNv bnN0cmFpbnQuICovCisgICAgICAgIGdjY191bnJlYWNoYWJsZSgpOworICAg IH0KKyAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIH0KIAotLy8gUmVtb3Zl IHRoZSBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzIG9mIHRoZSBkZWNsYXJhdGlv biBULiAKK30gLyogbmFtZXNwYWNlICovCisKKworLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gLy8KKy8vIENvbnN0cmFpbnQgU2VtYW50aWMg UHJvY2Vzc2luZwogLy8KLS8vIEZJWE1FOiBXaGF0IGlmIFQgaXMgYSB0ZW1w bGF0ZT8gV2hhdCBpZiBpdCdzIGEgbm9uLXRlbXBsYXRlPyB3ZQotLy8gc2hv dWxkIHJlbW92ZSBib3RoIGFzc29jaWF0aW9ucy4KLXZvaWQKLXJlbW92ZV9j b25zdHJhaW50cyAodHJlZSB0KQotewotICBnY2NfYXNzZXJ0IChERUNMX1Ag KHQpKTsKLSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gVEVNUExBVEVfREVDTCkK LSAgICB0ID0gREVDTF9URU1QTEFURV9SRVNVTFQgKHQpOworLy8gVGhlIGZv bGxvd2luZyBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSB0aGUgcGFyc2VyIGFu ZCBzdWJzdGl0dXRpb24gcnVsZXMKKy8vIHRvIGNyZWF0ZSBhbmQgZXZhbHVh dGUgY29uc3RyYWludC1yZWxhdGVkIG5vZGVzLgogCi0gIGlmIChkZWNsX2Nv bnN0cmFpbnRzLmdldCAodCkpCi0gICAgZGVjbF9jb25zdHJhaW50cy5yZW1v dmUgKHQpOwotfQogCiAvLyBJZiB0aGUgcmVjZW50bHkgcGFyc2VkIFRZUEUg ZGVjbGFyZXMgb3IgZGVmaW5lcyBhIHRlbXBsYXRlIG9yIHRlbXBsYXRlCiAv LyBzcGVjaWFsaXphdGlvbiwgZ2V0IGl0cyBjb3JyZXNwb25kaW5nIGNvbnN0 cmFpbnRzIGZyb20gdGhlIGN1cnJlbnQKQEAgLTc4NSwyMiArODg1LDYgQEAg YXNzb2NpYXRlX2NsYXNzdHlwZV9jb25zdHJhaW50cyAodHJlZSB0eXBlKQog ICByZXR1cm4gdHlwZTsKIH0KIAotLy8gUmV0dXJucyBhIGNvbmp1bmN0aW9u IG9mIHNob3J0aGFuZCByZXF1aXJlbWVudHMgZm9yIHRoZSB0ZW1wbGF0ZQot Ly8gcGFyYW1ldGVyIGxpc3QgUEFSTVMuIE5vdGUgdGhhdCB0aGUgcmVxdWly ZW1lbnRzIGFyZSBzdG9yZWQgaW4KLS8vIHRoZSBUWVBFIG9mIGVhY2ggdHJl ZSBub2RlLgotdHJlZQotZ2V0X3Nob3J0aGFuZF9jb25zdHJhaW50cyAodHJl ZSBwYXJtcykKLXsKLSAgdHJlZSByZXFzID0gTlVMTF9UUkVFOwotICBwYXJt cyA9IElOTkVSTU9TVF9URU1QTEFURV9QQVJNUyAocGFybXMpOwotICBmb3Ig KGludCBpID0gMDsgaSA8IFRSRUVfVkVDX0xFTkdUSCAocGFybXMpOyArK2kp Ci0gICAgewotICAgICAgdHJlZSBwYXJtID0gVFJFRV9WRUNfRUxUIChwYXJt cywgaSk7Ci0gICAgICByZXFzID0gY29uam9pbl9jb25zdHJhaW50cyAocmVx cywgVEVNUExBVEVfUEFSTV9DT05TVFJBSU5UUyAocGFybSkpOwotICAgIH0K LSAgcmV0dXJuIHJlcXM7Ci19Ci0KIG5hbWVzcGFjZSB7CiAKIC8vIENyZWF0 ZSBhbiBlbXB0eSBjb25zdHJhaW50IGluZm8gYmxvY2suCkBAIC04MTIsMjc0 ICs4OTYsMzUgQEAgYnVpbGRfY29uc3RyYWludF9pbmZvICgpCiAKIH0gLy8g bmFtZXNwYWNlCiAKLS8vIEJ1aWxkIGEgY29uc3RyYWludC1pbmZvIG9iamVj dCB0aGF0IGNvbnRhaW5zIHRoZSBhc3NvY2lhdGVkIHJlcXVpcmVtZW50cwot Ly8gb2YgYSBkZWNsYXJhdGlvbi4gVGhpcyBhbHNvIGluY2x1ZGVzIHRoZSBk ZWNsYXJhdGlvbidzIHRlbXBsYXRlCi0vLyByZXF1aXJlbWVudHMgVFIgKGlm IGFueSkgYW5kIGRlY2xhcmF0aW9uIHJlcXVpcmVtZW50cyBEUiAoaWYgYW55 KS4KLS8vCi0vLyBJZiB0aGUgZGVjbGFyYXRpb24gaGFzIG5laXRoZXIgdGVt cGxhdGUgbm9yIGRlY2xhcmF0aW9uIHJlcXVpcmVtZW50cwotLy8gdGhpcyBy ZXR1cm5zIE5VTExfVFJFRSwgaW5kaWNhdGluZyBhbiB1bmNvbnN0cmFpbmVk IGRlY2xhcmF0aW9uLgotdHJlZQotYnVpbGRfY29uc3RyYWludHMgKHRyZWUg dHIsIHRyZWUgZHIpCi17Ci0gIGlmICghdHIgJiYgIWRyKQotICAgIHJldHVy biBOVUxMX1RSRUU7Ci0gIHRyZWVfY29uc3RyYWludF9pbmZvKiBjaSA9IGJ1 aWxkX2NvbnN0cmFpbnRfaW5mbyAoKTsKLSAgY2ktPnRlbXBsYXRlX3JlcXMg PSB0cjsKLSAgY2ktPmRlY2xhcmF0b3JfcmVxcyA9IGRyOwotICBjaS0+YXNz b2NpYXRlZF9jb25zdHIgPSBjb25qb2luX2NvbnN0cmFpbnRzICh0ciwgZHIp OwotICBjaS0+bm9ybWFsaXplZF9jb25zdHIgPSBub3JtYWxpemVfY29uc3Ry YWludHMgKGNpLT5hc3NvY2lhdGVkX2NvbnN0cik7Ci0gIGNpLT5hc3N1bXB0 aW9ucyA9IGRlY29tcG9zZV9hc3N1bXB0aW9ucyAoY2ktPm5vcm1hbGl6ZWRf Y29uc3RyKTsKLSAgcmV0dXJuICh0cmVlKWNpOwotfQotCi0vLyBSZXR1cm5z IHRydWUgaWZmIGNpbmZvIGNvbnRhaW5zIGEgdmFsaWQgY29uc3RyYWludCBl eHByZXNzaW9uLgotLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBhc3Nv Y2lhdGVkIHJlcXVpcmVtZW50cyBjYW4gYmUgc3VjY2Vzc2Z1bGx5Ci0vLyBk ZWNvbXBvc2VkIGludG8gbGlzdHMgb2YgYXRvbWljIGNvbnN0cmFpbnRzLgot Ym9vbAotdmFsaWRfcmVxdWlyZW1lbnRzX3AgKHRyZWUgY2luZm8pCi17Ci0g IGdjY19hc3NlcnQgKGNpbmZvKTsKLSAgcmV0dXJuIENJX0FTU1VNUFRJT05T IChjaW5mbykgIT0gZXJyb3JfbWFya19ub2RlOwotfQotCi0vLyBDb25zdHJ1 Y3RzIGEgUkVRVUlSRVNfRVhQUiB3aXRoIHBhcmFtZXRlcnMsIFBBUk1TLCBh bmQgcmVxdWlyZW1lbnRzLCBSRVFTLAotLy8gdGhhdCBjYW4gYmUgZXZhbHVh dGVkIGFzIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KLXRyZWUKLWJ1aWxkX3Jl cXVpcmVzX2V4cHIgKHRyZWUgcGFybXMsIHRyZWUgcmVxcykKLXsKLSAgLy8g TW9kaWZ5IHRoZSBkZWNsYXJlZCBwYXJhbWV0ZXJzIGJ5IHJlbW92aW5nIHRo ZWlyIGNvbnRleHQgKHNvIHRoZXkKLSAgLy8gZG9uJ3QgcmVmZXIgdG8gdGhl IGVuY2xvc2luZyBzY29wZSksIGFuZCBtYXJraW5nIHRoZW0gY29uc3RhbnQg KHNvCi0gIC8vIHdlIGNhbiBhY3R1YWxseSBjaGVjayBjb25zdGV4cHIgcHJv cGVydGllcykuCi0gIGZvciAodHJlZSBwID0gcGFybXM7IHAgJiYgIVZPSURf VFlQRV9QIChUUkVFX1ZBTFVFIChwKSk7IHAgPSBUUkVFX0NIQUlOIChwKSkK LSAgICB7Ci0gICAgICB0cmVlIHBhcm0gPSBUUkVFX1ZBTFVFIChwKTsKLSAg ICAgIERFQ0xfQ09OVEVYVCAocGFybSkgPSBOVUxMX1RSRUU7Ci0gICAgICBU UkVFX0NPTlNUQU5UIChwYXJtKSA9IHRydWU7Ci0gICAgfQotCi0gIC8vIEJ1 aWxkIHRoZSBub2RlLgotICB0cmVlIHIgPSBidWlsZF9taW4gKFJFUVVJUkVT X0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBwYXJtcywgcmVxcyk7Ci0gIFRS RUVfU0lERV9FRkZFQ1RTIChyKSA9IGZhbHNlOwotICBUUkVFX0NPTlNUQU5U IChyKSA9IHRydWU7Ci0gIHJldHVybiByOwotfQotCi0vLyBFdmFsdWF0ZSBh biBpbnN0YW50aWF0ZWQgcmVxdWlyZXMgZXhwciwgcmV0dXJuaW5nIHRoZSB0 cnVlIG5vZGUKLS8vIG9ubHkgd2hlbiBhbGwgc3ViLXJlcXVpcmVtZW50cyBo YXZlIGV2YWx1YXRlZCB0byB0cnVlLgotdHJlZQotZXZhbF9yZXF1aXJlc19l eHByICh0cmVlIHJlcXMpCi17Ci0gIGZvciAodHJlZSB0ID0gcmVxcyA7IHQ7 IHQgPSBUUkVFX0NIQUlOICh0KSkKLSAgICB7Ci0gICAgICB0cmVlIHIgPSBU UkVFX1ZBTFVFICh0KTsKLSAgICAgIHIgPSBmb2xkX25vbl9kZXBlbmRlbnRf ZXhwciAocik7Ci0gICAgICByID0gbWF5YmVfY29uc3RhbnRfdmFsdWUgKHIp OwotICAgICAgaWYgKHIgIT0gYm9vbGVhbl90cnVlX25vZGUpCi0JcmV0dXJu IGJvb2xlYW5fZmFsc2Vfbm9kZTsKLSAgICB9Ci0gIHJldHVybiBib29sZWFu X3RydWVfbm9kZTsKLX0KLQotLy8gRmluaXNoIGEgcmVxdWlyZXMgZXhwcmVz c2lvbiwgcmV0dXJuaW5nIGEgbm9kZSB3cmFwcGluZyB0aGUgcGFyYW1ldGVy cywKLS8vIFBBUk1TLCBhbmQgdGhlIGxpc3Qgb2YgcmVxdWlyZW1lbnRzIFJF UVMuCi10cmVlCi1maW5pc2hfcmVxdWlyZXNfZXhwciAodHJlZSBwYXJtcywg dHJlZSByZXFzKQotewotICBpZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNs KQotICAgIHJldHVybiBidWlsZF9yZXF1aXJlc19leHByIChwYXJtcywgcmVx cyk7Ci0gIGVsc2UKLSAgICByZXR1cm4gZXZhbF9yZXF1aXJlc19leHByIChy ZXFzKTsKLX0KLQotLy8gQ29uc3RydWN0IGEgdW5hcnkgZXhwcmVzc2lvbiB0 aGF0IGV2YWx1YXRlcyBwcm9wZXJ0aWVzIG9mIHRoZQotLy8gZXhwcmVzc2lv biBvciB0eXBlIFQsIGFuZCBoYXMgYSBib29sZWFuIHJlc3VsdCB0eXBlLgot c3RhdGljIGlubGluZSB0cmVlCi1idWlsZF9jaGVja19leHByICh0cmVlX2Nv ZGUgYywgdHJlZSB0KQotewotICB0cmVlIHIgPSBidWlsZF9taW4gKGMsIGJv b2xlYW5fdHlwZV9ub2RlLCB0KTsKLSAgVFJFRV9TSURFX0VGRkVDVFMgKHIp ID0gZmFsc2U7Ci0gIFRSRUVfUkVBRE9OTFkgKHIpID0gdHJ1ZTsKLSAgVFJF RV9DT05TVEFOVCAocikgPSB0cnVlOwotICByZXR1cm4gcjsKLX0KLQotLy8g RmluaXNoIGEgc3ludGF4IHJlcXVpcmVtZW50LCBjb25zdHJ1Y3RpbmcgYSBs aXN0IGVtYm9keWluZyBhIHNlcXVlbmNlCi0vLyBvZiBjaGVja3MgZm9yIHRo ZSB2YWxpZGl0eSBvZiBFWFBSIGFuZCBUWVBFLCB0aGUgY29udmVydGliaWxp dHkgb2YKLS8vIEVYUFIgdG8gVFlQRSwgYW5kIHRoZSBleHByZXNzaW9uIHBy b3BlcnRpZXMgc3BlY2lmaWVkIGluIFNQRUNTLgotdHJlZQotZmluaXNoX2V4 cHJfcmVxdWlyZW1lbnQgKHRyZWUgZXhwciwgdHJlZSB0eXBlLCB0cmVlIHNw ZWNzKQotewotICBnY2NfYXNzZXJ0IChwcm9jZXNzaW5nX3RlbXBsYXRlX2Rl Y2wpOwotCi0gIC8vIEJ1aWxkIGEgbGlzdCBvZiBjaGVja3MsIHN0YXJ0aW5n IHdpdGggdGhlIHZhbGlkIGV4cHJlc3Npb24uCi0gIHRyZWUgcmVzdWx0ID0g dHJlZV9jb25zIChOVUxMX1RSRUUsIGZpbmlzaF92YWxpZGV4cHJfZXhwciAo ZXhwciksIE5VTExfVFJFRSk7Ci0KLSAgLy8gSWYgYSB0eXBlIHJlcXVpcmVt ZW50IHdhcyBwcm92aWRlZCwgYnVpbGQgdGhlIHJlc3VsdCB0eXBlIGNoZWNr cy4KLSAgaWYgKHR5cGUpCi0gICAgewotICAgICAgLy8gSWYgdGhlIHR5cGUg aXMgZGVwZW5kZW50LCBlbnN1cmUgdGhhdCBpdCBjYW4gYmUgdmFsaWRseQot ICAgICAgLy8gaW5zdGFudGlhdGVkLgotICAgICAgLy8KLSAgICAgIC8vIE5P VEU6IFdlIGNhbiBhbHNvIGRpc3JlZ2FyZCBjaGVja3MgdGhhdCByZXN1bHQg aW4gdGhlIHRlbXBsYXRlCi0gICAgICAvLyBwYXJhbWV0ZXIuCi0gICAgICBp ZiAoZGVwZW5kZW50X3R5cGVfcCAodHlwZSkpCi0gICAgICAgIHsKLSAgICAg ICAgICB0cmVlIHRyZXEgPSBmaW5pc2hfdHlwZV9yZXF1aXJlbWVudCAodHlw ZSk7Ci0gICAgICAgICAgcmVzdWx0ID0gdHJlZV9jb25zIChOVUxMX1RSRUUs IHRyZXEsIHJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgLy8gRW5zdXJl IHRoYXQgdGhlIHJlc3VsdCBvZiB0aGUgZXhwcmVzc2lvbiBjYW4gYmUgY29u dmVydGVkIHRvCi0gICAgICAvLyB0aGUgcmVzdWx0IHR5cGUuCi0gICAgICB0 cmVlIGRlY2xfdHlwZSA9IGZpbmlzaF9kZWNsdHlwZV90eXBlIChleHByLCBm YWxzZSwgdGZfbm9uZSk7Ci0gICAgICB0cmVlIGNyZXEgPSBmaW5pc2hfdHJh aXRfZXhwciAoQ1BUS19JU19DT05WRVJUSUJMRV9UTywgZGVjbF90eXBlLCB0 eXBlKTsKLSAgICAgIHJlc3VsdCA9IHRyZWVfY29ucyAoTlVMTF9UUkVFLCBj cmVxLCByZXN1bHQpOwotICAgIH0KLQotICAvLyBJZiBjb25zdHJhaW50IHNw ZWNpZmllcnMgYXJlIHByZXNlbnQsIG1ha2UgdGhlbSBwYXJ0IG9mIHRoZQot ICAvLyBsaXN0IG9mIGNvbnN0cmFpbnRzLgotICBpZiAoc3BlY3MpCi0gICAg ewotICAgICAgVFJFRV9DSEFJTiAodHJlZV9sYXN0IChzcGVjcykpID0gcmVz dWx0OwotICAgICAgcmVzdWx0ID0gc3BlY3M7Ci0gICAgfQotCi0gIC8vIEZp bmFsbHksIGNvbnN0cnVjdCB0aGUgc3ludGFjdGljIHJlcXVpcmVtZW50Lgot ICByZXR1cm4gYnVpbGRfY2hlY2tfZXhwciAoRVhQUl9SRVEsIG5yZXZlcnNl IChyZXN1bHQpKTsKLX0KLQotLy8gRmluaXNoIGEgc2ltcGxlIHN5bnRheCBy ZXF1aXJlbWVudCwgcmV0dXJuaW5nIGEgbm9kZSByZXByZXNlbnRpbmcKLS8v IGEgY2hlY2sgdGhhdCBFWFBSIGlzIGEgdmFsaWQgZXhwcmVzc2lvbi4KLXRy ZWUKLWZpbmlzaF9leHByX3JlcXVpcmVtZW50ICh0cmVlIGV4cHIpCi17Ci0g IGdjY19hc3NlcnQgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCk7Ci0gIHRy ZWUgcmVxID0gZmluaXNoX3ZhbGlkZXhwcl9leHByIChleHByKTsKLSAgdHJl ZSByZXFzID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIHJlcSwgTlVMTF9UUkVF KTsKLSAgcmV0dXJuIGJ1aWxkX2NoZWNrX2V4cHIgKEVYUFJfUkVRLCByZXFz KTsKLX0KLQotLy8gRmluaXNoIGEgdHlwZSByZXF1aXJlbWVudCwgcmV0dXJu aW5nIGEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGVjawotLy8gdGhhdCBUWVBF IHdpbGwgcmVzdWx0IGluIGEgdmFsaWQgdHlwZSB3aGVuIGluc3RhbnRpYXRl ZC4KLXRyZWUKLWZpbmlzaF90eXBlX3JlcXVpcmVtZW50ICh0cmVlIHR5cGUp Ci17Ci0gIGdjY19hc3NlcnQgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCk7 Ci0gIHRyZWUgcmVxID0gZmluaXNoX3ZhbGlkdHlwZV9leHByICh0eXBlKTsK LSAgcmV0dXJuIGJ1aWxkX2NoZWNrX2V4cHIgKFRZUEVfUkVRLCByZXEpOwot fQotCi10cmVlCi1maW5pc2hfbmVzdGVkX3JlcXVpcmVtZW50ICh0cmVlIGV4 cHIpCi17Ci0gIGdjY19hc3NlcnQgKHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVj bCk7Ci0gIHJldHVybiBidWlsZF9jaGVja19leHByIChORVNURURfUkVRLCBl eHByKTsKLX0KLQotLy8gRmluaXNoIGEgY29uc3RleHByIHJlcXVpcmVtZW50 LCByZXR1cm5pbmcgYSBub2RlIHJlcHJlc2VudGluZyBhCi0vLyBjaGVjayB0 aGF0IEVYUFIsIHdoZW4gaW5zdGFudGlhdGVkLCBtYXkgYmUgZXZhbHVhdGVk IGF0IGNvbXBpbGUgdGltZS4KLXRyZWUKLWZpbmlzaF9jb25zdGV4cHJfcmVx dWlyZW1lbnQgKHRyZWUgZXhwcikKLXsKLSAgZ2NjX2Fzc2VydCAocHJvY2Vz c2luZ190ZW1wbGF0ZV9kZWNsKTsKLSAgcmV0dXJuIGZpbmlzaF9jb25zdGV4 cHJfZXhwciAoZXhwcik7Ci19Ci0KLS8vIEZpbmlzaCB0aGUgbm9leGNlcHQg cmVxdWlyZW1lbnQgYnkgY29uc3RydWN0aW5nIGEgbm9leGNlcHQKLS8vIGV4 cHJlc3Npb24gZXZhbHVhdGluZyBFWFBSLgotdHJlZQotZmluaXNoX25vZXhj ZXB0X3JlcXVpcmVtZW50ICh0cmVlIGV4cHIpCi17Ci0gIGdjY19hc3NlcnQg KHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCk7Ci0gIHJldHVybiBmaW5pc2hf bm9leGNlcHRfZXhwciAoZXhwciwgdGZfbm9uZSk7Ci19Ci0KLS8vIFJldHVy bnMgdGhlIHRydWUgb3IgZmFsc2Ugbm9kZSBkZXBlbmRpbmcgb24gdGhlIHRy dXRoIHZhbHVlIG9mIEIuCi1zdGF0aWMgaW5saW5lIHRyZWUKLXRydXRoX25v ZGUgKGJvb2wgYikKLXsKLSAgcmV0dXJuIGIgPyBib29sZWFuX3RydWVfbm9k ZSA6IGJvb2xlYW5fZmFsc2Vfbm9kZTsKLX0KLQotLy8gUmV0dXJucyBhIGZp bmlzaGVkIHZhbGlkZXhwci1leHByLiBSZXR1cm5zIHRoZSB0cnVlIG9yIGZh bHNlIG5vZGUKLS8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIEVYUFIgZGVub3Rl cyBhIHZhbGlkIGV4cHJlc3Npb24uIFRoaXMgaXMgdGhlIGNhc2UKLS8vIHdo ZW4gdGhlIGV4cHJlc3Npb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHR5cGUg Y2hlY2tlZC4KLS8vCi0vLyBXaGVuIHByb2Nlc3NpbmcgYSB0ZW1wbGF0ZSBk ZWNsYXJhdGlvbiwgdGhlIHJlc3VsdCBpcyBhbiBleHByZXNzaW9uCi0vLyBy ZXByZXNlbnRpbmcgdGhlIGNoZWNrLgotdHJlZQotZmluaXNoX3ZhbGlkZXhw cl9leHByICh0cmVlIGV4cHIpCi17Ci0gIGlmIChwcm9jZXNzaW5nX3RlbXBs YXRlX2RlY2wpCi0gICAgcmV0dXJuIGJ1aWxkX2NoZWNrX2V4cHIgKFZBTElE RVhQUl9FWFBSLCBleHByKTsKLSAgcmV0dXJuIHRydXRoX25vZGUgKGV4cHIg JiYgZXhwciAhPSBlcnJvcl9tYXJrX25vZGUpOwotfQotCi0vLyBSZXR1cm5z IGEgZmluaXNoZWQgdmFsaWR0eXBlLWV4cHIuIFJldHVybnMgdGhlIHRydWUg b3IgZmFsc2Ugbm9kZQotLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgVCBkZW5v dGVzIGEgdmFsaWQgdHlwZSBuYW1lLgotLy8KLS8vIFdoZW4gcHJvY2Vzc2lu ZyBhIHRlbXBsYXRlIGRlY2xhcmF0aW9uLCB0aGUgcmVzdWx0IGlzIGFuIGV4 cHJlc3Npb24KLS8vIHJlcHJlc2VudGluZyB0aGUgY2hlY2suCi0vLwotLy8g RklYTUU6IFNlbWFudGljcyBuZWVkIHRvIGJlIGFsaWduZWQgd2l0aCB0aGUg bmV3IHZlcnNpb24gb2YgdGhlCi0vLyBzcGVjaWZpY2F0aW9uIChpLmUuLCB3 ZSBtdXN0IGJlIGFibGUgdG8gaW52ZW50IGEgZnVuY3Rpb24gYW5kCi0vLyBw ZXJmb3JtIGFyZ3VtZW50IGRlZHVjdGlvbiBhZ2FpbnN0IGl0KS4KLXRyZWUK LWZpbmlzaF92YWxpZHR5cGVfZXhwciAodHJlZSB0eXBlKQotewotICBpZiAo aXNfYXV0byAodHlwZSkpCi0gICAgewotICAgICAgc29ycnkgKCIlPGF1dG8l PiBub3Qgc3VwcG9ydGVkIGluIHJlc3VsdCB0eXBlIGNvbnN0cmFpbnRzIik7 Ci0gICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwotICAgIH0KLQotICBp ZiAocHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQotICAgIHJldHVybiBidWls ZF9jaGVja19leHByIChWQUxJRFRZUEVfRVhQUiwgdHlwZSk7Ci0gIHJldHVy biB0cnV0aF9ub2RlICh0eXBlICYmIFRZUEVfUCAodHlwZSkpOwotfQorLyog QnVpbGQgYSBjb25zdHJhaW50LWluZm8gb2JqZWN0IHRoYXQgY29udGFpbnMg dGhlIAorICAgYXNzb2NpYXRlZCBjb25kc3RyYWludHMgb2YgYSBkZWNsYXJh dGlvbi4gVGhpcyBhbHNvIAorICAgaW5jbHVkZXMgdGhlIGRlY2xhcmF0aW9u J3MgdGVtcGxhdGUgcmVxdWlyZW1lbnRzIChUUkVRUykKKyAgIGFuZCBhbnkg dHJhaWxpbmcgcmVxdWlyZW1lbnRzIGZvciBhIGZ1bmN0aW9uIGRlY2xhcmF0 b3IKKyAgIChEUkVRUykuIE5vdGUgdGhhdCBib3RoIFRSRVFTIGFuZCBEUkVR UyBtdXN0IGJlIGNvbnN0cmFpbnRzLgogCi0vLyBSZXR1cm5zIGEgZmluaXNo ZWQgY29uc3RleHByLWV4cHIuIFJldHVybnMgdGhlIHRydWUgb3IgZmFsc2Ug bm9kZQotLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24g VCBtYXkgYmUgZXZhbHVhdGVkIGF0IGNvbXBpbGUKLS8vIHRpbWUuCi0vLwot Ly8gV2hlbiBwcm9jZXNzaW5nIGEgdGVtcGxhdGUgZGVjbGFyYXRpb24sIHRo ZSByZXN1bHQgaXMgYW4gZXhwcmVzc2lvbgotLy8gcmVwcmVzZW50aW5nIHRo ZSBjaGVjay4KKyAgIElmIHRoZSBkZWNsYXJhdGlvbiBoYXMgbmVpdGhlciB0 ZW1wbGF0ZSBub3IgZGVjbGFyYXRpb24gCisgICByZXF1aXJlbWVudHMgdGhp cyByZXR1cm5zIE5VTExfVFJFRSwgaW5kaWNhdGluZyBhbiAKKyAgIHVuY29u c3RyYWluZWQgZGVjbGFyYXRpb24uICovCiB0cmVlCi1maW5pc2hfY29uc3Rl eHByX2V4cHIgKHRyZWUgZXhwcikKK2J1aWxkX2NvbnN0cmFpbnRzICh0cmVl IHRtcGxfcmVxcywgdHJlZSBkZWNsX3JlcXMpCiB7Ci0gIGlmIChwcm9jZXNz aW5nX3RlbXBsYXRlX2RlY2wpCi0gICAgcmV0dXJuIGJ1aWxkX2NoZWNrX2V4 cHIgKENPTlNURVhQUl9FWFBSLCBleHByKTsKLQotICAvLyBUT0RPOiBBY3R1 YWxseSBjaGVjayB0aGF0IHRoZSBleHByZXNzaW9uIGNhbiBiZSBjb25zdGV4 cHIKLSAgLy8gZXZhbHVhdGVkLgotICAvLwotICAvLyByZXR1cm4gdHJ1dGhf bm9kZSAocG90ZW50aWFsX2NvbnN0YW50X2V4cHJlc3Npb24gKGV4cHIpKTsK LSAgc29ycnkgKCJjb25zdGV4cHIgcmVxdWlyZW1lbnQiKTsKLSAgcmV0dXJu IE5VTExfVFJFRTsKLX0KKyAgZ2NjX2Fzc2VydCAodG1wbF9yZXFzID8gY29u c3RyYWludF9wICh0bXBsX3JlcXMpIDogdHJ1ZSk7CisgIGdjY19hc3NlcnQg KGRlY2xfcmVxcyA/IGNvbnN0cmFpbnRfcCAoZGVjbF9yZXFzKSA6IHRydWUp OwogCi0vLyBDaGVjayB0aGF0IGEgY29uc3RyYWluZWQgZnJpZW5kIGRlY2xh cmF0aW9uIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLAotLy8gRk4sIGlzIGFkbWlz c2FibGUuIFRoaXMgaXMgdGhlIGNhc2Ugb25seSB3aGVuIHRoZSBkZWNsYXJh dGlvbiBkZXBlbmRzCi0vLyBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGFuZCBk b2VzIG5vdCBkZWNsYXJlIGEgc3BlY2lhbGl6YXRpb24uCi12b2lkCi1jaGVj a19jb25zdHJhaW5lZF9mcmllbmQgKHRyZWUgZm4sIHRyZWUgcmVxcykKLXsK LSAgaWYgKGZuID09IGVycm9yX21hcmtfbm9kZSkKLSAgICByZXR1cm47Ci0g IGdjY19hc3NlcnQgKFRSRUVfQ09ERSAoZm4pID09IEZVTkNUSU9OX0RFQ0wp OworICBpZiAoIXRtcGxfcmVxcyAmJiAhZGVjbF9yZXFzKQorICAgIHJldHVy biBOVUxMX1RSRUU7CiAKLSAgLy8gSWYgdGhlcmUgYXJlIG5vdCBjb25zdHJh aW50cywgdGhpcyBjYW5ub3QgYmUgYW4gZXJyb3IuCi0gIGlmICghcmVxcykK LSAgICByZXR1cm47CisgIHRyZWVfY29uc3RyYWludF9pbmZvKiBjaSA9IGJ1 aWxkX2NvbnN0cmFpbnRfaW5mbyAoKTsKKyAgY2ktPnRlbXBsYXRlX3JlcXMg PSB0bXBsX3JlcXM7CisgIGNpLT5kZWNsYXJhdG9yX3JlcXMgPSBkZWNsX3Jl cXM7CisgIGNpLT5hc3NvY2lhdGVkX2NvbnN0ciA9IGNvbmpvaW5fY29uc3Ry YWludHMgKHRtcGxfcmVxcywgZGVjbF9yZXFzKTsKIAotICAvLyBDb25zdHJh aW5lZCBmcmllbmQgZnVuY3Rpb25zIHRoYXQgZG9uJ3QgZGVwZW5kIG9uIHRl bXBsYXRlCi0gIC8vIGFyZ3VtZW50cyBhcmUgZWZmZWN0aXZlbHkgbWVhbmlu Z2xlc3MuCi0gIHRyZWUgcGFybXMgPSBERUNMX0FSR1VNRU5UUyAoZm4pOwot ICB0cmVlIHJlc3VsdCA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFIChmbikpOwot ICBpZiAoIShwYXJtcyAmJiB1c2VzX3RlbXBsYXRlX3Bhcm1zIChwYXJtcykp ICYmICF1c2VzX3RlbXBsYXRlX3Bhcm1zIChyZXN1bHQpKQotICAgIHsKLSAg ICAgIGVycm9yICgiY29uc3RyYWluZWQgZnJpZW5kIGRvZXMgbm90IGRlcGVu ZCBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIik7Ci0gICAgICByZXR1cm47Ci0g ICAgfQorICArK3Byb2Nlc3NpbmdfdGVtcGxhdGVfZGVjbDsKKyAgY2ktPm5v cm1hbGl6ZWRfY29uc3RyID0gbm9ybWFsaXplX2NvbnN0cmFpbnQgKGNpLT5h c3NvY2lhdGVkX2NvbnN0cik7CisgIC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9k ZWNsOworICAKKyAgY2ktPmFzc3VtcHRpb25zID0gZGVjb21wb3NlX2Fzc3Vt cHRpb25zIChjaS0+bm9ybWFsaXplZF9jb25zdHIpOworICByZXR1cm4gKHRy ZWUpY2k7CiB9CiAKIG5hbWVzcGFjZSB7CkBAIC0xMDk5LDcgKzk0NCw3IEBA IGJ1aWxkX2NhbGxfY2hlY2sgKHRyZWUgaWQpCiAvLyBDb25zdHJ1Y3QgYSBj b25jZXB0IGNoZWNrIGZvciB0aGUgZ2l2ZW4gVEFSR0VULiBUaGUgdGFyZ2V0 IG1heSBiZQogLy8gYW4gb3ZlcmxvYWQgc2V0IG9yIGEgYmFzZWxpbmsgcmVm ZXJyaW5nIHRvIGFuIG92ZXJsb2FkIHNldC4gVGVtcGxhdGUKIC8vIGFyZ3Vt ZW50cyB0byB0aGUgdGFyZ2V0IGFyZSBnaXZlbiBieSBBUkcgYW5kIFJFU1Qu IElmIHRoZSB0YXJnZXQgaXMKLS8vIGEgZnVuY3Rpb24gKG92ZXJsb2FkIHNl dCBvciBiYXNlbGluayByZWZmZXJpbmcgdG8gYW4gb3ZlcmxvYWQgc2V0KSwK Ky8vIGEgZnVuY3Rpb24gKG92ZXJsb2FkIHNldCBvciBiYXNlbGluayByZWZl cnJpbmcgdG8gYW4gb3ZlcmxvYWQgc2V0KSwKIC8vIHRoZW4gdGhpcyBidWls ZHMgdGhlIGNhbGwgZXhwcmVzc2lvbiAgVEFSR0VUPEFSRywgUkVTVD4oKS4g SWYgUkVTVCBpcwogLy8gTlVMTF9UUkVFLCB0aGVuIHRoZSByZXN1bHRpbmcg Y2hlY2sgaXMganVzdCBUQVJHRVQ8QVJHPigpLiBJZiBBUkcgaXMKIC8vIE5V TExfVFJFRSwgdGhlbiB0aGUgcmVzdWx0aW5nIGNoZWNrIGlzIFRBUkdFVDxS RVNUPigpLgpAQCAtMTE1MywxMyArOTk4LDE1IEBAIGJ1aWxkX2NvbnN0cmFp bmVkX3BhcmFtZXRlciAodHJlZSBmbiwgdHJlZSBwcm90bywgdHJlZSBhcmdz KQogICByZXR1cm4gZGVjbDsKIH0KIAotLy8gQ3JlYXRlIGEgY29uc3RyYWlu dCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gREVDTCB0aGF0IGV2YWx1YXRl cyB0aGUKLS8vIHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgQ09OU1RSLCBh IFRZUEVfREVDTCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUKLS8vIGluZm9ybWF0 aW9uIG5lY2Vzc2FyeSB0byBidWlsZCB0aGUgcmVxdWlyZW1lbnRzIChzZWUg ZmluaXNoX2NvbmNlcHRfbmFtZQotLy8gZm9yIHRoZSBsYXlvdXQgb2YgdGhh dCBUWVBFX0RFQ0wpLgotLy8KLS8vIE5vdGUgdGhhdCB0aGUgY29uc3RyYWlu dHMgYXJlIG5laXRoZXIgcmVkdWNlZCBub3IgZGVjb21wb3NlZC4gVGhhdCBp cwotLy8gZG9uZSBvbmx5IGFmdGVyIHRoZSByZXF1aXJlcyBjbGF1c2UgaGFz IGJlZW4gcGFyc2VkIChvciBub3QpLgorLyogQ3JlYXRlIGEgY29uc3RyYWlu dCBleHByZXNzaW9uIGZvciB0aGUgZ2l2ZW4gREVDTCB0aGF0IAorICAgZXZh bHVhdGVzIHRoZSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IENPTlNUUiwg YSBUWVBFX0RFQ0wgCisgICB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3Jt YXRpb24gbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSAKKyAgIHJlcXVpcmVtZW50 cyAoc2VlIGZpbmlzaF9jb25jZXB0X25hbWUgZm9yIHRoZSBsYXlvdXQgb2Yg CisgICB0aGF0IFRZUEVfREVDTCkuCisKKyAgIE5vdGUgdGhhdCB0aGUgY29u c3RyYWludHMgYXJlIG5laXRoZXIgcmVkdWNlZCBub3IgZGVjb21wb3NlZC4g CisgICBUaGF0IGlzIGRvbmUgb25seSBhZnRlciB0aGUgcmVxdWlyZXMgY2xh dXNlIGhhcyBiZWVuIHBhcnNlZCAKKyAgIChvciBub3QpLiAqLwogdHJlZQog ZmluaXNoX3Nob3J0aGFuZF9jb25zdHJhaW50ICh0cmVlIGRlY2wsIHRyZWUg Y29uc3RyKQogewpAQCAtMTIxMSw3ICsxMDU4LDI0IEBAIGZpbmlzaF9zaG9y dGhhbmRfY29uc3RyYWludCAodHJlZSBkZWNsLCB0cmVlIGNvbnN0cikKICAg ICAgIFRSRUVfVFlQRSAoY2hlY2spID0gYm9vbGVhbl90eXBlX25vZGU7CiAg ICAgfQogCi0gIHJldHVybiBjaGVjazsKKyAgcmV0dXJuIG1ha2VfcHJlZGlj YXRlX2NvbnN0cmFpbnQgKGNoZWNrKTsKK30KKworLyogUmV0dXJucyBhIGNv bmp1bmN0aW9uIG9mIHNob3J0aGFuZCByZXF1aXJlbWVudHMgZm9yIHRoZSB0 ZW1wbGF0ZQorICAgcGFyYW1ldGVyIGxpc3QgUEFSTVMuIE5vdGUgdGhhdCB0 aGUgcmVxdWlyZW1lbnRzIGFyZSBzdG9yZWQgaW4KKyAgIHRoZSBUWVBFIG9m IGVhY2ggdHJlZSBub2RlLiAqLwordHJlZQorZ2V0X3Nob3J0aGFuZF9jb25z dHJhaW50cyAodHJlZSBwYXJtcykKK3sKKyAgdHJlZSByZXN1bHQgPSBOVUxM X1RSRUU7CisgIHBhcm1zID0gSU5ORVJNT1NUX1RFTVBMQVRFX1BBUk1TIChw YXJtcyk7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgVFJFRV9WRUNfTEVOR1RI IChwYXJtcyk7ICsraSkKKyAgICB7CisgICAgICB0cmVlIHBhcm0gPSBUUkVF X1ZFQ19FTFQgKHBhcm1zLCBpKTsKKyAgICAgIHRyZWUgY29uc3RyID0gVEVN UExBVEVfUEFSTV9DT05TVFJBSU5UUyAocGFybSk7CisgICAgICByZXN1bHQg PSBjb25qb2luX2NvbnN0cmFpbnRzIChyZXN1bHQsIGNvbnN0cik7CisgICAg fQorICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBSZXR1cm5zIGFuZCBjaGFp bnMgYSBuZXcgcGFyYW1ldGVyIGZvciBQQVJBTUVURVJfTElTVCB3aGljaCB3 aWxsIGNvbmZvcm0KQEAgLTEyMjQsNyArMTA4OCw3IEBAIHByb2Nlc3NfaW50 cm9kdWN0aW9uX3Bhcm0gKHRyZWUgcGFyYW1ldGVyX2xpc3QsIHRyZWUgc3Jj X3Bhcm0pCiAgIC8vIHBsYWNlaG9sZGVyIHdlIHdhbnQgdG8gbG9vayBhdC4K ICAgYm9vbCBpc19wYXJhbWV0ZXJfcGFjayA9IEFSR1VNRU5UX1BBQ0tfUCAo c3JjX3Bhcm0pOwogICBpZiAoaXNfcGFyYW1ldGVyX3BhY2spCi0gICAgICBz cmNfcGFybSA9IFRSRUVfVkVDX0VMVCAoQVJHVU1FTlRfUEFDS19BUkdTIChz cmNfcGFybSksIDApOworICAgIHNyY19wYXJtID0gVFJFRV9WRUNfRUxUIChB UkdVTUVOVF9QQUNLX0FSR1MgKHNyY19wYXJtKSwgMCk7CiAKICAgLy8gQXQg dGhpcyBwb2ludCB3ZSBzaG91bGQgaGF2ZSBhIElOVFJPRFVDRURfUEFSTV9E RUNMLCBidXQgd2Ugd2FudCB0byBncmFiCiAgIC8vIHRoZSBhc3NvY2lhdGVk IGRlY2wgZnJvbSBpdC4gIEFsc28gZ3JhYiB0aGUgc3RvcmVkIGlkZW50aWZp ZXIgYW5kIGxvY2F0aW9uCkBAIC0xMjM4LDcgKzExMDIsNyBAQCBwcm9jZXNz X2ludHJvZHVjdGlvbl9wYXJtICh0cmVlIHBhcmFtZXRlcl9saXN0LCB0cmVl IHNyY19wYXJtKQogICAvLyB0ZW1wbGF0ZSBpcyB1c2luZyBhIHBhY2sgYW5k IHdlIGRpZG4ndCBkZWNsYXJlIGEgcGFjaywgdGhyb3cgYW4gZXJyb3IuCiAg IGlmIChpc19wYXJhbWV0ZXJfcGFjayAhPSBJTlRST0RVQ0VEX1BBQ0tfUCAo c3JjX3Bhcm0pKQogICAgIHsKLSAgICAgIGVycm9yX2F0IChwYXJtX2xvYywg ImNhbiBub3QgbWF0Y2ggcGFjayBmb3IgaW50cm9kdWNlZCBwYXJhbWV0ZXIi KTsKKyAgICAgIGVycm9yX2F0IChwYXJtX2xvYywgImNhbm5vdCBtYXRjaCBw YWNrIGZvciBpbnRyb2R1Y2VkIHBhcmFtZXRlciIpOwogICAgICAgdHJlZSBl cnJfcGFybSA9IGJ1aWxkX3RyZWVfbGlzdCAoZXJyb3JfbWFya19ub2RlLCBl cnJvcl9tYXJrX25vZGUpOwogICAgICAgcmV0dXJuIGNoYWlub24gKHBhcmFt ZXRlcl9saXN0LCBlcnJfcGFybSk7CiAgICAgfQpAQCAtMTI3NiwyMCArMTE0 MCwyMiBAQCBwcm9jZXNzX2ludHJvZHVjdGlvbl9wYXJtICh0cmVlIHBhcmFt ZXRlcl9saXN0LCB0cmVlIHNyY19wYXJtKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpc19ub25fdHlwZSwgaXNfcGFyYW1ldGVyX3BhY2sp OwogfQogCi0vLyBBc3NvY2lhdGVzIGEgY29uc3RyYWludCBjaGVjayB0byB0 aGUgY3VycmVudCB0ZW1wbGF0ZSBiYXNlZCBvbiB0aGUKLS8vIGludHJvZHVj dGlvbiBwYXJhbWV0ZXJzLiAgSU5UUk9fTElTVCBzaG91bGQgYmUgYSBUUkVF X1ZFQyBvZgotLy8gSU5UUk9EVUNFRF9QQVJNX0RFQ0xzIGNvbnRhaW5pbmcg YSBjaGFpbmVkIFBBUk1fREVDTCB3aGljaCBjb250YWlucyB0aGUKLS8vIGlk ZW50aWZpZXIgYXMgd2VsbCBhcyB0aGUgc291cmNlIGxvY2F0aW9uLiAgVE1Q TF9ERUNMIGlzIHRoZSBkZWNsIGZvciB0aGUKLS8vIGNvbmNlcHQgYmVpbmcg dXNlZC4gIElmIHdlIHRha2Ugc29tZSBjb25jZXB0LCBDLCB0aGlzIHdpbGwg Zm9ybSBhIGNoZWNrIGluCi0vLyB0aGUgZm9ybSBvZiBDPElOVFJPX0xJU1Q+ IGZpbGxpbmcgaW4gYW55IGV4dHJhIGFyZ3VtZW50cyBuZWVkZWQgYnkgdGhl Ci0vLyBkZWZhdWx0cyBkZWR1Y2VkLgotLy8KLS8vIFJldHVybnMgdGhlIHRl bXBsYXRlIHBhcmFtZXRlcnMgYXMgZ2l2ZW4gZnJvbSBlbmRfdGVtcGxhdGVf cGFybV9saXN0IG9yCi0vLyBOVUxMX1RSRUUgaWYgdGhlIHByb2Nlc3MgZmFp bHMuCisvKiBBc3NvY2lhdGVzIGEgY29uc3RyYWludCBjaGVjayB0byB0aGUg Y3VycmVudCB0ZW1wbGF0ZSBiYXNlZCAKKyAgIG9uIHRoZSBpbnRyb2R1Y3Rp b24gcGFyYW1ldGVycy4gIElOVFJPX0xJU1Qgc2hvdWxkIGJlIGEgVFJFRV9W RUMgCisgICBvZiBJTlRST0RVQ0VEX1BBUk1fREVDTHMgY29udGFpbmluZyBh IGNoYWluZWQgUEFSTV9ERUNMIHdoaWNoIAorICAgY29udGFpbnMgdGhlIGlk ZW50aWZpZXIgYXMgd2VsbCBhcyB0aGUgc291cmNlIGxvY2F0aW9uLiAgCisg ICBUTVBMX0RFQ0wgaXMgdGhlIGRlY2wgZm9yIHRoZSBjb25jZXB0IGJlaW5n IHVzZWQuICBJZiB3ZSB0YWtlIAorICAgc29tZSBjb25jZXB0LCBDLCB0aGlz IHdpbGwgZm9ybSBhIGNoZWNrIGluIHRoZSBmb3JtIG9mIAorICAgQzxJTlRS T19MSVNUPiBmaWxsaW5nIGluIGFueSBleHRyYSBhcmd1bWVudHMgbmVlZGVk IGJ5IHRoZQorICAgZGVmYXVsdHMgZGVkdWNlZC4KKworICAgUmV0dXJucyBO VUxMX1RSRUUgaWYgbm8gY29uY2VwdCBjb3VsZCBiZSBtYXRjaGVkIGFuZCAK KyAgIGVycm9yX21hcmtfbm9kZSBpZiBhbiBlcnJvciBvY2N1cnJlZCB3aGVu IG1hdGNoaW5nLgorKi8KIHRyZWUKLWZpbmlzaF9jb25jZXB0X2ludHJvZHVj dGlvbiAodHJlZSB0bXBsX2RlY2wsIHRyZWUgaW50cm9fbGlzdCkKK2Zpbmlz aF90ZW1wbGF0ZV9pbnRyb2R1Y3Rpb24gKHRyZWUgdG1wbF9kZWNsLCB0cmVl IGludHJvX2xpc3QpCiB7Ci0gIC8vIERlZHVjZSB0aGUgY29uY2VwdCBjaGVj ay4KKyAgLyogRGVkdWNlIHRoZSBjb25jZXB0IGNoZWNrLiAgKi8KICAgdHJl ZSBleHByID0gYnVpbGRfY29uY2VwdF9jaGVjayAodG1wbF9kZWNsLCBOVUxM X1RSRUUsIGludHJvX2xpc3QpOwogICBpZiAoZXhwciA9PSBlcnJvcl9tYXJr X25vZGUpCiAgICAgcmV0dXJuIE5VTExfVFJFRTsKQEAgLTEyOTgsMTYgKzEx NjQsMTIgQEAgZmluaXNoX2NvbmNlcHRfaW50cm9kdWN0aW9uICh0cmVlIHRt cGxfZGVjbCwgdHJlZSBpbnRyb19saXN0KQogICBpZiAoIXBhcm1zKQogICAg IHJldHVybiBOVUxMX1RSRUU7CiAKLSAgLy8gQnVpbGQgdGVtcGxhdGUgcGFy YW1ldGVyIHNjb3BlIGZvciBpbnRyb2R1Y3Rpb24uCisgIC8qIEJ1aWxkIHRl bXBsYXRlIHBhcmFtZXRlciBzY29wZSBmb3IgaW50cm9kdWN0aW9uLiAgKi8K ICAgdHJlZSBwYXJtX2xpc3QgPSBOVUxMX1RSRUU7CiAgIGJlZ2luX3RlbXBs YXRlX3Bhcm1fbGlzdCAoKTsKLQotICAvLyBQcm9kdWNlIGEgcGFyYW1ldGVy IGZvciBlYWNoIGludHJvZHVjdGlvbiBhcmd1bWVudCBhY2NvcmRpbmcgdG8g dGhlCi0gIC8vIGRlZHVjZWQgZm9ybS4KICAgaW50IG5hcmdzID0gTUlOIChU UkVFX1ZFQ19MRU5HVEggKHBhcm1zKSwgVFJFRV9WRUNfTEVOR1RIIChpbnRy b19saXN0KSk7CiAgIGZvciAoaW50IG4gPSAwOyBuIDwgbmFyZ3M7ICsrbikK ICAgICBwYXJtX2xpc3QgPSBwcm9jZXNzX2ludHJvZHVjdGlvbl9wYXJtIChw YXJtX2xpc3QsIFRSRUVfVkVDX0VMVCAocGFybXMsIG4pKTsKLQogICBwYXJt X2xpc3QgPSBlbmRfdGVtcGxhdGVfcGFybV9saXN0IChwYXJtX2xpc3QpOwog ICBmb3IgKGludCBpID0gMDsgaSA8IFRSRUVfVkVDX0xFTkdUSCAocGFybV9s aXN0KTsgKytpKQogICAgIGlmIChUUkVFX1ZBTFVFIChUUkVFX1ZFQ19FTFQg KHBhcm1fbGlzdCwgaSkpID09IGVycm9yX21hcmtfbm9kZSkKQEAgLTEzMTYs MTAgKzExNzgsOCBAQCBmaW5pc2hfY29uY2VwdF9pbnRyb2R1Y3Rpb24gKHRy ZWUgdG1wbF9kZWNsLCB0cmVlIGludHJvX2xpc3QpCiAgICAgICAgIHJldHVy biBlcnJvcl9tYXJrX25vZGU7CiAgICAgICB9CiAKLSAgLy8gQnVpbGQgYSBj b25jZXB0IGNoZWNrIGZvciBvdXIgY29uc3RyYWludC4KKyAgLyogQnVpbGQg YSBjb25jZXB0IGNoZWNrIGZvciBvdXIgY29uc3RyYWludC4gICovCiAgIHRy ZWUgY2hlY2tfYXJncyA9IG1ha2VfdHJlZV92ZWMgKFRSRUVfVkVDX0xFTkdU SCAocGFybXMpKTsKLQotICAvLyBTdGFydCB3aXRoIGludHJvZHVjdGlvbiBw YXJhbWV0ZXJzLgogICBpbnQgbiA9IDA7CiAgIGZvciAoOyBuIDwgVFJFRV9W RUNfTEVOR1RIIChwYXJtX2xpc3QpOyArK24pCiAgICAgewpAQCAtMTMyNyw1 MCArMTE4NywxMTYgQEAgZmluaXNoX2NvbmNlcHRfaW50cm9kdWN0aW9uICh0 cmVlIHRtcGxfZGVjbCwgdHJlZSBpbnRyb19saXN0KQogICAgICAgVFJFRV9W RUNfRUxUIChjaGVja19hcmdzLCBuKSA9IHRlbXBsYXRlX3Bhcm1fdG9fYXJn IChwYXJtKTsKICAgICB9CiAKLSAgLy8gSWYgdGhlIHRlbXBsYXRlIGV4cGVj dHMgbW9yZSBwYXJhbWV0ZXJzIHdlIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0 aGUKLSAgLy8gZGVmYXVsdHMgZnJvbSBvdXIgZGVkdWNlZCBmb3JtLgorICAv KiBJZiB0aGUgdGVtcGxhdGUgZXhwZWN0cyBtb3JlIHBhcmFtZXRlcnMgd2Ug c2hvdWxkIGJlIGFibGUgCisgICAgIHRvIHVzZSB0aGUgZGVmYXVsdHMgZnJv bSBvdXIgZGVkdWNlZCBjb25jZXB0LiAgKi8KICAgZm9yICg7IG4gPCBUUkVF X1ZFQ19MRU5HVEggKHBhcm1zKTsgKytuKQogICAgIFRSRUVfVkVDX0VMVCAo Y2hlY2tfYXJncywgbikgPSBUUkVFX1ZFQ19FTFQgKHBhcm1zLCBuKTsKIAot ICAvLyBBc3NvY2lhdGUgdGhlIGNvbnN0cmFpbnQuCi0gIHRyZWUgcmVxcyA9 IGJ1aWxkX2NvbmNlcHRfY2hlY2sgKHRtcGxfZGVjbCwgTlVMTF9UUkVFLCBj aGVja19hcmdzKTsKLSAgVEVNUExBVEVfUEFSTVNfQ09OU1RSQUlOVFMgKGN1 cnJlbnRfdGVtcGxhdGVfcGFybXMpID0gcmVxczsKKyAgLyogQXNzb2NpYXRl IHRoZSBjb25zdHJhaW50LiAqLworICB0cmVlIGNoZWNrID0gYnVpbGRfY29u Y2VwdF9jaGVjayAodG1wbF9kZWNsLCBOVUxMX1RSRUUsIGNoZWNrX2FyZ3Mp OworICB0cmVlIGNvbnN0ciA9IG1ha2VfcHJlZGljYXRlX2NvbnN0cmFpbnQg KGNoZWNrKTsKKyAgVEVNUExBVEVfUEFSTVNfQ09OU1RSQUlOVFMgKGN1cnJl bnRfdGVtcGxhdGVfcGFybXMpID0gY29uc3RyOwogCiAgIHJldHVybiBwYXJt X2xpc3Q7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t IC8vCi0vLyBTdWJzdGl0dXRpb24gUnVsZXMKLS8vCi0vLyBUaGUgZm9sbG93 aW5nIGZ1bmN0aW9ucyBpbXBsZW1lbnQgc3Vic3RpdHV0aW9uIHJ1bGVzIGZv ciBjb25zdHJhaW50cy4KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50IHN1YnN0 aXR1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor dHJlZSB0c3Vic3RfY29uc3RyYWludCAodHJlZSwgdHJlZSwgdHN1YnN0X2Zs YWdzX3QsIHRyZWUpOworCisvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBp bXBsZW1lbnQgc3Vic3RpdHV0aW9uIHJ1bGVzIGZvciBjb25zdHJhaW50cy4g CisgICBTdWJzdGl0dXRpb24gd2l0aG91dCBjaGVja2luZyBjb25zdHJhaW50 cyBoYXBwZW5zIG9ubHkgaW4gdGhlIAorICAgaW5zdGFudGlhdGlvbiBvZiBj bGFzcyB0ZW1wbGF0ZXMuIEZvciBleGFtcGxlOgorCisgICAgICB0ZW1wbGF0 ZTxDMSBUPiBzdHJ1Y3QgUyB7CisgICAgICAgIHZvaWQgZihUKSByZXF1aXJl cyBDMjxUPjsKKyAgICAgICAgdm9pZCBnKFQpIHJlcXVpcmVzIFQ6OnZhbHVl OworICAgICAgfTsKKworICAgICAgUzxpbnQ+IHM7IC8vIGVycm9yIGluc3Rh bnRpYXRpbmcgUzxpbnQ+OjpnKFQpCisgICAKKyAgIFdoZW4gd2UgaW5zdGFu dGlhdGUgUywgd2Ugc3Vic3RpdHV0ZSBpbnRvIGl0cyBtZW1iZXIgZGVjbGFy YXRpb25zLAorICAgaW5jbHVkaW5nIHRoZWlyIGNvbnN0cmFpbnRzLiBIb3dl dmVyLCB0aG9zZSBjb25zdHJhaW50cyBhcmUgbm90CisgICBjaGVja2VkLiBT dWJzdGl0dXRpbmcgaW50IGludG8gQzI8VD4geWllbGRzIEMyPGludD4sIGFu ZCBzdWJzdGl0dXRpbmcKKyAgIGludG8gVDo6dmFsdWUgeWllbGRzIGEgc3Vi c3RpdHV0aW9uIGZhaWx1cmUsIG1ha2luZyB0aGUgcHJvZ3JhbQorICAgaWxs LWZvcm1lZC4gCisKKyAgIE5vdGUgdGhhdCB3ZSBvbmx5IGV2ZXIgc3Vic3Rp dHV0ZSBpbnRvIHRoZSBhc3NvY2lhdGVkIGNvbnN0cmFpbnRzCisgICBvZiBh IGRlY2xhcmF0aW9uLiBUaGF0IGlzLCBzdWJzdGl0dXRlIGlzIGRlZmluZWQg b25seSBmb3IgcHJlZGljYXRlIAorICAgY29uc3RyYWludHMgYW5kIGNvbmp1 bmN0aW9ucy4gKi8KKworLyogU3Vic3RpdHV0ZSBpbnRvIHRoZSBwcmVkaWNh dGUgY29uc3RyYWludHMuIFJldHVybnMgZXJyb3JfbWFya19ub2RlIAorICAg aWYgdGhlIHN1YnN0aXR1dGlvbiBpbnRvIHRoZSBleHByZXNzaW9uIGZhaWxz LiAqLwordHJlZQordHN1YnN0X3ByZWRpY2F0ZV9jb25zdHJhaW50ICh0cmVl IHQsIHRyZWUgYXJncywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRzdWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCit7Cisg IHRyZWUgZXhwciA9IFBSRURfQ09OU1RSX0VYUFIgKHQpOworICArK3Byb2Nl c3NpbmdfdGVtcGxhdGVfZGVjbDsKKyAgdHJlZSByZXN1bHQgPSB0c3Vic3Rf ZXhwciAoZXhwciwgYXJncywgY29tcGxhaW4sIGluX2RlY2wsIGZhbHNlKTsK KyAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CisgIHJldHVybiBidWls ZF9udCAoUFJFRF9DT05TVFIsIHJlc3VsdCk7Cit9CisKKy8qIFN1YnN0aXR1 dGUgaW50byB0aGUgY29uanVuY3Rpb24gb2YgY29uc3RyYWludHMuIFJldHVy bnMgCisgICBlcnJvcl9tYXJrX25vZGUgaWYgc3Vic3RpdHV0aW9uIGludG8g ZWl0aGVyIG9wZXJhbmQgZmFpbHMuICovCit0cmVlCit0c3Vic3RfY29uanVu Y3Rpb24gKHRyZWUgdCwgdHJlZSBhcmdzLCAKKyAgICAgICAgICAgICAgICAg ICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUgaW5fZGVjbCkKK3sK KyAgdHJlZSB0MCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CisgIHRyZWUgcjAg PSB0c3Vic3RfY29uc3RyYWludCAodDAsIGFyZ3MsIGNvbXBsYWluLCBpbl9k ZWNsKTsKKyAgdHJlZSB0MSA9IFRSRUVfT1BFUkFORCAodCwgMSk7CisgIHRy ZWUgcjEgPSB0c3Vic3RfY29uc3RyYWludCAodDEsIGFyZ3MsIGNvbXBsYWlu LCBpbl9kZWNsKTsKKyAgcmV0dXJuIGJ1aWxkX250IChDT05KX0NPTlNUUiwg cjAsIHIxKTsKK30KKworLyogU3Vic3RpdHV0ZSBBUkdTIGludG8gdGhlIGNv bnN0cmFpbnQgVC4gKi8KK3RyZWUKK3RzdWJzdF9jb25zdHJhaW50ICh0cmVl IHQsIHRyZWUgYXJncywgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUg aW5fZGVjbCkKK3sKKyAgaWYgKFRSRUVfQ09ERSAodCkgPT0gQ09OSl9DT05T VFIpCisgICAgcmV0dXJuIHRzdWJzdF9jb25qdW5jdGlvbiAodCwgYXJncywg Y29tcGxhaW4sIGluX2RlY2wpOworICBlbHNlIGlmIChUUkVFX0NPREUgKHQp ID09IFBSRURfQ09OU1RSKQorICAgIHJldHVybiB0c3Vic3RfcHJlZGljYXRl X2NvbnN0cmFpbnQgKHQsIGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsKTsKKyAg ZWxzZQorICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgcmV0dXJuIGVycm9y X21hcmtfbm9kZTsKK30KIAogbmFtZXNwYWNlIHsKLS8vIEluIGFuIHVuZXZh bHVhdGVkIGNvbnRleHQsIHRoZSBzdWJzdGl0dXRpb24gb2YgcGFybSBkZWNs cyBhcmUgbm90Ci0vLyBwcm9wZXJseSBjaGFpbmVkIGR1cmluZyBzdWJzdGl0 dXRpb24uIERvIHRoYXQgaGVyZS4KKworLyogQSBzdWJyb3V0aW5lIG9mIHRz dWJzdF9jb25zdHJhaW50X3ZhcmlhYmxlcy4gSW4gYW4gdW5ldmFsdWF0ZWQg CisgICBjb250ZXh0LCB0aGUgc3Vic3RpdHV0aW9uIG9mIFBBUk1fREVDTHMg YXJlIG5vdCBwcm9wZXJseSBjaGFpbmVkIAorICAgZHVyaW5nIHN1YnN0aXR1 dGlvbi4gRG8gdGhhdCBoZXJlLiAqLwogdHJlZQotZml4X2xvY2FsX3Bhcm1z ICh0cmVlIHNwYXJtcykKK2ZpeHVwX2NvbnN0cmFpbnRfdmFycyAodHJlZSBw YXJtcykKIHsKLSAgaWYgKCFzcGFybXMpCi0gICAgcmV0dXJuIHNwYXJtczsK KyAgaWYgKCFwYXJtcykKKyAgICByZXR1cm4gcGFybXM7CiAKLSAgdHJlZSBw ID0gVFJFRV9DSEFJTiAoc3Bhcm1zKTsKLSAgdHJlZSBxID0gc3Bhcm1zOwor ICB0cmVlIHAgPSBUUkVFX0NIQUlOIChwYXJtcyk7CisgIHRyZWUgcSA9IHBh cm1zOwogICB3aGlsZSAocCAmJiBUUkVFX1ZBTFVFIChwKSAhPSB2b2lkX3R5 cGVfbm9kZSkKICAgICB7CiAgICAgICBERUNMX0NIQUlOIChUUkVFX1ZBTFVF IChxKSkgPSBUUkVFX1ZBTFVFIChwKTsKICAgICAgIHEgPSBwOwogICAgICAg cCA9IFRSRUVfQ0hBSU4gKHApOwogICAgIH0KLSAgcmV0dXJuIHNwYXJtczsK KyAgcmV0dXJuIHBhcm1zOwogfQogCi0vLyBSZWdpc3RlciBsb2NhbCBzcGVj aWFsaXphdGlvbnMgZm9yIGVhY2ggb2YgdHBhcm0gYW5kIHRoZSBjb3JyZXNw b25kaW5nCi0vLyBzcGFybS4gVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBm b3IgdHN1YnN0X3JlcXVpcmVzX2V4cHIuCi12b2lkCi1kZWNsYXJlX2xvY2Fs X3Bhcm1zICh0cmVlIHRwYXJtcywgdHJlZSBzcGFybXMpCisvKiBBIHN1YnJv dXRpbmUgb2YgdHN1YnN0X2NvbnN0cmFpbnRfdmFyaWFibGVzLiBSZWdpc3Rl ciBsb2NhbCAKKyAgIHNwZWNpYWxpemF0aW9ucyBmb3IgZWFjaCBvZiBwYXJh bWV0ZXIgaW4gUEFSTVMgYW5kIGl0cyAKKyAgIGNvcnJlc3BvbmRpbmcgc3Vi c3RpdHV0ZWQgY29uc3RyYWludCB2YXJpYWJsZSBpbiBWQVJTLiAKKyAgIFJl dHVybnMgVkFSUy4gKi8KK3RyZWUKK2RlY2xhcmVfY29uc3RyYWludF92YXJz ICh0cmVlIHBhcm1zLCB0cmVlIHZhcnMpCiB7Ci0gIHRyZWUgcyA9IFRSRUVf VkFMVUUgKHNwYXJtcyk7Ci0gIGZvciAodHJlZSBwID0gdHBhcm1zOyBwICYm ICFWT0lEX1RZUEVfUCAoVFJFRV9WQUxVRSAocCkpOyBwID0gVFJFRV9DSEFJ TiAocCkpCisgIHRyZWUgcyA9IFRSRUVfVkFMVUUgKHZhcnMpOworICBmb3Ig KHRyZWUgcCA9IHBhcm1zOyBwICYmICFWT0lEX1RZUEVfUCAoVFJFRV9WQUxV RSAocCkpOyBwID0gVFJFRV9DSEFJTiAocCkpCiAgICAgewogICAgICAgdHJl ZSB0ID0gVFJFRV9WQUxVRSAocCk7CiAgICAgICBpZiAoREVDTF9QQUNLX1Ag KHQpKQpAQCAtMTM4NCwyNDAgKzEzMTAsNjEzIEBAIGRlY2xhcmVfbG9jYWxf cGFybXMgKHRyZWUgdHBhcm1zLCB0cmVlIHNwYXJtcykKICAgICAgICAgICBz ID0gVFJFRV9DSEFJTiAocyk7CiAgICAgICAgIH0KICAgICB9CisgIHJldHVy biB2YXJzOwogfQogCi0vLyBTdWJzdGl0dXRlIEFSR1MgaW50byB0aGUgcGFy YW1ldGVyIGxpc3QgVCwgcHJvZHVjaW5nIGEgc2VxdWVuY2Ugb2YKLS8vIGxv Y2FsIHBhcmFtZXRlcnMgKHZhcmlhYmxlcykgaW4gdGhlIGN1cnJlbnQgc2Nv cGUuCisvKiBBIHN1YnJvdXRpbmUgb2YgdHN1YnN0X3BhcmFtZXRlcml6ZWRf Y29uc3RyYWludC4gU3Vic3RpdHV0ZSBBUkdTIAorICAgaW50byB0aGUgcGFy YW1ldGVyIGxpc3QgVCwgcHJvZHVjaW5nIGEgc2VxdWVuY2Ugb2YgY29uc3Ry YWludCAKKyAgIHZhcmlhYmxlcywgZGVjbGFyZWQgaW4gdGhlIGN1cnJlbnQg c2NvcGUuIAorCisgICBOb3RlIHRoYXQgdGhlIGNhbGxlciBtdXN0IGVzdGFi bGlzaCBhIGxvY2FsIHNwZWNpYWxpemF0aW9uIHN0YWNrCisgICBwcmlvciB0 byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gc2luY2UgdGhpcyBzdWJzdGl0dXRp b24gd2lsbCAKKyAgIGRlY2xhcmUgdGhlIHN1YnN0aXR1dGVkIHBhcmFtZXRl cnMuICovCiB0cmVlCi10c3Vic3RfbG9jYWxfcGFybXMgKHRyZWUgdCwKLSAg ICAgICAgICAgICAgICAgICAgdHJlZSBhcmdzLAotICAgICAgICAgICAgICAg ICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbiwKLSAgICAgICAgICAgICAg ICAgICAgdHJlZSBpbl9kZWNsKQordHN1YnN0X2NvbnN0cmFpbnRfdmFyaWFi bGVzICh0cmVlIHQsIHRyZWUgYXJncywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUgaW5fZGVj bCkKIHsKLSAgdHJlZSByID0gZml4X2xvY2FsX3Bhcm1zICh0c3Vic3QgKHQs IGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsKSk7Ci0gIGlmIChyID09IGVycm9y X21hcmtfbm9kZSkKKyAgdHJlZSB2YXJzID0gdHN1YnN0ICh0LCBhcmdzLCBj b21wbGFpbiwgaW5fZGVjbCk7CisgIGlmICh2YXJzID09IGVycm9yX21hcmtf bm9kZSkKICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworICByZXR1cm4g ZGVjbGFyZV9jb25zdHJhaW50X3ZhcnMgKHQsIGZpeHVwX2NvbnN0cmFpbnRf dmFycyAodmFycykpOworfQogCi0gIC8vIFJlZ2lzdGVyIHRoZSBpbnN0YW50 aWF0ZWQgYXJncyBhcyBsb2NhbCBwYXJhbWV0ZXJzLgotICBpZiAodCkKLSAg ICBkZWNsYXJlX2xvY2FsX3Bhcm1zICh0LCByKTsKKy8qIFN1YnN0aXR1dGUg QVJHUyBpbnRvIHRoZSBzaW1wbGUgcmVxdWlyZW1lbnQgVC4gTm90ZSB0aGF0 CisgICBzdWJzdGl0dXRpb24gbWF5IHJlc3VsdCBpbiBhbiBpbGwtZm9ybWVk IGV4cHJlc3Npb24gd2l0aG91dAorICAgY2F1c2luZyB0aGUgcHJvZ3JhbSB0 byBiZSBpbGwtZm9ybWVkLiBJbiBzdWNoIGNhc2VzLCB0aGUKKyAgIHJlcXVp cmVtZW50IHdyYXBzIGFuIGVycm9yX21hcmtfbm9kZS4gKi8KK2lubGluZSB0 cmVlCit0c3Vic3Rfc2ltcGxlX3JlcXVpcmVtZW50ICh0cmVlIHQsIHRyZWUg YXJncywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxh Z3NfdCBjb21wbGFpbiwgdHJlZSBpbl9kZWNsKQoreworICB0cmVlIGV4cHIg PSB0c3Vic3RfZXhwciAoVFJFRV9PUEVSQU5EICh0LCAwKSwgYXJncywgY29t cGxhaW4sIGluX2RlY2wsIGZhbHNlKTsKKyAgcmV0dXJuIGZpbmlzaF9zaW1w bGVfcmVxdWlyZW1lbnQgKGV4cHIpOworfQogCi0gIHJldHVybiByOworLyog U3Vic3RpdHV0ZSBBUkdTIGludG8gdGhlIHR5cGUgcmVxdWlyZW1lbnQgVC4g Tm90ZSB0aGF0CisgICBzdWJzdGl0dXRpb24gbWF5IHJlc3VsdCBpbiBhbiBp bGwtZm9ybWVkIHR5cGUgd2l0aG91dAorICAgY2F1c2luZyB0aGUgcHJvZ3Jh bSB0byBiZSBpbGwtZm9ybWVkLiBJbiBzdWNoIGNhc2VzLCB0aGUKKyAgIHJl cXVpcmVtZW50IHdyYXBzIGFuIGVycm9yX21hcmtfbm9kZS4gKi8KK2lubGlu ZSB0cmVlCit0c3Vic3RfdHlwZV9yZXF1aXJlbWVudCAodHJlZSB0LCB0cmVl IGFyZ3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFn c190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCit7CisgIHRyZWUgdHlwZSA9 IHRzdWJzdCAoVFJFRV9PUEVSQU5EICh0LCAwKSwgYXJncywgY29tcGxhaW4s IGluX2RlY2wpOworICByZXR1cm4gZmluaXNoX3R5cGVfcmVxdWlyZW1lbnQg KHR5cGUpOwogfQogCi0vLyBTdWJzdGl0dXRlIEFSR1MgaW50byB0aGUgcmVx dWlyZW1lbnQgYm9keSAobGlzdCBvZiByZXF1aXJlbWVudHMpLCBULgotLy8g Tm90ZSB0aGF0IGlmIGFueSBzdWJzdGl0dXRpb25zIGZhaWwsIHRoZW4gdGhp cyBpcyBlcXVpdmFsZW50IHRvCi0vLyByZXR1cm5pbmcgZmFsc2UuCisvKiBT dWJzdGl0dXRlIGFyZ3MgaW50byB0aGUgY29tcG91bmQgcmVxdWlyZW1lbnQg VC4gSWYgc3Vic3RpdHV0aW5nCisgICBpbnRvIGVpdGhlciB0aGUgZXhwcmVz c2lvbiBvciB0aGUgdHlwZSBmYWlscywgdGhlIGNvcnJlc3BvbmRpbmcKKyAg IG9wZXJhbmRzIGluIHRoZSByZXN1bHRpbmcgbm9kZSB3aWxsIGJlIGVycm9y X21hcmtfbm9kZS4gVGhpcworICAgcHJlc2VydmVzIGEgcmVxdWlyZW1lbnQg Zm9yIHRoZSBwdXJwb3NlIG9mIHBhcnRpYWwgb3JkZXJpbmcsIGJ1dAorICAg aXQgd2lsbCBuZXZlciBiZSBzYXRpc2ZpZWQuICovCiB0cmVlCi10c3Vic3Rf cmVxdWlyZW1lbnRfYm9keSAodHJlZSB0LCB0cmVlIGFyZ3MsIHRyZWUgaW5f ZGVjbCkKK3RzdWJzdF9jb21wb3VuZF9yZXF1aXJlbWVudCAodHJlZSB0LCB0 cmVlIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJz dF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiB7Ci0gIHRyZWUg ciA9IE5VTExfVFJFRTsKLSAgd2hpbGUgKHQpCi0gICAgewotICAgICAgdHJl ZSBlID0gdHN1YnN0X2V4cHIgKFRSRUVfVkFMVUUgKHQpLCBhcmdzLCB0Zl9u b25lLCBpbl9kZWNsLCBmYWxzZSk7Ci0gICAgICBpZiAoZSA9PSBlcnJvcl9t YXJrX25vZGUpCi0gICAgICAgIGUgPSBib29sZWFuX2ZhbHNlX25vZGU7Ci0g ICAgICByID0gdHJlZV9jb25zIChOVUxMX1RSRUUsIGUsIHIpOwotICAgICAg dCA9IFRSRUVfQ0hBSU4gKHQpOwotICAgIH0KLSAgcmV0dXJuIHI7CisgIHRy ZWUgZXhwciA9IHRzdWJzdF9leHByIChUUkVFX09QRVJBTkQgKHQsIDApLCBh cmdzLCBjb21wbGFpbiwgaW5fZGVjbCwgZmFsc2UpOworICB0cmVlIHR5cGUg PSB0c3Vic3QgKFRSRUVfT1BFUkFORCAodCwgMSksIGFyZ3MsIGNvbXBsYWlu LCBpbl9kZWNsKTsKKyAgYm9vbCBub2V4Y2VwdF9wID0gQ09NUE9VTkRfUkVR X05PRVhDRVBUX1AgKHQpOworICByZXR1cm4gZmluaXNoX2NvbXBvdW5kX3Jl cXVpcmVtZW50IChleHByLCB0eXBlLCBub2V4Y2VwdF9wKTsKIH0KLX0gLy8g bmFtZXNwYWNlCiAKLS8vIFN1YnN0aXR1dGUgQVJHUyBpbnRvIHRoZSByZXF1 aXJlcyBleHByZXNzaW9uIFQuCisvKiBTdWJzdGl0dXRlIEFSR1MgaW50byB0 aGUgbmVzdGVkIHJlcXVpcmVtZW50IFQuICovCiB0cmVlCi10c3Vic3RfcmVx dWlyZXNfZXhwciAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190 IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCit0c3Vic3RfbmVzdGVkX3JlcXVp cmVtZW50ICh0cmVlIHQsIHRyZWUgYXJncywgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbiwgdHJlZSBpbl9k ZWNsKQogewotICBsb2NhbF9zcGVjaWFsaXphdGlvbl9zdGFjayBzdGFjazsK LSAgdHJlZSBwID0gdHN1YnN0X2xvY2FsX3Bhcm1zIChUUkVFX09QRVJBTkQg KHQsIDApLCBhcmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7Ci0gIHRyZWUgciA9 IHRzdWJzdF9yZXF1aXJlbWVudF9ib2R5IChUUkVFX09QRVJBTkQgKHQsIDEp LCBhcmdzLCBpbl9kZWNsKTsKLSAgcmV0dXJuIGZpbmlzaF9yZXF1aXJlc19l eHByIChwLCByKTsKKyAgdHJlZSBleHByID0gdHN1YnN0X2V4cHIgKFRSRUVf T1BFUkFORCAodCwgMCksIGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsLCBmYWxz ZSk7CisgIHJldHVybiBmaW5pc2hfbmVzdGVkX3JlcXVpcmVtZW50IChleHBy KTsKIH0KIAotLy8gU3Vic3RpdHV0ZSBBUkdTIGludG8gdGhlIHZhbGlkLWV4 cHIgZXhwcmVzc2lvbiBULgoraW5saW5lIHRyZWUKK3RzdWJzdF9yZXF1aXJl bWVudCAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBs YWluLCB0cmVlIGluX2RlY2wpCit7CisgIHN3aXRjaCAoVFJFRV9DT0RFICh0 KSkKKyAgICB7CisgICAgY2FzZSBTSU1QTEVfUkVROgorICAgICAgcmV0dXJu IHRzdWJzdF9zaW1wbGVfcmVxdWlyZW1lbnQgKHQsIGFyZ3MsIGNvbXBsYWlu LCBpbl9kZWNsKTsKKyAgICBjYXNlIFRZUEVfUkVROgorICAgICAgcmV0dXJu IHRzdWJzdF90eXBlX3JlcXVpcmVtZW50ICh0LCBhcmdzLCBjb21wbGFpbiwg aW5fZGVjbCk7CisgICAgY2FzZSBDT01QT1VORF9SRVE6CisgICAgICByZXR1 cm4gdHN1YnN0X2NvbXBvdW5kX3JlcXVpcmVtZW50ICh0LCBhcmdzLCBjb21w bGFpbiwgaW5fZGVjbCk7CisgICAgY2FzZSBORVNURURfUkVROgorICAgICAg cmV0dXJuIHRzdWJzdF9uZXN0ZWRfcmVxdWlyZW1lbnQgKHQsIGFyZ3MsIGNv bXBsYWluLCBpbl9kZWNsKTsKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3Vu cmVhY2hhYmxlICgpOworICAgIH0KKyAgcmV0dXJuIGVycm9yX21hcmtfbm9k ZTsKK30KKworLyogU3Vic3RpdHV0ZSBBUkdTIGludG8gdGhlIGxpc3Qgb2Yg cmVxdWlyZW1lbnRzIFQuIE5vdGUgdGhhdAorICAgc3Vic3RpdHV0aW9uIGZh aWx1cmVzIGhlcmUgcmVzdWx0IGluIGlsbC1mb3JtZWQgcHJvZ3JhbXMuICov CiB0cmVlCi10c3Vic3RfdmFsaWRleHByX2V4cHIgKHRyZWUgdCwgdHJlZSBh cmdzLCB0cmVlIGluX2RlY2wpCit0c3Vic3RfcmVxdWlyZW1lbnRfYm9keSAo dHJlZSB0LCB0cmVlIGFyZ3MsIAorICAgICAgICAgICAgICAgICAgICAgICAg IHRzdWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiB7Ci0g IHRyZWUgciA9IHRzdWJzdF9leHByIChUUkVFX09QRVJBTkQgKHQsIDApLCBh cmdzLCB0Zl9ub25lLCBpbl9kZWNsLCBmYWxzZSk7Ci0gIHJldHVybiBmaW5p c2hfdmFsaWRleHByX2V4cHIgKHIpOworICB0cmVlIHIgPSBOVUxMX1RSRUU7 CisgIHdoaWxlICh0KQorICAgIHsKKyAgICAgIHRyZWUgZSA9IHRzdWJzdF9y ZXF1aXJlbWVudCAoVFJFRV9WQUxVRSAodCksIGFyZ3MsIGNvbXBsYWluLCBp bl9kZWNsKTsKKyAgICAgIGlmIChlID09IGVycm9yX21hcmtfbm9kZSkKKyAg ICAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAgICAgIHIgPSB0cmVl X2NvbnMgKE5VTExfVFJFRSwgZSwgcik7CisgICAgICB0ID0gVFJFRV9DSEFJ TiAodCk7CisgICAgfQorICByZXR1cm4gcjsKIH0KIAotLy8gU3Vic3RpdHV0 ZSBBUkdTIGludG8gdGhlIHZhbGlkLXR5cGUgZXhwcmVzc2lvbiBULgorfSAv KiBuYW1lc3BhY2UgKi8KKworLyogU3Vic3RpdHV0ZSBBUkdTIGludG8gdGhl IHJlcXVpcmVzIGV4cHJlc3Npb24gVC4gTm90ZSB0aGF0IHRoaXMKKyAgIHJl c3VsdHMgaW4gdGhlIHJlLWRlY2xhcmF0aW9uIG9mIGxvY2FsIHBhcmFtZXRl cnMgd2hlbgorICAgc3Vic3RpdHV0aW5nIHRocm91Z2ggdGhlIHBhcmFtZXRl ciBsaXN0LiBJZiBlaXRoZXIgc3Vic3RpdHV0aW9uCisgICBmYWlscywgdGhl IHByb2dyYW0gaXMgaWxsLWZvcm1lZC4gKi8KIHRyZWUKLXRzdWJzdF92YWxp ZHR5cGVfZXhwciAodHJlZSB0LCB0cmVlIGFyZ3MsIHRyZWUgaW5fZGVjbCkK K3RzdWJzdF9yZXF1aXJlc19leHByICh0cmVlIHQsIHRyZWUgYXJncywgCisg ICAgICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4s IHRyZWUgaW5fZGVjbCkKIHsKLSAgdHJlZSByID0gdHN1YnN0IChUUkVFX09Q RVJBTkQgKHQsIDApLCBhcmdzLCB0Zl9ub25lLCBpbl9kZWNsKTsKLSAgcmV0 dXJuIGZpbmlzaF92YWxpZHR5cGVfZXhwciAocik7CisgIGxvY2FsX3NwZWNp YWxpemF0aW9uX3N0YWNrIHN0YWNrOworCisgIHRyZWUgcGFybXMgPSBUUkVF X09QRVJBTkQgKHQsIDApOworICBpZiAocGFybXMpCisgICAgeworICAgICAg cGFybXMgPSB0c3Vic3RfY29uc3RyYWludF92YXJpYWJsZXMgKHBhcm1zLCBh cmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7CisgICAgICBpZiAocGFybXMgPT0g ZXJyb3JfbWFya19ub2RlKQorICAgICAgICByZXR1cm4gZXJyb3JfbWFya19u b2RlOworICAgIH0KKyAgCisgIHRyZWUgcmVxcyA9IFRSRUVfT1BFUkFORCAo dCwgMSk7CisgIHJlcXMgPSB0c3Vic3RfcmVxdWlyZW1lbnRfYm9keSAocmVx cywgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOworICBpZiAocmVxcyA9PSBl cnJvcl9tYXJrX25vZGUpCisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsK KworICByZXR1cm4gZmluaXNoX3JlcXVpcmVzX2V4cHIgKHBhcm1zLCByZXFz KTsKIH0KIAotLy8gU3Vic3RpdHV0ZSBBUkdTIGludG8gdGhlIGNvbnN0ZXhw ciBleHByZXNzaW9uIFQuCisvKiBTdWJzdGl0dXRlIEFSR1MgaW50byB0aGUg Y29uc3RyYWludCBpbmZvcm1hdGlvbiBDSSwgcHJvZHVjaW5nIGEgbmV3IAor ICAgY29uc3RyYWludCByZWNvcmQuICovCiB0cmVlCi10c3Vic3RfY29uc3Rl eHByX2V4cHIgKHRyZWUgdCwgdHJlZSBhcmdzLCB0cmVlIGluX2RlY2wpCit0 c3Vic3RfY29uc3RyYWludF9pbmZvICh0cmVlIHQsIHRyZWUgYXJncywgCisg ICAgICAgICAgICAgICAgICAgICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFp biwgdHJlZSBpbl9kZWNsKQogewotICB0cmVlIHIgPSB0c3Vic3RfZXhwciAo VFJFRV9PUEVSQU5EICh0LCAwKSwgYXJncywgdGZfbm9uZSwgaW5fZGVjbCwg ZmFsc2UpOwotICByZXR1cm4gZmluaXNoX2NvbnN0ZXhwcl9leHByIChyKTsK KyAgaWYgKCF0IHx8IHQgPT0gZXJyb3JfbWFya19ub2RlIHx8ICFjaGVja19j b25zdHJhaW50X2luZm8gKHQpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisK KyAgdHJlZSB0bXBsX2NvbnN0ciA9IE5VTExfVFJFRTsKKyAgaWYgKHRyZWUg ciA9IENJX1RFTVBMQVRFX1JFUVMgKHQpKQorICAgIHRtcGxfY29uc3RyID0g dHN1YnN0X2NvbnN0cmFpbnQgKHIsIGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNs KTsKKworICB0cmVlIGRlY2xfY29uc3RyID0gTlVMTF9UUkVFOworICBpZiAo dHJlZSByID0gQ0lfREVDTEFSQVRPUl9SRVFTICh0KSkKKyAgICBkZWNsX2Nv bnN0ciA9IHRzdWJzdF9jb25zdHJhaW50IChyLCBhcmdzLCBjb21wbGFpbiwg aW5fZGVjbCk7CisKKyAgcmV0dXJuIGJ1aWxkX2NvbnN0cmFpbnRzICh0bXBs X2NvbnN0ciwgZGVjbF9jb25zdHIpOwogfQogCi0vLyBTdWJzdGl0dXRlIEFS R1MgaW50byB0aGUgZXhwciByZXF1aXJlbWVudCBULiBOb3RlIHRoYXQgYSBy ZXF1aXJlbWVudAotLy8gbm9kZSBpcyBpbnN0YW50aWF0ZWQgZnJvbSBhIG5v bi1yZWR1Y2VkIGNvbnRleHQgKGUuZy4sIHN0YXRpY19hc3NlcnQpLgorCisv Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAg ICAgICAgICAgICAgQ29uc3RyYWludCBzYXRpc2ZhY3Rpb24gCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBUaGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBkZXRlcm1pbmUgaWYgYSBjb25zdHJhaW50LCB3aGVuCisg ICBzdWJzdGl0dXRpbmcgdGVtcGxhdGUgYXJndW1lbnRzLCBpcyBzYXRpc2Zp ZWQuIEZvciBjb252ZW5pZW5jZSwKKyAgIHNhdGlzZmFjdGlvbiByZWR1Y2Vz IGEgY29uc3RyYWludCB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSAoYW5kCisg ICBub3RoaW5nIGVsc2UpLiAqLworCituYW1lc3BhY2UgeworCit0cmVlIGNo ZWNrX2NvbnN0cmFpbnQgKHRyZWUsIHRyZWUsIHRzdWJzdF9mbGFnc190LCB0 cmVlKTsKKworLyogQSBwcmVkaWNhdGUgY29uc3RyYWludCBpcyBzYXRpc2Zp ZWQgaWYgaXRzIGV4cHJlc3Npb24gZXZhbHVhdGVzCisgICB0byB0cnVlLiBJ ZiBzdWJzdGl0dXRpb24gaW50byB0aGF0IG5vZGUgZmFpbHMsIHRoZSBjb25z dHJhaW50CisgICBpcyBub3Qgc2F0aXNmaWVkIChbdGVtcC5jb25zdHIucHJl ZF0pLgorCisgICBOb3RlIHRoYXQgYSBwcmVkaWNhdGUgY29uc3RyYWludCBp cyBhIGNvbnN0cmFpbnQgZXhwcmVzc2lvbgorICAgb2YgdHlwZSBib29sLiBJ ZiBuZWl0aGVyIG9mIHRob3NlIGFyZSB0cnVlLCB0aGUgcHJvZ3JhbSBpcwor ICAgaWxsLWZvcm1lZDsgdGhleSBhcmUgbm90IFNGSU5BRSdhYmxlIGVycm9y cy4gKi8KIHRyZWUKLXRzdWJzdF9leHByX3JlcSAodHJlZSB0LCB0cmVlIGFy Z3MsIHRyZWUgaW5fZGVjbCkKK2NoZWNrX3ByZWRpY2F0ZV9jb25zdHJhaW50 ICh0cmVlIHQsIHRyZWUgYXJncywgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUgaW5fZGVjbCkK IHsKLSAgdHJlZSByID0gTlVMTF9UUkVFOwotICBmb3IgKHRyZWUgbCA9IFRS RUVfT1BFUkFORCAodCwgMCk7IGw7IGwgPSBUUkVFX0NIQUlOIChsKSkKKyAg dHJlZSBleHByID0gdHN1YnN0X2V4cHIgKFRSRUVfT1BFUkFORCAodCwgMCks IGFyZ3MsIGNvbXBsYWluLCBpbl9kZWNsLCBmYWxzZSk7CisgIGlmIChleHBy ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxz ZV9ub2RlOworCisgIHRyZWUgcmVzdWx0ID0gZm9sZF9ub25fZGVwZW5kZW50 X2V4cHIgKGV4cHIpOworICBpZiAocmVzdWx0ID09IGVycm9yX21hcmtfbm9k ZSkKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworCisgIC8qIEEg cHJlZGljYXRlIGNvbnN0cmFpbnQgc2hhbGwgaGF2ZSB0eXBlIGJvb2wuIElu IHNvbWUKKyAgICAgY2FzZXMsIHN1YnN0aXR1dGlvbiBnaXZlcyB1cyBjb25z dC1xdWFsaWZpZWQgYm9vbCwgd2hpY2gKKyAgICAgaXMgYWxzbyBhY2NlcHRh YmxlLiAgKi8KKyAgdHJlZSB0eXBlID0gY3ZfdW5xdWFsaWZpZWQgKFRSRUVf VFlQRSAocmVzdWx0KSk7CisgIGlmICghc2FtZV90eXBlX3AgKHR5cGUsIGJv b2xlYW5fdHlwZV9ub2RlKSkKICAgICB7Ci0gICAgICB0cmVlIGUgPSB0c3Vi c3RfZXhwciAoVFJFRV9WQUxVRSAobCksIGFyZ3MsIHRmX25vbmUsIGluX2Rl Y2wsIGZhbHNlKTsKLSAgICAgIHIgPSBjb25qb2luX2NvbnN0cmFpbnRzIChy LCBlKTsKKyAgICAgIGVycm9yX2F0IChFWFBSX0xPQ19PUl9MT0MgKHQsIGlu cHV0X2xvY2F0aW9uKSwKKyAgICAgICAgICAgICAgICAiY29uc3RyYWludCAl cUUgZG9lcyBub3QgaGF2ZSB0eXBlICVxVCIsIAorICAgICAgICAgICAgICAg IHJlc3VsdCwgYm9vbGVhbl90eXBlX25vZGUpOworICAgICAgcmV0dXJuIGJv b2xlYW5fZmFsc2Vfbm9kZTsKICAgICB9Ci0gIHJldHVybiByOworCisgIHJl dHVybiBjeHhfY29uc3RhbnRfdmFsdWUgKHJlc3VsdCk7CiB9CiAKLS8vIFN1 YnN0aXR1dGUgQVJHUyBpbnRvIHRoZSB0eXBlIHJlcXVpcmVtZW50IFQuIE5v dGUgdGhhdCBhIHJlcXVpcmVtZW50Ci0vLyBub2RlIGlzIGluc3RhbnRpYXRl ZCBmcm9tIGEgbm9uLXJlZHVjZWQgY29udGV4dCAoZS5nLiwgc3RhdGljX2Fz c2VydCkuCisvKiBDaGVjayBhbiBleHByZXNzaW9uIGNvbnN0cmFpbnQuIFRo ZSBjb25zdHJhaW50IGlzIHNhdGlzZmllZCBpZgorICAgc3Vic3RpdHV0aW9u IHN1Y2NlZWRzIChbdGVtcC5jb25zdHIuZXhwcl0pLiAKKworICAgTm90ZSB0 aGF0IHRoZSBleHByZXNzaW9uIGlzIHVuZXZhbHVhdGVkLiAqLwogdHJlZQot dHN1YnN0X3R5cGVfcmVxICh0cmVlIHQsIHRyZWUgYXJncywgdHJlZSBpbl9k ZWNsKQorY2hlY2tfZXhwcmVzc2lvbl9jb25zdHJhaW50ICh0cmVlIHQsIHRy ZWUgYXJncywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJz dF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiB7Ci0gIHJldHVy biB0c3Vic3RfZXhwciAoVFJFRV9PUEVSQU5EICh0LCAwKSwgYXJncywgdGZf bm9uZSwgaW5fZGVjbCwgZmFsc2UpOworICBjcF91bmV2YWx1YXRlZCBndWFy ZDsKKyAgdHJlZSBleHByID0gRVhQUl9DT05TVFJfRVhQUiAodCk7CisgIHRy ZWUgY2hlY2sgPSB0c3Vic3RfZXhwciAoZXhwciwgYXJncywgY29tcGxhaW4s IGluX2RlY2wsIGZhbHNlKTsKKyAgaWYgKGNoZWNrID09IGVycm9yX21hcmtf bm9kZSkKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworICByZXR1 cm4gYm9vbGVhbl90cnVlX25vZGU7Cit9CisKKy8qIENoZWNrIGEgdHlwZSBj b25zdHJhaW50LiBUaGUgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQgaWYKKyAg IHN1YnN0aXR1dGlvbiBzdWNjZWVkcy4gKi8KK2lubGluZSB0cmVlCitjaGVj a190eXBlX2NvbnN0cmFpbnQgKHRyZWUgdCwgdHJlZSBhcmdzLCAKKyAgICAg ICAgICAgICAgICAgICAgICAgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRy ZWUgaW5fZGVjbCkKK3sKKyAgdHJlZSB0eXBlID0gVFlQRV9DT05TVFJfVFlQ RSAodCk7CisgIHRyZWUgY2hlY2sgPSB0c3Vic3QgKHR5cGUsIGFyZ3MsIGNv bXBsYWluLCBpbl9kZWNsKTsKKyAgaWYgKGNoZWNrID09IGVycm9yX21hcmtf bm9kZSkKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworICByZXR1 cm4gYm9vbGVhbl90cnVlX25vZGU7Cit9CisKKy8qIENoZWNrIGFuIGltcGxp Y2l0IGNvbnZlcnNpb24gY29uc3RyYWludC4gKi8KK3RyZWUKK2NoZWNrX2lt cGxpY2l0X2NvbnZlcnNpb25fY29uc3RyYWludCAodHJlZSB0LCB0cmVlIGFy Z3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 c3Vic3RfZmxhZ3NfdCBjb21wbGFpbiwgdHJlZSBpbl9kZWNsKQoreworICB0 cmVlIGV4cHIgPSBJQ09OVl9DT05TVFJfRVhQUiAodCk7CisKKyAgLyogRG9u J3QgdHN1YnN0IGFzIGlmIHdlJ3JlIHByb2Nlc3NpbmcgYSB0ZW1wbGF0ZS4g SWYgd2UgdHJ5IAorICAgICB0byB3ZSBjYW4gZW5kIHVwIGdlbmVyYXRpbmcg dGVtcGxhdGUtbGlrZSBleHByZXNzaW9ucworICAgICAoZS5nLiwgbW9kb3At ZXhwcnMpIHRoYXQgYXJlbid0IHByb3Blcmx5IHR5cGVkLiAqLworICBpbnQg c2F2ZWRfdGVtcGxhdGVfZGVjbCA9IHByb2Nlc3NpbmdfdGVtcGxhdGVfZGVj bDsKKyAgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsID0gMDsKKyAgdHJlZSBh cmcgPSB0c3Vic3RfZXhwciAoZXhwciwgYXJncywgY29tcGxhaW4sIGluX2Rl Y2wsIGZhbHNlKTsKKyAgcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsID0gc2F2 ZWRfdGVtcGxhdGVfZGVjbDsKKworICBpZiAoYXJnID09IGVycm9yX21hcmtf bm9kZSkKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworICB0cmVl IGZyb20gPSBUUkVFX1RZUEUgKGFyZyk7CisKKyAgdHJlZSB0eXBlID0gSUNP TlZfQ09OU1RSX1RZUEUgKHQpOworICB0cmVlIHRvID0gdHN1YnN0ICh0eXBl LCBhcmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7CisgIGlmICh0byA9PSBlcnJv cl9tYXJrX25vZGUpCisgICAgcmV0dXJuIGJvb2xlYW5fZmFsc2Vfbm9kZTsK KworICBpZiAoY2FuX2NvbnZlcnRfYXJnICh0bywgZnJvbSwgYXJnLCBMT09L VVBfSU1QTElDSVQsIGNvbXBsYWluKSkKKyAgICByZXR1cm4gYm9vbGVhbl90 cnVlX25vZGU7CisgIGVsc2UKKyAgICByZXR1cm4gYm9vbGVhbl9mYWxzZV9u b2RlOwogfQogCi0vLyBTdWJzdGl0dXRlIEFSR1MgaW50byB0aGUgbmVzdGVk IHJlcXVpcmVtZW50IFQuIE5vdGUgdGhhdCBhIHJlcXVpcmVtZW50Ci0vLyBu b2RlIGlzIGluc3RhbnRpYXRlZCBmcm9tIGEgbm9uLXJlZHVjZWQgY29udGV4 dCAoZS5nLiwgc3RhdGljX2Fzc2VydCkuCisvKiBDaGVjayBhbiBhcmd1bWVu dCBkZWR1Y3Rpb24gY29uc3RyYWludC4KKworICAgVE9ETzogSW1wbGVtZW50 IG1lLiBXZSBuZWVkIGdlbmVyYWxpemVkIGF1dG8gZm9yIHRoaXMgdG8gd29y ay4gKi8KIHRyZWUKLXRzdWJzdF9uZXN0ZWRfcmVxICh0cmVlIHQsIHRyZWUg YXJncywgdHJlZSBpbl9kZWNsKQorY2hlY2tfYXJndW1lbnRfZGVkdWN0aW9u X2NvbnN0cmFpbnQgKHRyZWUgLyp0Ki8sIHRyZWUgLyphcmdzKi8sIAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdWJzdF9mbGFn c190IC8qY29tcGxhaW4qLywgCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHJlZSAvKmluX2RlY2wqLykKIHsKLSAgcmV0dXJuIHRz dWJzdF9leHByIChUUkVFX09QRVJBTkQgKHQsIDApLCBhcmdzLCB0Zl9ub25l LCBpbl9kZWNsLCBmYWxzZSk7CisgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAg cmV0dXJuIGJvb2xlYW5fZmFsc2Vfbm9kZTsKIH0KIAotLy8gVXNlZCBpbiB2 YXJpb3VzIGNvbnRleHRzIHRvIGNvbnRyb2wgc3Vic3RpdHV0aW9uLiBJbiBw YXJ0aWN1bGFyLCB3aGVuCi0vLyBub24temVybywgdGhlIHN1YnN0aXR1dGlv biBvZiBOVUxMIGFyZ3VtZW50cyBpbnRvIGEgdHlwZSB3aWxsIHN0aWxsCi0v LyBwcm9jZXNzIHRoZSB0eXBlIGFzIGlmIHBhc3Npbmcgbm9uLU5VTEwgYXJn dW1lbnRzLCBhbGxvd2luZyB0eXBlCi0vLyBleHByZXNzaW9ucyB0byBiZSBm dWxseSBlbGFib3JhdGVkIGR1cmluZyBzdWJzdGl0dXRpb24uCi1pbnQgcHJv Y2Vzc2luZ19jb25zdHJhaW50OworLyogQ2hlY2sgYW4gZXhjZXB0aW9uIGNv bnN0cmFpbnQuIEFuIGV4Y2VwdGlvbiBjb25zdHJhaW50IGZvciBhbgorICAg ZXhwcmVzc2lvbiBlIGlzIHNhdGlzZmllZCB3aGVuIG5vZXhjZXB0KGUpIGlz IHRydWUuICovCit0cmVlCitjaGVja19leGNlcHRpb25fY29uc3RyYWludCAo dHJlZSB0LCB0cmVlIGFyZ3MsIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbiwgdHJlZSBpbl9kZWNsKQor eworICB0cmVlIGV4cHIgPSBFWENFUFRfQ09OU1RSX0VYUFIgKHQpOworICB0 cmVlIGNoZWNrID0gdHN1YnN0X2V4cHIgKGV4cHIsIGFyZ3MsIGNvbXBsYWlu LCBpbl9kZWNsLCBmYWxzZSk7CisgIGlmIChjaGVjayA9PSBlcnJvcl9tYXJr X25vZGUpCisgICAgcmV0dXJuIGJvb2xlYW5fZmFsc2Vfbm9kZTsKIAotLy8g U3Vic3RpdHV0ZSB0aGUgdGVtcGxhdGUgYXJndW1lbnRzIEFSR1MgaW50byB0 aGUgcmVxdWlyZW1lbnQKLS8vIGV4cHJlc3Npb24gUkVRUy4gRXJyb3JzIHJl c3VsdGluZyBmcm9tIHN1YnN0aXR1dGlvbiBhcmUgbm90Ci0vLyBkaWFnbm9z ZWQuCi0vLwotLy8gSWYgRE9fTk9UX0ZPTEQgaXMgdHJ1ZSwgdGhlbiB0aGUg cmVxdWlyZW1lbnRzIGFyZSBzdWJzdGl0dXRlZCBhcwotLy8gaWYgcGFyc2lu ZyBhIHRlbXBsYXRlIGRlY2xhcmF0aW9uLCB3aGljaCBjYXVzZXMgdGhlIHJl c3VsdGluZyBleHByZXNzaW9uCi0vLyB0byBub3QgYmUgZm9sZGVkLgorICBp ZiAoZXhwcl9ub2V4Y2VwdF9wIChjaGVjaywgY29tcGxhaW4pKQorICAgIHJl dHVybiBib29sZWFuX3RydWVfbm9kZTsKKyAgZWxzZQorICAgIHJldHVybiBi b29sZWFuX2ZhbHNlX25vZGU7Cit9CisKKy8qIENoZWNrIGEgcGFyYW1ldGVy aXplZCBjb25zdHJhaW50LiAqLwogdHJlZQotdHN1YnN0X2NvbnN0cmFpbnRf ZXhwciAodHJlZSByZXFzLCB0cmVlIGFyZ3MsIGJvb2wgZG9fbm90X2ZvbGQp CitjaGVja19wYXJhbWV0ZXJpemVkX2NvbnN0cmFpbnQgKHRyZWUgdCwgdHJl ZSBhcmdzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN1 YnN0X2ZsYWdzX3QgY29tcGxhaW4sIHRyZWUgaW5fZGVjbCkKIHsKLSAgY3Bf dW5ldmFsdWF0ZWQgZ3VhcmQ7Ci0gICsrcHJvY2Vzc2luZ19jb25zdHJhaW50 OwotICBpZiAoZG9fbm90X2ZvbGQpCi0gICAgKytwcm9jZXNzaW5nX3RlbXBs YXRlX2RlY2w7Ci0gIHRyZWUgciA9IHRzdWJzdF9leHByIChyZXFzLCBhcmdz LCB0Zl9ub25lLCBOVUxMX1RSRUUsIGZhbHNlKTsKLSAgaWYgKGRvX25vdF9m b2xkKQotICAgIC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOwotICAtLXBy b2Nlc3NpbmdfY29uc3RyYWludDsKLSAgcmV0dXJuIHI7CisgIGxvY2FsX3Nw ZWNpYWxpemF0aW9uX3N0YWNrIHN0YWNrOworICB0cmVlIHBhcm1zID0gUEFS TV9DT05TVFJfUEFSTVMgKHQpOworICB0cmVlIHZhcnMgPSB0c3Vic3RfY29u c3RyYWludF92YXJpYWJsZXMgKHBhcm1zLCBhcmdzLCBjb21wbGFpbiwgaW5f ZGVjbCk7CisgIGlmICh2YXJzID09IGVycm9yX21hcmtfbm9kZSkKKyAgICBy ZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworICB0cmVlIGNvbnN0ciA9IFBB Uk1fQ09OU1RSX09QRVJBTkQgKHQpOworICByZXR1cm4gY2hlY2tfY29uc3Ry YWludCAoY29uc3RyLCBhcmdzLCBjb21wbGFpbiwgaW5fZGVjbCk7Cit9CisK Ky8qIENoZWNrIHRoYXQgdGhlIGNvbmp1bmN0aW9uIG9mIGNvbnN0cmFpbnRz IGlzIHNhdGlzZmllZC4gTm90ZQorICAgdGhhdCBpZiBsZWZ0IG9wZXJhbmQg aXMgbm90IHNhdGlzZmllZCwgdGhlIHJpZ2h0IG9wZXJhbmQKKyAgIGlzIG5v dCBjaGVja2VkLiAKKworICAgRklYTUU6IENoZWNrIHRoYXQgdGhpcyB3b3Vs ZG4ndCByZXN1bHQgaW4gYSB1c2VyLWRlZmluZWQKKyAgIG9wZXJhdG9yLiBO b3RlIHRoYXQgdGhpcyBlcnJvciBpcyBwYXJ0aWFsbHkgZGlhZ25vc2VkIGlu CisgICBjaGVja19wcmVkaWNhdGVfY29uc3RyaWFudC4gSXQgd291bGQgYmUg bmljZSB0byBkaWFnbm9zZQorICAgdGhlIG92ZXJsb2FkLCBidXQgSSBkb24n dCB0aGluayBpdCdzIHN0cmljdGx5IG5lY2Vzc2FyeS4gICovCit0cmVlCitj aGVja19jb25qdW5jdGlvbiAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9m bGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCit7CisgIHRyZWUgdDAg PSBjaGVja19jb25zdHJhaW50IChUUkVFX09QRVJBTkQgKHQsIDApLCBhcmdz LCBjb21wbGFpbiwgaW5fZGVjbCk7CisgIGlmICh0MCA9PSBib29sZWFuX2Zh bHNlX25vZGUpCisgICAgcmV0dXJuIHQwOworICB0cmVlIHQxID0gY2hlY2tf Y29uc3RyYWludCAoVFJFRV9PUEVSQU5EICh0LCAxKSwgYXJncywgY29tcGxh aW4sIGluX2RlY2wpOworICBpZiAodDEgPT0gYm9vbGVhbl9mYWxzZV9ub2Rl KQorICAgIHJldHVybiB0MTsKKyAgcmV0dXJuIGJvb2xlYW5fdHJ1ZV9ub2Rl OwogfQogCi0vLyBTdWJzdGl0dXRlIGludG8gdGhlIGNvbnN0cmFpbnQgaW5m b3JtYXRpb24sIHByb2R1Y2luZyBhIG5ldyBjb25zdHJhaW50Ci0vLyByZWNv cmQuCisvKiBDaGVjayB0aGF0IHRoZSBkaXNqdW5jdGlvbiBvZiBjb25zdHJh aW50cyBpcyBzYXRpc2ZpZWQuIE5vdGUKKyAgIHRoYXQgaWYgdGhlIGxlZnQg b3BlcmFuZCBpcyBzYXRpc2ZpZWQsIHRoZSByaWdodCBvcGVyYW5kIGlzIG5v dAorICAgY2hlY2tlZC4gICovCiB0cmVlCi10c3Vic3RfY29uc3RyYWludF9p bmZvICh0cmVlIGNpLCB0cmVlIGFyZ3MpCitjaGVja19kaXNqdW5jdGlvbiAo dHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluLCB0 cmVlIGluX2RlY2wpCiB7Ci0gIGlmICghY2kgfHwgY2kgPT0gZXJyb3JfbWFy a19ub2RlIHx8ICFjaGVja19jb25zdHJhaW50X2luZm8gKGNpKSkKLSAgICBy ZXR1cm4gTlVMTF9UUkVFOworICB0cmVlIHQwID0gY2hlY2tfY29uc3RyYWlu dCAoVFJFRV9PUEVSQU5EICh0LCAwKSwgYXJncywgY29tcGxhaW4sIGluX2Rl Y2wpOworICBpZiAodDAgPT0gYm9vbGVhbl90cnVlX25vZGUpCisgICAgcmV0 dXJuIHQwOworICB0cmVlIHQxID0gY2hlY2tfY29uc3RyYWludCAoVFJFRV9P UEVSQU5EICh0LCAxKSwgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOworICBp ZiAodDEgPT0gYm9vbGVhbl90cnVlX25vZGUpCisgICAgcmV0dXJuIHQwOwor ICByZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOworfQogCi0gIHRyZWUgdHIg PSBOVUxMX1RSRUU7Ci0gIGlmICh0cmVlIHIgPSBDSV9URU1QTEFURV9SRVFT IChjaSkpCi0gICAgdHIgPSB0c3Vic3RfY29uc3RyYWludF9leHByIChyLCBh cmdzLCB0cnVlKTsKKy8qIENoZWNrIHRoYXQgdGhlIGNvbnN0cmFpbnQgaXMg c2F0aXNmaWVkLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIAorICAgZm9yIHRo YXQgY29uc3RyYWludC4gTm90ZSB0aGF0IGVhY2ggY2hlY2tfKiBmdW5jdGlv biByZXR1cm5zCisgICB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgb24gd2hl dGhlciBpdCBpcyBzYXRpc2ZpZWQgb3Igbm90LiAgKi8KK3RyZWUgCitjaGVj a19jb25zdHJhaW50ICh0cmVlIHQsIHRyZWUgYXJncywgdHN1YnN0X2ZsYWdz X3QgY29tcGxhaW4sIHRyZWUgaW5fZGVjbCkKK3sKKyAgaWYgKCF0KQorICAg IHJldHVybiBib29sZWFuX2ZhbHNlX25vZGU7CiAKLSAgdHJlZSBkciA9IE5V TExfVFJFRTsKLSAgaWYgKHRyZWUgciA9IENJX0RFQ0xBUkFUT1JfUkVRUyAo Y2kpKQotICAgIGRyID0gdHN1YnN0X2NvbnN0cmFpbnRfZXhwciAociwgYXJn cywgdHJ1ZSk7CisgIGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKyAgICBy ZXR1cm4gYm9vbGVhbl9mYWxzZV9ub2RlOwogCi0gIC8vIFRPRE86IFRoaXMg aXMgcmUtbm9ybWFsaXppbmcgYW5kIHJlLWRlY29tcG9zaW5nLiBXZSBwcm9i YWJseQotICAvLyBkb24ndCBuZWVkIHRvIGRvIHRoaXMuCi0gIHJldHVybiBi dWlsZF9jb25zdHJhaW50cyAodHIsIGRyKTsKKyAgc3dpdGNoIChUUkVFX0NP REUgKHQpKQorICB7CisgIGNhc2UgUFJFRF9DT05TVFI6CisgICAgcmV0dXJu IGNoZWNrX3ByZWRpY2F0ZV9jb25zdHJhaW50ICh0LCBhcmdzLCBjb21wbGFp biwgaW5fZGVjbCk7CisgIAorICBjYXNlIEVYUFJfQ09OU1RSOgorICAgIHJl dHVybiBjaGVja19leHByZXNzaW9uX2NvbnN0cmFpbnQgKHQsIGFyZ3MsIGNv bXBsYWluLCBpbl9kZWNsKTsKKyAgCisgIGNhc2UgVFlQRV9DT05TVFI6Cisg ICAgcmV0dXJuIGNoZWNrX3R5cGVfY29uc3RyYWludCAodCwgYXJncywgY29t cGxhaW4sIGluX2RlY2wpOworICAKKyAgY2FzZSBJQ09OVl9DT05TVFI6Cisg ICAgcmV0dXJuIGNoZWNrX2ltcGxpY2l0X2NvbnZlcnNpb25fY29uc3RyYWlu dCAodCwgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOworICAKKyAgY2FzZSBE RURVQ1RfQ09OU1RSOgorICAgIHJldHVybiBjaGVja19hcmd1bWVudF9kZWR1 Y3Rpb25fY29uc3RyYWludCAodCwgYXJncywgY29tcGxhaW4sIGluX2RlY2wp OworICAKKyAgY2FzZSBFWENFUFRfQ09OU1RSOgorICAgIHJldHVybiBjaGVj a19leGNlcHRpb25fY29uc3RyYWludCAodCwgYXJncywgY29tcGxhaW4sIGlu X2RlY2wpOworICAKKyAgY2FzZSBQQVJNX0NPTlNUUjoKKyAgICByZXR1cm4g Y2hlY2tfcGFyYW1ldGVyaXplZF9jb25zdHJhaW50ICh0LCBhcmdzLCBjb21w bGFpbiwgaW5fZGVjbCk7CisgIAorICBjYXNlIENPTkpfQ09OU1RSOgorICAg IHJldHVybiBjaGVja19jb25qdW5jdGlvbiAodCwgYXJncywgY29tcGxhaW4s IGluX2RlY2wpOworICAKKyAgY2FzZSBESVNKX0NPTlNUUjoKKyAgICByZXR1 cm4gY2hlY2tfZGlzanVuY3Rpb24gKHQsIGFyZ3MsIGNvbXBsYWluLCBpbl9k ZWNsKTsKKyAgCisgIGRlZmF1bHQ6CisgICAgZ2NjX3VucmVhY2hhYmxlICgp OworICB9CisgIHJldHVybiBib29sZWFuX2ZhbHNlX25vZGU7CiB9CiAKLS8v IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vCi0vLyBDb25zdHJh aW50IFNhdGlzZmFjdGlvbgotLy8KLS8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp b25zIGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIGluc3RhbnRpYXRpb24gYW5k Ci0vLyBldmFsdWF0aW9uIG9mIGNvbnN0cmFpbnRzLgorfSAvKiBuYW1lc3Bh Y2UgKi8KIAotbmFtZXNwYWNlIHsKLS8vIFJldHVybnMgdHJ1ZSBpZmYgdGhl IGF0b21pYyBjb25zdHJhaW50LCBSRVEsIGlzIHNhdGlzZmllZC4gVGhpcwot Ly8gaXMgdGhlIGNhc2Ugd2hlbiBzdWJzdGl0dXRpb24gc3VjY2VlZHMgYW5k IHRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbgotLy8gZXZhbHVhdGVzIHRvIHRy dWUuCi1zdGF0aWMgYm9vbAotY2hlY2tfc2F0aXNmaWVkICh0cmVlIHJlcSwg dHJlZSBhcmdzKQotewotICAvLyBJZiBhbnkgYXJndW1lbnRzIGFyZSBkZXBl bmRlbnQsIHRoZW4gd2UgY2FuJ3QgY2hlY2sgdGhlCi0gIC8vIHJlcXVpcmVt ZW50cy4gSnVzdCByZXR1cm4gdHJ1ZS4KLSAgaWYgKGFyZ3MgJiYgdXNlc190 ZW1wbGF0ZV9wYXJtcyAoYXJncykpCisvKiBDaGVjayB0aGUgY29uc3RyYWlu dHMgaW4gQ0kgYWdhaW5zdCB0aGUgZ2l2ZW4gQVJHUywgcmV0dXJuaW5nCisg ICB0cnVlIHdoZW4gdGhlIGNvbnN0cmFpbnRzIGFyZSBzYXRpc2ZpZWQgYW5k IGZhbHNlIG90aGVyd2lzZS4gCisKKyAgIE5vdGUgdGhhdCB0aGlzIGlzIHRo ZSBvbmx5IHBsYWNlIHRoYXQgd2UgaW5zdGFudGlhdGUgdGhlCisgICBjb25z dHJhaW50cy4gKi8KK2Jvb2wKK2NoZWNrX2NvbnN0cmFpbnRzICh0cmVlIGNp LCB0cmVlIGFyZ3MpCit7CisgIC8qIElmIHRoZXJlIGFyZSBubyBjb25zdHJh aW50cyB0aGVuIHRoaXMgaXMgdHJpdmlhbGx5IHNhdGlzZmllZC4gKi8KKyAg aWYgKCFjaSkKICAgICByZXR1cm4gdHJ1ZTsKIAotICAvLyBJbnN0YW50aWF0 ZSBhbmQgZXZhbHVhdGUgdGhlIHJlcXVpcmVtZW50cy4KLSAgcmVxID0gdHN1 YnN0X2NvbnN0cmFpbnRfZXhwciAocmVxLCBhcmdzLCBmYWxzZSk7Ci0gIGlm IChyZXEgPT0gZXJyb3JfbWFya19ub2RlKQorICAvKiBJZiBhbnkgYXJndW1l bnRzIGRlcGVuZCBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCB3ZSBjYW4ndAor ICAgICBjaGVjayBjb25zdHJhaW50cy4gKi8KKyAgaWYgKGFyZ3MgJiYgdXNl c190ZW1wbGF0ZV9wYXJtcyAoYXJncykpCisgICAgcmV0dXJuIHRydWU7Cisg IAorICAvKiBJbnZhbGlkIHJlcXVpcmVtZW50cyBjYW5ub3QgYmUgc2F0aXNm aWVkLiAqLworICBpZiAoIXZhbGlkX2NvbnN0cmFpbnRzX3AgKGNpKSkKICAg ICByZXR1cm4gZmFsc2U7CiAKLSAgLy8gUmVkdWNlIGFueSByZW1haW5pbmcg VFJBSVRfRVhQUiBub2RlcyBiZWZvcmUgZXZhbHVhdGluZy4KLSAgcmVxID0g Zm9sZF9ub25fZGVwZW5kZW50X2V4cHIgKHJlcSk7Ci0KLSAgLy8gUmVxdWly ZW1lbnRzIGFyZSBzYXRpc2ZpZWQgd2hlbiBSRVFTIGV2YWx1YXRlcyB0byB0 cnVlLgotICB0cmVlIHJlc3VsdCA9IGN4eF9jb25zdGFudF92YWx1ZSAocmVx KTsKKyAgdHJlZSBjb25zdHIgPSBDSV9OT1JNQUxJWkVEX0NPTlNUUkFJTlRT IChjaSk7CisgIHRyZWUgcmVzdWx0ID0gY2hlY2tfY29uc3RyYWludCAoY29u c3RyLCBhcmdzLCB0Zl9ub25lLCBOVUxMX1RSRUUpOwogICByZXR1cm4gcmVz dWx0ID09IGJvb2xlYW5fdHJ1ZV9ub2RlOwogfQogCi19IC8vIG5hbWVzcGFj ZQotCi0vLyBDaGVjayB0aGUgaW5zdGFudGlhdGVkIGRlY2xhcmF0aW9uIGNv bnN0cmFpbnRzLgorLyogUmV0dXJucyB0cnVlIGlmIHRoZSBkZWNsYXJhdGlv bidzIGNvbnN0cmFpbnRzIGFyZSBzYXRpc2ZpZWQuIAorICAgVGhpcyBpcyB1 c2VkIGluIGNhc2VzIHdoZXJlIGEgZGVjbGFyYXRpb24gaXMgZm9ybWVkIGJ1 dAorICAgYmVmb3JlIGl0IGlzIHVzZWQgKGUuZy4sIG92ZXJsb2FkIHJlc29s dXRpb24pLiAqLwogYm9vbAotY2hlY2tfY29uc3RyYWludHMgKHRyZWUgY2lu Zm8pCitjb25zdHJhaW50c19zYXRpc2ZpZWRfcCAodHJlZSBkZWNsKQogewot ICAvLyBObyBjb25zdHJhaW50cz8gU2F0aXNmaWVkLgotICBpZiAoIWNpbmZv KQotICAgIHJldHVybiB0cnVlOwotICAvLyBJbnZhbGlkIGNvbnN0cmFpbnRz LCBub3Qgc2F0aXNmaWVkLgotICBlbHNlIGlmICghdmFsaWRfcmVxdWlyZW1l bnRzX3AgKGNpbmZvKSkKLSAgICByZXR1cm4gZmFsc2U7Ci0gIC8vIEZ1bm5l bCBiYWNrIGludG8gdGhlIGRlcGVuZGVudCBjaGVja2luZyBicmFuY2guIFRo aXMgZm9yY2VzCi0gIC8vIG9uZSBtb3JlIHN1YnN0aXR1dGlvbiB0aHJvdWdo IHRoZSBjb25zdHJhaW50cywgd2hpY2ggcmVtb3ZlcwotICAvLyBhbGwgcmVt YWluaW5nIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdCBjb25zdGFudCBleHBy ZXNzaW9ucwotICAvLyAoZS5nLiwgdGVtcGxhdGUtaWQgZXhwcmVzc2lvbnMp LgorICAvKiBHZXQgdGhlIGNvbnN0cmFpbnRzIHRvIGNoZWNrIGZvciBzYXRp c2ZhY3Rpb24uIFRoaXMgZGVwZW5kcworICAgICBvbiB3aGV0aGVyIHdlJ3Jl IGxvb2tpbmcgYXQgYSB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvciBub3Qu ICovCisgIHRyZWUgY2kgPSBOVUxMX1RSRUU7CisgIHRyZWUgYXJncyA9IE5V TExfVFJFRTsKKyAgaWYgKHRyZWUgdGkgPSBERUNMX1RFTVBMQVRFX0lORk8g KGRlY2wpKQorICAgIHsKKyAgICAgIGNpID0gZ2V0X2NvbnN0cmFpbnRzIChU SV9URU1QTEFURSAodGkpKTsKKyAgICAgIGFyZ3MgPSBJTk5FUk1PU1RfVEVN UExBVEVfQVJHUyAoVElfQVJHUyAodGkpKTsKKyAgICB9CiAgIGVsc2UKLSAg ICByZXR1cm4gY2hlY2tfc2F0aXNmaWVkIChDSV9OT1JNQUxJWkVEX0NPTlNU UkFJTlRTIChjaW5mbyksIE5VTExfVFJFRSk7CisgICAgeworICAgICAgY2kg PSBnZXRfY29uc3RyYWludHMgKGRlY2wpOworICAgIH0KKworICByZXR1cm4g Y2hlY2tfY29uc3RyYWludHMgKGNpLCBhcmdzKTsKIH0KIAotLy8gQ2hlY2sg dGhlIGNvbnN0cmFpbnRzIGluIENJTkZPIGFnYWluc3QgdGhlIGdpdmVuIEFS R1MsIHJldHVybmluZwotLy8gdHJ1ZSB3aGVuIHRoZSBjb25zdHJhaW50cyBh cmUgc2F0aXNmaWVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCisvKiBSZXR1cm5z IHRydWUgaWYgdGhlIHRlbXBsYXRlJ3MgY29uc3RyYWlucyBhcmUgc2F0aXNm aWVkCisgICBieSB0aGUgZ2l2ZW4gYXJndW1lbnRzLiBUaGlzIGlzIHVzZWQg aW4gY2FzZXMgd2hlcmUgYQorICAgZGVjbGFyYXRpb24gY2Fubm90IGJlIGZv cm1lZCB1bmxlc3MgdGhlIGNvbnN0cmFpbnRzIGFyZQorICAgY2hlY2tlZCAo ZS5nLiwgdGhlIHVzZSBvZiBhIHRlbXBsYXRlLWlkIHRoYXQgbmFtZXMgYQor ICAgY2xhc3MpLiAqLwogYm9vbAotY2hlY2tfY29uc3RyYWludHMgKHRyZWUg Y2luZm8sIHRyZWUgYXJncykKK2NvbnN0cmFpbnRzX3NhdGlzZmllZF9wICh0 cmVlIHRtcGwsIHRyZWUgYXJncykKIHsKLSAgLy8gSWYgdGhlcmUgYXJlIG5v IGNvbnN0cmFpbnRzIHRoZW4gdGhpcyBpcyB0cml2YWxseSBzYXRpc2ZpZWQu Ci0gIGlmICghY2luZm8pCi0gICAgcmV0dXJuIHRydWU7Ci0gIC8vIEludmxh aWQgcmVxdWlyZW1lbnRzIGNhbm5vdCBiZSBzYXRpc2ZpZWQuCi0gIGVsc2Ug aWYgKCF2YWxpZF9yZXF1aXJlbWVudHNfcCAoY2luZm8pKQotICAgIHJldHVy biBmYWxzZTsKLSAgZWxzZSB7Ci0gICAgcmV0dXJuIGNoZWNrX3NhdGlzZmll ZCAoQ0lfTk9STUFMSVpFRF9DT05TVFJBSU5UUyAoY2luZm8pLCBhcmdzKTsK LSAgfQorICByZXR1cm4gY2hlY2tfY29uc3RyYWludHMgKGdldF9jb25zdHJh aW50cyAodG1wbCksIGFyZ3MpOworfQorCisvKiBFdmFsdWF0ZSB0aGUgZnVu Y3Rpb24gY29uY2VwdCBGTiBieSBzdWJzdGl0dXRpbmcgQVJHUyBpbnRvIGl0 cworICAgZGVmaW5pdGlvbiBhbmQgZXZhbHVhdGluZyB0aGF0IGFzIHRoZSBy ZXN1bHQuIFJldHVybnMKKyAgIGJvb2xlYW5fdHJ1ZV9ub2RlIGlmIHRoZSBj b25zdHJhaW50cyBhcmUgc2F0aXNmaWVkIGFuZAorICAgYm9vbGVhbl9mYWxz ZV9ub2RlIG90aGVyd2lzZS4gICovCit0cmVlCitldmFsdWF0ZV9mdW5jdGlv bl9jb25jZXB0ICh0cmVlIGZuLCB0cmVlIGFyZ3MpCit7CisgICsrcHJvY2Vz c2luZ190ZW1wbGF0ZV9kZWNsOworICB0cmVlIGNvbnN0ciA9IHRyYW5zZm9y bV9leHByZXNzaW9uIChsaWZ0X2Z1bmN0aW9uX2RlZmluaXRpb24gKGZuLCBh cmdzKSk7CisgIC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOworICByZXR1 cm4gY2hlY2tfY29uc3RyYWludCAoY29uc3RyLCBhcmdzLCB0Zl9ub25lLCBO VUxMX1RSRUUpOworfQorCisvKiBFdmFsdWF0ZSB0aGUgdmFyaWFibGUgY29u Y2VwdCBWQVIgYnkgc3Vic3RpdHV0aW5nIEFSR1MgaW50bworICAgaXRzIGlu aXRpYWxpemVyIGFuZCBjaGVja2luZyB0aGUgcmVzdWx0aW5nIGNvbnN0cmFp bnQuIFJldHVybnMKKyAgIGJvb2xlYW5fdHJ1ZV9ub2RlIGlmIHRoZSBjb25z dHJhaW50cyBhcmUgc2F0aXNmaWVkIGFuZAorICAgYm9vbGVhbl9mYWxzZV9u b2RlIG90aGVyd2lzZS4gICovCit0cmVlCitldmFsdWF0ZV92YXJpYWJsZV9j b25jZXB0ICh0cmVlIGRlY2wsIHRyZWUgYXJncykKK3sKKyAgKytwcm9jZXNz aW5nX3RlbXBsYXRlX2RlY2w7CisgIHRyZWUgY29uc3RyID0gdHJhbnNmb3Jt X2V4cHJlc3Npb24gKGxpZnRfdmFyaWFibGVfaW5pdGlhbGl6ZXIgKGRlY2ws IGFyZ3MpKTsKKyAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CisgIHJl dHVybiBjaGVja19jb25zdHJhaW50IChjb25zdHIsIGFyZ3MsIHRmX25vbmUs IE5VTExfVFJFRSk7CiB9CiAKLS8vIENoZWNrIHRoZSBjb25zdHJhaW50cyBv ZiB0aGUgZGVjbGFyYXRpb24gb3IgdHlwZSBULCBhZ2FpbnN0Ci0vLyB0aGUg c3BlY2lmaWVkIGFyZ3VtZW50cy4gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25z dHJhaW50cyBhcmUKLS8vIHNhdGlzZmllZCBhbmQgZmFsc2Ugb3RoZXJ3aXNl LgorLyogRXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb24gYXMgaWYgaXQg d2VyZSBhIHByZWRpY2F0ZQorICAgY29uc3RyYWludC4gUmV0dXJucyBib29s ZWFuX3RydWVfbm9kZSBpZiB0aGUgY29uc3RyYWludAorICAgaXMgc2F0aXNm aWVkIGFuZCBib29sZWFuX2ZhbHNlX25vZGUgb3RoZXJ3aXNlLiAqLwordHJl ZQorZXZhbHVhdGVfY29uc3RyYWludF9leHByZXNzaW9uICh0cmVlIGV4cHIs IHRyZWUgYXJncykKK3sKKyAgKytwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7 CisgIHRyZWUgY29uc3RyID0gdHJhbnNmb3JtX2V4cHJlc3Npb24gKGxpZnRf Y29uc3RyYWludHMgKGV4cHIpKTsKKyAgLS1wcm9jZXNzaW5nX3RlbXBsYXRl X2RlY2w7CisgIHJldHVybiBjaGVja19jb25zdHJhaW50IChjb25zdHIsIGFy Z3MsIHRmX25vbmUsIE5VTExfVFJFRSk7Cit9CisKKy8qIE5vcm1hbGl6ZSBF WFBSIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdGluZyBjb25zdHJhaW50 IGlzCisgICBzYXRpc2ZpZWQgYnkgQVJHUy4gUmV0dXJucyB0cnVlIGlmIGFu ZCBvbmx5IGlmIHRoZSBjb25zdHJhaW50CisgICBpcyBzYXRpc2ZpZWQuICov CiBib29sCi1jaGVja190ZW1wbGF0ZV9jb25zdHJhaW50cyAodHJlZSB0LCB0 cmVlIGFyZ3MpCitjaGVja19jb25zdHJhaW50X2V4cHJlc3Npb24gKHRyZWUg ZXhwciwgdHJlZSBhcmdzKQogewotICByZXR1cm4gY2hlY2tfY29uc3RyYWlu dHMgKGdldF9jb25zdHJhaW50cyAodCksIGFyZ3MpOworICByZXR1cm4gZXZh bHVhdGVfY29uc3RyYWludF9leHByZXNzaW9uIChleHByLCBhcmdzKSA9PSBi b29sZWFuX3RydWVfbm9kZTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gLy8KLS8vIENvbnN0cmFpbnQgUmVsYXRpb25zCi0vLwot Ly8gSW50ZXJmYWNlcyBmb3IgZGV0ZXJtaW5pbmcgZXF1aXZhbGVuY3kgYW5k IG9yZGVyaW5nIG9mIGNvbnN0cmFpbnRzLgorLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICBTZW1hbnRpYyBhbmFs eXNpcyBvZiByZXF1aXJlcy1leHByZXNzaW9ucworLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KIAotLy8gUmV0dXJucyB0cnVlIHdoZW4gQSBh bmQgQiBhcmUgZXF1aXZhbGVudCBjb25zdHJhaW50cy4KKy8qIEZpbmlzaCBh IHJlcXVpcmVzIGV4cHJlc3Npb24gZm9yIHRoZSBnaXZlbiBQQVJNUyAocG9z c2libHkKKyAgIG51bGwpIGFuZCB0aGUgbm9uLWVtcHR5IHNlcXVlbmNlIG9m IHJlcXVpcmVtZW50cy4gKi8KK3RyZWUKK2ZpbmlzaF9yZXF1aXJlc19leHBy ICh0cmVlIHBhcm1zLCB0cmVlIHJlcXMpCit7CisgIC8qIE1vZGlmeSB0aGUg ZGVjbGFyZWQgcGFyYW1ldGVycyBieSByZW1vdmluZyB0aGVpciBjb250ZXh0 IAorICAgICBzbyB0aGV5IGRvbid0IHJlZmVyIHRvIHRoZSBlbmNsb3Npbmcg c2NvcGUuICovCisgIGZvciAodHJlZSBwID0gcGFybXM7IHAgJiYgIVZPSURf VFlQRV9QIChUUkVFX1ZBTFVFIChwKSk7IHAgPSBUUkVFX0NIQUlOIChwKSkK KyAgICBERUNMX0NPTlRFWFQgKFRSRUVfVkFMVUUgKHApKSA9IE5VTExfVFJF RTsKKworICAvKiBCdWlsZCB0aGUgbm9kZS4gKi8KKyAgdHJlZSByID0gYnVp bGRfbWluIChSRVFVSVJFU19FWFBSLCBib29sZWFuX3R5cGVfbm9kZSwgcGFy bXMsIHJlcXMpOworICBUUkVFX1NJREVfRUZGRUNUUyAocikgPSBmYWxzZTsK KyAgVFJFRV9DT05TVEFOVCAocikgPSB0cnVlOworICByZXR1cm4gcjsKK30K KworLyogQ29uc3RydWN0IGEgcmVxdWlyZW1lbnQgZm9yIHRoZSB2YWxpZGl0 eSBvZiBFWFBSLiAqLwordHJlZQorZmluaXNoX3NpbXBsZV9yZXF1aXJlbWVu dCAodHJlZSBleHByKQoreworICByZXR1cm4gYnVpbGRfbnQgKFNJTVBMRV9S RVEsIGV4cHIpOworfQorCisvKiBDb25zdHJ1Y3QgYSByZXF1aXJlbWVudCBm b3IgdGhlIHZhbGlkaXR5IG9mIFRZUEUuICovCit0cmVlCitmaW5pc2hfdHlw ZV9yZXF1aXJlbWVudCAodHJlZSB0eXBlKQoreworICByZXR1cm4gYnVpbGRf bnQgKFRZUEVfUkVRLCB0eXBlKTsKK30KKworLyogQ29uc3RydWN0IGEgcmVx dWlyZW1lbnQgZm9yIHRoZSB2YWxpZGl0eSBvZiBFWFBSLCBhbG9uZyB3aXRo CisgICBpdHMgcHJvcGVydGllcy4gaWYgVFlQRSBpcyBub24tbnVsbCwgdGhl biBpdCBzcGVjaWZpZXMgZWl0aGVyIAorICAgYW4gaW1wbGljaXQgY29udmVy c2lvbiBvciBhcmd1bWVudCBkZWR1Y3Rpb24gY29uc3RyYWludCwgCisgICBk ZXBlbmRpbmcgb24gd2hldGhlciBhbnkgcGxhY2Vob2xkZXJzIG9jY3VyIGlu IHRoZSB0eXBlIG5hbWUuIAorICAgTk9FWENFUFRfUCBpcyB0cnVlIGlmZiB0 aGUgbm9leGNlcHQga2V5d29yZCB3YXMgc3BlY2lmaWVkLiAqLwordHJlZQor ZmluaXNoX2NvbXBvdW5kX3JlcXVpcmVtZW50ICh0cmVlIGV4cHIsIHRyZWUg dHlwZSwgYm9vbCBub2V4Y2VwdF9wKQoreworICB0cmVlIHJlcSA9IGJ1aWxk X250IChDT01QT1VORF9SRVEsIGV4cHIsIHR5cGUpOworICBDT01QT1VORF9S RVFfTk9FWENFUFRfUCAocmVxKSA9IG5vZXhjZXB0X3A7CisgIHJldHVybiBy ZXE7Cit9CisKKy8qIEZpbmlzaCBhIG5lc3RlZCByZXF1aXJlbWVudC4gKi8K K3RyZWUKK2ZpbmlzaF9uZXN0ZWRfcmVxdWlyZW1lbnQgKHRyZWUgZXhwcikK K3sKKyAgcmV0dXJuIGJ1aWxkX250IChORVNURURfUkVRLCBleHByKTsKK30K KworLy8gQ2hlY2sgdGhhdCBGTiBzYXRpc2ZpZXMgdGhlIHN0cnVjdHVyYWwg cmVxdWlyZW1lbnRzIG9mIGEKKy8vIGZ1bmN0aW9uIGNvbmNlcHQgZGVmaW5p dGlvbi4KK3RyZWUKK2NoZWNrX2Z1bmN0aW9uX2NvbmNlcHQgKHRyZWUgZm4p Cit7CisgIGxvY2F0aW9uX3QgbG9jID0gREVDTF9TT1VSQ0VfTE9DQVRJT04g KGZuKTsKKworICAvLyBDaGVjayB0aGF0IHRoZSBmdW5jdGlvbiBpcyBjb21w cmlzZWQgb2Ygb25seSBhIHNpbmdsZQorICAvLyByZXR1cm4gc3RhdGVtZW50 LgorICB0cmVlIGJvZHkgPSBERUNMX1NBVkVEX1RSRUUgKGZuKTsKKyAgaWYg KFRSRUVfQ09ERSAoYm9keSkgPT0gQklORF9FWFBSKQorICAgIGJvZHkgPSBC SU5EX0VYUFJfQk9EWSAoYm9keSk7CisKKyAgLy8gU29tZXRpbWVzIGEgZnVu Y3Rpb24gY2FsbCByZXN1bHRzIGluIHRoZSBjcmVhdGlvbiBvZiBjbGVhbiB1 cAorICAvLyBwb2ludHMuIEFsbG93IHRoZXNlIHRvIGJlIHByZXNlcnZlZCBp biB0aGUgYm9keSBvZiB0aGUKKyAgLy8gY29uc3RyYWludCwgYXMgd2UgbWln aHQgYWN0dWFsbHkgbmVlZCB0aGVtIGZvciBzb21lIGNvbnN0ZXhwcgorICAv LyBldmFsdWF0aW9ucy4KKyAgaWYgKFRSRUVfQ09ERSAoYm9keSkgPT0gQ0xF QU5VUF9QT0lOVF9FWFBSKQorICAgIGJvZHkgPSBUUkVFX09QRVJBTkQgKGJv ZHksIDApOworCisgIGlmIChUUkVFX0NPREUgKGJvZHkpICE9IFJFVFVSTl9F WFBSKQorICAgIGVycm9yX2F0IChsb2MsICJmdW5jdGlvbiBjb25jZXB0IGRl ZmluaXRpb24gJXFEIGhhcyBtdWx0aXBsZSBzdGF0ZW1lbnRzIiwKKyAgICAg ICAgICAgICAgZm4pOworCisgIHJldHVybiBOVUxMX1RSRUU7Cit9CisKKwor Ly8gQ2hlY2sgdGhhdCBhIGNvbnN0cmFpbmVkIGZyaWVuZCBkZWNsYXJhdGlv biBmdW5jdGlvbiBkZWNsYXJhdGlvbiwKKy8vIEZOLCBpcyBhZG1pc3NpYmxl LiBUaGlzIGlzIHRoZSBjYXNlIG9ubHkgd2hlbiB0aGUgZGVjbGFyYXRpb24g ZGVwZW5kcworLy8gb24gdGVtcGxhdGUgcGFyYW1ldGVycyBhbmQgZG9lcyBu b3QgZGVjbGFyZSBhIHNwZWNpYWxpemF0aW9uLgordm9pZAorY2hlY2tfY29u c3RyYWluZWRfZnJpZW5kICh0cmVlIGZuLCB0cmVlIHJlcXMpCit7CisgIGlm IChmbiA9PSBlcnJvcl9tYXJrX25vZGUpCisgICAgcmV0dXJuOworICBnY2Nf YXNzZXJ0IChUUkVFX0NPREUgKGZuKSA9PSBGVU5DVElPTl9ERUNMKTsKKwor ICAvLyBJZiB0aGVyZSBhcmUgbm90IGNvbnN0cmFpbnRzLCB0aGlzIGNhbm5v dCBiZSBhbiBlcnJvci4KKyAgaWYgKCFyZXFzKQorICAgIHJldHVybjsKKwor ICAvLyBDb25zdHJhaW5lZCBmcmllbmQgZnVuY3Rpb25zIHRoYXQgZG9uJ3Qg ZGVwZW5kIG9uIHRlbXBsYXRlCisgIC8vIGFyZ3VtZW50cyBhcmUgZWZmZWN0 aXZlbHkgbWVhbmluZ2xlc3MuCisgIHRyZWUgcGFybXMgPSBERUNMX0FSR1VN RU5UUyAoZm4pOworICB0cmVlIHJlc3VsdCA9IFRSRUVfVFlQRSAoVFJFRV9U WVBFIChmbikpOworICBpZiAoIShwYXJtcyAmJiB1c2VzX3RlbXBsYXRlX3Bh cm1zIChwYXJtcykpICYmICF1c2VzX3RlbXBsYXRlX3Bhcm1zIChyZXN1bHQp KQorICAgIHsKKyAgICAgIGVycm9yICgiY29uc3RyYWluZWQgZnJpZW5kIGRv ZXMgbm90IGRlcGVuZCBvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIik7CisgICAg ICByZXR1cm47CisgICAgfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgRXF1aXZhbGVu Y2Ugb2YgY29uc3RyYWludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCisKKy8qIFJldHVybnMgdHJ1ZSB3aGVuIEEgYW5kIEIgYXJlIGVx dWl2YWxlbnQgY29uc3RyYWludHMuICAqLwogYm9vbAogZXF1aXZhbGVudF9j b25zdHJhaW50cyAodHJlZSBhLCB0cmVlIGIpCiB7CkBAIC0xNjI2LDkgKzE5 MjUsOSBAQCBlcXVpdmFsZW50X2NvbnN0cmFpbnRzICh0cmVlIGEsIHRyZWUg YikKICAgcmV0dXJuIGNwX3RyZWVfZXF1YWwgKGEsIGIpOwogfQogCi0vLyBS ZXR1cm5zIHRydWUgaWYgdGhlIHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBBIGFu ZCBCIGhhdmUgZXF1aXZhbGVudAotLy8gY29uc3RyYWludHMuIFRoaXMgaXMg dGhlIGNhc2Ugd2hlbiBBJ3MgY29uc3RyYWludHMgc3Vic3VtZSBCJ3MgYW5k Ci0vLyB3aGVuIEIncyBhbHNvIGNvbnN0cmFpbiBBJ3MuCisvKiBSZXR1cm5z IHRydWUgaWYgdGhlIHRlbXBsYXRlIGRlY2xhcmF0aW9ucyBBIGFuZCBCIGhh dmUgZXF1aXZhbGVudAorICAgY29uc3RyYWludHMuIFRoaXMgaXMgdGhlIGNh c2Ugd2hlbiBBJ3MgY29uc3RyYWludHMgc3Vic3VtZSBCJ3MgYW5kCisgICB3 aGVuIEIncyBhbHNvIGNvbnN0cmFpbiBBJ3MuICAqLwogYm9vbAogZXF1aXZh bGVudGx5X2NvbnN0cmFpbmVkICh0cmVlIGQxLCB0cmVlIGQyKQogewpAQCAt MTYzNiw3ICsxOTM1LDExIEBAIGVxdWl2YWxlbnRseV9jb25zdHJhaW5lZCAo dHJlZSBkMSwgdHJlZSBkMikKICAgcmV0dXJuIGVxdWl2YWxlbnRfY29uc3Ry YWludHMgKGdldF9jb25zdHJhaW50cyAoZDEpLCBnZXRfY29uc3RyYWludHMg KGQyKSk7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB0aGUgY29u c3RyYWludHMgaW4gQSBzdWJzdW1lIHRob3NlIGluIEIuCisvKi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg UGFydGlhbCBvcmRlcmluZyBvZiBjb25zdHJhaW50cworLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogUmV0dXJucyB0cnVlIHdoZW4g dGhlIHRoZSBjb25zdHJhaW50cyBpbiBBIHN1YnN1bWUgdGhvc2UgaW4gQi4g ICovCiBib29sCiBzdWJzdW1lc19jb25zdHJhaW50cyAodHJlZSBhLCB0cmVl IGIpCiB7CkBAIC0xNjQ1LDEyICsxOTQ4LDEyIEBAIHN1YnN1bWVzX2NvbnN0 cmFpbnRzICh0cmVlIGEsIHRyZWUgYikKICAgcmV0dXJuIHN1YnN1bWVzIChh LCBiKTsKIH0KIAotLy8gRGV0ZXJtaW5lcyB3aGljaCBvZiB0aGUgZGVjbGFy YXRpb25zLCBBIG9yIEIsIGlzIG1vcmUgY29uc3RyYWluZWQuCi0vLyBUaGF0 IGlzLCB3aGljaCBkZWNsYXJhdGlvbidzIGNvbnN0cmFpbnRzIHN1YnN1bWUg YnV0IGFyZSBub3Qgc3Vic3VtZWQKLS8vIGJ5IHRoZSBvdGhlcidzPwotLy8K LS8vIFJldHVybnMgMSBpZiBBIGlzIG1vcmUgY29uc3RyYWluZWQgdGhhbiBC LCAtMSBpZiBCIGlzIG1vcmUgY29uc3RyYWluZWQKLS8vIHRoYW4gQSwgYW5k IDAgb3RoZXJ3aXNlLgorLyogRGV0ZXJtaW5lcyB3aGljaCBvZiB0aGUgZGVj bGFyYXRpb25zLCBBIG9yIEIsIGlzIG1vcmUgY29uc3RyYWluZWQuCisgICBU aGF0IGlzLCB3aGljaCBkZWNsYXJhdGlvbidzIGNvbnN0cmFpbnRzIHN1YnN1 bWUgYnV0IGFyZSBub3Qgc3Vic3VtZWQKKyAgIGJ5IHRoZSBvdGhlcidzPwor CisgICBSZXR1cm5zIDEgaWYgQSBpcyBtb3JlIGNvbnN0cmFpbmVkIHRoYW4g QiwgLTEgaWYgQiBpcyBtb3JlIGNvbnN0cmFpbmVkCisgICB0aGFuIEEsIGFu ZCAwIG90aGVyd2lzZS4gKi8KIGludAogbW9yZV9jb25zdHJhaW5lZCAodHJl ZSBkMSwgdHJlZSBkMikKIHsKQEAgLTE2NjQsOSArMTk2Nyw5IEBAIG1vcmVf Y29uc3RyYWluZWQgKHRyZWUgZDEsIHRyZWUgZDIpCiAgIHJldHVybiB3aW5u ZXI7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSBpZiBkMSBpcyBhdCBsZWFzdCBh cyBjb25zdHJhaW5lZCBhcyBkMi4gVGhhdCBpcywgdGhlCi0vLyBhc3NvY2lh dGVkIGNvbnN0cmFpbnRzIG9mIGQxIHN1YnN1bWUgdGhvc2Ugb2YgZDIsIG9y IGJvdGggZGVjbGFyYXRpb25zCi0vLyBhcmUgdW5jb25zdHJhaW5lZC4KKy8q IFJldHVybnMgdHJ1ZSBpZiBEMSBpcyBhdCBsZWFzdCBhcyBjb25zdHJhaW5l ZCBhcyBEMi4gVGhhdCBpcywgdGhlCisgICBhc3NvY2lhdGVkIGNvbnN0cmFp bnRzIG9mIEQxIHN1YnN1bWUgdGhvc2Ugb2YgRDIsIG9yIGJvdGggZGVjbGFy YXRpb25zCisgICBhcmUgdW5jb25zdHJhaW5lZC4gKi8KIGJvb2wKIGF0X2xl YXN0X2FzX2NvbnN0cmFpbmVkICh0cmVlIGQxLCB0cmVlIGQyKQogewpAQCAt MTY3NiwzNjcgKzE5NzksMjk1IEBAIGF0X2xlYXN0X2FzX2NvbnN0cmFpbmVk ICh0cmVlIGQxLCB0cmVlIGQyKQogfQogCiAKLS8vIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tIC8vCi0vLyBDb25zdHJhaW50IERpYWdub3N0aWNz CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAg ICAgICAgICAgICAgICAgQ29uc3RyYWludCBkaWFnbm9zdGljcworLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogVGhlIGRpYWdub3Np cyBvZiBjb25zdHJhaW50cyBwZXJmb3JtcyBhIGNvbWJpbmF0aW9uIG9mCisg ICBub3JtYWxpemF0aW9uIGFuZCBzYXRpc2ZhY3Rpb24gdGVzdGluZy4gV2Ug cmVjdXJzaXZlbHkKKyAgIHdhbGsgdGhyb3VnaCB0aGUgY29uanVuY3Rpb24g KG9yIGRpc2p1bmN0aW9ucykgb2YgYXNzb2NpYXRlZCAKKyAgIGNvbnN0cmFp bnRzLCB0ZXN0aW5nIGVhY2ggc3ViLWV4cHJlc3Npb24gaW4gdHVybi4KKwor ICAgV2UgY3VycmVudGx5IHJlc3RyaWN0IGRpYWdub3N0aWNzIHRvIGp1c3Qg dGhlIHRvcC1sZXZlbAorICAgY29uanVuY3Rpb25zIHdpdGhpbiB0aGUgYXNz b2NpYXRlZCBjb25zdHJhaW50cy4gQSBmdWxseQorICAgcmVjdXJzaXZlIHdh bGsgaXMgcG9zc2libGUsIGJ1dCBpdCBjYW4gZ2VuZXJhdGUgYSBsb3QKKyAg IG9mIGVycm9ycy4gKi8KKwogCiBuYW1lc3BhY2UgewogCi0vLyBHaXZlbiBh biBhcmJpdHJhcnkgY29uc3RyYWludCBleHByZXNzaW9uLCBub3JtYWxpemUg aXQgYW5kCi0vLyB0aGVuIGNoZWNrIGl0LiBXZSBoYXZlIHRvIG5vcm1hbGl6 ZSBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkKLS8vIGluc3RhbnRpYXRlIGNv bmNlcHQgZGVjbGFyYXRpb25zLgotaW5saW5lIGJvb2wKLWNoZWNrX2RpYWdu b3N0aWNfY29uc3RyYWludHMgKHRyZWUgcmVxcywgdHJlZSBhcmdzKQordm9p ZCBkaWFnbm9zZV9leHByZXNzaW9uIChsb2NhdGlvbl90LCB0cmVlLCB0cmVl KTsKK3ZvaWQgZGlhZ25vc2VfY29uc3RyYWludCAobG9jYXRpb25fdCwgdHJl ZSwgdHJlZSk7CisKKy8qIERpYWdub3NlIGEgY29uanVuY3Rpb24gb2YgY29u c3RyYWludHMuICovCit2b2lkCitkaWFnbm9zZV9sb2dpY2FsX29wZXJhdGlv biAobG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJlZSBhcmdzKQogewotICBy ZXR1cm4gY2hlY2tfc2F0aXNmaWVkIChub3JtYWxpemVfY29uc3RyYWludHMg KHJlcXMpLCBhcmdzKTsKKyAgZGlhZ25vc2VfZXhwcmVzc2lvbiAobG9jLCBU UkVFX09QRVJBTkQgKHQsIDApLCBhcmdzKTsKKyAgZGlhZ25vc2VfZXhwcmVz c2lvbiAobG9jLCBUUkVFX09QRVJBTkQgKHQsIDApLCBhcmdzKTsKIH0KIAot dm9pZCBkaWFnbm9zZV9ub2RlIChsb2NhdGlvbl90LCB0cmVlLCB0cmVlKTsK LQotLy8gRGlhZ25vc2UgYSBjb25zdHJhaW50IGZhaWx1cmUgZm9yIHR5cGUg dHJhaXQgZXhwcmVzc2lvbnMuCisvKiBEZXRlcm1pbmUgaWYgdGhlIHRyYWl0 IGV4cHJlc3Npb24gVCBpcyBzYXRpc2ZpZWQgYnkgQVJHUy4KKyAgIEVtaXQg YSBwcmVjaXNlIGRpYWdub3N0aWMgaWYgaXQgaXMgbm90LiAqLwogdm9pZAot ZGlhZ25vc2VfdHJhaXQgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQsIHRyZWUg YXJncykKK2RpYWdub3NlX3RyYWl0X2V4cHJlc3Npb24gKGxvY2F0aW9uX3Qg bG9jLCB0cmVlIHQsIHRyZWUgYXJncykKIHsKLSAgaWYgKGNoZWNrX2RpYWdu b3N0aWNfY29uc3RyYWludHMgKHQsIGFyZ3MpKQorICBpZiAoY2hlY2tfY29u c3RyYWludF9leHByZXNzaW9uICh0LCBhcmdzKSkKICAgICByZXR1cm47CiAK LSAgdHJlZSBzdWJzdCA9IHRzdWJzdF9jb25zdHJhaW50X2V4cHIgKHQsIGFy Z3MsIHRydWUpOwotCi0gIGlmIChzdWJzdCA9PSBlcnJvcl9tYXJrX25vZGUp Ci0gICAgewotICAgICAgaW5mb3JtIChpbnB1dF9sb2NhdGlvbiwgIiAgc3Vi c3RpdHV0aW9uIGZhaWx1cmUgaW4gJXFFIiwgdCk7Ci0gICAgICByZXR1cm47 Ci0gICAgfQorICAvKiBSZWJ1aWxkIHRoZSB0cmFpdCBleHByZXNzaW9uIHNv IHdlIGNhbiBkaWFnbm9zZSB0aGUKKyAgICAgc3BlY2lmaWMgZmFpbHVyZS4g Ki8KKyAgKytwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CisgIHRyZWUgZXhw ciA9IHRzdWJzdF9leHByICh0LCBhcmdzLCB0Zl9ub25lLCBOVUxMX1RSRUUs IGZhbHNlKTsKKyAgLS1wcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2w7CiAKLSAg dHJlZSB0MSA9IFRSQUlUX0VYUFJfVFlQRTEgKHN1YnN0KTsKLSAgdHJlZSB0 MiA9IFRSQUlUX0VYUFJfVFlQRTIgKHN1YnN0KTsKKyAgdHJlZSB0MSA9IFRS QUlUX0VYUFJfVFlQRTEgKGV4cHIpOworICB0cmVlIHQyID0gVFJBSVRfRVhQ Ul9UWVBFMiAoZXhwcik7CiAgIHN3aXRjaCAoVFJBSVRfRVhQUl9LSU5EICh0 KSkKICAgICB7Ci0gICAgICBjYXNlIENQVEtfSEFTX05PVEhST1dfQVNTSUdO OgotICAgICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlzIG5vdCBub3Rocm93 IGNvcHkgYXNzaWduYWJsZSIsIHQxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIENQVEtfSEFTX05PVEhST1dfQ09OU1RSVUNUT1I6Ci0gICAgICAg IGluZm9ybSAobG9jLCAiICAlcVQgaXMgbm90IG5vdGhyb3cgZGVmYXVsdCBj b25zdHJ1Y3RpYmxlIiwgdDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNh c2UgQ1BUS19IQVNfTk9USFJPV19DT1BZOgotICAgICAgICBpbmZvcm0gKGxv YywgIiAgJXFUIGlzIG5vdCBub3Rocm93IGNvcHkgY29uc3RydWN0aWJsZSIs IHQxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSEFTX1RS SVZJQUxfQVNTSUdOOgotICAgICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlz IG5vdCB0cml2aWFsbHkgY29weSBhc3NpZ25hYmxlIiwgdDEpOwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgQ1BUS19IQVNfVFJJVklBTF9DT05TVFJV Q1RPUjoKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgdHJp dmlhbGx5IGRlZmF1bHQgY29uc3RydWN0aWJsZSIsIHQxKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSEFTX1RSSVZJQUxfQ09QWToKLSAg ICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgdHJpdmlhbGx5IGNv cHkgY29uc3RydWN0aWJsZSIsIHQxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg ICBjYXNlIENQVEtfSEFTX1RSSVZJQUxfREVTVFJVQ1RPUjoKLSAgICAgICAg aW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgdHJpdmlhbGx5IGRlc3RydWN0 aWJsZSIsIHQxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENQVEtf SEFTX1ZJUlRVQUxfREVTVFJVQ1RPUjoKLSAgICAgICAgaW5mb3JtIChsb2Ms ICIgICVxVCBkb2VzIG5vdCBoYXZlIGEgdmlydHVhbCBkZXN0cnVjdG9yIiwg dDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1BUS19JU19BQlNU UkFDVDoKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgYW4g YWJzdHJhY3QgY2xhc3MiLCB0MSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBDUFRLX0lTX0JBU0VfT0Y6Ci0gICAgICAgIGluZm9ybSAobG9jLCAi ICAlcVQgaXMgbm90IGEgYmFzZSBvZiAlcVQiLCB0MSwgdDIpOwotICAgICAg ICBicmVhazsKLSAgICAgIGNhc2UgQ1BUS19JU19DTEFTUzoKLSAgICAgICAg aW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgYSBjbGFzcyIsIHQxKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSVNfQ09OVkVSVElCTEVf VE86Ci0gICAgICAgIGluZm9ybSAobG9jLCAiICAlcVQgaXMgbm90IGNvbnZl cnRpYmxlIHRvICVxVCIsIHQxLCB0Mik7Ci0gICAgICAgIGJyZWFrOwotICAg ICAgY2FzZSBDUFRLX0lTX0VNUFRZOgotICAgICAgICBpbmZvcm0gKGxvYywg IiAgJXFUIGlzIG5vdCBhbiBlbXB0eSBjbGFzcyIsIHQxKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSVNfRU5VTToKLSAgICAgICAgaW5m b3JtIChsb2MsICIgICVxVCBpcyBub3QgYW4gZW51bSIsIHQxKTsKLSAgICAg ICAgYnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSVNfRklOQUw6Ci0gICAgICAg IGluZm9ybSAobG9jLCAiICAlcVQgaXMgbm90IGEgZmluYWwgY2xhc3MiLCB0 MSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDUFRLX0lTX0xJVEVS QUxfVFlQRToKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3Qg YSBsaXRlcmFsIHR5cGUiLCB0MSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg Y2FzZSBDUFRLX0lTX1BPRDoKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVx VCBpcyBub3QgYSBQT0QgdHlwZSIsIHQxKTsKLSAgICAgICAgYnJlYWs7Ci0g ICAgICBjYXNlIENQVEtfSVNfUE9MWU1PUlBISUM6Ci0gICAgICAgIGluZm9y bSAobG9jLCAiICAlcVQgaXMgbm90IGEgcG9seW1vcnBoaWMgdHlwZSIsIHQx KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIENQVEtfSVNfU0FNRV9B UzoKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgdGhlIHNh bWUgYXMgJXFUIiwgdDEsIHQyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj YXNlIENQVEtfSVNfU1REX0xBWU9VVDoKLSAgICAgICAgaW5mb3JtIChsb2Ms ICIgICVxVCBpcyBub3QgYW4gc3RhbmRhcmQgbGF5b3V0IHR5cGUiLCB0MSk7 Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBDUFRLX0lTX1RSSVZJQUw6 Ci0gICAgICAgIGluZm9ybSAobG9jLCAiICAlcVQgaXMgbm90IGEgdHJpdmlh bCB0eXBlIiwgdDEpOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQ1BU S19JU19VTklPTjoKLSAgICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBu b3QgYSB1bmlvbiIsIHQxKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh dWx0OgotICAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgY2FzZSBD UFRLX0hBU19OT1RIUk9XX0FTU0lHTjoKKyAgICAgIGluZm9ybSAobG9jLCAi ICAlcVQgaXMgbm90IG5vdGhyb3cgY29weSBhc3NpZ25hYmxlIiwgdDEpOwor ICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0hBU19OT1RIUk9XX0NPTlNU UlVDVE9SOgorICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3Qgbm90 aHJvdyBkZWZhdWx0IGNvbnN0cnVjdGlibGUiLCB0MSk7CisgICAgICBicmVh azsKKyAgICBjYXNlIENQVEtfSEFTX05PVEhST1dfQ09QWToKKyAgICAgIGlu Zm9ybSAobG9jLCAiICAlcVQgaXMgbm90IG5vdGhyb3cgY29weSBjb25zdHJ1 Y3RpYmxlIiwgdDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0hB U19UUklWSUFMX0FTU0lHTjoKKyAgICAgIGluZm9ybSAobG9jLCAiICAlcVQg aXMgbm90IHRyaXZpYWxseSBjb3B5IGFzc2lnbmFibGUiLCB0MSk7CisgICAg ICBicmVhazsKKyAgICBjYXNlIENQVEtfSEFTX1RSSVZJQUxfQ09OU1RSVUNU T1I6CisgICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlzIG5vdCB0cml2aWFs bHkgZGVmYXVsdCBjb25zdHJ1Y3RpYmxlIiwgdDEpOworICAgICAgYnJlYWs7 CisgICAgY2FzZSBDUFRLX0hBU19UUklWSUFMX0NPUFk6CisgICAgICBpbmZv cm0gKGxvYywgIiAgJXFUIGlzIG5vdCB0cml2aWFsbHkgY29weSBjb25zdHJ1 Y3RpYmxlIiwgdDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0hB U19UUklWSUFMX0RFU1RSVUNUT1I6CisgICAgICBpbmZvcm0gKGxvYywgIiAg JXFUIGlzIG5vdCB0cml2aWFsbHkgZGVzdHJ1Y3RpYmxlIiwgdDEpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0hBU19WSVJUVUFMX0RFU1RSVUNU T1I6CisgICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGRvZXMgbm90IGhhdmUg YSB2aXJ0dWFsIGRlc3RydWN0b3IiLCB0MSk7CisgICAgICBicmVhazsKKyAg ICBjYXNlIENQVEtfSVNfQUJTVFJBQ1Q6CisgICAgICBpbmZvcm0gKGxvYywg IiAgJXFUIGlzIG5vdCBhbiBhYnN0cmFjdCBjbGFzcyIsIHQxKTsKKyAgICAg IGJyZWFrOworICAgIGNhc2UgQ1BUS19JU19CQVNFX09GOgorICAgICAgaW5m b3JtIChsb2MsICIgICVxVCBpcyBub3QgYSBiYXNlIG9mICVxVCIsIHQxLCB0 Mik7CisgICAgICBicmVhazsKKyAgICBjYXNlIENQVEtfSVNfQ0xBU1M6Cisg ICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlzIG5vdCBhIGNsYXNzIiwgdDEp OworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0lTX0NPTlZFUlRJQkxF X1RPOgorICAgICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgY29udmVy dGlibGUgdG8gJXFUIiwgdDEsIHQyKTsKKyAgICAgIGJyZWFrOworICAgIGNh c2UgQ1BUS19JU19FTVBUWToKKyAgICAgIGluZm9ybSAobG9jLCAiICAlcVQg aXMgbm90IGFuIGVtcHR5IGNsYXNzIiwgdDEpOworICAgICAgYnJlYWs7Cisg ICAgY2FzZSBDUFRLX0lTX0VOVU06CisgICAgICBpbmZvcm0gKGxvYywgIiAg JXFUIGlzIG5vdCBhbiBlbnVtIiwgdDEpOworICAgICAgYnJlYWs7CisgICAg Y2FzZSBDUFRLX0lTX0ZJTkFMOgorICAgICAgaW5mb3JtIChsb2MsICIgICVx VCBpcyBub3QgYSBmaW5hbCBjbGFzcyIsIHQxKTsKKyAgICAgIGJyZWFrOwor ICAgIGNhc2UgQ1BUS19JU19MSVRFUkFMX1RZUEU6CisgICAgICBpbmZvcm0g KGxvYywgIiAgJXFUIGlzIG5vdCBhIGxpdGVyYWwgdHlwZSIsIHQxKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgQ1BUS19JU19QT0Q6CisgICAgICBpbmZv cm0gKGxvYywgIiAgJXFUIGlzIG5vdCBhIFBPRCB0eXBlIiwgdDEpOworICAg ICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0lTX1BPTFlNT1JQSElDOgorICAg ICAgaW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgYSBwb2x5bW9ycGhpYyB0 eXBlIiwgdDEpOworICAgICAgYnJlYWs7CisgICAgY2FzZSBDUFRLX0lTX1NB TUVfQVM6CisgICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlzIG5vdCB0aGUg c2FtZSBhcyAlcVQiLCB0MSwgdDIpOworICAgICAgYnJlYWs7CisgICAgY2Fz ZSBDUFRLX0lTX1NURF9MQVlPVVQ6CisgICAgICBpbmZvcm0gKGxvYywgIiAg JXFUIGlzIG5vdCBhbiBzdGFuZGFyZCBsYXlvdXQgdHlwZSIsIHQxKTsKKyAg ICAgIGJyZWFrOworICAgIGNhc2UgQ1BUS19JU19UUklWSUFMOgorICAgICAg aW5mb3JtIChsb2MsICIgICVxVCBpcyBub3QgYSB0cml2aWFsIHR5cGUiLCB0 MSk7CisgICAgICBicmVhazsKKyAgICBjYXNlIENQVEtfSVNfVU5JT046Cisg ICAgICBpbmZvcm0gKGxvYywgIiAgJXFUIGlzIG5vdCBhIHVuaW9uIiwgdDEp OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJl YWNoYWJsZSAoKTsKICAgICB9CiB9CiAKLS8vIERpYWdub3NlIGEgZmFpbGVk IGNvbmNlcHQgY2hlY2sgaW4gY29uY2VwdCBpbmRpY2F0ZWQgYnkgVCwgd2hl cmUKLS8vIFQgaXMgdGhlIHJlc3VsdCBvZiByZXNvbHZlX2NvbnN0cmFpbnRf Y2hlY2suIFJlY3Vyc2l2ZWx5IGFuYWx5emUKLS8vIHRoZSBuZXN0ZWQgcmVx dWlyZW1ldHMgZm9yIGRldGFpbHMuCi12b2lkCi1kaWFnbm9zZV9jaGVjayAo bG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJlZSBhcmdzKQotewotICB0cmVl IGZuID0gVFJFRV9WQUxVRSAodCk7Ci0gIHRyZWUgdGFyZ3MgPSBUUkVFX1BV UlBPU0UgKHQpOwotICB0cmVlIGJvZHkgPSBERUNMX1NBVkVEX1RSRUUgKGZu KTsKLSAgaWYgKCFib2R5KQotICAgIHJldHVybjsKLQotICBpbmZvcm0gKGxv YywgIiAgZmFpbHVyZSBpbiBjb25zdHJhaW50ICVxI0QiLCBERUNMX1RJX1RF TVBMQVRFIChmbikpOworLyogRGV0ZXJtaW5lIGlmIHRoZSBjYWxsIGV4cHJl c3Npb24gVCwgd2hlbiBub3JtYWxpemVkIGFzIGEgY29uc3RyYWludCwKKyAg IGlzIHNhdGlzZmllZCBieSBBUkdTLiAKIAotICAvLyBQZXJmb3JtIGEgbWlu aS1yZWR1Y3Rpb24gb24gdGhlIGNvbnN0cmFpbnQuCi0gIGlmIChUUkVFX0NP REUgKGJvZHkpID09IEJJTkRfRVhQUikKLSAgICBib2R5ID0gQklORF9FWFBS X0JPRFkgKGJvZHkpOwotICBpZiAoVFJFRV9DT0RFIChib2R5KSA9PSBSRVRV Uk5fRVhQUikKLSAgICBib2R5ID0gVFJFRV9PUEVSQU5EIChib2R5LCAwKTsK LQotICAvLyBMb2NhbGx5IGluc3RhbnRpYXRlIHRoZSBib2R5IHdpdGggdGhl IGNhbGwncyB0ZW1wbGF0ZSBhcmdzLAotICAvLyBhbmQgcmVjdXJzaXZlbHkg ZGlhZ25vc2UuCi0gIGJvZHkgPSB0c3Vic3RfY29uc3RyYWludF9leHByIChi b2R5LCB0YXJncywgdHJ1ZSk7Ci0KLSAgZGlhZ25vc2Vfbm9kZSAobG9jLCBi b2R5LCBhcmdzKTsKLX0KLQotLy8gRGlhZ25vc2UgY29uc3RyYWludCBmYWls dXJlcyBmcm9tIHRoZSBjYWxsIGV4cHJlc3Npb24gVC4KKyAgIFRPRE86IElm IFQgaXMgcmVmZXJzIHRvIGEgY29uY2VwdCwgV2UgY291bGQgcmVjdXJzaXZl bHkgYW5hbHl6ZSAKKyAgIGl0cyBkZWZpbml0aW9uIHRvIGlkZW50aWZ5IHRo ZSBleGFjdCBmYWlsdXJlLCBidXQgdGhhdCBjb3VsZCAKKyAgIGVtaXQgYSAq bG90KiBvZiBlcnJvciBtZXNzYWdlcyAoZGVmZWF0aW5nIHRoZSBwdXJwb3Nl IG9mIAorICAgaW1wcm92ZWQgZGlhZ25vc3RpY3MpLiBDb25zaWRlciBhZGRp bmcgYSBmbGFnIHRvIGNvbnRyb2wgdGhlIAorICAgZGVwdGggb2YgZGlhZ25v c3RpY3MuICovCiB2b2lkCi1kaWFnbm9zZV9jYWxsIChsb2NhdGlvbl90IGxv YywgdHJlZSB0LCB0cmVlIGFyZ3MpCitkaWFnbm9zZV9jYWxsX2V4cHJlc3Np b24gKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQsIHRyZWUgYXJncykKIHsKLSAg aWYgKGNoZWNrX2RpYWdub3N0aWNfY29uc3RyYWludHMgKHQsIGFyZ3MpKQor ICBpZiAoY2hlY2tfY29uc3RyYWludF9leHByZXNzaW9uICh0LCBhcmdzKSkK ICAgICByZXR1cm47CiAKLSAgLy8gSWYgdGhpcyBpcyBhIGNvbmNlcHQsIHdl J3JlIGdvaW5nIHRvIHJlY3Vyc2UuCi0gIC8vIElmIGl0J3MganVzdCBhIGNh bGwsIHRoZW4gd2UgY2FuIGVtaXQgYSBzaW1wbGUgbWVzc2FnZS4KLSAgaWYg KHRyZWUgY2hlY2sgPSByZXNvbHZlX2NvbnN0cmFpbnRfY2hlY2sgKHQpKQot ICAgIGRpYWdub3NlX2NoZWNrIChsb2MsIGNoZWNrLCBhcmdzKTsKKyAgLyog UmVidWlsZCB0aGUgZXhwcmVzc2lvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlh Z25vc3RpY3MuICovCisgICsrcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOwor ICB0cmVlIGV4cHIgPSB0c3Vic3RfZXhwciAodCwgYXJncywgdGZfbm9uZSwg TlVMTF9UUkVFLCBmYWxzZSk7CisgIC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9k ZWNsOworCisgIC8qIElmIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGtub3duIHRv IGJlIGEgY29uY2VwdCBjaGVjaywgdGhlbgorICAgICBkaWFnbm9zZSBpdCBk aWZmZXJlbnRseSAoaS5lLiwgd2UgbWF5IHJlY3Vyc2UpLiAqLworICBpZiAo cmVzb2x2ZV9jb25zdHJhaW50X2NoZWNrICh0KSkKKyAgICBpbmZvcm0gKGxv YywgIiAgY29uY2VwdCAlcUUgd2FzIG5vdCBzYXRpc2ZpZWQiLCBleHByKTsK ICAgZWxzZQotICAgIGluZm9ybSAobG9jLCAiICAlcUUgZXZhbHVhdGVkIHRv IGZhbHNlIiwgdCk7CisgICAgaW5mb3JtIChsb2MsICIgICVxRSBldmFsdWF0 ZWQgdG8gZmFsc2UiLCBleHByKTsKIH0KIAotLy8gRGlhZ25vc2UgY29uc3Ry YWludCBmYWlsdXJlcyBpbiBhIHZhcmlhYmxlIHRlbXBsYXRlLWlkIFQuCisv KiBEZXRlcm1pbmUgaWYgdGhlIHRlbXBsYXRlLWlkIFQsIHdoZW4gbm9ybWFs aXplZCBhcyBhIGNvbnN0cmFpbnQKKyAgIGlzIHNhdGlzZmllZCBieSBBUkdT LiAqLwogdm9pZAotZGlhZ25vc2VfdmFyIChsb2NhdGlvbl90IGxvYywgdHJl ZSB0LCB0cmVlIGFyZ3MpCitkaWFnbm9zZV90ZW1wbGF0ZV9pZCAobG9jYXRp b25fdCBsb2MsIHRyZWUgdCwgdHJlZSBhcmdzKQogewotICAvLyBJZiB0aGUg dGVtcGxhdGUtaWQgaXNuJ3QgYSB2YXJpYWJsZSB0ZW1wbGF0ZSwgaXQgY2Fu J3QgYmUgYQotICAvLyB2YWxpZCBjb25zdHJhaW50LgorICAvKiBDaGVjayBm b3IgaW52YWxpZCB0ZW1wbGF0ZS1pZHMuICovCiAgIGlmICghdmFyaWFibGVf dGVtcGxhdGVfcCAoVFJFRV9PUEVSQU5EICh0LCAwKSkpCiAgICAgewogICAg ICAgaW5mb3JtIChsb2MsICIgIGludmFsaWQgY29uc3RyYWludCAlcUUiLCB0 KTsKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgaWYgKGNoZWNrX2RpYWdu b3N0aWNfY29uc3RyYWludHMgKHQsIGFyZ3MpKQotICAgIHJldHVybjsKLQot ICB0cmVlIHZhciA9IERFQ0xfVEVNUExBVEVfUkVTVUxUIChUUkVFX09QRVJB TkQgKHQsIDApKTsKLSAgdHJlZSBib2R5ID0gREVDTF9JTklUSUFMICh2YXIp OwotICB0cmVlIHRhcmdzID0gVFJFRV9PUEVSQU5EICh0LCAxKTsKLSAgdHJl ZSBzdWJzdCA9IHRzdWJzdF9jb25zdHJhaW50X2V4cHIgKGJvZHksIHRhcmdz LCB0cnVlKTsKLQotICBpbmZvcm0gKGxvYywgIiAgZmFpbHVyZSBpbiBjb25z dHJhaW50ICVxI0QiLCBERUNMX1RJX1RFTVBMQVRFICh2YXIpKTsKLQotICBk aWFnbm9zZV9ub2RlIChsb2MsIHN1YnN0LCBhcmdzKTsKLX0KLQotLy8gRGlh Z25vc2Ugc3BlY2lmaWMgY29uc3RyYWludCBmYWlsdXJlcy4KLXZvaWQKLWRp YWdub3NlX3JlcXVpcmVzIChsb2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVl IGFyZ3MpCi17Ci0gIGlmIChjaGVja19kaWFnbm9zdGljX2NvbnN0cmFpbnRz ICh0LCBhcmdzKSkKLSAgICByZXR1cm47Ci0KLSAgdHJlZSBzdWJzdCA9IHRz dWJzdF9jb25zdHJhaW50X2V4cHIgKHQsIGFyZ3MsIHRydWUpOwotCi0gIC8v IFByaW50IHRoZSBoZWFkZXIgZm9yIHRoZSByZXF1aXJlcyBleHByZXNzaW9u LgotICB0cmVlIHBhcm1zID0gVFJFRV9PUEVSQU5EIChzdWJzdCwgMCk7Ci0g IGlmICghVk9JRF9UWVBFX1AgKFRSRUVfVkFMVUUgKHBhcm1zKSkpCi0gICAg aW5mb3JtIChsb2MsICIgIHJlcXVpcmluZyBzeW50YXggd2l0aCB2YWx1ZXMg JVoiLCBUUkVFX09QRVJBTkQgKHN1YnN0LCAwKSk7Ci0KLSAgLy8gQ3JlYXRl IGEgbmV3IGxvY2FsIHNwZWNpYWxpemF0aW9uIGJpbmRpbmcgZm9yIHRoZSBh cmd1bWVudHMuCi0gIC8vIFRoaXMgbGV0cyB1cyBpbnN0YW50aWF0ZSBzdWIt ZXhwcmVzc2lvbnMgc2VwYXJhdGVseSBmcm9tIHRoZQotICAvLyByZXF1aXJl cyBjbGF1c2UuCi0gIGxvY2FsX3NwZWNpYWxpemF0aW9uX3N0YWNrIGxvY2Fs czsKLSAgZGVjbGFyZV9sb2NhbF9wYXJtcyAoVFJFRV9PUEVSQU5EICh0LCAw KSwgVFJFRV9PUEVSQU5EIChzdWJzdCwgMCkpOwotCi0gIC8vIEl0ZXJhdGUg b3ZlciB0aGUgc3ViLXJlcXVpcmVtZW50cyBhbmQgdHJ5IGluc3RhbnRpYXRp bmcgZWFjaC4KLSAgZm9yICh0cmVlIGwgPSBUUkVFX09QRVJBTkQgKHQsIDEp OyBsOyBsID0gVFJFRV9DSEFJTiAobCkpCi0gICAgZGlhZ25vc2Vfbm9kZSAo bG9jLCBUUkVFX1ZBTFVFIChsKSwgYXJncyk7Ci19Ci0KLXN0YXRpYyB2b2lk Ci1kaWFnbm9zZV92YWxpZGV4cHIgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQs IHRyZWUgYXJncykKLXsKLSAgaWYgKGNoZWNrX2RpYWdub3N0aWNfY29uc3Ry YWludHMgKHQsIGFyZ3MpKQorICBpZiAoY2hlY2tfY29uc3RyYWludF9leHBy ZXNzaW9uICh0LCBhcmdzKSkKICAgICByZXR1cm47Ci0gIGluZm9ybSAobG9j LCAiICAgICVxRSBpcyBub3QgYSB2YWxpZCBleHByZXNzaW9uIiwgVFJFRV9P UEVSQU5EICh0LCAwKSk7Ci19CiAKLXN0YXRpYyB2b2lkCi1kaWFnbm9zZV92 YWxpZHR5cGUgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQsIHRyZWUgYXJncykK LXsKLSAgaWYgKGNoZWNrX2RpYWdub3N0aWNfY29uc3RyYWludHMgKHQsIGFy Z3MpKQotICAgIHJldHVybjsKKyAgLyogUmVidWlsZCB0aGUgZXhwcmVzc2lv biBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlhZ25vc3RpY3MuICovCisgICsrcHJv Y2Vzc2luZ190ZW1wbGF0ZV9kZWNsOworICB0cmVlIGV4cHIgPSB0c3Vic3Rf ZXhwciAodCwgYXJncywgdGZfbm9uZSwgTlVMTF9UUkVFLCBmYWxzZSk7Cisg IC0tcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsOwogCi0gIC8vIFN1YnN0aXR1 dGUgaW50byB0aGUgcXVhbGlmaWVkIG5hbWUuCi0gIHRyZWUgbmFtZSA9IFRS RUVfT1BFUkFORCAodCwgMCk7Ci0gIGlmICh0cmVlIGN4dCA9IFRZUEVfQ09O VEVYVCAobmFtZSkpCi0gICAgewotICAgICAgdHJlZSBpZCA9IFRZUEVfSURF TlRJRklFUiAobmFtZSk7Ci0gICAgICBjeHQgPSB0c3Vic3QgKGN4dCwgYXJn cywgdGZfbm9uZSwgTlVMTF9UUkVFKTsKLSAgICAgIG5hbWUgPSBidWlsZF9x dWFsaWZpZWRfbmFtZSAoTlVMTF9UUkVFLCBjeHQsIGlkLCBmYWxzZSk7Ci0g ICAgICBpbmZvcm0gKGxvYywgIiAgICAlcUUgZG9lcyBub3QgbmFtZSBhIHZh bGlkIHR5cGUiLCBuYW1lKTsKLSAgICB9CisgIHRyZWUgdmFyID0gREVDTF9U RU1QTEFURV9SRVNVTFQgKFRSRUVfT1BFUkFORCAodCwgMCkpOworICBpZiAo REVDTF9ERUNMQVJFRF9DT05DRVBUX1AgKHZhcikpCisgICAgaW5mb3JtIChs b2MsICIgIGNvbmNlcHQgJXFFIHdhcyBub3Qgc2F0aXNmaWVkIiwgZXhwcik7 CiAgIGVsc2UKLSAgICB7Ci0gICAgICBpbmZvcm0gKGxvYywgIiAgICAlcVQg ZG9lcyBub3QgbmFtZSBhIHZhbGlkIHR5cGUiLCBuYW1lKTsKLSAgICB9Cisg ICAgaW5mb3JtIChsb2MsICIgICVxRSBldmFsdWF0ZWQgdG8gZmFsc2UiLCBl eHByKTsKIH0KIAotc3RhdGljIHZvaWQKLWRpYWdub3NlX2NvbnN0ZXhwciAo bG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJlZSBhcmdzKQotewotICBpZiAo Y2hlY2tfZGlhZ25vc3RpY19jb25zdHJhaW50cyAodCwgYXJncykpCi0gICAg cmV0dXJuOwotICBpbmZvcm0gKGxvYywgIiAgICAlcUUgaXMgbm90IGEgY29u c3RhbnQgZXhwcmVzc2lvbiIsIFRSRUVfT1BFUkFORCAodCwgMCkpOwotfQor LyogRGV0ZXJtaW5lIGlmIHRoZSByZXF1aXJlcy1leHByZXNzaW9uLCB3aGVu IG5vcm1hbGl6ZWQgYXMgYQorICAgY29uc3RyYWludCBpcyBzYXRpc2ZpZWQg YnkgQVJHUy4gCiAKLXN0YXRpYyB2b2lkCi1kaWFnbm9zZV9ub2V4Y2VwdCAo bG9jYXRpb25fdCBsb2MsIHRyZWUgdCwgdHJlZSBhcmdzKQorICAgVE9ETzog QnVpbGQgc2V0cyBvZiBleHByZXNzaW9ucywgdHlwZXMsIGFuZCBjb25zdHJh aW50cworICAgYmFzZWQgb24gdGhlIHJlcXVpcmVtZW50cyBpbiBUIGFuZCBl bWl0IHNwZWNpZmljIGRpYWdub3N0aWNzCisgICBmb3IgdGhvc2UuICovCit2 b2lkCitkaWFnbm9zZV9yZXF1aXJlc19leHByZXNzaW9uIChsb2NhdGlvbl90 IGxvYywgdHJlZSB0LCB0cmVlIGFyZ3MpCiB7Ci0gIGlmIChjaGVja19kaWFn bm9zdGljX2NvbnN0cmFpbnRzICh0LCBhcmdzKSkKKyAgaWYgKGNoZWNrX2Nv bnN0cmFpbnRfZXhwcmVzc2lvbiAodCwgYXJncykpCiAgICAgcmV0dXJuOwot ICBpbmZvcm0gKGxvYywgIiAgICAlcUUgcHJvcGFnYXRlcyBleGNlcHRpb25z IiwgVFJFRV9PUEVSQU5EICh0LCAwKSk7CisgIGluZm9ybSAobG9jLCAicmVx dWlyZW1lbnRzIG5vdCBzYXRpc2ZpZWQiKTsKIH0KIAotLy8gRGlhZ25vc2Ug YSBjb25zdHJhaW50IGZhaWx1cmUgaW4gdGhlIGV4cHJlc3Npb24gVC4KKy8q IERpYWdub3NlIGFuIGV4cHJlc3Npb24gdGhhdCB3b3VsZCBiZSBjaGFyYWN0 ZXJpemVkIGFzCisgICBhIHByZWRpY2F0ZSBjb25zdHJhaW50LiAqLwogdm9p ZAotZGlhZ25vc2Vfb3RoZXIgKGxvY2F0aW9uX3QgbG9jLCB0cmVlIHQsIHRy ZWUgYXJncykKK2RpYWdub3NlX290aGVyX2V4cHJlc3Npb24gKGxvY2F0aW9u X3QgbG9jLCB0cmVlIHQsIHRyZWUgYXJncykKIHsKLSAgaWYgKGNoZWNrX2Rp YWdub3N0aWNfY29uc3RyYWludHMgKHQsIGFyZ3MpKQorICBpZiAoY2hlY2tf Y29uc3RyYWludF9leHByZXNzaW9uICh0LCBhcmdzKSkKICAgICByZXR1cm47 CiAgIGluZm9ybSAobG9jLCAiICAlcUUgZXZhbHVhdGVkIHRvIGZhbHNlIiwg dCk7CiB9CiAKLS8vIERpYWdub3NlIGEgY29uc3RyYWludCBmYWlsdXJlIGlu IHRoZSBzdWJ0cmVlIFQuCiB2b2lkCi1kaWFnbm9zZV9ub2RlIChsb2NhdGlv bl90IGxvYywgdHJlZSB0LCB0cmVlIGFyZ3MpCitkaWFnbm9zZV9leHByZXNz aW9uIChsb2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVlIGFyZ3MpCiB7CiAg IHN3aXRjaCAoVFJFRV9DT0RFICh0KSkKICAgICB7CiAgICAgY2FzZSBUUlVU SF9BTkRJRl9FWFBSOgotICAgICAgZGlhZ25vc2Vfbm9kZSAobG9jLCBUUkVF X09QRVJBTkQgKHQsIDApLCBhcmdzKTsKLSAgICAgIGRpYWdub3NlX25vZGUg KGxvYywgVFJFRV9PUEVSQU5EICh0LCAxKSwgYXJncyk7CisgICAgICBkaWFn bm9zZV9sb2dpY2FsX29wZXJhdGlvbiAobG9jLCB0LCBhcmdzKTsKICAgICAg IGJyZWFrOwogCiAgICAgY2FzZSBUUlVUSF9PUklGX0VYUFI6Ci0gICAgICAv LyBUT0RPOiBEZXNpZ24gYmV0dGVyIGRpYWdub3N0aWNzIGZvciBkaWp1bmN0 aW9ucy4KLSAgICAgIGRpYWdub3NlX290aGVyIChsb2MsIHQsIGFyZ3MpOwot ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRSQUlUX0VYUFI6Ci0gICAgICBk aWFnbm9zZV90cmFpdCAobG9jLCB0LCBhcmdzKTsKKyAgICAgIGRpYWdub3Nl X2xvZ2ljYWxfb3BlcmF0aW9uIChsb2MsIHQsIGFyZ3MpOwogICAgICAgYnJl YWs7CiAKICAgICBjYXNlIENBTExfRVhQUjoKLSAgICAgIGRpYWdub3NlX2Nh bGwgKGxvYywgdCwgYXJncyk7CisgICAgICBkaWFnbm9zZV9jYWxsX2V4cHJl c3Npb24gKGxvYywgdCwgYXJncyk7CiAgICAgICBicmVhazsKIAotICAgIGNh c2UgUkVRVUlSRVNfRVhQUjoKLSAgICAgIGRpYWdub3NlX3JlcXVpcmVzIChs b2MsIHQsIGFyZ3MpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFZBTElE RVhQUl9FWFBSOgotICAgICAgZGlhZ25vc2VfdmFsaWRleHByIChsb2MsIHQs IGFyZ3MpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFZBTElEVFlQRV9F WFBSOgotICAgICAgZGlhZ25vc2VfdmFsaWR0eXBlIChsb2MsIHQsIGFyZ3Mp OwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENPTlNURVhQUl9FWFBSOgot ICAgICAgZGlhZ25vc2VfY29uc3RleHByIChsb2MsIHQsIGFyZ3MpOworICAg IGNhc2UgVEVNUExBVEVfSURfRVhQUjoKKyAgICAgIGRpYWdub3NlX3RlbXBs YXRlX2lkIChsb2MsIHQsIGFyZ3MpOwogICAgICAgYnJlYWs7CiAKLSAgICBj YXNlIE5PRVhDRVBUX0VYUFI6Ci0gICAgICBkaWFnbm9zZV9ub2V4Y2VwdCAo bG9jLCB0LCBhcmdzKTsKKyAgICBjYXNlIFJFUVVJUkVTX0VYUFI6CisgICAg ICBkaWFnbm9zZV9yZXF1aXJlc19leHByZXNzaW9uIChsb2MsIHQsIGFyZ3Mp OwogICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFRFTVBMQVRFX0lEX0VYUFI6 Ci0gICAgICBkaWFnbm9zZV92YXIgKGxvYywgdCwgYXJncyk7CisgICAgY2Fz ZSBUUkFJVF9FWFBSOgorICAgICAgZGlhZ25vc2VfdHJhaXRfZXhwcmVzc2lv biAobG9jLCB0LCBhcmdzKTsKICAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVs dDoKLSAgICAgIGRpYWdub3NlX290aGVyIChsb2MsIHQsIGFyZ3MpOworICAg ICAgZGlhZ25vc2Vfb3RoZXJfZXhwcmVzc2lvbiAobG9jLCB0LCBhcmdzKTsK ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotLy8gRGlhZ25vc2UgYSBjb25z dHJhaW50IGZhaWx1cmUgaW4gdGhlIHJlcXVpcmVtZW50cyBleHByZXNzaW9u IFJFUVMuCiBpbmxpbmUgdm9pZAotZGlhZ25vc2VfcmVxdWlyZW1lbnRzIChs b2NhdGlvbl90IGxvYywgdHJlZSByZXFzLCB0cmVlIGFyZ3MpCitkaWFnbm9z ZV9wcmVkaWNhdGVfY29uc3RyYWludCAobG9jYXRpb25fdCBsb2MsIHRyZWUg dCwgdHJlZSBhcmdzKQogewotICBkaWFnbm9zZV9ub2RlIChsb2MsIHJlcXMs IGFyZ3MpOworICBkaWFnbm9zZV9leHByZXNzaW9uIChsb2MsIFBSRURfQ09O U1RSX0VYUFIgKHQpLCBhcmdzKTsKIH0KIAotLy8gQ3JlYXRlIGEgdHJlZSBu b2RlIHJlcHJlc2VudGluZyB0aGUgc3Vic3RpdHV0aW9uIG9mIEFSR1MgaW50 bwotLy8gdGhlIHBhcmFtZXRlcnMgb2YgVE1QTC4gVGhlIHJlc3VsdGluZyBz dHJ1Y3R1cmUgaXMgcGFzc2VkIGFzIGFuCi0vLyBmb3IgZGlhZ25vc2luZyBz dWJzdGl0dXRpb25zLgotaW5saW5lIHRyZWUKLW1ha2Vfc3Vic3QgKHRyZWUg dG1wbCwgdHJlZSBhcmdzKQoraW5saW5lIHZvaWQKK2RpYWdub3NlX2Nvbmp1 bmN0aW9uIChsb2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVlIGFyZ3MpCiB7 Ci0gIHRyZWUgc3Vic3QgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgYXJncywg TlVMTF9UUkVFKTsKLSAgVFJFRV9UWVBFIChzdWJzdCkgPSBERUNMX1RFTVBM QVRFX1BBUk1TICh0bXBsKTsKLSAgcmV0dXJuIHN1YnN0OworICBkaWFnbm9z ZV9jb25zdHJhaW50IChsb2MsIFRSRUVfT1BFUkFORCAodCwgMCksIGFyZ3Mp OworICBkaWFnbm9zZV9jb25zdHJhaW50IChsb2MsIFRSRUVfT1BFUkFORCAo dCwgMSksIGFyZ3MpOworfQorCisvKiBEaWFnbm9zZSB0aGUgY29uc3RyYWlu dCBUIGZvciB0aGUgZ2l2ZW4gQVJHUy4gVGhpcyBpcyBvbmx5CisgICBldmVy IGludm9rZWQgb24gdGhlIGFzc29jaWF0ZWQgY29uc3RyYWludHMsIHNvIHdl IGNhbgorICAgb25seSBoYXZlIGNvbmp1bmN0aW9ucyBvZiBwcmVkaWNhdGUg Y29uc3RyYWludHMuICovCit2b2lkCitkaWFnbm9zZV9jb25zdHJhaW50IChs b2NhdGlvbl90IGxvYywgdHJlZSB0LCB0cmVlIGFyZ3MpCit7CisgIHN3aXRj aCAoVFJFRV9DT0RFICh0KSkKKyAgICB7CisgICAgY2FzZSBDT05KX0NPTlNU UjoKKyAgICAgIGRpYWdub3NlX2Nvbmp1bmN0aW9uIChsb2MsIHQsIGFyZ3Mp OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBSRURfQ09OU1RSOgorICAg ICAgZGlhZ25vc2VfcHJlZGljYXRlX2NvbnN0cmFpbnQgKGxvYywgdCwgYXJn cyk7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBnY2Nf dW5yZWFjaGFibGUgKCk7CisgICAgICBicmVhazsKKyAgICB9CiB9CiAKIH0g Ly8gbmFtZXNwYWNlCiAKLS8vIEVtaXQgZGlhZ25vc3RpY3MgZGV0YWlsaW5n IHRoZSBmYWlsdXJlIEFSR1MgdG8gc2F0aXNmeSB0aGUgY29uc3RyYWludHMK LS8vIG9mIHRoZSB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiwgVE1QTC4KKy8qIEVt aXQgZGlhZ25vc3RpY3MgZGV0YWlsaW5nIHRoZSBmYWlsdXJlIEFSR1MgdG8g c2F0aXNmeSB0aGUgY29uc3RyYWludHMKKyAgIG9mIHRoZSB0ZW1wbGF0ZSBk ZWNsYXJhdGlvbiwgREVDTC4gICovCiB2b2lkCiBkaWFnbm9zZV9jb25zdHJh aW50cyAobG9jYXRpb25fdCBsb2MsIHRyZWUgZGVjbCwgdHJlZSBhcmdzKQog ewotICB0cmVlIGNpID0gZ2V0X2NvbnN0cmFpbnRzIChkZWNsKTsKKyAgaW5m b3JtIChsb2MsICIgIGNvbnN0cmFpbnRzIG5vdCBzYXRpc2ZpZWQiKTsKIAot ICAvLyBJZiB0aGUgY29uc3RyYWludHMgY291bGQgbm90IGJlIHJlZHVjZWQs IHRoZW4gd2UgY2FuJ3QgZGlhZ25vc2UgdGhlbS4KLSAgaWYgKCF2YWxpZF9y ZXF1aXJlbWVudHNfcCAoY2kpKQorICAvKiBDb25zdHJhaW50cyBhcmUgYXR0 YWNoZWQgdG8gdGhlIHRlbXBsYXRlLiAgKi8KKyAgaWYgKHRyZWUgdGkgPSBE RUNMX1RFTVBMQVRFX0lORk8gKGRlY2wpKSB7CisgICAgZGVjbCA9IFRJX1RF TVBMQVRFICh0aSk7CisgICAgYXJncyA9IFRJX0FSR1MgKHRpKTsKKyAgfQor ICAKKyAgLyogQ2hlY2sgdGhhdCB0aGUgY29uc3RyYWludHMgYXJlIGFjdHVh bGx5IHZhbGlkLiAgKi8KKyAgdHJlZSBjaSA9IGdldF9jb25zdHJhaW50cyAo ZGVjbCk7CisgIGlmICghdmFsaWRfY29uc3RyYWludHNfcCAoY2kpKQogICAg IHsKLSAgICAgIGluZm9ybSAobG9jLCAiICBpbnZhbGlkIGNvbnN0cmFpbnRz Iik7CisgICAgICBpbmZvcm0gKGxvYywgIiAgICBpbnZhbGlkIGNvbnN0cmFp bnRzIik7CiAgICAgICByZXR1cm47CiAgICAgfQogCi0gIC8vIEZJWE1FOiBS ZS10aGluayBob3cgd2UgcmVjdXJzZSB0aHJvdWdoIHRoZSBleHByZXNzaW9u IHRvIGVtaXQKLSAgLy8gZGlhZ25vc3RpY3MuCi0KLSAgLy8gSWYgdGhpcyBp cyBhIHNwZWNpYWxpemF0aW9uIG9mIGEgdGVtcGxhdGUsIHdlIHdhbnQgdG8g ZGlhZ25vc2UKLSAgLy8gdGhlIGRlcGVuZGVudCBjb25zdHJhaW50cy4gQWxz byB1cGRhdGUgdGhlIHRlbXBsYXRlIGFyZ3VtZW50cy4KLSAgLy8gaWYgKERF Q0xfVVNFX1RFTVBMQVRFIChkZWNsKSkKLSAgLy8gICB7Ci0gIC8vICAgICBh cmdzID0gREVDTF9USV9BUkdTIChkZWNsKTsKLSAgLy8gICAgIGRlY2wgPSBE RUNMX1RJX1RFTVBMQVRFIChkZWNsKTsKLSAgLy8gICB9Ci0KLSAgLy8gLy8g T3RoZXJ3aXNlLCBkaWFnbm9zZSB0aGUgYWN0dWFsIGZhaWxlZCBjb25zdHJh aW50cy4KLSAgLy8gaWYgKFRSRUVfQ09ERSAoZGVjbCkgPT0gVEVNUExBVEVf REVDTCkKLSAgLy8gICBpbmZvcm0gKGxvYywgIiAgY29uc3RyYWludHMgbm90 IHNhdGlzZmllZCAlUyIsIG1ha2Vfc3Vic3QgKGRlY2wsIGFyZ3MpKTsKLSAg Ly8gZWxzZQotICAvLyAgIGluZm9ybSAobG9jLCAiICBjb25zdHJhaW50cyBu b3Qgc2F0aXNmaWVkIik7Ci0KLSAgaW5mb3JtIChsb2MsICIgIGNvbnN0cmFp bnRzIG5vdCBzYXRpc2ZpZWQiKTsKLQotICAvLyBEaWFnbm9zZSB0aGUgY29u c3RyYWludHMgYnkgcmVjdXJzaXZlbHkgZGVjb21wb3NpbmcgYW5kCi0gIC8v IGV2YWx1YXRpbmcgdGhlIHRlbXBsYXRlIHJlcXVpcmVtZW50cy4KLSAgdHJl ZSByZXFzID0gQ0lfQVNTT0NJQVRFRF9DT05TVFJBSU5UUyAoZ2V0X2NvbnN0 cmFpbnRzIChkZWNsKSk7Ci0gIGRpYWdub3NlX3JlcXVpcmVtZW50cyAobG9j LCByZXFzLCBhcmdzKTsKKyAgLyogUmVjdXJzaXZlbHkgZGlhZ25vc2UgdGhl IGFzc29jaWF0ZWQgY29uc3RyYWludHMuICAqLworICB0cmVlIGFzc29jID0g Q0lfQVNTT0NJQVRFRF9DT05TVFJBSU5UUyAoY2kpOworICBkaWFnbm9zZV9j b25zdHJhaW50IChsb2MsIGFzc29jLCBhcmdzKTsKIH0KZGlmZiAtLWdpdCBh L2djYy9jcC9jcC1vYmpjcC1jb21tb24uYyBiL2djYy9jcC9jcC1vYmpjcC1j b21tb24uYwppbmRleCAyMWY3YTE5Li43ZTViNjRlIDEwMDY0NAotLS0gYS9n Y2MvY3AvY3Atb2JqY3AtY29tbW9uLmMKKysrIGIvZ2NjL2NwL2NwLW9iamNw LWNvbW1vbi5jCkBAIC0zMTgsMTMgKzMxOCw2IEBAIGNwX2NvbW1vbl9pbml0 X3RzICh2b2lkKQogICBNQVJLX1RTX1RZUEVEIChDVE9SX0lOSVRJQUxJWkVS KTsKICAgTUFSS19UU19UWVBFRCAoQVJSQVlfTk9UQVRJT05fUkVGKTsKICAg TUFSS19UU19UWVBFRCAoUkVRVUlSRVNfRVhQUik7Ci0gIE1BUktfVFNfVFlQ RUQgKEVYUFJfUkVRKTsKLSAgTUFSS19UU19UWVBFRCAoVFlQRV9SRVEpOwot ICBNQVJLX1RTX1RZUEVEIChORVNURURfUkVRKTsKLSAgTUFSS19UU19UWVBF RCAoVkFMSURFWFBSX0VYUFIpOwotICBNQVJLX1RTX1RZUEVEIChWQUxJRFRZ UEVfRVhQUik7Ci0gIE1BUktfVFNfVFlQRUQgKENPTlNURVhQUl9FWFBSKTsK LQogfQogCiAjaW5jbHVkZSAiZ3QtY3AtY3Atb2JqY3AtY29tbW9uLmgiCmRp ZmYgLS1naXQgYS9nY2MvY3AvY3AtdHJlZS5kZWYgYi9nY2MvY3AvY3AtdHJl ZS5kZWYKaW5kZXggMTI3OTljZS4uNGU1YjY0MCAxMDA2NDQKLS0tIGEvZ2Nj L2NwL2NwLXRyZWUuZGVmCisrKyBiL2djYy9jcC9jcC10cmVlLmRlZgpAQCAt NDc1LDIwICs0NzUsMzUgQEAgREVGVFJFRUNPREUgKEJBU0VTLCAiYmFzZXMi LCB0Y2NfdHlwZSwgMCkKICAgIGluc3RhbnRpYXRpb24gdGltZS4gICovCiBE RUZUUkVFQ09ERSAoVEVNUExBVEVfSU5GTywgInRlbXBsYXRlX2luZm8iLCB0 Y2NfZXhjZXB0aW9uYWwsIDApCiAKLS8qIENvbmNlcHRzLiAqLworLyogRXh0 ZW5zaW9ucyBmb3IgQ29uY2VwdHMuICovCiAKIC8qIFVzZWQgdG8gcmVwcmVz ZW50IGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBjb25zdHJhaW5lZCBk ZWNsYXJhdGlvbnMuICovCiBERUZUUkVFQ09ERSAoQ09OU1RSQUlOVF9JTkZP LCAiY29uc3RyYWludF9pbmZvIiwgdGNjX2V4Y2VwdGlvbmFsLCAwKQogCi0v KiBBIHJlcXVpcmVzLWV4cHIgaXMgYSBiaW5hcnkgZXhwcmVzc2lvbi4gVGhl IGZpcnN0IG9wZXJhbmQgaXMgaXRzCi0gICBwYXJhbWV0ZXIgbGlzdC4gVGhl IHNlY29uZCBpcyBhIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLiAqLworLyogQWx0 ZXJuYXRpdmUgUExBQ0VIT0xERVJfRVhQUiB3aGljaCBpcyB1c2VkIGZvciBj b25jZXB0IGludHJvZHVjdGlvbnMuICBUaGlzCisgICBpcyBhIHRlbXBvcmFy eSB0eXBlIHdoaWNoIGlzIHVzZWQgdG8gcHJvZHVjZSBub3JtYWwgdGVtcGxh dGUgcGFyYW1ldGVycy4gICovCitERUZUUkVFQ09ERSAoSU5UUk9EVUNFRF9Q QVJNX0RFQ0wsICJpbnRyb2R1Y2VkX3Bhcm1fZGVjbCIsIHRjY19kZWNsYXJh dGlvbiwgMCkKKworLyogQSByZXF1aXJlcy1leHByIGlzIGEgYmluYXJ5IGV4 cHJlc3Npb24uIFRoZSBmaXJzdCBvcGVyYW5kIGlzIAorICAgaXRzIHBhcmFt ZXRlciBsaXN0IChwb3NzaWJseSBOVUxMKS4gVGhlIHNlY29uZCBpcyBhIGxp c3Qgb2YgCisgICByZXF1aXJlbWVudHMsIHdoaWNoIGFyZSBkZW5vdGVkIGJ5 IHRoZSBfUkVRKiB0cmVlIGNvZGVzCisgICBiZWxvdy4gKi8KIERFRlRSRUVD T0RFIChSRVFVSVJFU19FWFBSLCAgICJyZXF1aXJlc19leHByIiwgdGNjX2V4 cHJlc3Npb24sIDIpCiAKLS8qIFRoZSBSRVEgZXhwcmVzc2lvbnMgYXJlIHVu YXJ5IGV4cHJlc3Npb25zIHRoYXQgc3BlY2lmeSBpbmRpdmlkdWFsCi0gICBz dGF0ZW1lbnRzIGluIGEgcmVxdWlyZXMgY2xhdXNlLiAqLwotREVGVFJFRUNP REUgKEVYUFJfUkVRLCAiZXhwci1yZXEiLCB0Y2NfZXhwcmVzc2lvbiwgMSkK LURFRlRSRUVDT0RFIChUWVBFX1JFUSwgInR5cGUtcmVxIiwgdGNjX2V4cHJl c3Npb24sIDEpCi1ERUZUUkVFQ09ERSAoTkVTVEVEX1JFUSwgIm5lc3RlZC1y ZXEiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKy8qIEEgcmVxdWlyZW1lbnQgZm9y IGFuIGV4cHJlc3Npb24uICovCitERUZUUkVFQ09ERSAoU0lNUExFX1JFUSwg InNpbXBsZV9yZXEiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogQSByZXF1 aXJlbWVudCBmb3IgYSB0eXBlLiAqLworREVGVFJFRUNPREUgKFRZUEVfUkVR LCAidHlwZV9yZXEiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKKworLyogQSByZXF1 aXJlbWVudCBmb3IgYW4gZXhwcmVzc2lvbiBhbmQgaXRzIHByb3BlcnRpZXMu IFRoZQorICAgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgZXhwcmVzc2lvbiwgYW5k IHRoZSAybmQgaXMgaXRzIHR5cGUuCisgICBUaGUgYWNjZXNzb3IgQ09NUE9V TkRfUkVRX05PRVhDRVBUIGRldGVybWluZXMgd2hldGhlcgorICAgdGhlIG5v ZXhjZXB0IGtleXdvcmQgd2FzIHByZXNlbnQuICovCitERUZUUkVFQ09ERSAo Q09NUE9VTkRfUkVRLCAiY29tcG91bmRfcmVxIiwgdGNjX2V4cHJlc3Npb24s IDIpCisKKy8qIEEgcmVxdWlyZXMgY2xhdXNlIHdpdGhpbiBhIHJlcXVpcmVz IGV4cHJlc3Npb24uICovCitERUZUUkVFQ09ERSAoTkVTVEVEX1JFUSwgIm5l c3RlZF9yZXEiLCB0Y2NfZXhwcmVzc2lvbiwgMSkKIAogLyogQSB1bmFyeSBl eHByZXNzaW9uIHJlcHJlc2VudGluZyBhIHJlcXVpcmVtZW50IGZvciBhIHZh bGlkIGV4cHJlc3Npb24uICovCiBERUZUUkVFQ09ERSAoVkFMSURFWFBSX0VY UFIsICJ2YWxpZGV4cHJfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQpAQCAt NTAwLDkgKzUxNSw2MSBAQCBERUZUUkVFQ09ERSAoVkFMSURUWVBFX0VYUFIs ICJ2YWxpZHR5cGVfZXhwciIsIHRjY19leHByZXNzaW9uLCAxKQogICAgY2Fu IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUuICovCiBERUZUUkVFQ09E RSAoQ09OU1RFWFBSX0VYUFIsICJjb250ZXhwcl9leHByIiwgdGNjX2V4cHJl c3Npb24sIDEpCiAKLS8qIEFsdGVybmF0aXZlIFBMQUNFSE9MREVSX0VYUFIg d2hpY2ggaXMgdXNlZCBmb3IgY29uY2VwdCBpbnRyb2R1Y3Rpb25zLiAgVGhp cwotICAgaXMgYSB0ZW1wb3JhcnkgdHlwZSB3aGljaCBpcyB1c2VkIHRvIHBy b2R1Y2Ugbm9ybWFsIHRlbXBsYXRlIHBhcmFtZXRlcnMuICAqLwotREVGVFJF RUNPREUgKElOVFJPRFVDRURfUEFSTV9ERUNMLCAiaW50cm9kdWNlZF9wYXJt X2RlY2wiLCB0Y2NfZGVjbGFyYXRpb24sIDApCisKKy8qIENvbnN0cmFpbnRz IGFyZSBtb2RlbGVkIGFzIGtpbmRzIG9mIGV4cHJlc3Npb25zLgorICAgVGhl IG9wZXJhbmRzIG9mIGEgY29uc3RyYWludCBjYW4gYmUgZWl0aGVyIHR5cGVz IG9yIGV4cHJlc3Npb25zLgorICAgVW5saWtlIGV4cHJlc3Npb25zLCBjb25z dHJhaW50cyBkbyBub3QgaGF2ZSBhIHR5cGUuICovCisKKy8qIEEgcHJlZGlj YXRlIGNvbnN0cmFpbnQgZXZhbHVhdGVzIGFuIGV4cHJlc3Npb24gRS4gCisK KyAgIFBSRURfQ09OU1RSX0VYUFIgaGFzIHRoZSBleHByZXNzaW9uIHRvIGJl IGV2YWx1YXRlZC4gKi8KK0RFRlRSRUVDT0RFIChQUkVEX0NPTlNUUiwgInBy ZWRfY29uc3RyIiwgdGNjX2V4cHJlc3Npb24sIDEpCisKKy8qIEFuIGV4cHJl c3Npb24gY29uc3RyYWludCBkZXRlcm1pbmVzIHRoZSB2YWxpZGl0eSBvZiBh IGV4cHJlc3Npb24gRS4KKworICAgRVhQUl9DT05TVF9FWFBSIGhhcyB0aGUg ZXhwcmVzc2lvbiBiZWluZyB2YWxpZGF0ZWQuICovCitERUZUUkVFQ09ERSAo RVhQUl9DT05TVFIsICJleHByX2NvbnN0ciIsIHRjY19leHByZXNzaW9uLCAx KQorCisvKiBBIHR5cGUgY29uc3RyYWludCBkZXRlcm1pbmVzIHRoZSB2YWxp ZGl0eSBvZiBhIHR5cGUgVC4gTm90ZSB0aGF0CisKKyAgIFRZUEVfQ09OU1Rf VFlQRSBoYXMgdGhlIHR5cGUgYmVpbmcgdmFsaWRhdGVkICovCitERUZUUkVF Q09ERSAoVFlQRV9DT05TVFIsICJ0eXBlX2NvbnN0ciIsIHRjY19leHByZXNz aW9uLCAxKQorCisvKiBBbiBpbXBsaWNpdCBjb252ZXJzaW9uIGNvbnN0cmFp bnQgZGV0ZXJtaW5lcyBpZiBhbiBleHByZXNzaW9uCisgICBFIGlzIGltcGxp Y2l0bHkgY29udmVydGlibGUgdG8gYSB0eXBlIFQuIE5vdGUgdGhhdCBUIG1h eQorICAgYmUgZGVwZW5kZW50IGJ1dCBkb2VzIG5vdCBjb250YWluIGFueSBw bGFjZWhvbGRlcnMuCisgICAKKyAgIElDT05WX0NPTlNUUl9FWFBSIGhhcyB0 aGUgZXhwcmVzc2lvbiBFLgorICAgSUNPTlZfQ09OU1RSX1RZUEUgaGFzIHRo ZSB0eXBlIFQuIAorICAgKi8KK0RFRlRSRUVDT0RFIChJQ09OVl9DT05TVFIs ICJpY29udl9jb25zdHIiLCB0Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQW4g YXJndW1lbnQgZGVkdWN0aW9uIGNvbnN0cmFpbnQgZGV0ZXJtaW5lcyBpZiB0 aGUgdHlwZSBvZiBhbgorICAgZXhwcmVzc2lvbiBFIGNhbiBiZSBkZWR1Y2Vk IGZyb20gYSB0eXBlIHBhdHRlcm4gVC4gTm90ZSB0aGF0CisgICBUIG11c3Qg Y29udGFpbiBhdCBsZWFzdCBvbmUgcGxhY2UgaG9sZGVyLgorCisgICBERURV Q1RfQ09OU1RSX0VYUFIgaGFzIHRoZSBleHByZXNzaW9uIEUKKyAgIERFRFVD VF9DT05TVFJfUEFUVEVSTiBoYXMgdGhlIHR5cGUgcGF0dGVyIFQuICovCitE RUZUUkVFQ09ERSAoREVEVUNUX0NPTlNUUiwgImRlZHVjdF9jb25zdHIiLCB0 Y2NfZXhwcmVzc2lvbiwgMikKKworLyogQW4gZXhjZXB0aW9uIGNvbnN0cmFp bnQgZGV0ZXJtaW5lcyBpZiwgZm9yIGFuIGV4cHJlc3Npb24gRSwKKyAgIG5v ZXhjZXB0KEUpIGlzIHRydWUuIAorCisgICBFWENFUFRfQ09OU1RSX0VYUFIg aGFzIHRoZSBleHByZXNzaW9uIEUuICovCitERUZUUkVFQ09ERSAoRVhDRVBU X0NPTlNUUiwgImV4Y2VwdF9jb25zdHIiLCB0Y2NfZXhwcmVzc2lvbiwgMSkK KworLyogQSBwYXJhbWV0ZXJpemVkIGNvbnN0cmFpbnQgZGVjbGFyZXMgY29u c3RyYWludCB2YXJpYWJsZXMsIHdoaWNoCisgICBhcmUgdXNlZCBpbiBleHBy ZXNzaW9uLCB0eXBlLCBhbmQgZXhjZXB0aW9uIGNvbnN0cmFpbnRzLiAKKwor ICAgUEFSTV9DT05TVFJfUEFSTVMgaGFzIGEgVFJFRV9MSVNUIG9mIHBhcmFt ZXRlciBkZWNsYXJhdGlvbnMuCisgICBQQVJNX0NPTlNUUl9PUEVSQU5EIGhh cyB0aGUgbmVzdGVkIGNvbnN0cmFpbnQuICovCitERUZUUkVFQ09ERSAoUEFS TV9DT05TVFIsICJwYXJtX2NvbnN0ciIsIHRjY19leHByZXNzaW9uLCAyKQor CisvKiBUaGUgY29uanVuY3Rpb24gYW5kIGRpc2p1bmN0aW9uIG9mIHR3byBj b25zdHJhaW50cywgcmVzcGVjdGl2ZWx5LgorICAgT3BlcmFuZHMgYXJlIGFj Y2Vzc2VkIHVzaW5nIFRSRUVfT1BFUkFORC4gKi8KK0RFRlRSRUVDT0RFIChD T05KX0NPTlNUUiwgImNvbmpfY29uc3RyIiwgdGNjX2V4cHJlc3Npb24sIDIp CitERUZUUkVFQ09ERSAoRElTSl9DT05TVFIsICJkaXNqX2NvbnN0ciIsIHRj Y19leHByZXNzaW9uLCAyKQorCiAKIC8qCiBMb2NhbCB2YXJpYWJsZXM6CmRp ZmYgLS1naXQgYS9nY2MvY3AvY3AtdHJlZS5oIGIvZ2NjL2NwL2NwLXRyZWUu aAppbmRleCBhMDkxYmU2Li5lNDI3YmFhIDEwMDY0NAotLS0gYS9nY2MvY3Av Y3AtdHJlZS5oCisrKyBiL2djYy9jcC9jcC10cmVlLmgKQEAgLTkzLDYgKzkz LDcgQEAgYy1jb21tb24uaCwgbm90IGFmdGVyLgogICAgICAgUEFDS19FWFBB TlNJT05fTE9DQUxfUCAoaW4gKl9QQUNLX0VYUEFOU0lPTikKICAgICAgIFRJ TkZPX1JFQ0hFQ0tfQUNDRVNTX1AgKGluIFRFTVBMQVRFX0lORk8pCiAgICAg ICBTSVpFT0ZfRVhQUl9UWVBFX1AgKGluIFNJWkVPRl9FWFBSKQorICAgICAg Q09NUE9VTkRfUkVRX05PRVhDRVBUX1AgKGluIENPTVBPVU5EX1JFUSkKICAg ICAgIElOVFJPRFVDRURfUEFDS19QIChpbiBJTlRST0RVQ0VEX1BBUk1fREVD TCkKICAgIDE6IElERU5USUZJRVJfVklSVFVBTF9QIChpbiBJREVOVElGSUVS X05PREUpCiAgICAgICBUSV9QRU5ESU5HX1RFTVBMQVRFX0ZMQUcuCkBAIC04 OTAsNiArODkxLDUwIEBAIGNoZWNrX2NvbnN0cmFpbnRfaW5mbyAodHJlZSB0 KQogI2RlZmluZSBURU1QTEFURV9QQVJNX0NPTlNUUkFJTlRTKE5PREUpIFwK ICAgVFJFRV9UWVBFIChUUkVFX0xJU1RfQ0hFQ0sgKE5PREUpKQogCisvKiBO b24temVybyBpZiB0aGUgbm9leGNlcHQgaXMgcHJlc2VudCBpbiBhIGNvbXBv dW5kIHJlcXVpcmVtZW50LiAqLworI2RlZmluZSBDT01QT1VORF9SRVFfTk9F WENFUFRfUChOT0RFKSBcCisgIFRSRUVfTEFOR19GTEFHXzAgKFRSRUVfQ0hF Q0sgKE5PREUsIENPTVBPVU5EX1JFUSkpCisKKy8qIFRoZSBleHByZXNzaW9u IGV2YWx1YXRlZCBieSB0aGUgcHJlZGljYXRlIGNvbnN0cmFpbnQuICovCisj ZGVmaW5lIFBSRURfQ09OU1RSX0VYUFIoTk9ERSkgXAorICBUUkVFX09QRVJB TkQgKFRSRUVfQ0hFQ0sgKE5PREUsIFBSRURfQ09OU1RSKSwgMCkKKworLyog VGhlIGV4cHJlc3Npb24gdmFsaWRhdGVkIGJ5IHRoZSBwcmVkaWNhdGUgY29u c3RyYWludC4gKi8KKyNkZWZpbmUgRVhQUl9DT05TVFJfRVhQUihOT0RFKSBc CisgIFRSRUVfT1BFUkFORCAoVFJFRV9DSEVDSyAoTk9ERSwgRVhQUl9DT05T VFIpLCAwKQorCisvKiBUaGUgdHlwZSB2YWxpZGF0ZWQgYnkgdGhlIHByZWRp Y2F0ZSBjb25zdHJhaW50LiAqLworI2RlZmluZSBUWVBFX0NPTlNUUl9UWVBF KE5PREUpIFwKKyAgVFJFRV9PUEVSQU5EIChUUkVFX0NIRUNLIChOT0RFLCBU WVBFX0NPTlNUUiksIDApCisKKy8qIEluIGFuIGltcGxpY2l0IGNvbnZlcnNp b24gY29uc3RyYWludCwgdGhlIHNvdXJjZSBleHByZXNzaW9uLiAqLworI2Rl ZmluZSBJQ09OVl9DT05TVFJfRVhQUihOT0RFKSBcCisgIFRSRUVfT1BFUkFO RCAoVFJFRV9DSEVDSyAoTk9ERSwgSUNPTlZfQ09OU1RSKSwgMCkKKworLyog SW4gYW4gaW1wbGljaXQgY29udmVyc2lvbiBjb25zdHJhaW50LCB0aGUgdGFy Z2V0IHR5cGUuICovCisjZGVmaW5lIElDT05WX0NPTlNUUl9UWVBFKE5PREUp IFwKKyAgVFJFRV9PUEVSQU5EIChUUkVFX0NIRUNLIChOT0RFLCBJQ09OVl9D T05TVFIpLCAxKQorCisvKiBJbiBhbiBhcmd1bWVudCBkZWR1Y3Rpb24gY29u c3RyYWludCwgdGhlIHNvdXJjZSBleHByZXNzaW9uLiAqLworI2RlZmluZSBE RURVQ1RfQ09OU1RSX0VYUFIoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKFRS RUVfQ0hFQ0sgKE5PREUsIERFRFVDVF9DT05TVFIpLCAwKQorCisvKiBJbiBh biBhcmd1bWVudCBkZWR1Y3Rpb24gY29uc3RyYWludCwgdGhlIHRhcmdldCB0 eXBlIHBhdHRlcm4uICovCisjZGVmaW5lIERFRFVDVF9DT05TVFJfUEFUVEVS TihOT0RFKSBcCisgIFRSRUVfT1BFUkFORCAoVFJFRV9DSEVDSyAoTk9ERSwg REVEVUNUX0NPTlNUUiksIDEpCisKKy8qIFRoZSBleHByZXNzaW9uIG9mIGFu IGV4Y2VwdGlvbiBjb25zdHJhaW50LiAqLworI2RlZmluZSBFWENFUFRfQ09O U1RSX0VYUFIoTk9ERSkgXAorICBUUkVFX09QRVJBTkQgKFRSRUVfQ0hFQ0sg KE5PREUsIEVYQ0VQVF9DT05TVFIpLCAwKQorCisvKiBJbiBhIHBhcmFtZXRl cml6ZWQgY29uc3RyYWludCwgdGhlIGxvY2FsIHBhcmFtZXRlcnMuICovCisj ZGVmaW5lIFBBUk1fQ09OU1RSX1BBUk1TKE5PREUpIFwKKyAgVFJFRV9PUEVS QU5EIChUUkVFX0NIRUNLIChOT0RFLCBQQVJNX0NPTlNUUiksIDApCisKKy8q IEluIGEgcGFyYW1ldGVyaXplZCBjb25zdHJhaW50LCB0aGUgb3BlcmFuZC4g Ki8KKyNkZWZpbmUgUEFSTV9DT05TVFJfT1BFUkFORChOT0RFKSBcCisgIFRS RUVfT1BFUkFORCAoVFJFRV9DSEVDSyAoTk9ERSwgUEFSTV9DT05TVFIpLCAx KQorCiBlbnVtIGNwX3RyZWVfbm9kZV9zdHJ1Y3R1cmVfZW51bSB7CiAgIFRT X0NQX0dFTkVSSUMsCiAgIFRTX0NQX0lERU5USUZJRVIsCkBAIC02NDYwLDU2 ICs2NTA1LDQzIEBAIGV4dGVybiB2b2lkIHN1Z2dlc3RfYWx0ZXJuYXRpdmVz X2ZvciAgICAgICAgICAgIChsb2NhdGlvbl90LCB0cmVlKTsKIGV4dGVybiB0 cmVlIHN0cmlwX3VzaW5nX2RlY2wgICAgICAgICAgICAgICAgICAgICh0cmVl KTsKIAogLyogaW4gY29uc3RyYWludC5jYyAqLworCitleHRlcm4gYm9vbCBj b25zdHJhaW50X3AgICAgICAgICAgICAgICAgICAgICAgICAodHJlZSk7Citl eHRlcm4gdHJlZSBtYWtlX3ByZWRpY2F0ZV9jb25zdHJhaW50ICAgICAgICAg ICAodHJlZSk7CiBleHRlcm4gdHJlZSBjb25qb2luX2NvbnN0cmFpbnRzICAg ICAgICAgICAgICAgICAodHJlZSwgdHJlZSk7CiBleHRlcm4gdHJlZSBjb25q b2luX2NvbnN0cmFpbnRzICAgICAgICAgICAgICAgICAodHJlZSk7CitleHRl cm4gYm9vbCB2YWxpZF9jb25zdHJhaW50c19wICAgICAgICAgICAgICAgICAo dHJlZSk7CiBleHRlcm4gdHJlZSBnZXRfY29uc3RyYWludHMgICAgICAgICAg ICAgICAgICAgICAodHJlZSk7CiBleHRlcm4gdm9pZCBzZXRfY29uc3RyYWlu dHMgICAgICAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSk7CiBleHRlcm4g dm9pZCByZW1vdmVfY29uc3RyYWludHMgICAgICAgICAgICAgICAgICAodHJl ZSk7CiBleHRlcm4gdHJlZSBhc3NvY2lhdGVfY2xhc3N0eXBlX2NvbnN0cmFp bnRzICAgICAodHJlZSk7CiBleHRlcm4gdHJlZSBidWlsZF9jb25zdHJhaW50 cyAgICAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSk7CiBleHRlcm4gdHJl ZSBnZXRfc2hvcnRoYW5kX2NvbnN0cmFpbnRzICAgICAgICAgICAodHJlZSk7 Ci0KIGV4dGVybiB0cmVlIGJ1aWxkX2NvbmNlcHRfY2hlY2sgICAgICAgICAg ICAgICAgICh0cmVlLCB0cmVlLCB0cmVlID0gTlVMTF9UUkVFKTsKIGV4dGVy biB0cmVlIGJ1aWxkX2NvbnN0cmFpbmVkX3BhcmFtZXRlciAgICAgICAgICh0 cmVlLCB0cmVlLCB0cmVlID0gTlVMTF9UUkVFKTsKIGV4dGVybiBib29sIGRl ZHVjZV9jb25zdHJhaW5lZF9wYXJhbWV0ZXIgICAgICAgICh0cmVlLCB0cmVl JiwgdHJlZSYpOwogZXh0ZXJuIHRyZWUgcmVzb2x2ZV9jb25zdHJhaW50X2No ZWNrICAgICAgICAgICAgKHRyZWUpOwogZXh0ZXJuIHRyZWUgY2hlY2tfZnVu Y3Rpb25fY29uY2VwdCAgICAgICAgICAgICAgKHRyZWUpOwotCi1leHRlcm4g dHJlZSBmaW5pc2hfY29uY2VwdF9pbnRyb2R1Y3Rpb24gICAgICAgICAodHJl ZSwgdHJlZSk7Ci1leHRlcm4gdHJlZSBmaW5pc2hfdGVtcGxhdGVfY29uc3Ry YWludHMgICAgICAgICAodHJlZSk7Ci1leHRlcm4gdHJlZSBzYXZlX2xlYWRp bmdfY29uc3RyYWludHMgICAgICAgICAgICAodHJlZSk7Ci1leHRlcm4gdHJl ZSBzYXZlX3RyYWlsaW5nX2NvbnN0cmFpbnRzICAgICAgICAgICAodHJlZSk7 CitleHRlcm4gdHJlZSBmaW5pc2hfdGVtcGxhdGVfaW50cm9kdWN0aW9uICAg ICAgICAodHJlZSwgdHJlZSk7CiBleHRlcm4gYm9vbCB2YWxpZF9yZXF1aXJl bWVudHNfcCAgICAgICAgICAgICAgICAodHJlZSk7CiBleHRlcm4gdHJlZSBm aW5pc2hfY29uY2VwdF9uYW1lICAgICAgICAgICAgICAgICAodHJlZSk7CiBl eHRlcm4gdHJlZSBmaW5pc2hfc2hvcnRoYW5kX2NvbnN0cmFpbnQgICAgICAg ICAodHJlZSwgdHJlZSk7CiBleHRlcm4gdHJlZSBmaW5pc2hfcmVxdWlyZXNf ZXhwciAgICAgICAgICAgICAgICAodHJlZSwgdHJlZSk7Ci1leHRlcm4gdHJl ZSBmaW5pc2hfZXhwcl9yZXF1aXJlbWVudCAgICAgICAgICAgICAodHJlZSwg dHJlZSwgdHJlZSk7Ci1leHRlcm4gdHJlZSBmaW5pc2hfZXhwcl9yZXF1aXJl bWVudCAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gdHJlZSBmaW5pc2hf c2ltcGxlX3JlcXVpcmVtZW50ICAgICAgICAgICAodHJlZSk7CiBleHRlcm4g dHJlZSBmaW5pc2hfdHlwZV9yZXF1aXJlbWVudCAgICAgICAgICAgICAodHJl ZSk7CitleHRlcm4gdHJlZSBmaW5pc2hfY29tcG91bmRfcmVxdWlyZW1lbnQg ICAgICAgICAodHJlZSwgdHJlZSwgYm9vbCk7CiBleHRlcm4gdHJlZSBmaW5p c2hfbmVzdGVkX3JlcXVpcmVtZW50ICAgICAgICAgICAodHJlZSk7Ci1leHRl cm4gdHJlZSBmaW5pc2hfY29uc3RleHByX3JlcXVpcmVtZW50ICAgICAgICAo dHJlZSk7Ci1leHRlcm4gdHJlZSBmaW5pc2hfbm9leGNlcHRfcmVxdWlyZW1l bnQgICAgICAgICAodHJlZSk7Ci1leHRlcm4gdHJlZSBmaW5pc2hfdmFsaWRl eHByX2V4cHIgICAgICAgICAgICAgICAodHJlZSk7Ci1leHRlcm4gdHJlZSBm aW5pc2hfdmFsaWR0eXBlX2V4cHIgICAgICAgICAgICAgICAodHJlZSk7Ci1l eHRlcm4gdHJlZSBmaW5pc2hfY29uc3RleHByX2V4cHIgICAgICAgICAgICAg ICAodHJlZSk7Ci0KIGV4dGVybiB2b2lkIGNoZWNrX2NvbnN0cmFpbmVkX2Zy aWVuZCAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKLQogZXh0ZXJuIHRyZWUg dHN1YnN0X3JlcXVpcmVzX2V4cHIgICAgICAgICAgICAgICAgKHRyZWUsIHRy ZWUsIHRzdWJzdF9mbGFnc190LCB0cmVlKTsKLWV4dGVybiB0cmVlIHRzdWJz dF92YWxpZGV4cHJfZXhwciAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0 cmVlKTsKLWV4dGVybiB0cmVlIHRzdWJzdF92YWxpZHR5cGVfZXhwciAgICAg ICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKLWV4dGVybiB0cmVlIHRz dWJzdF9jb25zdGV4cHJfZXhwciAgICAgICAgICAgICAgICh0cmVlLCB0cmVl LCB0cmVlKTsKLWV4dGVybiB0cmVlIHRzdWJzdF9leHByX3JlcSAgICAgICAg ICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKLWV4dGVybiB0cmVl IHRzdWJzdF90eXBlX3JlcSAgICAgICAgICAgICAgICAgICAgICh0cmVlLCB0 cmVlLCB0cmVlKTsKLWV4dGVybiB0cmVlIHRzdWJzdF9uZXN0ZWRfcmVxICAg ICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlLCB0cmVlKTsKLQotZXh0ZXJu IHRyZWUgdHN1YnN0X2NvbnN0cmFpbnRfaW5mbyAgICAgICAgICAgICAgKHRy ZWUsIHRyZWUpOwotZXh0ZXJuIHRyZWUgdHN1YnN0X2NvbnN0cmFpbnRfZXhw ciAgICAgICAgICAgICAgKHRyZWUsIHRyZWUsIGJvb2wpOwotCi1leHRlcm4g Ym9vbCBjaGVja19jb25zdHJhaW50cyAgICAgICAgICAgICAgICAgICAodHJl ZSk7Ci1leHRlcm4gYm9vbCBjaGVja19jb25zdHJhaW50cyAgICAgICAgICAg ICAgICAgICAodHJlZSwgdHJlZSk7Ci1leHRlcm4gYm9vbCBjaGVja190ZW1w bGF0ZV9jb25zdHJhaW50cyAgICAgICAgICAodHJlZSwgdHJlZSk7Ci1leHRl cm4gdHJlZSBzdWJzdF90ZW1wbGF0ZV9jb25zdHJhaW50cyAgICAgICAgICAo dHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSB0c3Vic3RfY29uc3RyYWludF9p bmZvICAgICAgICAgICAgICAodHJlZSwgdHJlZSwgdHN1YnN0X2ZsYWdzX3Qs IHRyZWUpOworCitleHRlcm4gYm9vbCBjb25zdHJhaW50c19zYXRpc2ZpZWRf cCAgICAgICAgICAgICAodHJlZSk7CitleHRlcm4gYm9vbCBjb25zdHJhaW50 c19zYXRpc2ZpZWRfcCAgICAgICAgICAgICAodHJlZSwgdHJlZSk7CitleHRl cm4gdHJlZSBldmFsdWF0ZV9mdW5jdGlvbl9jb25jZXB0ICAgICAgICAgICAo dHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBldmFsdWF0ZV92YXJpYWJsZV9j b25jZXB0ICAgICAgICAgICAodHJlZSwgdHJlZSk7CitleHRlcm4gdHJlZSBl dmFsdWF0ZV9jb25zdHJhaW50X2V4cHJlc3Npb24gICAgICAodHJlZSwgdHJl ZSk7CitleHRlcm4gYm9vbCBjaGVja19jb25zdHJhaW50X2V4cHJlc3Npb24g ICAgICAgICAodHJlZSwgdHJlZSk7CisKIGV4dGVybiBib29sIGVxdWl2YWxl bnRfY29uc3RyYWludHMgICAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKIGV4 dGVybiBib29sIGVxdWl2YWxlbnRseV9jb25zdHJhaW5lZCAgICAgICAgICAg ICh0cmVlLCB0cmVlKTsKIGV4dGVybiBib29sIHN1YnN1bWVzX2NvbnN0cmFp bnRzICAgICAgICAgICAgICAgICh0cmVlLCB0cmVlKTsKZGlmZiAtLWdpdCBh L2djYy9jcC9jeHgtcHJldHR5LXByaW50LmMgYi9nY2MvY3AvY3h4LXByZXR0 eS1wcmludC5jCmluZGV4IDJlNTJmMDkuLjIxZjNmYzQgMTAwNjQ0Ci0tLSBh L2djYy9jcC9jeHgtcHJldHR5LXByaW50LmMKKysrIGIvZ2NjL2NwL2N4eC1w cmV0dHktcHJpbnQuYwpAQCAtNDUzLDMwICs0NTMsNiBAQCBjeHhfcHJldHR5 X3ByaW50ZXI6OnByaW1hcnlfZXhwcmVzc2lvbiAodHJlZSB0KQogICAgICAg cHBfY3h4X3JlcXVpcmVzX2V4cHIgKHRoaXMsIHQpOwogICAgICAgYnJlYWs7 CiAKLSAgICBjYXNlIEVYUFJfUkVROgotICAgICAgcHBfY3h4X2V4cHJfcmVx dWlyZW1lbnQgKHRoaXMsIHQpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl IFRZUEVfUkVROgotICAgICAgcHBfY3h4X3R5cGVfcmVxdWlyZW1lbnQgKHRo aXMsIHQpOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE5FU1RFRF9SRVE6 Ci0gICAgICBwcF9jeHhfbmVzdGVkX3JlcXVpcmVtZW50ICh0aGlzLCB0KTsK LSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBWQUxJREVYUFJfRVhQUjoKLSAg ICAgIHBwX2N4eF92YWxpZGV4cHJfZXhwciAodGhpcywgdCk7Ci0gICAgICBi cmVhazsKLQotICAgIGNhc2UgVkFMSURUWVBFX0VYUFI6Ci0gICAgICBwcF9j eHhfdmFsaWR0eXBlX2V4cHIgKHRoaXMsIHQpOwotICAgICAgYnJlYWs7Ci0K LSAgICBjYXNlIENPTlNURVhQUl9FWFBSOgotICAgICAgcHBfY3h4X2NvbnN0 ZXhwcl9leHByICh0aGlzLCB0KTsKLSAgICAgIGJyZWFrOwotCiAgICAgZGVm YXVsdDoKICAgICAgIGNfcHJldHR5X3ByaW50ZXI6OnByaW1hcnlfZXhwcmVz c2lvbiAodCk7CiAgICAgICBicmVhazsKQEAgLTEwOTEsOSArMTA2Nyw2IEBA IGN4eF9wcmV0dHlfcHJpbnRlcjo6ZXhwcmVzc2lvbiAodHJlZSB0KQogICAg IGNhc2UgVEVNUExBVEVfVEVNUExBVEVfUEFSTToKICAgICBjYXNlIFNUTVRf RVhQUjoKICAgICBjYXNlIFJFUVVJUkVTX0VYUFI6Ci0gICAgY2FzZSBFWFBS X1JFUToKLSAgICBjYXNlIFRZUEVfUkVROgotICAgIGNhc2UgTkVTVEVEX1JF UToKICAgICAgIHByaW1hcnlfZXhwcmVzc2lvbiAodCk7CiAgICAgICBicmVh azsKIApAQCAtMTE4OCw2ICsxMTYxLDE4IEBAIGN4eF9wcmV0dHlfcHJpbnRl cjo6ZXhwcmVzc2lvbiAodHJlZSB0KQogICAgICAgcHBfY3h4X3dzX3N0cmlu ZyAodGhpcywgIjxsYW1iZGE+Iik7CiAgICAgICBicmVhazsKIAorICAgIGNh c2UgUFJFRF9DT05TVFI6CisgICAgY2FzZSBFWFBSX0NPTlNUUjoKKyAgICBj YXNlIFRZUEVfQ09OU1RSOgorICAgIGNhc2UgSUNPTlZfQ09OU1RSOgorICAg IGNhc2UgREVEVUNUX0NPTlNUUjoKKyAgICBjYXNlIEVYQ0VQVF9DT05TVFI6 CisgICAgY2FzZSBQQVJNX0NPTlNUUjoKKyAgICBjYXNlIENPTkpfQ09OU1RS OgorICAgIGNhc2UgRElTSl9DT05TVFI6CisgICAgICBwcF9jeHhfY29uc3Ry YWludCAodGhpcywgdCk7CisgICAgICBicmVhazsKKwogICAgIGNhc2UgUEFS RU5fRVhQUjoKICAgICAgIHBwX2N4eF9sZWZ0X3BhcmVuICh0aGlzKTsKICAg ICAgIGV4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAodCwgMCkpOwpAQCAtMjU0 OSwyNCArMjUzNCw2MCBAQCBwcF9jeHhfdHJhaXRfZXhwcmVzc2lvbiAoY3h4 X3ByZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQogICBwcF9jeHhfcmlnaHRf cGFyZW4gKHBwKTsKIH0KIAorLy8gcmVxdWlyZXMtY2xhdXNlOgorLy8gICAg J3JlcXVpcmVzJyBsb2dpY2FsLW9yLWV4cHJlc3Npb24KK3ZvaWQKK3BwX2N4 eF9yZXF1aXJlc19jbGF1c2UgKGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRy ZWUgdCkKK3sKKyAgaWYgKCF0KQorICAgIHJldHVybjsKKyAgcHAtPnBhZGRp bmcgPSBwcF9iZWZvcmU7CisgIHBwX2N4eF93c19zdHJpbmcgKHBwLCAicmVx dWlyZXMiKTsKKyAgcHBfc3BhY2UgKHBwKTsKKyAgcHAtPmV4cHJlc3Npb24g KHQpOworfQorCisvKiByZXF1aXJlbWVudDoKKyAgICAgc2ltcGxlLXJlcXVp cmVtZW50CisgICAgIGNvbXBvdW5kLXJlcXVpcmVtZW50CisgICAgIHR5cGUt cmVxdWlyZW1lbnQKKyAgICAgbmVzdGVkLXJlcXVpcmVtZW50ICovCitzdGF0 aWMgdm9pZAorcHBfY3h4X3JlcXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50 ZXIgKnBwLCB0cmVlIHQpCit7CisgIHN3aXRjaCAoVFJFRV9DT0RFICh0KSkK KyAgICB7CisgICAgY2FzZSBTSU1QTEVfUkVROgorICAgICAgcHBfY3h4X3Np bXBsZV9yZXF1aXJlbWVudCAocHAsIHQpOworICAgICAgYnJlYWs7CisKKyAg ICBjYXNlIFRZUEVfUkVROgorICAgICAgcHBfY3h4X3R5cGVfcmVxdWlyZW1l bnQgKHBwLCB0KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBDT01QT1VO RF9SRVE6CisgICAgICBwcF9jeHhfY29tcG91bmRfcmVxdWlyZW1lbnQgKHBw LCB0KTsKKworICAgIGNhc2UgTkVTVEVEX1JFUToKKyAgICAgIHBwX2N4eF9u ZXN0ZWRfcmVxdWlyZW1lbnQgKHBwLCB0KTsKKyAgICAgIGJyZWFrOworCisg ICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9 Cit9CisKIC8vIHJlcXVpcmVtZW50LWxpc3Q6CiAvLyAgICByZXF1aXJlbWVu dAogLy8gICAgcmVxdWlyZW1lbnQtbGlzdCAnOycgcmVxdWlyZW1lbnRbb3B0 XQogLy8KLS8vIHJlcXVpcmVtZW50OgotLy8gICAgc2ltcGxlLXJlcXVpcmVt ZW50Ci0vLyAgICBjb21wb3VuZC1yZXF1aXJlbWVudAotLy8gICAgdHlwZS1y ZXF1aXJlbWVudAotLy8gICAgbmVzdGVkLXJlcXVpcmVtZW50CiBzdGF0aWMg dm9pZAogcHBfY3h4X3JlcXVpcmVtZW50X2xpc3QgKGN4eF9wcmV0dHlfcHJp bnRlciAqcHAsIHRyZWUgdCkKIHsKLSAgaW50IG4gPSAzOwogICBmb3IgKDsg dDsgdCA9IFRSRUVfQ0hBSU4gKHQpKQogICAgIHsKLSAgICAgIHBwX25ld2xp bmVfYW5kX2luZGVudCAocHAsIG4pOwotICAgICAgcHAtPmV4cHJlc3Npb24g KFRSRUVfVkFMVUUgKHQpKTsKLSAgICAgIG4gPSAwOworICAgICAgcHBfbmV3 bGluZV9hbmRfaW5kZW50IChwcCwgMyk7CisgICAgICBwcF9jeHhfcmVxdWly ZW1lbnQgKHBwLCBUUkVFX1ZBTFVFICh0KSk7CiAgICAgfQogICBwcF9uZXds aW5lX2FuZF9pbmRlbnQgKHBwLCAtMyk7CiB9CkBAIC0yNTgxLDE5ICsyNjAy LDYgQEAgcHBfY3h4X3JlcXVpcmVtZW50X2JvZHkgKGN4eF9wcmV0dHlfcHJp bnRlciAqcHAsIHRyZWUgdCkKICAgcHBfY3h4X3JpZ2h0X2JyYWNlIChwcCk7 CiB9CiAKLS8vIHJlcXVpcmVzLWNsYXVzZToKLS8vICAgICdyZXF1aXJlcycg bG9naWNhbC1vci1leHByZXNzaW9uCi12b2lkCi1wcF9jeHhfcmVxdWlyZXNf Y2xhdXNlIChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQpCi17Ci0g IGlmICghdCkKLSAgICByZXR1cm47Ci0gIHBwLT5wYWRkaW5nID0gcHBfYmVm b3JlOwotICBwcF9jeHhfd3Nfc3RyaW5nIChwcCwgInJlcXVpcmVzIik7Ci0g IHBwX3NwYWNlIChwcCk7Ci0gIHBwLT5leHByZXNzaW9uICh0KTsKLX0KLQog Ly8gcmVxdWlyZXMtZXhwcmVzc2lvbjoKIC8vICAgICdyZXF1aXJlcycgcmVx dWlyZW1lbnQtcGFyYW1ldGVyLWxpc3QgcmVxdWlyZW1lbnQtYm9keQogdm9p ZApAQCAtMjYwMSwxNDMgKzI2MDksMTg3IEBAIHBwX2N4eF9yZXF1aXJlc19l eHByIChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQpCiB7CiAgIHBw X2N4eF93c19zdHJpbmcgKHBwLCAicmVxdWlyZXMiKTsKICAgcHBfc3BhY2Ug KHBwKTsKLSAgcHBfY3h4X3BhcmFtZXRlcl9kZWNsYXJhdGlvbl9jbGF1c2Ug KHBwLCBUUkVFX09QRVJBTkQgKHQsIDApKTsKKyAgaWYgKFRSRUVfT1BFUkFO RCAodCwgMCkpCisgICAgcHBfY3h4X3BhcmFtZXRlcl9kZWNsYXJhdGlvbl9j bGF1c2UgKHBwLCBUUkVFX09QRVJBTkQgKHQsIDApKTsKICAgcHBfc3BhY2Ug KHBwKTsKICAgcHBfY3h4X3JlcXVpcmVtZW50X2JvZHkgKHBwLCBUUkVFX09Q RVJBTkQgKHQsIDEpKTsKIH0KIAotLy8gY29uc3RyYWludC1zcGVjaWZpZXI6 Ci0vLyAgICBub2V4Y2VwdAotLy8gICAgY29uc3RleHByCi1zdGF0aWMgdm9p ZAotcHBfY3h4X2NvbnN0cmFpbnRfc3BlY2lmaWVyIChjeHhfcHJldHR5X3By aW50ZXIgKnBwLCB0cmVlIHQpCisvKiBzaW1wbGUtcmVxdWlyZW1lbnQ6Cisg ICAgIGV4cHJlc3Npb24gJzsnICovCit2b2lkCitwcF9jeHhfc2ltcGxlX3Jl cXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQpCiB7 Ci0gIGlmIChUUkVFX0NPREUgKHQpID09IE5PRVhDRVBUX0VYUFIpCi0gICAg cHBfY3h4X3dzX3N0cmluZyAocHAsICJub2V4Y2VwdCIpOwotICBlbHNlIGlm IChUUkVFX0NPREUgKHQpID09IENPTlNURVhQUl9FWFBSKQotICAgIHBwX2N4 eF93c19zdHJpbmcgKHBwLCAiY29uc3RleHByIik7Ci0gIGVsc2UKLSAgICBn Y2NfdW5yZWFjaGFibGUgKCk7CisgIHBwLT5leHByZXNzaW9uIChUUkVFX09Q RVJBTkQgKHQsIDApKTsKKyAgcHBfY3h4X3NlbWljb2xvbiAocHApOwogfQog Ci0vLyBjb21wb3VuZC1yZXF1aXJlbWVudDoKLS8vICAgICd7JyBleHByZXNz aW9uICd9JyB0cmFpbGluZy1jb25zdHJhaW50LXNwZWNpZmllcnMKLS8vCi0v LyB0cmFpbGluZy1jb25zdHJhaW50LXNwZWNpZmllcnM6Ci0vLyAgICBjb25z dHJhaW50LXNwZWNpZmllcnMtc2VxW29wdF0gcmVzdWx0LXR5cGUtcmVxdWly ZW1lbnRbb3B0XQotLy8KLS8vIHJlc3VsdC10eXBlLXJlcXVpcmVtZW50Ogot Ly8gICAgJy0+JyB0eXBlLWlkCi1zdGF0aWMgdm9pZAotcHBfY3h4X2NvbXBv dW5kX3JlcXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVl IHQpCisvKiB0eXBlLXJlcXVpcmVtZW50OgorICAgICB0eXBlbmFtZSB0eXBl LW5hbWUgJzsnICovCit2b2lkCitwcF9jeHhfdHlwZV9yZXF1aXJlbWVudCAo Y3h4X3ByZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQogewotICAvLyBHZXQg dGhlIGV4cHJlc3Npb24gcmVxdWlyZW1lbnQuCi0gIHRyZWUgZXJlcSA9IFRS RUVfT1BFUkFORCAodCwgMCk7Ci0KLSAgLy8gRmluZCB0aGUgdHJlZSBub2Rl IGNvbnRhaW5pbmcgdGhlIHJlc3VsdCB0eXBlIHJlcXVpcmVtZW50LgotICAv LyBOb3RlIHRoYXQgdmFsaWR0eXBlIHJlcXVpcmVtZW50cyBhcmUgaW1wbGlj aXQuCi0gIHRyZWUgdHJlcSA9IFRSRUVfQ0hBSU4gKGVyZXEpOwotICBpZiAo VFJFRV9DT0RFIChUUkVFX1ZBTFVFICh0cmVxKSkgPT0gVkFMSURUWVBFX0VY UFIpCi0gICAgdHJlcSA9IFRSRUVfQ0hBSU4gKHRyZXEpOwotCi0gIC8vIEZp bmQgdHJlZSBub2RlcyBmb3IgYW55IGFkZGl0aW9uYWwgY29uc3RyYWludCBz cGVjaWZpZXJzLgotICB0cmVlIHNwZWMxID0gVFJFRV9DSEFJTiAodHJlcSk7 Ci0gIHRyZWUgc3BlYzIgPSBzcGVjMSA/IFRSRUVfQ0hBSU4gKHNwZWMxKSA6 IE5VTExfVFJFRTsKKyAgcHAtPnR5cGVfaWQgKFRSRUVfT1BFUkFORCAodCwg MCkpOworICBwcF9jeHhfc2VtaWNvbG9uIChwcCk7Cit9CiAKLSAgLy8gUHJl dHR5IHByaW50IHRoZSB7ZXhwcn0gcmVxdWlyZW1lbnQKLSAgdHJlZSBleHBy ID0gVFJFRV9PUEVSQU5EIChUUkVFX1ZBTFVFIChlcmVxKSwgMCk7CisvKiBj b21wb3VuZC1yZXF1aXJlbWVudDoKKyAgICAgJ3snIGV4cHJlc3Npb24gJ30n ICdub2V4Y2VwdCcgW29wdF0gdHJhaWxpbmctcmV0dXJuLXR5cGUgW29wdF0g Ki8KK3ZvaWQKK3BwX2N4eF9jb21wb3VuZF9yZXF1aXJlbWVudCAoY3h4X3By ZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQorewogICBwcF9jeHhfbGVmdF9i cmFjZSAocHApOwotICBwcC0+ZXhwcmVzc2lvbiAoZXhwcik7CisgIHBwLT5l eHByZXNzaW9uIChUUkVFX09QRVJBTkQgKHQsIDApKTsKICAgcHBfY3h4X3Jp Z2h0X2JyYWNlIChwcCk7CiAKLSAgLy8gUHJldHR5IGNvbnN0cmFpbnQgc3Bl Y2lmaWVycywgaWYgYW55LgotICBpZiAoc3BlYzEpCi0gICAgewotICAgICAg cHBfc3BhY2UgKHBwKTsKLSAgICAgIHBwX2N4eF9jb25zdHJhaW50X3NwZWNp ZmllciAocHAsIFRSRUVfVkFMVUUgKHNwZWMxKSk7Ci0gICAgICBpZiAoc3Bl YzIpCi0gICAgICAgIHBwX2N4eF9jb25zdHJhaW50X3NwZWNpZmllciAocHAs IFRSRUVfVkFMVUUgKHNwZWMyKSk7Ci0gICAgfQorICBpZiAoQ09NUE9VTkRf UkVRX05PRVhDRVBUX1AgKHQpKQorICAgIHBwX2N4eF93c19zdHJpbmcgKHBw LCAibm9leGNlcHQiKTsKIAotICAvLyBQcmV0dHkgcHJpbnQgdGhlICctPiB0 eXBlLWlkJyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLgotICAvLyBOb3RlIHRo YXQgdHJlcSB3aWxsIGNvbnRhaW4gYSBUUkFJVF9FWFBSLgotICBpZiAodHJl cSkKKyAgaWYgKHRyZWUgdHlwZSA9IFRSRUVfT1BFUkFORCAodCwgMSkpCiAg ICAgewotICAgICAgdHJlZSB0eXBlID0gVFJBSVRfRVhQUl9UWVBFMiAoVFJF RV9WQUxVRSAodHJlcSkpOwotICAgICAgcHBfc3BhY2UgKHBwKTsKLSAgICAg IHBwX2N4eF9hcnJvdyAocHApOwotICAgICAgcHBfc3BhY2UgKHBwKTsKKyAg ICAgIHBwX2N4eF93c19zdHJpbmcgKHBwLCAiLT4iKTsKICAgICAgIHBwLT50 eXBlX2lkICh0eXBlKTsKICAgICB9CiB9CiAKLS8vIHNpbXBsZS1yZXF1aXJl bWVudDoKLS8vICAgIGV4cHJlc3Npb24KLXN0YXRpYyB2b2lkCi1wcF9jeHhf c2ltcGxlX3JlcXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0 cmVlIHQpCisvKiBuZXN0ZWQgcmVxdWlyZW1lbnQ6CisgICAgICdyZXF1aXJl cycgY29uc3RyYWludC1leHByZXNzaW9uICovCit2b2lkCitwcF9jeHhfbmVz dGVkX3JlcXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVl IHQpCiB7Ci0gIHRyZWUgcmVxID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKLSAg cHAtPmV4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAocmVxLCAwKSk7CisgIHBw X2N4eF93c19zdHJpbmcgKHBwLCAicmVxdWlyZXMiKTsKKyAgcHAtPmV4cHJl c3Npb24gKFRSRUVfT1BFUkFORCAodCwgMCkpOworICBwcF9jeHhfc2VtaWNv bG9uIChwcCk7CiB9CiAKIHZvaWQKLXBwX2N4eF9leHByX3JlcXVpcmVtZW50 IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQpCitwcF9jeHhfcHJl ZGljYXRlX2NvbnN0cmFpbnQgKGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRy ZWUgdCkKIHsKLSAgdHJlZSByZXFzID0gVFJFRV9PUEVSQU5EICh0LCAwKTsK LSAgaWYgKFRSRUVfQ09ERSAocmVxcykgPT0gVFJFRV9MSVNUKQotICAgIHBw X2N4eF9jb21wb3VuZF9yZXF1aXJlbWVudCAocHAsIHQpOwotICBlbHNlCi0g ICAgcHBfY3h4X3NpbXBsZV9yZXF1aXJlbWVudCAocHAsIHQpOwotICBwcF9j eHhfc2VtaWNvbG9uIChwcCk7CisgIHBwX2N4eF93c19zdHJpbmcgKHBwLCAi X19wcmVkIik7CisgIHBwLT5leHByZXNzaW9uIChUUkVFX09QRVJBTkQgKHQs IDApKTsKIH0KIAotLy8gdHlwZS1yZXF1aXJlbWVudDoKLS8vICAgIHR5cGUt aWQKIHZvaWQKLXBwX2N4eF90eXBlX3JlcXVpcmVtZW50IChjeHhfcHJldHR5 X3ByaW50ZXIgKnBwLCB0cmVlIHQpCitwcF9jeHhfZXhwcmVzc2lvbl9jb25z dHJhaW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVlIHQpCiB7Ci0g IHRyZWUgcmVxID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKLSAgcHAtPnR5cGVf aWQgKFRSRUVfT1BFUkFORCAocmVxLCAwKSk7Ci0gIHBwX2N4eF9zZW1pY29s b24gKHBwKTsKKyAgcHBfY3h4X3dzX3N0cmluZyAocHAsICJfX2lzX3ZhbGlk ICIpOworICBwcF9sZWZ0X3BhcmVuIChwcCk7CisgIHBwLT5leHByZXNzaW9u IChUUkVFX09QRVJBTkQgKHQsIDApKTsgCisgIHBwX3JpZ2h0X3BhcmVuIChw cCk7CiB9CiAKLS8vIG5lc3RlZCByZXF1aXJlbWVudDoKLS8vICAgICdyZXF1 aXJlcycgbG9naWNhbC1vci1leHByZXNzaW9uCiB2b2lkCi1wcF9jeHhfbmVz dGVkX3JlcXVpcmVtZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0cmVl IHQpCitwcF9jeHhfdHlwZV9jb25zdHJhaW50IChjeHhfcHJldHR5X3ByaW50 ZXIgKnBwLCB0cmVlIHQpCiB7Ci0gIHBwX2N4eF93c19zdHJpbmcgKHBwLCAi cmVxdWlyZXMiKTsKLSAgcHAtPmV4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAo dCwgMCkpOwotICBwcF9jeHhfc2VtaWNvbG9uIChwcCk7CisgIHBwX2N4eF93 c19zdHJpbmcgKHBwLCAiX19pc192YWxpZCAiKTsKKyAgcHBfbGVmdF9wYXJl biAocHApOworICBwcC0+ZXhwcmVzc2lvbiAoVFJFRV9PUEVSQU5EICh0LCAw KSk7IAorICBwcF9yaWdodF9wYXJlbiAocHApOwogfQogCiB2b2lkCi1wcF9j eHhfdmFsaWRleHByX2V4cHIgKGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRy ZWUgdCkKK3BwX2N4eF9pbXBsaWNpdF9jb252ZXJzaW9uX2NvbnN0cmFpbnQg KGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRyZWUgdCkKIHsKLSAgcHBfY3h4 X3dzX3N0cmluZyAocHAsICJfX2lzX3ZhbGlkX2V4cHIiKTsKLSAgcHBfY3h4 X2xlZnRfcGFyZW4gKHBwKTsKLSAgcHAtPmV4cHJlc3Npb24gKFRSRUVfT1BF UkFORCAodCwgMCkpOwotICBwcF9jeHhfcmlnaHRfcGFyZW4gKHBwKTsKKyAg cHBfY3h4X3dzX3N0cmluZyAocHAsICJfX2ltcGxpY2l0bHlfY29udmVydGli bGUiKTsKKyAgcHBfbGVmdF9wYXJlbiAocHApOworICBwcC0+ZXhwcmVzc2lv biAoSUNPTlZfQ09OU1RSX0VYUFIgKHQpKTsKKyAgcHAtPmV4cHJlc3Npb24g KElDT05WX0NPTlNUUl9UWVBFICh0KSk7CisgIHBwX3JpZ2h0X3BhcmVuIChw cCk7CiB9CiAKIHZvaWQKLXBwX2N4eF92YWxpZHR5cGVfZXhwciAoY3h4X3By ZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQorcHBfY3h4X2FyZ3VtZW50X2Rl ZHVjdGlvbl9jb25zdHJhaW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0 cmVlIHQpCiB7Ci0gIHBwX2N4eF93c19zdHJpbmcgKHBwLCAiX19pc192YWxp ZF9leHByIik7Ci0gIHBwX2N4eF9sZWZ0X3BhcmVuIChwcCk7Ci0gIHBwLT50 eXBlX2lkKFRSRUVfT1BFUkFORCAodCwgMCkpOwotICBwcF9jeHhfcmlnaHRf cGFyZW4gKHBwKTsKKyAgcHBfY3h4X3dzX3N0cmluZyAocHAsICJfX2RlZHVj aWJsZSIpOworICBwcF9sZWZ0X3BhcmVuIChwcCk7CisgIHBwLT5leHByZXNz aW9uIChERURVQ1RfQ09OU1RSX0VYUFIgKHQpKTsKKyAgcHAtPmV4cHJlc3Np b24gKERFRFVDVF9DT05TVFJfUEFUVEVSTiAodCkpOworICBwcF9yaWdodF9w YXJlbiAocHApOwogfQogCiB2b2lkCi1wcF9jeHhfY29uc3RleHByX2V4cHIg KGN4eF9wcmV0dHlfcHJpbnRlciAqcHAsIHRyZWUgdCkKK3BwX2N4eF9leGNl cHRpb25fY29uc3RyYWludCAoY3h4X3ByZXR0eV9wcmludGVyICpwcCwgdHJl ZSB0KQogewotICBwcF9jeHhfd3Nfc3RyaW5nIChwcCwgIl9faXNfdmFsaWRf ZXhwciIpOwotICBwcF9jeHhfbGVmdF9wYXJlbiAocHApOworICBwcF9jeHhf d3Nfc3RyaW5nIChwcCwgIm5vZXhjZXB0Iik7CisgIHBwX2xlZnRfcGFyZW4g KHBwKTsKICAgcHAtPmV4cHJlc3Npb24gKFRSRUVfT1BFUkFORCAodCwgMCkp OwotICBwcF9jeHhfcmlnaHRfcGFyZW4gKHBwKTsKKyAgcHBfcmlnaHRfcGFy ZW4gKHBwKTsKIH0KIAordm9pZAorcHBfY3h4X3BhcmFtZXRlcml6ZWRfY29u c3RyYWludCAoY3h4X3ByZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQorewor ICBwcF9jeHhfd3Nfc3RyaW5nIChwcCwgIlxcLi4uIik7CisgIHBwX2xlZnRf cGFyZW4gKHBwKTsKKyAgcHBfY3h4X3BhcmFtZXRlcl9kZWNsYXJhdGlvbl9j bGF1c2UgKHBwLCBQQVJNX0NPTlNUUl9QQVJNUyAodCkpOworICBwcF9jeHhf d2hpdGVzcGFjZSAocHApOworICBwcF9jeHhfY29uc3RyYWludCAocHAsIFBB Uk1fQ09OU1RSX09QRVJBTkQgKHQpKTsKKyAgcHBfcmlnaHRfcGFyZW4gKHBw KTsKK30KKwordm9pZAorcHBfY3h4X2Nvbmp1bmN0aW9uIChjeHhfcHJldHR5 X3ByaW50ZXIgKnBwLCB0cmVlIHQpCit7CisgIHBwX2N4eF9jb25zdHJhaW50 IChwcCwgVFJFRV9PUEVSQU5EICh0LCAwKSk7CisgIHBwX2N4eF93c19zdHJp bmcgKHBwLCAiYW5kIik7CisgIHBwX2N4eF9jb25zdHJhaW50IChwcCwgVFJF RV9PUEVSQU5EICh0LCAxKSk7Cit9CisKK3ZvaWQKK3BwX2N4eF9kaXNqdW5j dGlvbiAoY3h4X3ByZXR0eV9wcmludGVyICpwcCwgdHJlZSB0KQoreworICBw cF9jeHhfY29uc3RyYWludCAocHAsIFRSRUVfT1BFUkFORCAodCwgMCkpOwor ICBwcF9jeHhfd3Nfc3RyaW5nIChwcCwgIm9yIik7CisgIHBwX2N4eF9jb25z dHJhaW50IChwcCwgVFJFRV9PUEVSQU5EICh0LCAxKSk7Cit9CisKK3ZvaWQK K3BwX2N4eF9jb25zdHJhaW50IChjeHhfcHJldHR5X3ByaW50ZXIgKnBwLCB0 cmVlIHQpCit7CisgIHN3aXRjaCAoVFJFRV9DT0RFICh0KSkKKyAgICB7Cisg ICAgY2FzZSBQUkVEX0NPTlNUUjoKKyAgICAgIHBwX2N4eF9wcmVkaWNhdGVf Y29uc3RyYWludCAocHAsIHQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNl IEVYUFJfQ09OU1RSOgorICAgICAgcHBfY3h4X2V4cHJlc3Npb25fY29uc3Ry YWludCAocHAsIHQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRZUEVf Q09OU1RSOgorICAgICAgcHBfY3h4X3R5cGVfY29uc3RyYWludCAocHAsIHQp OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElDT05WX0NPTlNUUjoKKyAg ICAgIHBwX2N4eF9pbXBsaWNpdF9jb252ZXJzaW9uX2NvbnN0cmFpbnQgKHBw LCB0KTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBERURVQ1RfQ09OU1RS OgorICAgICAgcHBfY3h4X2FyZ3VtZW50X2RlZHVjdGlvbl9jb25zdHJhaW50 IChwcCwgdCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRVhDRVBUX0NP TlNUUjoKKyAgICAgIHBwX2N4eF9leGNlcHRpb25fY29uc3RyYWludCAocHAs IHQpOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFBBUk1fQ09OU1RSOgor ICAgICAgcHBfY3h4X3BhcmFtZXRlcml6ZWRfY29uc3RyYWludCAocHAsIHQp OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTkpfQ09OU1RSOgorICAg ICAgcHBfY3h4X2Nvbmp1bmN0aW9uIChwcCwgdCk7CisgICAgICBicmVhazsK KworICAgIGNhc2UgRElTSl9DT05TVFI6CisgICAgICBwcF9jeHhfZGlzanVu Y3Rpb24gKHBwLCB0KTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoK KyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9Cit9CisKKwogDAog dHlwZWRlZiBjX3ByZXR0eV9wcmludF9mbiBwcF9mdW47CiAKZGlmZiAtLWdp dCBhL2djYy9jcC9jeHgtcHJldHR5LXByaW50LmggYi9nY2MvY3AvY3h4LXBy ZXR0eS1wcmludC5oCmluZGV4IDQ2MDY0NTUuLjQyODk3YjggMTAwNjQ0Ci0t LSBhL2djYy9jcC9jeHgtcHJldHR5LXByaW50LmgKKysrIGIvZ2NjL2NwL2N4 eC1wcmV0dHktcHJpbnQuaApAQCAtOTQsMTIgKzk0LDE5IEBAIHZvaWQgcHBf Y3h4X3VzZXJkZWZfbGl0ZXJhbCAoY3h4X3ByZXR0eV9wcmludGVyICosIHRy ZWUpOwogdm9pZCBwcF9jeHhfcGFyYW1ldGVyX2RlY2xhcmF0aW9uX2NsYXVz ZSAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwogdm9pZCBwcF9jeHhf cmVxdWlyZXNfY2xhdXNlIChjeHhfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7 CiB2b2lkIHBwX2N4eF9yZXF1aXJlc19leHByIChjeHhfcHJldHR5X3ByaW50 ZXIgKiwgdHJlZSk7Ci12b2lkIHBwX2N4eF9leHByX3JlcXVpcmVtZW50IChj eHhfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2N4eF9zaW1w bGVfcmVxdWlyZW1lbnQgKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsK IHZvaWQgcHBfY3h4X3R5cGVfcmVxdWlyZW1lbnQgKGN4eF9wcmV0dHlfcHJp bnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY3h4X2NvbXBvdW5kX3JlcXVpcmVt ZW50IChjeHhfcHJldHR5X3ByaW50ZXIgKiwgdHJlZSk7CiB2b2lkIHBwX2N4 eF9uZXN0ZWRfcmVxdWlyZW1lbnQgKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0 cmVlKTsKLXZvaWQgcHBfY3h4X3ZhbGlkZXhwcl9leHByIChjeHhfcHJldHR5 X3ByaW50ZXIgKiwgdHJlZSk7Ci12b2lkIHBwX2N4eF92YWxpZHR5cGVfZXhw ciAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwotdm9pZCBwcF9jeHhf Y29uc3RleHByX2V4cHIgKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsK LQordm9pZCBwcF9jeHhfcHJlZGljYXRlX2NvbnN0cmFpbnQgKGN4eF9wcmV0 dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQgcHBfY3h4X2V4cHJlc3Npb25f Y29uc3RyYWludCAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9p ZCBwcF9jeHhfdHlwZV9jb25zdHJhaW50IChjeHhfcHJldHR5X3ByaW50ZXIg KiwgdHJlZSk7Cit2b2lkIHBwX2N4eF9pbXBsaWNpdF9jb252ZXJzaW9uX2Nv bnN0cmFpbnQgKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQg cHBfY3h4X2FyZ3VtZW50X2RlZHVjdGlvbl9jb25zdHJhaW50IChjeHhfcHJl dHR5X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2N4eF9leGNlcHRpb25f Y29uc3RyYWludCAoY3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9p ZCBwcF9jeHhfcGFyYW1ldGVyaXplZF9jb25zdHJhaW50IChjeHhfcHJldHR5 X3ByaW50ZXIgKiwgdHJlZSk7Cit2b2lkIHBwX2N4eF9jb25qdW5jdGlvbiAo Y3h4X3ByZXR0eV9wcmludGVyICosIHRyZWUpOwordm9pZCBwcF9jeHhfZGlz anVuY3Rpb24gKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVlKTsKK3ZvaWQg cHBfY3h4X2NvbnN0cmFpbnQgKGN4eF9wcmV0dHlfcHJpbnRlciAqLCB0cmVl KTsKIAogI2VuZGlmIC8qIEdDQ19DWFhfUFJFVFRZX1BSSU5UX0ggKi8KZGlm ZiAtLWdpdCBhL2djYy9jcC9kZWNsLmMgYi9nY2MvY3AvZGVjbC5jCmluZGV4 IDQ2ODZhYjQuLjcyYmRiNTQgMTAwNjQ0Ci0tLSBhL2djYy9jcC9kZWNsLmMK KysrIGIvZ2NjL2NwL2RlY2wuYwpAQCAtMjYwNCw5ICsyNjA0LDEwIEBAIGR1 cGxpY2F0ZV9kZWNscyAodHJlZSBuZXdkZWNsLCB0cmVlIG9sZGRlY2wsIGJv b2wgbmV3ZGVjbF9pc19mcmllbmQpCiAJc25vZGUtPnJlbW92ZSAoKTsKICAg ICB9CiAKLSAgLy8gUmVtb3ZlIHRoZSBhc3NvY2lhdGVkIGNvbnN0cmFpbnRz IGZvciBuZXdkZWNsLCBpZiBhbnksIGJlZm9yZQotICAvLyBleHBsaWNpdGx5 IHJlY2xhaW1pbmcgbWVtb3J5LgotICByZW1vdmVfY29uc3RyYWludHMgKG5l d2RlY2wpOworICAvKiBSZW1vdmUgdGhlIGFzc29jaWF0ZWQgY29uc3RyYWlu dHMgZm9yIG5ld2RlY2wsIGlmIGFueSwgYmVmb3JlCisgICAgIHJlY2xhaW1p bmcgbWVtb3J5LiAqLworICBpZiAoZmxhZ19jb25jZXB0cykKKyAgICByZW1v dmVfY29uc3RyYWludHMgKG5ld2RlY2wpOwogCiAgIGdnY19mcmVlIChuZXdk ZWNsKTsKIApAQCAtNzY3OCwxMyArNzY3OSwxOCBAQCBncm9rZm5kZWNsICh0 cmVlIGN0eXBlLAogCiAgIGRlY2wgPSBidWlsZF9sYW5nX2RlY2wgKEZVTkNU SU9OX0RFQ0wsIGRlY2xhcmF0b3IsIHR5cGUpOwogCi0gIC8vIFNldCB0aGUg Y29uc3RyYWludHMgb24gdGhlIGRlY2xhcmF0aW9uLgorICAvKiBTZXQgdGhl IGNvbnN0cmFpbnRzIG9uIHRoZSBkZWNsYXJhdGlvbi4gKi8KICAgaWYgKGZs YWdfY29uY2VwdHMpCiAgICAgewotICAgICAgdHJlZSB0ZW1wX3JlcXMgPSBO VUxMX1RSRUU7CisgICAgICB0cmVlIHRtcGxfcmVxcyA9IE5VTExfVFJFRTsK ICAgICAgIGlmIChwcm9jZXNzaW5nX3RlbXBsYXRlX2RlY2wgPiB0ZW1wbGF0 ZV9jbGFzc19kZXB0aCAoY3R5cGUpKQotICAgICAgICB0ZW1wX3JlcXMgPSBU RU1QTEFURV9QQVJNU19DT05TVFJBSU5UUyAoY3VycmVudF90ZW1wbGF0ZV9w YXJtcyk7Ci0gICAgICB0cmVlIGNpID0gYnVpbGRfY29uc3RyYWludHMgKHRl bXBfcmVxcywgZGVjbF9yZXFzKTsKKyAgICAgICAgdG1wbF9yZXFzID0gVEVN UExBVEVfUEFSTVNfQ09OU1RSQUlOVFMgKGN1cnJlbnRfdGVtcGxhdGVfcGFy bXMpOworCisgICAgICAvKiBBZGp1c3QgdGhlIHJlcXVpcmVkIGV4cHJlc3Np b24gaW50byBhIGNvbnN0cmFpbnQuICovCisgICAgICBpZiAoZGVjbF9yZXFz KQorICAgICAgICBkZWNsX3JlcXMgPSBtYWtlX3ByZWRpY2F0ZV9jb25zdHJh aW50IChkZWNsX3JlcXMpOworCisgICAgICB0cmVlIGNpID0gYnVpbGRfY29u c3RyYWludHMgKHRtcGxfcmVxcywgZGVjbF9yZXFzKTsKICAgICAgIHNldF9j b25zdHJhaW50cyAoZGVjbCwgY2kpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv Z2NjL2NwL2RlY2wyLmMgYi9nY2MvY3AvZGVjbDIuYwppbmRleCBlYjNiMGY5 Li4zZDhkYjEyIDEwMDY0NAotLS0gYS9nY2MvY3AvZGVjbDIuYworKysgYi9n Y2MvY3AvZGVjbDIuYwpAQCAtNDk0MSw2ICs0OTQxLDcgQEAgbWFya191c2Vk ICh0cmVlIGRlY2wsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQogCSAgICAg ICYmIChERUNMX0RFQ0xBUkVEX0NPTlNURVhQUl9QIChkZWNsKQogCQkgIHx8 IERFQ0xfT01QX0RFQ0xBUkVfUkVEVUNUSU9OX1AgKGRlY2wpKSkKIAkgIHx8 IHVuZGVkdWNlZF9hdXRvX2RlY2wgKGRlY2wpKQorICAgICAgJiYgIURFQ0xf REVDTEFSRURfQ09OQ0VQVF9QIChkZWNsKQogICAgICAgJiYgIXVzZXNfdGVt cGxhdGVfcGFybXMgKERFQ0xfVElfQVJHUyAoZGVjbCkpKQogICAgIHsKICAg ICAgIC8qIEluc3RhbnRpYXRpbmcgYSBmdW5jdGlvbiB3aWxsIHJlc3VsdCBp biBnYXJiYWdlIGNvbGxlY3Rpb24uICBXZQpAQCAtNTAzNCw2ICs1MDM1LDcg QEAgbWFya191c2VkICh0cmVlIGRlY2wsIHRzdWJzdF9mbGFnc190IGNvbXBs YWluKQogICAgIH0KICAgZWxzZSBpZiAoVkFSX09SX0ZVTkNUSU9OX0RFQ0xf UCAoZGVjbCkKIAkgICAmJiBERUNMX1RFTVBMQVRFX0lORk8gKGRlY2wpCisg ICAgICAgICAgICYmICFERUNMX0RFQ0xBUkVEX0NPTkNFUFRfUCAoZGVjbCkK IAkgICAmJiAoIURFQ0xfRVhQTElDSVRfSU5TVEFOVElBVElPTiAoZGVjbCkK IAkgICAgICAgfHwgYWx3YXlzX2luc3RhbnRpYXRlX3AgKGRlY2wpKSkKICAg ICAvKiBJZiB0aGlzIGlzIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUgdGhhdCBp cyBhbiBpbnN0YW5jZSBvZiBzb21lCmRpZmYgLS1naXQgYS9nY2MvY3AvZXJy b3IuYyBiL2djYy9jcC9lcnJvci5jCmluZGV4IDM3NzlmMTQuLjAyMjAzM2Ug MTAwNjQ0Ci0tLSBhL2djYy9jcC9lcnJvci5jCisrKyBiL2djYy9jcC9lcnJv ci5jCkBAIC0yNjk2LDI5ICsyNjk2LDM4IEBAIGR1bXBfZXhwciAoY3h4X3By ZXR0eV9wcmludGVyICpwcCwgdHJlZSB0LCBpbnQgZmxhZ3MpCiAgICAgICBw cF9jeHhfcmVxdWlyZXNfZXhwciAoY3h4X3BwLCB0KTsKICAgICAgIGJyZWFr OwogCi0gICAgY2FzZSBFWFBSX1JFUToKLSAgICAgIHBwX2N4eF9leHByX3Jl cXVpcmVtZW50IChjeHhfcHAsIHQpOworICAgIGNhc2UgU0lNUExFX1JFUToK KyAgICAgIHBwX2N4eF9zaW1wbGVfcmVxdWlyZW1lbnQgKGN4eF9wcCwgdCk7 CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9SRVE6CiAgICAgICBw cF9jeHhfdHlwZV9yZXF1aXJlbWVudCAoY3h4X3BwLCB0KTsKICAgICAgIGJy ZWFrOwogCisgICAgY2FzZSBDT01QT1VORF9SRVE6CisgICAgICBwcF9jeHhf Y29tcG91bmRfcmVxdWlyZW1lbnQgKGN4eF9wcCwgdCk7CisgICAgICBicmVh azsKKwogICAgIGNhc2UgTkVTVEVEX1JFUToKICAgICAgIHBwX2N4eF9uZXN0 ZWRfcmVxdWlyZW1lbnQgKGN4eF9wcCwgdCk7CiAgICAgICBicmVhazsKIAot ICAgIGNhc2UgVkFMSURFWFBSX0VYUFI6Ci0gICAgICBwcF9jeHhfdmFsaWRl eHByX2V4cHIgKGN4eF9wcCwgdCk7CisgICAgY2FzZSBQUkVEX0NPTlNUUjoK KyAgICAgIHBwX2N4eF93c19zdHJpbmcgKGN4eF9wcCwgIl9fcHJlZCIpOwor ICAgICAgZHVtcF9leHByIChjeHhfcHAsIFRSRUVfT1BFUkFORCAodCwgMCks IGZsYWdzIHwgVEZGX0VYUFJfSU5fUEFSRU5TKTsKICAgICAgIGJyZWFrOwog Ci0gICAgY2FzZSBWQUxJRFRZUEVfRVhQUjoKLSAgICAgIHBwX2N4eF92YWxp ZHR5cGVfZXhwciAoY3h4X3BwLCB0KTsKKyAgICBjYXNlIEVYUFJfQ09OU1RS OgorICAgIGNhc2UgVFlQRV9DT05TVFI6CisgICAgY2FzZSBJQ09OVl9DT05T VFI6CisgICAgY2FzZSBERURVQ1RfQ09OU1RSOgorICAgIGNhc2UgRVhDRVBU X0NPTlNUUjoKKyAgICBjYXNlIFBBUk1fQ09OU1RSOgorICAgIGNhc2UgQ09O Sl9DT05TVFI6CisgICAgY2FzZSBESVNKX0NPTlNUUjoKKyAgICAgIHBwX2N4 eF9jb25zdHJhaW50IChjeHhfcHAsIHQpOwogICAgICAgYnJlYWs7CiAKLSAg ICBjYXNlIENPTlNURVhQUl9FWFBSOgotICAgICAgcHBfY3h4X2NvbnN0ZXhw cl9leHByIChjeHhfcHAsIHQpOwotCiAgICAgY2FzZSBQTEFDRUhPTERFUl9F WFBSOgogICAgICAgcHBfc3RyaW5nIChwcCwgTV8oIip0aGlzIikpOwogICAg ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9nY2MvY3AvbG9naWMuY2MgYi9nY2Mv Y3AvbG9naWMuY2MKaW5kZXggMzg5ZGYwMi4uNTM5MGFjNCAxMDA2NDQKLS0t IGEvZ2NjL2NwL2xvZ2ljLmNjCisrKyBiL2djYy9jcC9sb2dpYy5jYwpAQCAt NTIsMTYgKzUyLDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEkxLCB0eXBlbmFt ZSBJMiwgdHlwZW5hbWUgSTM+CiAgICAgcmV0dXJuIGl0ZXI7CiAgIH0KIAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIFByb29mIHN0YXRlCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAvLwotLy8gVGVybSBMaXN0Ci0vLwotLy8gQSB0ZXJtIGxpc3Qg aXMgYSBsaXN0IG9mIHByb3Bvc2l0aW9ucyBpbiB0aGUgY29uc3RyYWludCBs YW5ndWFnZS4gSXQgaXMKLS8vIHVzZWQgdG8gbWFpbnRhaW4gdGhlIGxpc3Rz IG9mIGFzc3VtcHRpb25zIGFuZCBjb25jbHVzaW9ucyBpbiBhIHByb29mIGdv YWwuCi0vLwotLy8gRWFjaCB0ZXJtIGxpc3QgbWFpbnRhaW5zIGFuIGl0ZXJh dG9yIHRoYXQgcmVmZXJzIHRvIHRoZSBjdXJyZW50IHRlcm0uIFRoaXMKLS8v IGNhbiBiZSB1c2VkIGJ5IHZhcmlvdXMgdGFjdGljcyB0byBzdXBwb3J0IGl0 ZXJhdGlvbiBhbmQgc3RhdGVmdWwKLS8vIG1hbmlwdWxhdGlvbiBvZiB0aGUg bGlzdC4KKy8qIEEgdGVybSBsaXN0IGlzIGEgbGlzdCBvZiBhdG9taWMgY29u c3RyYWludHMuIEl0IGlzIHVzZWQgCisgICB0byBtYWludGFpbiB0aGUgbGlz dHMgb2YgYXNzdW1wdGlvbnMgYW5kIGNvbmNsdXNpb25zIGluIGEgCisgICBw cm9vZiBnb2FsLgorCisgICBFYWNoIHRlcm0gbGlzdCBtYWludGFpbnMgYW4g aXRlcmF0b3IgdGhhdCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgCisgICB0ZXJt LiBUaGlzIGNhbiBiZSB1c2VkIGJ5IHZhcmlvdXMgdGFjdGljcyB0byBzdXBw b3J0IGl0ZXJhdGlvbiAKKyAgIGFuZCBzdGF0ZWZ1bCBtYW5pcHVsYXRpb24g b2YgdGhlIGxpc3QuICovCiBzdHJ1Y3QgdGVybV9saXN0IDogc3RkOjpsaXN0 PHRyZWU+CiB7CiAgIHRlcm1fbGlzdCAoKTsKQEAgLTEwMSwxOSArMTAyLDE5 IEBAIHRlcm1fbGlzdDo6b3BlcmF0b3I9IChjb25zdCB0ZXJtX2xpc3QgJngp CiAgIHJldHVybiAqdGhpczsKIH0KIAotLy8gSW5zZXJ0IHRoZSB0ZXJtIFQg aW50byB0aGUgbGlzdCBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24sIG1h a2luZwotLy8gdGhpcyB0ZXJtIGN1cnJlbnQuCisvKiBJbnNlcnQgdGhlIHRl cm0gVCBpbnRvIHRoZSBsaXN0IGJlZm9yZSB0aGUgY3VycmVudCAKKyAgIHBv c2l0aW9uLCBtYWtpbmcgdGhpcyB0ZXJtIGN1cnJlbnQuICovCiBpbmxpbmUg dm9pZAogdGVybV9saXN0OjppbnNlcnQgKHRyZWUgdCkKIHsKICAgY3VycmVu dCA9IHN0ZDo6bGlzdDx0cmVlPjo6aW5zZXJ0IChjdXJyZW50LCB0KTsKIH0K IAotLy8gUmVtb3ZlIHRoZSBjdXJyZW50IHRlcm0gZnJvbSB0aGUgbGlzdCwg cmVwb3NpdGlvbmluZyB0byB0aGUgdGVybQotLy8gZm9sbG93aW5nIHRoZSBy ZW1vdmVkIHRlcm0uIE5vdGUgdGhhdCB0aGUgbmV3IHBvc2l0aW9uIGNvdWxk IGJlIHBhc3QKLS8vIHRoZSBlbmQgb2YgdGhlIGxpc3QuCi0vLwotLy8gVGhl IHJlbW92ZWQgdGVybSBpcyByZXR1cm5lZC4KKy8qIFJlbW92ZSB0aGUgY3Vy cmVudCB0ZXJtIGZyb20gdGhlIGxpc3QsIHJlcG9zaXRpb25pbmcgdG8gCisg ICB0aGUgdGVybSBmb2xsb3dpbmcgdGhlIHJlbW92ZWQgdGVybS4gTm90ZSB0 aGF0IHRoZSBuZXcgCisgICBwb3NpdGlvbiBjb3VsZCBiZSBwYXN0IHRoZSBl bmQgb2YgdGhlIGxpc3QuCisKKyAgIFRoZSByZW1vdmVkIHRlcm0gaXMgcmV0 dXJuZWQuICovCiBpbmxpbmUgdHJlZQogdGVybV9saXN0OjplcmFzZSAoKQog ewpAQCAtMTIyLDIxICsxMjMsMjEgQEAgdGVybV9saXN0OjplcmFzZSAoKQog ICByZXR1cm4gdDsKIH0KIAotLy8gSW5pdGlhbGl6ZSB0aGUgY3VycmVudCB0 ZXJtIHRvIHRoZSBmaXJzdCBpbiB0aGUgbGlzdC4KKy8qIEluaXRpYWxpemUg dGhlIGN1cnJlbnQgdGVybSB0byB0aGUgZmlyc3QgaW4gdGhlIGxpc3QuICov CiBpbmxpbmUgdm9pZAogdGVybV9saXN0OjpzdGFydCAoKQogewogICBjdXJy ZW50ID0gYmVnaW4gKCk7CiB9CiAKLS8vIEFkdmFuY2UgdG8gdGhlIG5leHQg dGVybSBpbiB0aGUgbGlzdC4KKy8qIEFkdmFuY2UgdG8gdGhlIG5leHQgdGVy bSBpbiB0aGUgbGlzdC4gKi8KIGlubGluZSB2b2lkCiB0ZXJtX2xpc3Q6Om5l eHQgKCkKIHsKICAgKytjdXJyZW50OwogfQogCi0vLyBSZXR1cm5zIHRydWUg d2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQuCisv KiBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBw YXN0IHRoZSBlbmQuICovCiBpbmxpbmUgYm9vbAogdGVybV9saXN0Ojpkb25l ICgpIGNvbnN0CiB7CkBAIC0xNDQsMjUgKzE0NSwyMCBAQCB0ZXJtX2xpc3Q6 OmRvbmUgKCkgY29uc3QKIH0KIAogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSAvLwotLy8gUHJvb2YgR29hbAotLy8KLS8vIEEgZ29hbCAo b3Igc3ViZ29hbCkgbW9kZWxzIGEgc2VxdWVudCBvZiB0aGUgZm9ybSAnQSB8 LSBDJyB3aGVyZSBBIGFuZCBDIGFyZQotLy8gbGlzdHMgb2YgYXNzdW1wdGlv bnMgYW5kIGNvbmNsdXNpb25zIHdyaXR0ZW4gYXMgcHJvcG9zaXRpb25zIGlu IHRoZQotLy8gY29uc3RyYWludCBsYW5ndWFnZSAoaS5lLiwgbGlzdHMgb2Yg dHJlZXMpLgorLyogQSBnb2FsIChvciBzdWJnb2FsKSBtb2RlbHMgYSBzZXF1 ZW50IG9mIHRoZSBmb3JtIAorICAgJ0EgfC0gQycgd2hlcmUgQSBhbmQgQyBh cmUgbGlzdHMgb2YgYXNzdW1wdGlvbnMgYW5kIAorICAgY29uY2x1c2lvbnMg d3JpdHRlbiBhcyBwcm9wb3NpdGlvbnMgaW4gdGhlIGNvbnN0cmFpbnQgCisg ICBsYW5ndWFnZSAoaS5lLiwgbGlzdHMgb2YgdHJlZXMpLgorKi8KIHN0cnVj dCBwcm9vZl9nb2FsCiB7CiAgIHRlcm1fbGlzdCBhc3N1bXB0aW9uczsKICAg dGVybV9saXN0IGNvbmNsdXNpb25zOwogfTsKIAotCi0vLyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAvLwotLy8gUHJvb2YgU3RhdGUKLS8vCi0v LyBBIHByb29mIHN0YXRlIG93bnMgYSBsaXN0IG9mIGdvYWxzIGFuZCB0cmFj a3MgdGhlIGN1cnJlbnQgc3ViLWdvYWwuCi0vLyBUaGUgY2xhc3MgYWxzbyBw cm92aWRlcyBmYWNpbGl0aWVzIGZvciBtYW5hZ2luZyBzdWJnb2FscyBhbmQg Y29uc3RydWN0aW5nCi0vLyB0ZXJtIGxpc3RzLgorLyogQSBwcm9vZiBzdGF0 ZSBvd25zIGEgbGlzdCBvZiBnb2FscyBhbmQgdHJhY2tzIHRoZSAKKyAgIGN1 cnJlbnQgc3ViLWdvYWwuIFRoZSBjbGFzcyBhbHNvIHByb3ZpZGVzIGZhY2ls aXRpZXMgCisgICBmb3IgbWFuYWdpbmcgc3ViZ29hbHMgYW5kIGNvbnN0cnVj dGluZyB0ZXJtIGxpc3RzLiAqLwogc3RydWN0IHByb29mX3N0YXRlIDogc3Rk OjpsaXN0PHByb29mX2dvYWw+CiB7CiAgIHByb29mX3N0YXRlICgpOwpAQCAt MTcwLDE0NCArMTY2LDk1IEBAIHN0cnVjdCBwcm9vZl9zdGF0ZSA6IHN0ZDo6 bGlzdDxwcm9vZl9nb2FsPgogICBpdGVyYXRvciBicmFuY2ggKGl0ZXJhdG9y IGkpOwogfTsKIAotLy8gQW4gYWxpYXMgZm9yIHByb29mIHN0YXRlIGl0ZXJh dG9ycy4KKy8qIEFuIGFsaWFzIGZvciBwcm9vZiBzdGF0ZSBpdGVyYXRvcnMu ICovCiB0eXBlZGVmIHByb29mX3N0YXRlOjppdGVyYXRvciBnb2FsX2l0ZXJh dG9yOwogCi0vLyBJbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIGEgc2luZ2xl IGVtcHR5IGdvYWwsIGFuZCBzZXQgdGhhdCBnb2FsIGFzIHRoZQotLy8gY3Vy cmVudCBzdWJnb2FsLgorLyogSW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCBh IHNpbmdsZSBlbXB0eSBnb2FsLCAKKyAgIGFuZCBzZXQgdGhhdCBnb2FsIGFz IHRoZSBjdXJyZW50IHN1YmdvYWwuICovCiBpbmxpbmUKIHByb29mX3N0YXRl Ojpwcm9vZl9zdGF0ZSAoKQogICA6IHN0ZDo6bGlzdDxwcm9vZl9nb2FsPiAo MSkKIHsgfQogCiAKLS8vIEJyYW5jaCB0aGUgY3VycmVudCBnb2FsIGJ5IGNy ZWF0aW5nIGEgbmV3IHN1YmdvYWwsIHJldHVybmluZyBhIHJlZmVyZW5jZSB0 bwotLy8gdGhlIG5ldyBvYmplY3QuIFRoaXMgZG9lcyBub3QgdXBkYXRlIHRo ZSBjdXJyZW50IGdvYWwuCisvKiBCcmFuY2ggdGhlIGN1cnJlbnQgZ29hbCBi eSBjcmVhdGluZyBhIG5ldyBzdWJnb2FsLCAKKyAgIHJldHVybmluZyBhIHJl ZmVyZW5jZSB0byAvLyB0aGUgbmV3IG9iamVjdC4gVGhpcyBkb2VzIAorICAg bm90IHVwZGF0ZSB0aGUgY3VycmVudCBnb2FsLiAqLwogaW5saW5lIHByb29m X3N0YXRlOjppdGVyYXRvcgogcHJvb2Zfc3RhdGU6OmJyYW5jaCAoaXRlcmF0 b3IgaSkKIHsKICAgcmV0dXJuIGluc2VydCAoKytpLCAqaSk7CiB9CiAKKy8q LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBMb2dpY2FsIHJ1bGVzCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0qLwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSAvLwotLy8gTG9naWNhbCBSdWxlcwotLy8KLS8vIFRoZXNlIGZ1 bmN0aW9ucyBtb2RpZnkgdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGdvYWwgYnkg ZGVjb21wb3NpbmcKLS8vIGxvZ2ljYWwgZXhwcmVzc2lvbnMgdXNpbmcgdGhl IGxvZ2ljYWwgcnVsZXMgb2Ygc2VxdWVudCBjYWxjdWx1cyBmb3IKLS8vIGZp cnN0IG9yZGVyIGxvZ2ljLgotLy8KLS8vIE5vdGUgdGhhdCBpbiBlYWNoIGRl Y29tcG9zaXRpb24gcnVsZSwgdGhlIHRlcm0gVCBoYXMgYmVlbiBlcmFzZWQK LS8vIGZyb20gdGVybSBsaXN0IGJlZm9yZSB0aGUgc3BlY2lmaWMgcnVsZSBp cyBhcHBsaWVkLgotCi0vLyBMZWZ0LWFuZCBsb2dpY2FsIHJ1bGUuCi0vLwot Ly8gIEdhbW1hLCBQLCBRIHwtIERlbHRhCi0vLyAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotLy8gIEdhbW1hLCBQIGFuZCBRIHwtIERlbHRhCi1pbmxp bmUgdm9pZAotbGVmdF9hbmQgKHByb29mX3N0YXRlICYsIGdvYWxfaXRlcmF0 b3IgaSwgdHJlZSB0KQorLypUaGVzZSBmdW5jdGlvbnMgbW9kaWZ5IHRoZSBj dXJyZW50IHN0YXRlIGFuZCBnb2FsIGJ5IGRlY29tcG9zaW5nCisgIGxvZ2lj YWwgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIGxvZ2ljYWwgcnVsZXMgb2Ygc2Vx dWVudCBjYWxjdWx1cyBmb3IKKyAgZmlyc3Qgb3JkZXIgbG9naWMuCisKKyAg Tm90ZSB0aGF0IGluIGVhY2ggZGVjb21wb3NpdGlvbiBydWxlLCB0aGUgdGVy bSBUIGhhcyBiZWVuIGVyYXNlZAorICBmcm9tIHRlcm0gbGlzdCBiZWZvcmUg dGhlIHNwZWNpZmljIHJ1bGUgaXMgYXBwbGllZC4gKi8KKworLyogVGhlIGxl ZnQgbG9naWNhbCBydWxlIGZvciBjb25qdW5jdGlvbiBhZGRzIGJvdGggb3Bl cmFuZHMKKyAgIHRvIHRoZSBjdXJyZW50IHNldCBvZiBjb25zdHJhaW50cy4g Ki8KK3ZvaWQKK2xlZnRfY29uanVuY3Rpb24gKHByb29mX3N0YXRlICYsIGdv YWxfaXRlcmF0b3IgaSwgdHJlZSB0KQogewotICBnY2NfYXNzZXJ0IChUUkVF X0NPREUgKHQpID09IFRSVVRIX0FORElGX0VYUFIpOworICBnY2NfYXNzZXJ0 IChUUkVFX0NPREUgKHQpID09IENPTkpfQ09OU1RSKTsKIAotICAvLyBJbnNl cnQgdGhlIG9wZXJhbmRzIGludG8gdGhlIGN1cnJlbnQgYnJhbmNoLiBOb3Rl IHRoYXQgdGhlCi0gIC8vIGZpbmFsIG9yZGVyIG9mIGluc2VydGlvbiBpcyBs ZWZ0LXRvLXJpZ2h0LgorICAvKiBJbnNlcnQgdGhlIG9wZXJhbmRzIGludG8g dGhlIGN1cnJlbnQgYnJhbmNoLiBOb3RlIHRoYXQgdGhlCisgICAgIGZpbmFs IG9yZGVyIG9mIGluc2VydGlvbiBpcyBsZWZ0LXRvLXJpZ2h0LiAqLwogICB0 ZXJtX2xpc3QgJmwgPSBpLT5hc3N1bXB0aW9uczsKICAgbC5pbnNlcnQgKFRS RUVfT1BFUkFORCAodCwgMSkpOwogICBsLmluc2VydCAoVFJFRV9PUEVSQU5E ICh0LCAwKSk7CiB9CiAKLS8vIExlZnQtb3IgbG9naWNhbCBydWxlLgotLy8K LS8vICBHYW1tYSwgUCB8LSBEZWx0YSAgICBHYW1tYSwgUSB8LSBEZWx0YQot Ly8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0vLyAgR2FtbWEsIFAgb3IgUSB8LSBEZWx0YQotaW5saW5lIHZvaWQKLWxl ZnRfb3IgKHByb29mX3N0YXRlICZzLCBnb2FsX2l0ZXJhdG9yIGksIHRyZWUg dCkKKy8qIFRoZSBsZWZ0IGxvZ2ljYWwgcnVsZSBmb3IgZGlzanVuY3Rpb24g Y3JlYXRlcyBhIG5ldyBnb2FsLCAKKyAgIGFkZGluZyB0aGUgZmlyc3Qgb3Bl cmFuZCB0byB0aGUgb3JpZ2luYWwgc2V0IG9mIAorICAgY29uc3RyYWludHMg YW5kIHRoZSBzZWNvbmQgb3BlcmFuZCB0byB0aGUgbmV3IHNldCAKKyAgIG9m IGNvbnN0cmFpbnRzLiAqLwordm9pZAorbGVmdF9kaXNqdW5jdGlvbiAocHJv b2Zfc3RhdGUgJnMsIGdvYWxfaXRlcmF0b3IgaSwgdHJlZSB0KQogewotICBn Y2NfYXNzZXJ0IChUUkVFX0NPREUgKHQpID09IFRSVVRIX09SSUZfRVhQUik7 CisgIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAodCkgPT0gRElTSl9DT05TVFIp OwogCi0gIC8vIEJyYW5jaCB0aGUgY3VycmVudCBzdWJnb2FsLgorICAvKiBC cmFuY2ggdGhlIGN1cnJlbnQgc3ViZ29hbC4gKi8KICAgZ29hbF9pdGVyYXRv ciBqID0gcy5icmFuY2ggKGkpOwogICB0ZXJtX2xpc3QgJmwxID0gaS0+YXNz dW1wdGlvbnM7CiAgIHRlcm1fbGlzdCAmbDIgPSBqLT5hc3N1bXB0aW9uczsK IAotICAvLyBJbnNlcnQgb3BlcmFuZHMgaW50byB0aGUgZGlmZmVyZW50IGJy YW5jaGVzLgorICAvKiBJbnNlcnQgb3BlcmFuZHMgaW50byB0aGUgZGlmZmVy ZW50IGJyYW5jaGVzLiAqLwogICBsMS5pbnNlcnQgKFRSRUVfT1BFUkFORCAo dCwgMCkpOwogICBsMi5pbnNlcnQgKFRSRUVfT1BFUkFORCAodCwgMSkpOwog fQogCi0vLyBMZWZ0LXJlcXVpcmVzIGxvZ2ljYWwgcnVsZQotLy8gQSByZXF1 aXJlbWVudCBpcyBlZmZlY3RpdmVseSBhIGNvbmp1bmN0aW9uIG9mIHN5bnRh Y3RpYyByZXF1aXJlbWVudHMuCi0vLyBUaGUgYXJndW1lbnRzIGFyZSBkaXNj YXJkZWQuCi0vLwotLy8gIEdhbW1hLCBQMSwgUDIsIC4uLiwgUG4gfC0gRGVs dGEKLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotLy8gIEdhbW1hLCByZXF1aXJlcyhhcmdzKSB7IFAx LCBQMiwgLi4uLCBQbiB9IHwtIERlbHRhCi1pbmxpbmUgdm9pZAotbGVmdF9y ZXF1aXJlcyAocHJvb2Zfc3RhdGUgJiwgZ29hbF9pdGVyYXRvciBpLCB0cmVl IHQpCisvKiBUaGUgbGVmdCBsb2dpY2FsIHJ1bGVzIGZvciBwYXJhbWV0ZXJp emVkIGNvbnN0cmFpbnRzCisgICBhZGRzIGl0cyBvcGVyYW5kIHRvIHRoZSBj dXJyZW50IGdvYWwuIFRoZSBsaXN0IG9mCisgICBwYXJhbWV0ZXJzIGFyZSBl ZmZlY3RpdmVseSBkaXNjYXJkZWQuICovCit2b2lkCitsZWZ0X3BhcmFtZXRl cml6ZWRfY29uc3RyYWludCAocHJvb2Zfc3RhdGUgJiwgZ29hbF9pdGVyYXRv ciBpLCB0cmVlIHQpCiB7Ci0gIGdjY19hc3NlcnQgKFRSRUVfQ09ERSAodCkg PT0gUkVRVUlSRVNfRVhQUik7Ci0KLSAgLy8gSW5zZXJ0IHRoZSBzdWItZXhw cmVzc2lvbnMgaW50byB0aGUgY3VyZW50IHRlcm0gbGlzdC4KKyAgZ2NjX2Fz c2VydCAoVFJFRV9DT0RFICh0KSA9PSBQQVJNX0NPTlNUUik7CiAgIHRlcm1f bGlzdCAmbCA9IGktPmFzc3VtcHRpb25zOwotICBmb3IgKHRyZWUgcCA9IFRS RUVfT1BFUkFORCAodCwgMSk7IHA7IHAgPSBUUkVFX0NIQUlOIChwKSkKLSAg ICBsLmluc2VydCAoVFJFRV9WQUxVRSAocCkpOworICBsLmluc2VydCAoUEFS TV9DT05TVFJfT1BFUkFORCAodCkpOwogfQogCi0vLyBSaWdodC1hbmQgbG9n aWNhbCBydWxlLgotLy8KLS8vICBHYW1tYSB8LSBQLCBEZWx0YSAgICBHYW1t YSB8LSBRLCBEZWx0YQotLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0vLyAgR2FtbWEgfC0gUCBhbmQgUSwgRGVsdGEK LWlubGluZSB2b2lkCi1yaWdodF9hbmQgKHByb29mX3N0YXRlICZzLCBnb2Fs X2l0ZXJhdG9yIGksIHRyZWUgdCkKLXsKLSAgZ2NjX2Fzc2VydCAoVFJFRV9D T0RFICh0KSA9PSBUUlVUSF9PUklGX0VYUFIpOworLyotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg IERlY29tcG9zaXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCiAKLSAgLy8gQnJhbmNoIHRoZSBjdXJyZW50IHN1YmdvYWwuCi0gIGdv YWxfaXRlcmF0b3IgaiA9IHMuYnJhbmNoIChpKTsKLSAgdGVybV9saXN0ICZs MSA9IGktPmNvbmNsdXNpb25zOwotICB0ZXJtX2xpc3QgJmwyID0gai0+Y29u Y2x1c2lvbnM7CisvKiBUaGUgZm9sbG93aW5nIGFsZ29yaXRobXMgZGVjb21w b3NlIGV4cHJlc3Npb25zIGludG8gc2V0cyBvZiAKKyAgIGF0b21pYyBwcm9w b3NpdGlvbnMuIEluIHRlcm1zIG9mIHRoZSBzZXF1ZW50IGNhbGN1bHVzLCB0 aGVzZQorICAgZnVuY3Rpb25zIGV4ZXJjaXNlIHRoZSBsb2dpY2FsIHJ1bGVz IG9ubHkuIAogCi0gIC8vIEluc2VydCBvcGVyYW5kcyBpbnRvIHRoZSBkaWZm ZXJlbnQgYnJhbmNoZXMuCi0gIGwxLmluc2VydCAoVFJFRV9PUEVSQU5EICh0 LCAwKSk7Ci0gIGwyLmluc2VydCAoVFJFRV9PUEVSQU5EICh0LCAxKSk7Ci19 Ci0KLS8vIFJpZ2h0LW9yIGxvZ2ljYWwgcnVsZS4KLS8vCi0vLyAgR2FtbWEg fC0gUCwgUSwgRGVsdGEKLS8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LS8vICBHYW1tYSB8LSBQIG9yIFEsIERlbHRhCi1pbmxpbmUgdm9pZAotcmln aHRfb3IgKHByb29mX3N0YXRlICYsIGdvYWxfaXRlcmF0b3IgaSwgdHJlZSB0 KQotewotICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKHQpID09IFRSVVRIX0FO RElGX0VYUFIpOwotCi0gIC8vIEluc2VydCB0aGUgb3BlcmFuZHMgaW50byB0 aGUgY3VycmVudCBicmFuY2guIE5vdGUgdGhhdCB0aGUKLSAgLy8gZmluYWwg b3JkZXIgb2YgaW5zZXJ0aW9uIGlzIGxlZnQtdG8tcmlnaHQuCi0gIHRlcm1f bGlzdCAmbCA9IGktPmNvbmNsdXNpb25zOwotICBsLmluc2VydCAoVFJFRV9P UEVSQU5EICh0LCAxKSk7Ci0gIGwuaW5zZXJ0IChUUkVFX09QRVJBTkQgKHQs IDApKTsKLX0KLQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAvLwotLy8gRGVjb21wb3NpdGlvbgotLy8KLS8vIFRoZSBmb2xsb3dpbmcg YWxnb3JpdGhtcyBkZWNvbXBvc2UgZXhwcmVzc2lvbnMgaW50byBzZXRzIG9m IGF0b21pYwotLy8gcHJvcG9zaXRpb25zLgotLy8KLS8vIFRoZXNlIGRlY29t cG9zaXRpb24gc3RyYXRlZ2llcyBkbyBub3QgYnJhbmNoIGNvbmNsdXNpb25z IHNvIHRoYXQKLS8vIG9ubHkgYSBzaW5nbGUgdGVybSBleGlzdHMgb24gdGhl IHJpZ2h0IHNpZGUuIFRoZXNlIGFsZ29yaXRobXMgZGVjb21wb3NlCi0vLyBl eHByZXNzaW9ucyB1bnRpbCB3ZSBoYXZlIGEgc2V0IG9mIGF0b21pYyBzZXF1 ZW50IHRoYXQgY29udGFpbiBubwotLy8gbW9yZSBsb2dpY2FsIGV4cHJlc3Np b25zLgotCi0vLyBMZWZ0IGRlY29tcG9zaXRpb24uCi0vLyBDb250aW51YWxs eSBkZWNvbXBvc2UgYXNzdW1wdGlvbnMgdW50aWwgdGhlcmUgYXJlIG5vIHRl cm1zIGluIGFueQotLy8gc3ViZ29hbCB0aGF0IGNhbiBiZSBmdXJ0aGVyIGRl Y29tcG9zZWQuCisgICBUaGlzIGlzIGVxdWl2YWxlbnQsIGZvciB0aGUgcHVy cG9zZSBvZiBkZXRlcm1pbmluZyBzdWJzdW1wdGlvbiwKKyAgIHRvIHJld3Jp dGluZyBhIGNvbnN0cmFpbnQgaW4gZGlzanVuY3RpdmUgbm9ybWFsIGZvcm0u IEl0IGFsc28KKyAgIGFsbG93cyB0aGUgcmVzdWx0aW5nIGFzc3VtcHRpb25z IHRvIGJlIHVzZWQgYXMgZGVjbGFyYXRpb25zCisgICBmb3IgdGhlIHB1cnBv c2Ugb2Ygc2VwYXJhdGUgY2hlY2tpbmcuICovCiAKKy8qIEFwcGx5IHRoZSBs ZWZ0IGxvZ2ljYWwgcnVsZXMgdG8gdGhlIHByb29mIHN0YXRlLiAqLwogdm9p ZAogZGVjb21wb3NlX2xlZnRfdGVybSAocHJvb2Zfc3RhdGUgJnMsIGdvYWxf aXRlcmF0b3IgaSkKIHsKQEAgLTMxNSwxNCArMjYyLDE0IEBAIGRlY29tcG9z ZV9sZWZ0X3Rlcm0gKHByb29mX3N0YXRlICZzLCBnb2FsX2l0ZXJhdG9yIGkp CiAgIHRyZWUgdCA9IGwuY3VycmVudF90ZXJtICgpOwogICBzd2l0Y2ggKFRS RUVfQ09ERSAodCkpCiAgICAgewotICAgIGNhc2UgVFJVVEhfQU5ESUZfRVhQ UjoKLSAgICAgIGxlZnRfYW5kIChzLCBpLCBsLmVyYXNlICgpKTsKKyAgICBj YXNlIENPTkpfQ09OU1RSOgorICAgICAgbGVmdF9jb25qdW5jdGlvbiAocywg aSwgbC5lcmFzZSAoKSk7CiAgICAgICBicmVhazsKLSAgICBjYXNlIFRSVVRI X09SSUZfRVhQUjoKLSAgICAgIGxlZnRfb3IgKHMsIGksIGwuZXJhc2UgKCkp OworICAgIGNhc2UgRElTSl9DT05TVFI6CisgICAgICBsZWZ0X2Rpc2p1bmN0 aW9uIChzLCBpLCBsLmVyYXNlICgpKTsKICAgICAgIGJyZWFrOwotICAgIGNh c2UgUkVRVUlSRVNfRVhQUjoKLSAgICAgIGxlZnRfcmVxdWlyZXMgKHMsIGks IGwuZXJhc2UgKCkpOworICAgIGNhc2UgUEFSTV9DT05TVFI6CisgICAgICBs ZWZ0X3BhcmFtZXRlcml6ZWRfY29uc3RyYWludCAocywgaSwgbC5lcmFzZSAo KSk7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgbC5uZXh0 ICgpOwpAQCAtMzMwLDYgKzI3Nyw5IEBAIGRlY29tcG9zZV9sZWZ0X3Rlcm0g KHByb29mX3N0YXRlICZzLCBnb2FsX2l0ZXJhdG9yIGkpCiAgICAgfQogfQog CisvKiBBcHBseSB0aGUgbGVmdCBsb2dpY2FsIHJ1bGVzIG9mIHRoZSBzZXF1 ZW50IGNhbGN1bHVzIAorICAgdW50aWwgdGhlIGN1cnJlbnQgZ29hbCBpcyBm dWxseSBkZWNvbXBvc2VkIGludG8gYXRvbWljIAorICAgY29uc3RyYWludHMu ICovCiB2b2lkCiBkZWNvbXBvc2VfbGVmdF9nb2FsIChwcm9vZl9zdGF0ZSAm cywgZ29hbF9pdGVyYXRvciBpKQogewpAQCAtMzM5LDcgKzI4OSwxMCBAQCBk ZWNvbXBvc2VfbGVmdF9nb2FsIChwcm9vZl9zdGF0ZSAmcywgZ29hbF9pdGVy YXRvciBpKQogICAgIGRlY29tcG9zZV9sZWZ0X3Rlcm0gKHMsIGkpOwogfQog Ci1pbmxpbmUgdm9pZAorLyogQXBwbHkgdGhlIGxlZnQgbG9naWNhbCBydWxl cyBvZiB0aGUgc2VxdWVudCBjYWxjdWx1cyAKKyAgIHVudGlsIHRoZSBhbnRl Y2VkZW50cyBhcmUgZnVsbHkgZGVjb21wb3NlZCBpbnRvIGF0b21pYworICAg Y29uc3RyYWludHMuICovCit2b2lkCiBkZWNvbXBvc2VfbGVmdCAocHJvb2Zf c3RhdGUmIHMpCiB7CiAgIGdvYWxfaXRlcmF0b3IgaXRlciA9IHMuYmVnaW4g KCk7CkBAIC0zNDgsMTQgKzMwMSw3IEBAIGRlY29tcG9zZV9sZWZ0IChwcm9v Zl9zdGF0ZSYgcykKICAgICBkZWNvbXBvc2VfbGVmdF9nb2FsIChzLCBpdGVy KTsKIH0KIAotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAv LwotLy8gVGVybSBFeHRyYWN0aW9uCi0vLwotLy8gRXh0cmFjdCBhIGxpc3Qg b2YgdGVybSBsaXN0cyBmcm9tIGEgcHJvb2Ygc3RhdGUsIGFuZCByZXR1cm4g aXQgYXMgYQotLy8gYSB0cmVlIChhIHZlY3RvciBvZiB2ZWN0b3JzKS4KLQot Ly8gUmV0dXJucyBhIHZlY3RvciBvZiB0ZXJtcyBmcm9tIHRoZSBnaXZlbiB0 ZXJtIGxpc3QuCisvKiBSZXR1cm5zIGEgdmVjdG9yIG9mIHRlcm1zIGZyb20g dGhlIHRlcm0gbGlzdCBMLiAqLwogdHJlZQogZXh0cmFjdF90ZXJtcyAodGVy bV9saXN0JiBsKQogewpAQCAtMzY3LDcgKzMxMyw4IEBAIGV4dHJhY3RfdGVy bXMgKHRlcm1fbGlzdCYgbCkKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLy8g RXh0cmFjdCB0aGUgYXNzdW1wdGlvbiB2ZWN0b3IgZnJvbSB0aGUgcHJvb2Yg c3RhdGUgcy4KKy8qIEV4dHJhY3QgdGhlIGFzc3VtcHRpb25zIGZyb20gdGhl IHByb29mIHN0YXRlIFMKKyAgIGFzIGEgdmVjdG9yIG9mIHZlY3RvcnMgb2Yg YXRvbWljIGNvbnN0cmFpbnRzLiAqLwogaW5saW5lIHRyZWUKIGV4dHJhY3Rf YXNzdW1wdGlvbnMgKHByb29mX3N0YXRlJiBzKQogewpAQCAtMzgxLDU5ICsz MjgsNTYgQEAgZXh0cmFjdF9hc3N1bXB0aW9ucyAocHJvb2Zfc3RhdGUmIHMp CiAKIH0gLy8gbmFtZXNwYWNlCiAKLQotLy8gRGVjb21wb3NlIHRoZSByZXF1 aXJlZCBleHByZXNzaW9uIFQgaW50byBhIGNvbnN0cmFpbnQgc2V0OiBhCi0v LyB2ZWN0b3Igb2YgdmVjdG9ycyBjb250YWluaW5nIG9ubHkgYXRvbWljIHBy b3Bvc2l0aW9ucy4gSWYgVCBpcwotLy8gaW52YWxpZCwgcmV0dXJuIGFuIGVy cm9yLgorLyogRGVjb21wb3NlIHRoZSByZXF1aXJlZCBleHByZXNzaW9uIFQg aW50byBhIGNvbnN0cmFpbnQgc2V0OiBhCisgICB2ZWN0b3Igb2YgdmVjdG9y cyBjb250YWluaW5nIG9ubHkgYXRvbWljIHByb3Bvc2l0aW9ucy4gSWYgVCBp cworICAgaW52YWxpZCwgcmV0dXJuIGFuIGVycm9yLiAqLwogdHJlZQogZGVj b21wb3NlX2Fzc3VtcHRpb25zICh0cmVlIHQpCiB7CiAgIGlmICghdCB8fCB0 ID09IGVycm9yX21hcmtfbm9kZSkKICAgICByZXR1cm4gdDsKIAotICAvLyBD cmVhdGUgYSBwcm9vZiBzdGF0ZSwgYW5kIGluc2VydCBUIGFzIHRoZSBzb2xl IGFzc3VtcHRpb24uCisgIC8qIENyZWF0ZSBhIHByb29mIHN0YXRlLCBhbmQg aW5zZXJ0IFQgYXMgdGhlIHNvbGUgYXNzdW1wdGlvbi4gKi8KICAgcHJvb2Zf c3RhdGUgczsKICAgdGVybV9saXN0ICZsID0gcy5iZWdpbiAoKS0+YXNzdW1w dGlvbnM7CiAgIGwuaW5zZXJ0ICh0KTsKIAotICAvLyBEZWNvbXBvc2UgdGhl IGV4cHJlc3Npb24gaW50byBhIGNvbnN0cmFpbnQgc2V0LCBhbmQgdGhlbgot ICAvLyBleHRyYWN0IHRoZSB0ZXJtcyBmb3IgdGhlIEFTVC4KKyAgLyogRGVj b21wb3NlIHRoZSBleHByZXNzaW9uIGludG8gYSBjb25zdHJhaW50IHNldCwg YW5kIHRoZW4KKyAgICAgZXh0cmFjdCB0aGUgdGVybXMgZm9yIHRoZSBBU1Qu ICovCiAgIGRlY29tcG9zZV9sZWZ0IChzKTsKICAgcmV0dXJuIGV4dHJhY3Rf YXNzdW1wdGlvbnMgKHMpOwogfQogCiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tIC8vCi0vLyBTdWJzdW1wdGlvbiBhbmQgRW50YWlsbWVu dAotLy8KLS8vIFRoZSBmb2xsb3dpbmcgZnJhbWV3b3JrIGltcGxlbWVudHMg dGhlIHN1YnN1bXB0aW9uIGFuZCBlbnRhaWxtZW50Ci0vLyBsb2dpYyB1c2Vk IGZvciBvdmVybG9hZCByZXNvbHV0aW9uIGFuZCBsb29rdXAuCisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgU3Vic3VtcHRpb24gUnVsZXMKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCiAKIG5hbWVzcGFjZSB7CiAKLWJvb2wgc3Vic3Vt ZXNfcHJvcCh0cmVlLCB0cmVlKTsKLWJvb2wgc3Vic3VtZXNfYXRvbSh0cmVl LCB0cmVlKTsKLWJvb2wgc3Vic3VtZXNfYW5kKHRyZWUsIHRyZWUpOwotYm9v bCBzdWJzdW1lc19vcih0cmVlLCB0cmVlKTsKLQotLy8gUmV0dXJucyB0cnVl IGlmIHRoZSBhc3N1bXB0aW9uIEEgbWF0Y2hlcyB0aGUgY29uY2x1c2lvbiBD LiBUaGlzCi0vLyBpcyBnZW5lcmFsbHkgdGhlIGNhc2Ugd2hlbiBBIGFuZCBD IGhhdmUgdGhlIHNhbWUgc3ludGF4LgotLy8KLS8vIFRPRE86IEltcGxlbWVu dCBzcGVjaWFsIGNhc2VzIGZvcjoKLS8vICAgICogX19pc19zYW1lX2FzIHwt IF9faXNfY29udmVydGlibGVfdG8KLS8vICAgICogX19pc19zYW1lX2FzIHwt IF9faXNfZGVyaXZlZF9mcm9tCi0vLyAgICAqIEFueSBvdGhlciBidWlsdC1p biBwcmVkaWNhdGVzPworYm9vbCBzdWJzdW1lc19jb25zdHJhaW50ICh0cmVl LCB0cmVlKTsKK2Jvb2wgc3Vic3VtZXNfY29uanVuY3Rpb24gKHRyZWUsIHRy ZWUpOworYm9vbCBzdWJzdW1lc19kaXNqdW5jdGlvbiAodHJlZSwgdHJlZSk7 Citib29sIHN1YnN1bWVzX3BhcmFtZXRlcml6ZWRfY29uc3RyYWludCAodHJl ZSwgdHJlZSk7Citib29sIHN1YnN1bWVzX2F0b21pY19jb25zdHJhaW50ICh0 cmVlLCB0cmVlKTsKKworLyogUmV0dXJucyB0cnVlIGlmIHRoZSBhc3N1bXB0 aW9uIEEgbWF0Y2hlcyB0aGUgY29uY2x1c2lvbiBDLiBUaGlzCisgICBpcyBn ZW5lcmFsbHkgdGhlIGNhc2Ugd2hlbiBBIGFuZCBDIGhhdmUgdGhlIHNhbWUg c3ludGF4LiAKKworICAgTk9URTogVGhlcmUgd2lsbCBiZSBzcGVjaWFsaXpl ZCBtYXRjaGluZyBydWxlcyB0byBhY2NvbW1vZGF0ZQorICAgdHlwZSBlcXVp dmFsZW5jZSwgY29udmVyc2lvbiwgaW5oZXJpdGFuY2UsIGV0Yy4gQnV0IHRo aXMgaXMgbm90CisgICBpbiB0aGUgY3VycmVudCBjb25jZXB0cyBkcmFmdC4g Ki8KIGlubGluZSBib29sCiBtYXRjaF90ZXJtcyAodHJlZSBhLCB0cmVlIGMp CiB7CiAgIHJldHVybiBjcF90cmVlX2VxdWFsIChhLCBjKTsKIH0KIAotLy8g UmV0dXJucyB0cnVlIGlmIHRoZSBsaXN0IG9mIGFzc3VtcHRpb25zIEFTIHN1 YnN1bWVzIHRoZSBhdG9taWMKLS8vIHByb3Bvc2l0aW9uIEMuIFRoaXMgaXMg dGhlIGNhc2Ugd2hlbiB3ZSBjYW4gZmluZCBhIHByb3Bvc2l0aW9uIGluCi0v LyBBUyB0aGF0IGVudGFpbHMgdGhlIGNvbmNsdXNpb24gQy4KKy8qIFJldHVy bnMgdHJ1ZSBpZiB0aGUgbGlzdCBvZiBhc3N1bXB0aW9ucyBBUyBzdWJzdW1l cyB0aGUgYXRvbWljCisgICBwcm9wb3NpdGlvbiBDLiBUaGlzIGlzIHRoZSBj YXNlIHdoZW4gd2UgY2FuIGZpbmQgYSBwcm9wb3NpdGlvbgorICBpbiBBUyB0 aGF0IGVudGFpbHMgdGhlIGNvbmNsdXNpb24gQy4gKi8KIGJvb2wKLXN1YnN1 bWVzX2F0b20gKHRyZWUgYXMsIHRyZWUgYykKK3N1YnN1bWVzX2F0b21pY19j b25zdHJhaW50ICh0cmVlIGFzLCB0cmVlIGMpCiB7CiAgIGZvciAoaW50IGkg PSAwOyBpIDwgVFJFRV9WRUNfTEVOR1RIIChhcyk7ICsraSkKICAgICBpZiAo bWF0Y2hfdGVybXMgKFRSRUVfVkVDX0VMVCAoYXMsIGkpLCBjKSkKQEAgLTQ0 MSw4MCArMzg1LDc5IEBAIHN1YnN1bWVzX2F0b20gKHRyZWUgYXMsIHRyZWUg YykKICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBSZXR1cm5zIHRydWUgd2hl biBib3RoIG9wZXJhbmRzIG9mIEMgYXJlIHN1YnN1bWVkIGJ5IHRoZSBhc3N1 bXB0aW9ucyBBUy4KKy8qIFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggb3BlcmFu ZHMgb2YgQyBhcmUgc3Vic3VtZWQgYnkgdGhlIAorICAgYXNzdW1wdGlvbnMg QVMuICovCiBpbmxpbmUgYm9vbAotc3Vic3VtZXNfYW5kICh0cmVlIGFzLCB0 cmVlIGMpCitzdWJzdW1lc19jb25qdW5jdGlvbiAodHJlZSBhcywgdHJlZSBj KQogewogICB0cmVlIGwgPSBUUkVFX09QRVJBTkQgKGMsIDApOwogICB0cmVl IHIgPSBUUkVFX09QRVJBTkQgKGMsIDEpOwotICByZXR1cm4gc3Vic3VtZXNf cHJvcCAoYXMsIGwpICYmIHN1YnN1bWVzX3Byb3AgKGFzLCByKTsKKyAgcmV0 dXJuIHN1YnN1bWVzX2NvbnN0cmFpbnQgKGFzLCBsKSAmJiBzdWJzdW1lc19j b25zdHJhaW50IChhcywgcik7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSB3aGVu IGVpdGhlciBvcGVyYW5kIG9mIEMgaXMgc3Vic3VtZWQgYnkgdGhlIGFzc3Vt cHRpb25zIEFTLgorLyogUmV0dXJucyB0cnVlIHdoZW4gZWl0aGVyIG9wZXJh bmQgb2YgQyBpcyBzdWJzdW1lZCBieSB0aGUgCisgICBhc3N1bXB0aW9ucyBB Uy4gKi8KIGlubGluZSBib29sCi1zdWJzdW1lc19vciAodHJlZSBhcywgdHJl ZSBjKQorc3Vic3VtZXNfZGlzanVuY3Rpb24gKHRyZWUgYXMsIHRyZWUgYykK IHsKICAgdHJlZSBsID0gVFJFRV9PUEVSQU5EIChjLCAwKTsKICAgdHJlZSBy ID0gVFJFRV9PUEVSQU5EIChjLCAxKTsKLSAgcmV0dXJuIHN1YnN1bWVzX3By b3AgKGFzLCBsKSB8fCBzdWJzdW1lc19wcm9wIChhcywgcik7CisgIHJldHVy biBzdWJzdW1lc19jb25zdHJhaW50IChhcywgbCkgfHwgc3Vic3VtZXNfY29u c3RyYWludCAoYXMsIHIpOwogfQogCi0vLyBSZXR1cm5zIHRydWUgd2hlbiB0 aGUgc3ViLXJlcXVpcmVtZW50cyBvZiBDIGFyZSBzdWJzdW1lZCBieSB0aGUK LS8vIGFzc3VtcHRpb25zIGluIEFTLgorLyogUmV0dXJucyB0cnVlIHdoZW4g dGhlIG9wZXJhbmQgb2YgQyBpcyBzdWJzdW1lZCBieSB0aGUKKyAgIGFzc3Vt cHRpb25zIGluIEFTLiBUaGUgcGFyYW1ldGVycyBhcmUgbm90IGNvbnNpZGVy ZWQgaW4KKyAgIHRoZSBzdWJzdW1wdGlvbiBydWxlcy4gKi8KIGJvb2wKLXN1 YnN1bWVzX3JlcXVpcmVzICh0cmVlIGFzLCB0cmVlIGMpCitzdWJzdW1lc19w YXJhbWV0ZXJpemVkX2NvbnN0cmFpbnQgKHRyZWUgYXMsIHRyZWUgYykKIHsK LSAgdHJlZSB0ID0gVFJFRV9PUEVSQU5EIChjLCAxKTsKLSAgd2hpbGUgKHQg JiYgc3Vic3VtZXNfcHJvcCAoYXMsIFRSRUVfVkFMVUUgKHQpKSkKLSAgICB0 ID0gVFJFRV9DSEFJTiAodCk7Ci0gIHJldHVybiAhdDsKKyAgdHJlZSB0ID0g UEFSTV9DT05TVFJfT1BFUkFORCAoYyk7CisgIHJldHVybiBzdWJzdW1lc19j b25zdHJhaW50IChhcywgdCk7CiB9CiAKLS8vIFJldHVybnMgdHJ1ZSB3aGVu IHRoZSBsaXN0IG9mIGFzc3VtcHRpb25zIEFTIHN1YnN1bWVzIHRoZQotLy8g Y29uY2x1ZGVkIHByb3Bvc2l0aW9uIEMuCi0vLwotLy8gVGhpcyBpcyBhIHNp bXBsZSByZWN1cnNpdmUgZGVzY2VudCBvbiBDLCBtYXRjaGluZyBhZ2FpbnN0 Ci0vLyBwcm9wb3NpdGlvbnMgaW4gdGhlIGFzc3VtcHRpb24gbGlzdCBBUy4K KworLyogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGxpc3Qgb2YgYXNzdW1wdGlv bnMgQVMgc3Vic3VtZXMgdGhlCisgICBjb25jbHVkZWQgcHJvcG9zaXRpb24g Qy4gVGhpcyBpcyBhIHNpbXBsZSByZWN1cnNpdmUgZGVzY2VudCAKKyAgIG9u IEMsIG1hdGNoaW5nIGFnYWluc3QgcHJvcG9zaXRpb25zIGluIHRoZSBhc3N1 bXB0aW9uIGxpc3QgQVMuICovCiBib29sCi1zdWJzdW1lc19wcm9wICh0cmVl IGFzLCB0cmVlIGMpCitzdWJzdW1lc19jb25zdHJhaW50ICh0cmVlIGFzLCB0 cmVlIGMpCiB7CiAgIHN3aXRjaCAoVFJFRV9DT0RFIChjKSkKICAgICB7Ci0g ICAgY2FzZSBUUlVUSF9BTkRJRl9FWFBSOgotICAgICAgcmV0dXJuIHN1YnN1 bWVzX2FuZCAoYXMsIGMpOwotICAgIGNhc2UgVFJVVEhfT1JJRl9FWFBSOgot ICAgICAgcmV0dXJuIHN1YnN1bWVzX29yIChhcywgYyk7Ci0gICAgY2FzZSBS RVFVSVJFU19FWFBSOgotICAgICAgcmV0dXJuIHN1YnN1bWVzX3JlcXVpcmVz IChhcywgYyk7CisgICAgY2FzZSBDT05KX0NPTlNUUjoKKyAgICAgIHJldHVy biBzdWJzdW1lc19jb25qdW5jdGlvbiAoYXMsIGMpOworICAgIGNhc2UgRElT Sl9DT05TVFI6CisgICAgICByZXR1cm4gc3Vic3VtZXNfZGlzanVuY3Rpb24g KGFzLCBjKTsKKyAgICBjYXNlIFBBUk1fQ09OU1RSOgorICAgICAgcmV0dXJu IHN1YnN1bWVzX3BhcmFtZXRlcml6ZWRfY29uc3RyYWludCAoYXMsIGMpOwog ICAgIGRlZmF1bHQ6Ci0gICAgICByZXR1cm4gc3Vic3VtZXNfYXRvbSAoYXMs IGMpOworICAgICAgcmV0dXJuIHN1YnN1bWVzX2F0b21pY19jb25zdHJhaW50 IChhcywgYyk7CiAgICAgfQogfQogCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhl IExFRlQgY29uc3RyYWludHMgc3Vic3VtZSB0aGUgUklHSFQgY29uc3RyYWlu dHMuCi0vLyBUaGlzIGlzIGRvbmUgYnkgY2hlY2tpbmcgdGhhdCB0aGUgUklH SFQgcmVxdWlyZW1lbnRzIGZvbGxvdyBmcm9tCi0vLyBlYWNoIG9mIHRoZSBM RUZUIHN1YmdvYWxzLgorLyogUmV0dXJucyB0cnVlIGlmIHRoZSBMRUZUIGNv bnN0cmFpbnRzIHN1YnN1bWUgdGhlIFJJR0hUIGNvbnN0cmFpbnRzLgorICAg VGhpcyBpcyBkb25lIGJ5IGNoZWNraW5nIHRoYXQgdGhlIFJJR0hUIHJlcXVp cmVtZW50cyBmb2xsb3cgZnJvbQorICAgZWFjaCBvZiB0aGUgTEVGVCBzdWJn b2Fscy4gKi8KIGJvb2wKIHN1YnN1bWVzX2NvbnN0cmFpbnRzX25vbm51bGwg KHRyZWUgbGVmdCwgdHJlZSByaWdodCkKIHsKICAgZ2NjX2Fzc2VydCAoY2hl Y2tfY29uc3RyYWludF9pbmZvIChsZWZ0KSk7CiAgIGdjY19hc3NlcnQgKGNo ZWNrX2NvbnN0cmFpbnRfaW5mbyAocmlnaHQpKTsKIAotICAvLyBDaGVjayB0 aGF0IHRoZSByZXF1aXJlZCBleHByZXNzaW9uIGluIFJJR0hUIGlzIHN1YnN1 bWVkIGJ5IGVhY2gKLSAgLy8gc3ViZ29hbCBpbiB0aGUgYXNzdW1wdGlvbnMg b2YgTEVGVC4KKyAgLyogQ2hlY2sgdGhhdCB0aGUgcmVxdWlyZWQgZXhwcmVz c2lvbiBpbiBSSUdIVCBpcyBzdWJzdW1lZCBieSBlYWNoCisgICAgIHN1Ymdv YWwgaW4gdGhlIGFzc3VtcHRpb25zIG9mIExFRlQuICovCiAgIHRyZWUgYXMg PSBDSV9BU1NVTVBUSU9OUyAobGVmdCk7CiAgIHRyZWUgYyA9IENJX05PUk1B TElaRURfQ09OU1RSQUlOVFMgKHJpZ2h0KTsKICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBUUkVFX1ZFQ19MRU5HVEggKGFzKTsgKytpKQotICAgIGlmICghc3Vi c3VtZXNfcHJvcCAoVFJFRV9WRUNfRUxUIChhcywgaSksIGMpKQorICAgIGlm ICghc3Vic3VtZXNfY29uc3RyYWludCAoVFJFRV9WRUNfRUxUIChhcywgaSks IGMpKQogICAgICAgcmV0dXJuIGZhbHNlOwogICByZXR1cm4gdHJ1ZTsKIH0K IAotfSAvLyBlbmQgbmFtZXNwYWNlCi0KK30gLyogbmFtZXNwYWNlICovCiAK LS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgTEVGVCBjb25zdHJhaW50cyBzdWJz dW1lIHRoZSBSSUdIVCBjb25zdHJhaW50cy4gTm90ZQotLy8gdGhhdCBzdWJz dW1wdGlvbiBpcyBhIHJlZmxleGl2ZSByZWxhdGlvbiAoZS5nLiwgPD0pCisv KiBSZXR1cm5zIHRydWUgaWYgdGhlIExFRlQgY29uc3RyYWludHMgc3Vic3Vt ZSB0aGUgUklHSFQgCisgICBjb25zdHJhaW50cy4gKi8KIGJvb2wKIHN1YnN1 bWVzICh0cmVlIGxlZnQsIHRyZWUgcmlnaHQpCiB7CmRpZmYgLS1naXQgYS9n Y2MvY3AvbWV0aG9kLmMgYi9nY2MvY3AvbWV0aG9kLmMKaW5kZXggYTc4NmQ2 MC4uYTdmNmUwMiAxMDA2NDQKLS0tIGEvZ2NjL2NwL21ldGhvZC5jCisrKyBi L2djYy9jcC9tZXRob2QuYwpAQCAtMTkzOSwxMyArMTkzOSwxNCBAQCBpbXBs aWNpdGx5X2RlY2xhcmVfZm4gKHNwZWNpYWxfZnVuY3Rpb25fa2luZCBraW5k LCB0cmVlIHR5cGUsCiAgIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiAoZm4s IHRvcGxldmVsX2JpbmRpbmdzX3AgKCksIGF0X2VvZik7CiAgIGdjY19hc3Nl cnQgKCFUUkVFX1VTRUQgKGZuKSk7CiAKLSAgLy8gSWYgdGhlIGluaGVyaXRl ZCBjb25zdHJ1Y3RvciB3YXMgY29uc3RyYWluZWQsIGNvcHkgdGhlCi0gIC8v IGNvbnN0cmFpbnRzLiAKKyAgLyogUHJvcGFnYXRlIGNvbnN0cmFpbnRzIGZy b20gdGhlIGluaGVyaXRlZCBjb25zdHJ1Y3Rvci4gKi8KICAgaWYgKGZsYWdf Y29uY2VwdHMgJiYgaW5oZXJpdGVkX2N0b3IpCiAgIHsKLSAgICB0cmVlIG9y aWdfY2kgPSBnZXRfY29uc3RyYWludHMgKGluaGVyaXRlZF9jdG9yKTsKLSAg ICB0cmVlIG5ld19jaSA9IGNvcHlfbm9kZSAob3JpZ19jaSk7Ci0gICAgc2V0 X2NvbnN0cmFpbnRzIChmbiwgbmV3X2NpKTsKKyAgICBpZiAodHJlZSBvcmln X2NpID0gZ2V0X2NvbnN0cmFpbnRzIChpbmhlcml0ZWRfY3RvcikpCisgICAg ICB7CisgICAgICAgIHRyZWUgbmV3X2NpID0gY29weV9ub2RlIChvcmlnX2Np KTsKKyAgICAgICAgc2V0X2NvbnN0cmFpbnRzIChmbiwgbmV3X2NpKTsKKyAg ICAgIH0KICAgfQogCiAgIC8qIFJlc3RvcmUgUFJPQ0VTU0lOR19URU1QTEFU RV9ERUNMLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuYyBiL2dj Yy9jcC9wYXJzZXIuYwppbmRleCAyNzUyNDM2Li4zZDM0OWI5IDEwMDY0NAot LS0gYS9nY2MvY3AvcGFyc2VyLmMKKysrIGIvZ2NjL2NwL3BhcnNlci5jCkBA IC0xMzYzLDcgKzEzNjMsNyBAQCBjbGVhcl9kZWNsX3NwZWNzIChjcF9kZWNs X3NwZWNpZmllcl9zZXEgKmRlY2xfc3BlY3MpCiAgICBWQVJfREVDTHMgb3Ig RlVOQ1RJT05fREVDTHMpIHNob3VsZCBkbyB0aGF0IGRpcmVjdGx5LiAgKi8K IAogc3RhdGljIGNwX2RlY2xhcmF0b3IgKm1ha2VfY2FsbF9kZWNsYXJhdG9y Ci0gIChjcF9kZWNsYXJhdG9yICosIHRyZWUsIGNwX2N2X3F1YWxzLCBjcF92 aXJ0X3NwZWNpZmllcnMsIGNwX3JlZl9xdWFsaWZpZXIsIHRyZWUsIHRyZWUp OworICAoY3BfZGVjbGFyYXRvciAqLCB0cmVlLCBjcF9jdl9xdWFscywgY3Bf dmlydF9zcGVjaWZpZXJzLCBjcF9yZWZfcXVhbGlmaWVyLCB0cmVlLCB0cmVl LCB0cmVlKTsKIHN0YXRpYyBjcF9kZWNsYXJhdG9yICptYWtlX2FycmF5X2Rl Y2xhcmF0b3IKICAgKGNwX2RlY2xhcmF0b3IgKiwgdHJlZSk7CiBzdGF0aWMg Y3BfZGVjbGFyYXRvciAqbWFrZV9wb2ludGVyX2RlY2xhcmF0b3IKQEAgLTE1 NDQsNyArMTU0NCw4IEBAIG1ha2VfY2FsbF9kZWNsYXJhdG9yIChjcF9kZWNs YXJhdG9yICp0YXJnZXQsCiAJCSAgICAgIGNwX3ZpcnRfc3BlY2lmaWVycyB2 aXJ0X3NwZWNpZmllcnMsCiAJCSAgICAgIGNwX3JlZl9xdWFsaWZpZXIgcmVm X3F1YWxpZmllciwKIAkJICAgICAgdHJlZSBleGNlcHRpb25fc3BlY2lmaWNh dGlvbiwKLQkJICAgICAgdHJlZSBsYXRlX3JldHVybl90eXBlKQorCQkgICAg ICB0cmVlIGxhdGVfcmV0dXJuX3R5cGUsCisgICAgICAgICAgICAgICAgICAg ICAgdHJlZSByZXF1aXJlc19jbGF1c2UpCiB7CiAgIGNwX2RlY2xhcmF0b3Ig KmRlY2xhcmF0b3I7CiAKQEAgLTE1NTYsNiArMTU1Nyw3IEBAIG1ha2VfY2Fs bF9kZWNsYXJhdG9yIChjcF9kZWNsYXJhdG9yICp0YXJnZXQsCiAgIGRlY2xh cmF0b3ItPnUuZnVuY3Rpb24ucmVmX3F1YWxpZmllciA9IHJlZl9xdWFsaWZp ZXI7CiAgIGRlY2xhcmF0b3ItPnUuZnVuY3Rpb24uZXhjZXB0aW9uX3NwZWNp ZmljYXRpb24gPSBleGNlcHRpb25fc3BlY2lmaWNhdGlvbjsKICAgZGVjbGFy YXRvci0+dS5mdW5jdGlvbi5sYXRlX3JldHVybl90eXBlID0gbGF0ZV9yZXR1 cm5fdHlwZTsKKyAgZGVjbGFyYXRvci0+dS5mdW5jdGlvbi5yZXF1aXJlc19j bGF1c2UgPSByZXF1aXJlc19jbGF1c2U7CiAgIGlmICh0YXJnZXQpCiAgICAg ewogICAgICAgZGVjbGFyYXRvci0+aWRfbG9jID0gdGFyZ2V0LT5pZF9sb2M7 CkBAIC0yMDk5LDYgKzIxMDEsOCBAQCBzdGF0aWMgdHJlZSBjcF9wYXJzZXJf dHlwZV9zcGVjaWZpZXIKIHN0YXRpYyB0cmVlIGNwX3BhcnNlcl9zaW1wbGVf dHlwZV9zcGVjaWZpZXIKICAgKGNwX3BhcnNlciAqLCBjcF9kZWNsX3NwZWNp Zmllcl9zZXEgKiwgY3BfcGFyc2VyX2ZsYWdzKTsKIHN0YXRpYyB0cmVlIGNw X3BhcnNlcl90eXBlX25hbWUKKyAgKGNwX3BhcnNlciAqLCBib29sKTsKK3N0 YXRpYyB0cmVlIGNwX3BhcnNlcl90eXBlX25hbWUKICAgKGNwX3BhcnNlciAq KTsKIHN0YXRpYyB0cmVlIGNwX3BhcnNlcl9ub25jbGFzc19uYW1lIAogICAo Y3BfcGFyc2VyKiBwYXJzZXIpOwpAQCAtMjM1NCwxNCArMjM1OCw2IEBAIHN0 YXRpYyB0cmVlIGNwX3BhcnNlcl90eXBlX3JlcXVpcmVtZW50CiAgIChjcF9w YXJzZXIgKik7CiBzdGF0aWMgdHJlZSBjcF9wYXJzZXJfbmVzdGVkX3JlcXVp cmVtZW50CiAgIChjcF9wYXJzZXIgKik7Ci1zdGF0aWMgdHJlZSBjcF9wYXJz ZXJfY29uc3RleHByX2NvbnN0cmFpbnRfc3BlYwotICAoY3BfcGFyc2VyICos IHRyZWUpOwotc3RhdGljIHRyZWUgY3BfcGFyc2VyX25vZXhjZXB0X2NvbnN0 cmFpbnRfc3BlYwotICAoY3BfcGFyc2VyICosIHRyZWUpOwotc3RhdGljIHRy ZWUgY3BfcGFyc2VyX2NvbnN0cmFpbnRfc3BlYwotICAoY3BfcGFyc2VyICos IHRyZWUpOwotc3RhdGljIHRyZWUgY3BfcGFyc2VyX2NvbnN0cmFpbnRfc3Bl Y2lmaWVyX3NlcQotICAoY3BfcGFyc2VyICosIHRyZWUpOwogCiAvKiBUcmFu c2FjdGlvbmFsIE1lbW9yeSBFeHRlbnNpb25zICovCiAKQEAgLTk0NTcsOSAr OTQ1MywxMSBAQCBjcF9wYXJzZXJfbGFtYmRhX2RlY2xhcmF0b3Jfb3B0IChj cF9wYXJzZXIqIHBhcnNlciwgdHJlZSBsYW1iZGFfZXhwcikKIAkJCQkgICAg ICAgVklSVF9TUEVDX1VOU1BFQ0lGSUVELAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUkVGX1FVQUxfTk9ORSwKIAkJCQkgICAg ICAgZXhjZXB0aW9uX3NwZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAvKmxhdGVfcmV0dXJuX3R5cGU9Ki9OVUxMX1RSRUUp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyps YXRlX3JldHVybl90eXBlPSovTlVMTF9UUkVFLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLypyZXF1aXJlc19jbGF1c2UqL05V TExfVFJFRSk7CiAgICAgZGVjbGFyYXRvci0+aWRfbG9jID0gTEFNQkRBX0VY UFJfTE9DQVRJT04gKGxhbWJkYV9leHByKTsKIAorCiAgICAgZmNvID0gZ3Jv a21ldGhvZCAoJnJldHVybl90eXBlX3NwZWNzLAogCQkgICAgICBkZWNsYXJh dG9yLAogCQkgICAgICBhdHRyaWJ1dGVzKTsKQEAgLTEzNTIzLDYgKzEzNTIx LDcgQEAgZmluaXNoX2NvbnN0cmFpbmVkX3BhcmFtZXRlciAoY3BfcGFyc2Vy ICpwYXJzZXIsCiAgIC8vIGRlZmF1bHQgYXJndW1lbnQgYW5kIGNvbnN0cmFp bnQuCiAgIHBhcm0gPSBidWlsZF90cmVlX2xpc3QgKGRlZiwgcGFybSk7CiAg IFRFTVBMQVRFX1BBUk1fQ09OU1RSQUlOVFMgKHBhcm0pID0gZGVjbDsKKyAg CiAgIHJldHVybiBwYXJtOwogfQogCkBAIC0xMzkxMiw3ICsxMzkxMSw3IEBA IGNwX3BhcnNlcl90eXBlX3BhcmFtZXRlciAoY3BfcGFyc2VyKiBwYXJzZXIs IGJvb2wgKmlzX3BhcmFtZXRlcl9wYWNrKQogICAgICAgICAgIHsKICAgICAg ICAgICAgIHRyZWUgcmVxcyA9IGdldF9zaG9ydGhhbmRfY29uc3RyYWludHMg KGN1cnJlbnRfdGVtcGxhdGVfcGFybXMpOwogICAgICAgICAgICAgaWYgKHRy ZWUgciA9IGNwX3BhcnNlcl9yZXF1aXJlc19jbGF1c2Vfb3B0IChwYXJzZXIp KQotICAgICAgICAgICAgICByZXFzID0gY29uam9pbl9jb25zdHJhaW50cyAo cmVxcywgcik7CisgICAgICAgICAgICAgIHJlcXMgPSBjb25qb2luX2NvbnN0 cmFpbnRzIChyZXFzLCBtYWtlX3ByZWRpY2F0ZV9jb25zdHJhaW50IChyKSk7 CiAgICAgICAgICAgICBURU1QTEFURV9QQVJNU19DT05TVFJBSU5UUyAoY3Vy cmVudF90ZW1wbGF0ZV9wYXJtcykgPSByZXFzOwogICAgICAgICAgIH0KIApA QCAtMTU0ODgsMTMgKzE1NDg3LDIwIEBAIGNwX3BhcnNlcl9zaW1wbGVfdHlw ZV9zcGVjaWZpZXIgKGNwX3BhcnNlciogcGFyc2VyLAogc3RhdGljIHRyZWUK IGNwX3BhcnNlcl90eXBlX25hbWUgKGNwX3BhcnNlciogcGFyc2VyKQogewor ICByZXR1cm4gY3BfcGFyc2VyX3R5cGVfbmFtZSAocGFyc2VyLCAvKnR5cGVu YW1lX2tleXdvcmRfcD0qL2ZhbHNlKTsKK30KKworLyogU2VlIGFib3ZlLiAq Lworc3RhdGljIHRyZWUKK2NwX3BhcnNlcl90eXBlX25hbWUgKGNwX3BhcnNl ciogcGFyc2VyLCBib29sIHR5cGVuYW1lX2tleXdvcmRfcCkKK3sKICAgdHJl ZSB0eXBlX2RlY2w7CiAKICAgLyogV2UgY2FuJ3Qga25vdyB5ZXQgd2hldGhl ciBpdCBpcyBhIGNsYXNzLW5hbWUgb3Igbm90LiAgKi8KICAgY3BfcGFyc2Vy X3BhcnNlX3RlbnRhdGl2ZWx5IChwYXJzZXIpOwogICAvKiBUcnkgYSBjbGFz cy1uYW1lLiAgKi8KICAgdHlwZV9kZWNsID0gY3BfcGFyc2VyX2NsYXNzX25h bWUgKHBhcnNlciwKLQkJCQkgICAgLyp0eXBlbmFtZV9rZXl3b3JkX3A9Ki9m YWxzZSwKKwkJCQkgICAgdHlwZW5hbWVfa2V5d29yZF9wLAogCQkJCSAgICAv KnRlbXBsYXRlX2tleXdvcmRfcD0qL2ZhbHNlLAogCQkJCSAgICBub25lX3R5 cGUsCiAJCQkJICAgIC8qY2hlY2tfZGVwZW5kZW5jeV9wPSovdHJ1ZSwKQEAg LTE3MDQ4LDcgKzE3MDU0LDcgQEAgY3BfcGFyc2VyX2FsaWFzX2RlY2xhcmF0 aW9uIChjcF9wYXJzZXIqIHBhcnNlcikKICAgICByZXR1cm4gZGVjbDsKIAog ICAvLyBBdHRhY2ggY29uc3RyYWludHMgdG8gdGhlIGFsaWFzIGRlY2xhcmF0 aW9uLgotICBpZiAoZmxhZ19jb25jZXB0cykKKyAgaWYgKGZsYWdfY29uY2Vw dHMgJiYgY3VycmVudF90ZW1wbGF0ZV9wYXJtcykKICAgICB7CiAgICAgICB0 cmVlIHJlcXMgPSBURU1QTEFURV9QQVJNU19DT05TVFJBSU5UUyAoY3VycmVu dF90ZW1wbGF0ZV9wYXJtcyk7CiAgICAgICB0cmVlIGNvbnN0ciA9IGJ1aWxk X2NvbnN0cmFpbnRzIChyZXFzLCBOVUxMX1RSRUUpOwpAQCAtMTgxMjMsNyAr MTgxMjksOCBAQCBjcF9wYXJzZXJfZGlyZWN0X2RlY2xhcmF0b3IgKGNwX3Bh cnNlciogcGFyc2VyLAogCQkJCQkJICAgICB2aXJ0X3NwZWNpZmllcnMsCiAJ CQkJCQkgICAgIHJlZl9xdWFsLAogCQkJCQkJICAgICBleGNlcHRpb25fc3Bl Y2lmaWNhdGlvbiwKLQkJCQkJCSAgICAgbGF0ZV9yZXR1cm4pOworCQkJCQkJ ICAgICBsYXRlX3JldHVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLypyZXF1aXJlc19jbGF1c2U9 Ki9OVUxMX1RSRUUpOwogCQkgIGRlY2xhcmF0b3ItPnN0ZF9hdHRyaWJ1dGVz ID0gYXR0cnM7CiAJCSAgLyogQW55IHN1YnNlcXVlbnQgcGFyYW1ldGVyIGxp c3RzIGFyZSB0byBkbyB3aXRoCiAJCSAgICAgcmV0dXJuIHR5cGUsIHNvIGFy ZSBub3QgdGhvc2Ugb2YgdGhlIGRlY2xhcmVkCkBAIC0yMzI1NiwzOSArMjMy NjMsMjQgQEAgY3BfcGFyc2VyX3JlcXVpcmVzX2NsYXVzZV9vcHQgKGNwX3Bh cnNlciAqcGFyc2VyKQogfQogCiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tIC8vCi0vLyBSZXF1aXJlcyBFeHByZXNzaW9uCi0KLQotLy8g QW4gUkFJSSBoZWxwZXIgdGhhdCBwcm92aWRlcyBzY29wZWQgY29udHJvbCBm b3IgZW50ZXJpbmcgYW5kIGV4aXRpbmcKLS8vIHRoZSBsb2NhbCBzY29wZSBk ZWZpbmVkIGJ5IGEgcmVxdWlyZXMgZXhwcmVzc2lvbi4gTmFtZSBiaW5kaW5n cyBpbnRyb2R1Y2VkCi0vLyB3aXRoaW4gdGhlIHNjb3BlIGFyZSBwb3BwZWQg cHJpb3IgdG8gZXhpdGluZyB0aGUgc2NvcGUuCi1zdHJ1Y3QgY3BfcGFyc2Vy X3JlcXVpcmVzX2V4cHJfc2NvcGUKLXsKLSAgY3BfcGFyc2VyX3JlcXVpcmVz X2V4cHJfc2NvcGUgKCkKLSAgewotICAgIGJlZ2luX3Njb3BlIChza19ibG9j aywgTlVMTF9UUkVFKTsKLSAgfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlcXVpcmVz IGV4cHJlc3Npb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LwogCi0gIH5jcF9wYXJzZXJfcmVxdWlyZXNfZXhwcl9zY29wZSAoKQotICB7 Ci0gICAgcG9wX2JpbmRpbmdzX2FuZF9sZWF2ZV9zY29wZSAoKTsKLSAgfQot fTsKKy8qIFBhcnNlIGEgcmVxdWlyZXMgZXhwcmVzc2lvbgogCi0vLyBQYXJz ZSBhIHJlcXVpcmVzIGV4cHJlc3Npb24KLS8vCi0vLyAgICByZXF1aXJlbWVu dC1leHByZXNzaW9uOgotLy8gICAgICAgICdyZXF1aXJlcycgcmVxdWlyZW1l bnQtcGFyYW1ldGVyLWxpc3QgcmVxdWlyZW1lbnQtYm9keQorICAgcmVxdWly ZW1lbnQtZXhwcmVzc2lvbjoKKyAgICAgICAncmVxdWlyZXMnIHJlcXVpcmVt ZW50LXBhcmFtZXRlci1saXN0IFtvcHRdIHJlcXVpcmVtZW50LWJvZHkgKi8K IHN0YXRpYyB0cmVlCiBjcF9wYXJzZXJfcmVxdWlyZXNfZXhwcmVzc2lvbiAo Y3BfcGFyc2VyICpwYXJzZXIpCiB7CiAgIGdjY19hc3NlcnQgKGNwX2xleGVy X25leHRfdG9rZW5faXNfa2V5d29yZCAocGFyc2VyLT5sZXhlciwgUklEX1JF UVVJUkVTKSk7CiAgIGxvY2F0aW9uX3QgbG9jID0gY3BfbGV4ZXJfY29uc3Vt ZV90b2tlbiAocGFyc2VyLT5sZXhlciktPmxvY2F0aW9uOwogCi0gIC8vIFRP RE86IEVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIGNvbmNlcHRzIGxpdGUgc3Bl YyBkaWQgbm90IGFsbG93Ci0gIC8vIHJlcXVpcmVzIGV4cHJlc3Npb25zIG91 dHNpZGUgb2YgdGVtcGxhdGUgZGVjbGFyYXRpb25zLiBUaGF0Ci0gIC8vIHJl c3RyaWN0aW9uIHdhcyByZWxheGVkIGluIENoaWNhZ28sIGJ1dCBpdCBoYXMg bm90IGJlZW4gaW1wbGVtZW50ZWQuCisgIC8qIEEgcmVxdWlyZXMtZXhwcmVz c2lvbiBzaGFsbCBhcHBlYXIgb25seSB3aXRoaW4gYSBjb25jZXB0CisgICAg IGRlZmluaXRpb24gb3IgYSByZXF1aXJlcy1jbGF1c2UuCisKKyAgICAgVE9E TzogSW1wbGVtZW50IHRoaXMgZGlhZ25vc3RpYyBjb3JyZWN0bHkuICovCiAg IGlmICghcHJvY2Vzc2luZ190ZW1wbGF0ZV9kZWNsKQogICAgIHsKICAgICAg IGVycm9yX2F0IChsb2MsICJhIHJlcXVpcmVzIGV4cHJlc3Npb24gY2Fubm90 IGFwcGVhciBvdXRzaWRlIGEgdGVtcGxhdGUiKTsKQEAgLTIzMjk2LDE1ICsy MzI4OCwzMiBAQCBjcF9wYXJzZXJfcmVxdWlyZXNfZXhwcmVzc2lvbiAoY3Bf cGFyc2VyICpwYXJzZXIpCiAgICAgICByZXR1cm4gZXJyb3JfbWFya19ub2Rl OwogICAgIH0KIAotICAvLyBQYXJzZSB0aGUgb3B0aW9uYWwgcGFyYW1ldGVy IGxpc3QuIEFueSBsb2NhbCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zCi0gIC8v IGFyZSBhZGRlZCB0byBhIG5ldyBzY29wZSBhbmQgYXJlIHZpc2libGUgd2l0 aGluIHRoZSBuZXN0ZWQKLSAgLy8gcmVxdWlyZW1lbnQgbGlzdC4KLSAgY3Bf cGFyc2VyX3JlcXVpcmVzX2V4cHJfc2NvcGUgZ3VhcmQ7Ci0gIHRyZWUgcGFy bXMgPSBjcF9wYXJzZXJfcmVxdWlyZW1lbnRfcGFyYW1ldGVyX2xpc3QgKHBh cnNlcik7Ci0gIGlmIChwYXJtcyA9PSBlcnJvcl9tYXJrX25vZGUpCi0gICAg cmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAgLyogTG9jYWwgcGFyYW1ldGVy cyBhcmUgZGVsYXJlZCBhcyB2YXJpYWJsZXMgd2l0aGluIHRoZSBzY29wZQor ICAgICBvZiB0aGUgZXhwcmVzc2lvbi4gVGhleSBhcmUgbm90IHZpc2libGUg cGFzdCB0aGUgZW5kIG9mCisgICAgIHRoZSBleHByZXNzaW9uLiAqLworICBz dHJ1Y3Qgc2NvcGVfc2VudGluZWwKKyAgeworICAgIHNjb3BlX3NlbnRpbmVs ICgpCisgICAgeworICAgICAgYmVnaW5fc2NvcGUgKHNrX2Jsb2NrLCBOVUxM X1RSRUUpOworICAgIH0KIAotICAvLyBQYXJzZSB0aGUgcmVxdWlyZW1lbnQg Ym9keS4KKyAgICB+c2NvcGVfc2VudGluZWwgKCkKKyAgICB7CisgICAgICBw b3BfYmluZGluZ3NfYW5kX2xlYXZlX3Njb3BlICgpOworICAgIH0KKyAgfSBz OworCisgIC8qIFBhcnNlIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgbGlzdC4g Ki8KKyAgdHJlZSBwYXJtcyA9IE5VTExfVFJFRTsKKyAgaWYgKGNwX2xleGVy X25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9PUEVOX1BBUkVO KSkKKyAgICB7CisgICAgICBwYXJtcyA9IGNwX3BhcnNlcl9yZXF1aXJlbWVu dF9wYXJhbWV0ZXJfbGlzdCAocGFyc2VyKTsKKyAgICAgIGlmIChwYXJtcyA9 PSBlcnJvcl9tYXJrX25vZGUpCisgICAgICAgIHJldHVybiBlcnJvcl9tYXJr X25vZGU7CisgICAgfQorCisgIC8qIFBhcnNlIHRoZSByZXF1aXJlbWVudCBi b2R5LiAqLwogICB0cmVlIHJlcXMgPSBjcF9wYXJzZXJfcmVxdWlyZW1lbnRf Ym9keSAocGFyc2VyKTsKICAgaWYgKHJlcXMgPT0gZXJyb3JfbWFya19ub2Rl KQogICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CkBAIC0yMzMxMiwxNyAr MjMzMjEsMTYgQEAgY3BfcGFyc2VyX3JlcXVpcmVzX2V4cHJlc3Npb24gKGNw X3BhcnNlciAqcGFyc2VyKQogICByZXR1cm4gZmluaXNoX3JlcXVpcmVzX2V4 cHIgKHBhcm1zLCByZXFzKTsKIH0KIAotLy8gUGFyc2UgYSBwYXJhbWV0ZXJp emVkIHJlcXVpcmVtZW50LgotLy8KLS8vICAgIHJlcXVpcmVtZW50LXBhcmFt ZXRlci1saXN0OgotLy8gICAgICAgICcoJyBwYXJhbWV0ZXItZGVjbGFyYXRp b24tY2xhdXNlICcpJworLyogUGFyc2UgYSBwYXJhbWV0ZXJpemVkIHJlcXVp cmVtZW50LgorCisgICByZXF1aXJlbWVudC1wYXJhbWV0ZXItbGlzdDoKKyAg ICAgICAnKCcgcGFyYW1ldGVyLWRlY2xhcmF0aW9uLWNsYXVzZSAnKScgKi8K IHN0YXRpYyB0cmVlCiBjcF9wYXJzZXJfcmVxdWlyZW1lbnRfcGFyYW1ldGVy X2xpc3QgKGNwX3BhcnNlciAqcGFyc2VyKQogewogICBpZiAoIWNwX3BhcnNl cl9yZXF1aXJlIChwYXJzZXIsIENQUF9PUEVOX1BBUkVOLCBSVF9PUEVOX1BB UkVOKSkKICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogCi0gIC8vIFBh cnNlIHRoZSBuZXN0ZWQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uIGNsYXVzZS4K ICAgdHJlZSBwYXJtcyA9IGNwX3BhcnNlcl9wYXJhbWV0ZXJfZGVjbGFyYXRp b25fY2xhdXNlIChwYXJzZXIpOwogICBpZiAocGFybXMgPT0gZXJyb3JfbWFy a19ub2RlKQogICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7CkBAIC0yMzMz MywxMCArMjMzNDEsMTAgQEAgY3BfcGFyc2VyX3JlcXVpcmVtZW50X3BhcmFt ZXRlcl9saXN0IChjcF9wYXJzZXIgKnBhcnNlcikKICAgcmV0dXJuIHBhcm1z OwogfQogCi0vLyBQYXJzZSB0aGUgYm9keSBvZiBhIHJlcXVpcmVtZW50Lgot Ly8KLS8vICAgIHJlcXVpcmVtZW50LWJvZHk6Ci0vLyAgICAgICAgJ3snIHJl cXVpcmVtZW50LWxpc3QgJ30nCisvKiBQYXJzZSB0aGUgYm9keSBvZiBhIHJl cXVpcmVtZW50LgorCisgICByZXF1aXJlbWVudC1ib2R5OgorICAgICAgICd7 JyByZXF1aXJlbWVudC1saXN0ICd9JyAqLwogc3RhdGljIHRyZWUKIGNwX3Bh cnNlcl9yZXF1aXJlbWVudF9ib2R5IChjcF9wYXJzZXIgKnBhcnNlcikKIHsK QEAgLTIzMzUxLDExICsyMzM1OSwxMSBAQCBjcF9wYXJzZXJfcmVxdWlyZW1l bnRfYm9keSAoY3BfcGFyc2VyICpwYXJzZXIpCiAgIHJldHVybiByZXFzOwog fQogCi0vLyBQYXJzZSBhIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLgotLy8KLS8v ICAgIHJlcXVpcmVtZW50LWxpc3Q6Ci0vLyAgICAgICAgcmVxdWlyZW1lbnQK LS8vICAgICAgICByZXF1aXJlbWVudC1saXN0ICc7JyByZXF1aXJlbWVudFtv cHRdCisvKiBQYXJzZSBhIGxpc3Qgb2YgcmVxdWlyZW1lbnRzLgorCisgICBy ZXF1aXJlbWVudC1saXN0OgorICAgICAgIHJlcXVpcmVtZW50CisgICAgICAg cmVxdWlyZW1lbnQtbGlzdCAnOycgcmVxdWlyZW1lbnRbb3B0XSAqLwogc3Rh dGljIHRyZWUKIGNwX3BhcnNlcl9yZXF1aXJlbWVudF9saXN0IChjcF9wYXJz ZXIgKnBhcnNlcikKIHsKQEAgLTIzMzY0LDkxICsyMzM3Miw5NSBAQCBjcF9w YXJzZXJfcmVxdWlyZW1lbnRfbGlzdCAoY3BfcGFyc2VyICpwYXJzZXIpCiAg ICAgewogICAgICAgdHJlZSByZXEgPSBjcF9wYXJzZXJfcmVxdWlyZW1lbnQg KHBhcnNlcik7CiAgICAgICBpZiAocmVxID09IGVycm9yX21hcmtfbm9kZSkK LSAgICAgICAgcmV0dXJuIHJlcTsKKyAgICAgICAgcmV0dXJuIGVycm9yX21h cmtfbm9kZTsKIAogICAgICAgcmVzdWx0ID0gdHJlZV9jb25zIChOVUxMX1RS RUUsIHJlcSwgcmVzdWx0KTsKIAotICAgICAgLy8gSWYgd2Ugc2VlIGEgc2Vt aS1jb2xvbiwgY29uc3VtZSBpdC4KKyAgICAgIC8qIElmIHdlIHNlZSBhIHNl bWktY29sb24sIGNvbnN1bWUgaXQuICovCiAgICAgICBpZiAoY3BfbGV4ZXJf bmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX1NFTUlDT0xPTikp CiAgICAgICAgICAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5s ZXhlcik7CiAKLSAgICAgIC8vIElmIHdlJ3ZlIGZvdW5kIHRoZSBlbmQgb2Yg dGhlIGxpc3QsIHN0b3AgcHJvY2Vzc2luZwotICAgICAgLy8gdGhlIGxpc3Qu CisgICAgICAvKiBTdG9wIHByb2Nlc3NpbmcgYXQgdGhlIGVuZCBvZiB0aGUg bGlzdC4gKi8KICAgICAgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChw YXJzZXItPmxleGVyLCBDUFBfQ0xPU0VfQlJBQ0UpKQogICAgICAgICBicmVh azsKICAgICB9CiAKLSAgLy8gUmV2ZXJzZSB0aGUgb3JkZXIgb2YgcmVxdWly ZW1lbnRzIHNvIHRoZXkgYXJlIGFuYWx5emVkIGluCi0gIC8vIGRlY2xhcmF0 aW9uIG9yZGVyLgorICAvKiBSZXZlcnNlIHRoZSBvcmRlciBvZiByZXF1aXJl bWVudHMgc28gdGhleSBhcmUgYW5hbHl6ZWQgaW4KKyAgICAgZGVjbGFyYXRp b24gb3JkZXIuICovCiAgIHJldHVybiBucmV2ZXJzZSAocmVzdWx0KTsKIH0K IAotLy8gUGFyc2UgYSBzeW50YWN0aWMgcmVxdWlyZW1lbnQgb3IgdHlwZSBy ZXF1aXJlbWVudC4KLS8vCi0vLyAgICByZXF1aXJlbWVudDoKLS8vICAgICAg ICBzaW1wbGUtcmVxdWlyZW1lbnQKLS8vICAgICAgICBjb21wb3VuZC1yZXF1 aXJlbWVudAotLy8gICAgICAgIHR5cGUtcmVxdWlyZW1lbnQKLS8vICAgICAg ICBuZXN0ZWQtcmVxdWlyZW1lbnQKKy8qIFBhcnNlIGEgc3ludGFjdGljIHJl cXVpcmVtZW50IG9yIHR5cGUgcmVxdWlyZW1lbnQuCisKKyAgICAgcmVxdWly ZW1lbnQ6CisgICAgICAgc2ltcGxlLXJlcXVpcmVtZW50CisgICAgICAgY29t cG91bmQtcmVxdWlyZW1lbnQKKyAgICAgICB0eXBlLXJlcXVpcmVtZW50Cisg ICAgICAgbmVzdGVkLXJlcXVpcmVtZW50ICovCiBzdGF0aWMgdHJlZQogY3Bf cGFyc2VyX3JlcXVpcmVtZW50IChjcF9wYXJzZXIgKnBhcnNlcikKIHsKLSAg aWYgKGNwX2xleGVyX25leHRfdG9rZW5faXNfa2V5d29yZCAocGFyc2VyLT5s ZXhlciwgUklEX1JFUVVJUkVTKSkKLSAgICByZXR1cm4gY3BfcGFyc2VyX25l c3RlZF9yZXF1aXJlbWVudCAocGFyc2VyKTsKLQogICBpZiAoY3BfbGV4ZXJf bmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX09QRU5fQlJBQ0Up KQogICAgIHJldHVybiBjcF9wYXJzZXJfY29tcG91bmRfcmVxdWlyZW1lbnQg KHBhcnNlcik7Ci0KLSAgLy8gVHJ5IHBhcnNpbmcgYSB0eXBlIHJlcXVpcmVt ZW50IGZpcnN0LgotICBjcF9wYXJzZXJfcGFyc2VfdGVudGF0aXZlbHkgKHBh cnNlcik7Ci0gIHRyZWUgcmVxID0gY3BfcGFyc2VyX3R5cGVfcmVxdWlyZW1l bnQgKHBhcnNlcik7Ci0gIGlmICghY3BfcGFyc2VyX3BhcnNlX2RlZmluaXRl bHkgKHBhcnNlcikpCi0gICAgcmVxID0gY3BfcGFyc2VyX3NpbXBsZV9yZXF1 aXJlbWVudCAocGFyc2VyKTsKLQotICByZXR1cm4gcmVxOworICBlbHNlIGlm IChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzX2tleXdvcmQgKHBhcnNlci0+bGV4 ZXIsIFJJRF9UWVBFTkFNRSkpCisgICAgcmV0dXJuIGNwX3BhcnNlcl90eXBl X3JlcXVpcmVtZW50IChwYXJzZXIpOworICBlbHNlIGlmIChjcF9sZXhlcl9u ZXh0X3Rva2VuX2lzX2tleXdvcmQgKHBhcnNlci0+bGV4ZXIsIFJJRF9SRVFV SVJFUykpCisgICAgcmV0dXJuIGNwX3BhcnNlcl9uZXN0ZWRfcmVxdWlyZW1l bnQgKHBhcnNlcik7CisgIGVsc2UKKyAgICByZXR1cm4gY3BfcGFyc2VyX3Np bXBsZV9yZXF1aXJlbWVudCAocGFyc2VyKTsKIH0KIAotLy8gUGFyc2UgYSBu ZXN0ZWQgcmVxdWlyZW1lbnQuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYSByZXF1 aXJlcyBjbGF1c2UuCi0vLwotLy8gICAgbmVzdGVkLXJlcXVpcmVtZW50Ogot Ly8gICAgICByZXF1aXJlcy1jbGF1c2UKKy8qIFBhcnNlIGEgc2ltcGxlIHJl cXVpcmVtZW50LgorCisgICAgIHNpbXBsZS1yZXF1aXJlbWVudDoKKyAgICAg ICBleHByZXNzaW9uICc7JyAqLwogc3RhdGljIHRyZWUKLWNwX3BhcnNlcl9u ZXN0ZWRfcmVxdWlyZW1lbnQgKGNwX3BhcnNlciAqcGFyc2VyKQorY3BfcGFy c2VyX3NpbXBsZV9yZXF1aXJlbWVudCAoY3BfcGFyc2VyICpwYXJzZXIpCiB7 Ci0gIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOwot ICB0cmVlIHJlcSA9IGNwX3BhcnNlcl9yZXF1aXJlc19jbGF1c2UgKHBhcnNl cik7Ci0gIGlmIChyZXEgPT0gZXJyb3JfbWFya19ub2RlKQorICB0cmVlIGV4 cHIgPSBjcF9wYXJzZXJfZXhwcmVzc2lvbiAocGFyc2VyLCBOVUxMLCBmYWxz ZSwgZmFsc2UpOworICBpZiAoIWV4cHIgfHwgZXhwciA9PSBlcnJvcl9tYXJr X25vZGUpCiAgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKLSAgcmV0dXJu IGZpbmlzaF9uZXN0ZWRfcmVxdWlyZW1lbnQgKHJlcSk7CisgIAorICBpZiAo IWNwX3BhcnNlcl9yZXF1aXJlIChwYXJzZXIsIENQUF9TRU1JQ09MT04sIFJU X1NFTUlDT0xPTikpCisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKwor ICByZXR1cm4gZmluaXNoX3NpbXBsZV9yZXF1aXJlbWVudCAoZXhwcik7CiB9 CiAKLS8vIFBhcnNlIGEgc2ltcGxlIHJlcXVpcmVtZW50LgotLy8KLS8vICAg IHNpbXBsZS1yZXF1aXJlbWVudDoKLS8vICAgICAgZXhwcmVzc2lvbgorLyog UGFyc2UgYSB0eXBlIHJlcXVpcmVtZW50CisKKyAgICAgdHlwZS1yZXF1aXJl bWVudAorICAgICAgICAgbmVzdGVkLW5hbWUtc3BlY2lmaWVyIFtvcHRdIHR5 cGUtbmFtZSAnOycgKi8KIHN0YXRpYyB0cmVlCi1jcF9wYXJzZXJfc2ltcGxl X3JlcXVpcmVtZW50IChjcF9wYXJzZXIgKnBhcnNlcikKK2NwX3BhcnNlcl90 eXBlX3JlcXVpcmVtZW50IChjcF9wYXJzZXIgKnBhcnNlcikKIHsKLSAgdHJl ZSBleHByID0gY3BfcGFyc2VyX2V4cHJlc3Npb24gKHBhcnNlciwgTlVMTCwg ZmFsc2UsIGZhbHNlKTsKLSAgaWYgKCFleHByIHx8IGV4cHIgPT0gZXJyb3Jf bWFya19ub2RlKQorICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIt PmxleGVyKTsKKworICBjcF9wYXJzZXJfZ2xvYmFsX3Njb3BlX29wdCAocGFy c2VyLCAvKmN1cnJlbnRfc2NvcGVfdmFsaWRfcD0qL3RydWUpOworICBjcF9w YXJzZXJfbmVzdGVkX25hbWVfc3BlY2lmaWVyX29wdCAocGFyc2VyLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0eXBlbmFt ZV9rZXl3b3JkX3A9Ki90cnVlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLypjaGVja19kZXBlbmRlbmN5X3A9Ki9mYWxzZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHlw ZV9wPSovdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC8qaXNfZGVjbGFyYXRpb249Ki9mYWxzZSk7CisgIAorICB0cmVl IHR5cGUgPSBjcF9wYXJzZXJfdHlwZV9uYW1lIChwYXJzZXIsIC8qdHlwZW5h bWVfa2V5d29yZF9wPSovdHJ1ZSk7CisgIGlmICh0eXBlID09IGVycm9yX21h cmtfbm9kZSkKKyAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworCisgIGlm ICghY3BfcGFyc2VyX3JlcXVpcmUgKHBhcnNlciwgQ1BQX1NFTUlDT0xPTiwg UlRfU0VNSUNPTE9OKSkKICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwot ICByZXR1cm4gZmluaXNoX2V4cHJfcmVxdWlyZW1lbnQgKGV4cHIpOworCisg IHJldHVybiBmaW5pc2hfdHlwZV9yZXF1aXJlbWVudCAodHlwZSk7CiB9CiAK LS8vIFBhcnNlIGEgY29tcG91bmQgcmVxdWlyZW1lbnQKLS8vCi0vLyAgICBj b21wb3VuZC1yZXF1aXJlbWVudDoKLS8vICAgICAgICAneycgZXhwcmVzc2lv biAnfScgdHJhaWxpbmctY29uc3RyYWludC1zcGVjaWZpZXJzCi0vLwotLy8g ICAgdHJhaWxpbmctY29uc3RyYWludC1zcGVjaWZpZXJzOgotLy8gICAgICBj b25zdHJhaW50LXNwZWNpZmllcnMtc2VxW29wdF0gcmVzdWx0LXR5cGUtcmVx dWlyZW1lbnRbb3B0XQotLy8KLS8vICAgIHJlc3VsdC10eXBlLXJlcXVpcmVt ZW50OgotLy8gICAgICAgJy0+JyB0eXBlLWlkCisvKiBQYXJzZSBhIGNvbXBv dW5kIHJlcXVpcmVtZW50CisKKyAgICAgY29tcG91bmQtcmVxdWlyZW1lbnQ6 CisgICAgICAgICAneycgZXhwcmVzc2lvbiAnfScgJ25vZXhjZXB0JyBbb3B0 XSB0cmFpbGluZy1yZXR1cm4tdHlwZSBbb3B0XSAnOycgKi8KIHN0YXRpYyB0 cmVlCiBjcF9wYXJzZXJfY29tcG91bmRfcmVxdWlyZW1lbnQgKGNwX3BhcnNl ciAqcGFyc2VyKQogewotICAvLyBQYXJzZSBhbiBleHByZXNzaW9uIGVuY2xv c2VkIGluICd7IH0ncy4KKyAgLyogUGFyc2UgYW4gZXhwcmVzc2lvbiBlbmNs b3NlZCBpbiAneyB9J3MuICovCiAgIGlmICghY3BfcGFyc2VyX3JlcXVpcmUg KHBhcnNlciwgQ1BQX09QRU5fQlJBQ0UsIFJUX09QRU5fQlJBQ0UpKQogICAg IHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAKQEAgLTIzNDU5LDEwICsyMzQ3 MSwxNSBAQCBjcF9wYXJzZXJfY29tcG91bmRfcmVxdWlyZW1lbnQgKGNwX3Bh cnNlciAqcGFyc2VyKQogICBpZiAoIWNwX3BhcnNlcl9yZXF1aXJlIChwYXJz ZXIsIENQUF9DTE9TRV9CUkFDRSwgUlRfQ0xPU0VfQlJBQ0UpKQogICAgIHJl dHVybiBlcnJvcl9tYXJrX25vZGU7CiAKLSAgLy8gUGFyc2UgdHJhaWxpbmcg ZXhwcmVzc2lvbiBzcGVjaWZpZXJzLgotICB0cmVlIGNzID0gY3BfcGFyc2Vy X2NvbnN0cmFpbnRfc3BlY2lmaWVyX3NlcSAocGFyc2VyLCBleHByKTsKKyAg LyogUGFyc2UgdGhlIG9wdGlvbmFsIG5vZXhjZXB0LiAqLworICBib29sIG5v ZXhjZXB0X3AgPSBmYWxzZTsKKyAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5f aXNfa2V5d29yZCAocGFyc2VyLT5sZXhlciwgUklEX05PRVhDRVBUKSkKKyAg ICB7CisgICAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxl eGVyKTsKKyAgICAgIG5vZXhjZXB0X3AgPSB0cnVlOworICAgIH0KIAotICAv LyBQYXJzZSB0aGUgb3B0aW9uYWwgdHJhaWxpbmcgdHlwZSByZXF1aXJlbWVu dC4KKyAgLyogUGFyc2UgdGhlIG9wdGlvbmFsIHRyYWlsaW5nIHJldHVybiB0 eXBlLiAqLwogICB0cmVlIHR5cGUgPSBOVUxMX1RSRUU7CiAgIGlmIChjcF9s ZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfREVSRUYp KQogICAgIHsKQEAgLTIzNDc1LDc5ICsyMzQ5MiwyMSBAQCBjcF9wYXJzZXJf Y29tcG91bmRfcmVxdWlyZW1lbnQgKGNwX3BhcnNlciAqcGFyc2VyKQogICAg ICAgICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogICAgIH0KIAotICByZXR1 cm4gZmluaXNoX2V4cHJfcmVxdWlyZW1lbnQgKGV4cHIsIHR5cGUsIGNzKTsK KyAgcmV0dXJuIGZpbmlzaF9jb21wb3VuZF9yZXF1aXJlbWVudCAoZXhwciwg dHlwZSwgbm9leGNlcHRfcCk7CiB9CiAKLS8vIFBhcnNlIGEgdHlwZSByZXF1 aXJlbWVudAotLy8KLS8vICAgIHR5cGUtcmVxdWlyZW1lbnQKLS8vICAgICAg ICB0eXBlLWlkCi1zdGF0aWMgdHJlZQotY3BfcGFyc2VyX3R5cGVfcmVxdWly ZW1lbnQgKGNwX3BhcnNlciAqcGFyc2VyKQotewotICAvLyBUcnkgcGFyc2lu ZyB0aGUgdHlwZS1pZAotICB0cmVlIHR5cGUgPSBjcF9wYXJzZXJfdHlwZV9p ZCAocGFyc2VyKTsKLSAgaWYgKHR5cGUgPT0gZXJyb3JfbWFya19ub2RlKQot ICAgIHJldHVybiBlcnJvcl9tYXJrX25vZGU7Ci0KLSAgLy8gSXQgY2FuIG9u bHkgYmUgYSB0eXBlIHJlcXVpcmVtZW50IGlmIG5vdGhpbmcgY29tZXMgYWZ0 ZXIgaXQuCi0gIC8vIEZvciBleGFtcGxlLCB0aGlzOgotICAvLwotICAvLyAg ICB0eXBlbmFtZSBUOjp2YWx1ZV90eXBlIHggPSBhOwotICAvLwotICAvLyBJ cyBub3QgYSB0eXBlIHJlcXVpcmVtZW50IGV2ZW4gdGhvdWdoIGl0IHN0YXJz IHdpdGggYSB0eXBlLWlkLgotICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9p c19ub3QgKHBhcnNlci0+bGV4ZXIsIENQUF9TRU1JQ09MT04pKQotICAgIHJl dHVybiBlcnJvcl9tYXJrX25vZGU7CisvKiBQYXJzZSBhIG5lc3RlZCByZXF1 aXJlbWVudC4gVGhpcyBpcyB0aGUgc2FtZSBhcyBhIHJlcXVpcmVzIGNsYXVz ZS4KIAotICByZXR1cm4gZmluaXNoX3R5cGVfcmVxdWlyZW1lbnQgKHR5cGUp OwotfQotCi0vLyBQYXJzZSBhbiBvcHRpb25hbCBjb25zdGV4cHIgc3BlY2lm aWVyIGluIGEgY29uc3RyYWludCBleHByZXNzaW9uLgorICAgbmVzdGVkLXJl cXVpcmVtZW50OgorICAgICByZXF1aXJlcy1jbGF1c2UgKi8KIHN0YXRpYyB0 cmVlCi1jcF9wYXJzZXJfY29uc3RleHByX2NvbnN0cmFpbnRfc3BlYyAoY3Bf cGFyc2VyICpwYXJzZXIsIHRyZWUgZXhwcikKLXsKLSAgY3BfbGV4ZXJfY29u c3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7Ci0gIHJldHVybiBmaW5pc2hf Y29uc3RleHByX3JlcXVpcmVtZW50IChleHByKTsKLX0KLQotLy8gUGFyc2Ug YW4gb3B0aW9uYWwgbm9leGNlcHQgc3BlY2lmaWVyIGluIGEgY29uc3RyYWlu dCBleHByZXNzaW9uLgotc3RhdGljIHRyZWUKLWNwX3BhcnNlcl9ub2V4Y2Vw dF9jb25zdHJhaW50X3NwZWMgKGNwX3BhcnNlciAqcGFyc2VyLCB0cmVlIGV4 cHIpCitjcF9wYXJzZXJfbmVzdGVkX3JlcXVpcmVtZW50IChjcF9wYXJzZXIg KnBhcnNlcikKIHsKICAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy LT5sZXhlcik7Ci0gIHJldHVybiBmaW5pc2hfbm9leGNlcHRfcmVxdWlyZW1l bnQgKGV4cHIpOwotfQotCi1zdGF0aWMgdHJlZQotY3BfcGFyc2VyX2NvbnN0 cmFpbnRfc3BlYyAoY3BfcGFyc2VyICpwYXJzZXIsIHRyZWUgZXhwcikKLXsK LSAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXNfa2V5d29yZCAocGFyc2Vy LT5sZXhlciwgUklEX0NPTlNURVhQUikpCi0gICAgcmV0dXJuIGNwX3BhcnNl cl9jb25zdGV4cHJfY29uc3RyYWludF9zcGVjIChwYXJzZXIsIGV4cHIpOwot ICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pc19rZXl3b3JkIChwYXJzZXIt PmxleGVyLCBSSURfTk9FWENFUFQpKQotICAgIHJldHVybiBjcF9wYXJzZXJf bm9leGNlcHRfY29uc3RyYWludF9zcGVjIChwYXJzZXIsIGV4cHIpOwotICBy ZXR1cm4gTlVMTF9UUkVFOwotfQotCi0vLyBQYXJzZSBhbiBvcHRpb25hbCBl eHByZXNzaW9uIHNwZWNpZmllciBzZXF1ZW5jZS4KLS8vCi0vLyAgICBjb25z dHJhaW50LXNwZWNpZmllci1zZXF1ZW5jZToKLS8vICAgICAgICBjb25zdGV4 cHIgW29wdF0gbm9leGNlcHQgW29wdF0KLXN0YXRpYyB0cmVlCi1jcF9wYXJz ZXJfY29uc3RyYWludF9zcGVjaWZpZXJfc2VxIChjcF9wYXJzZXIgKnBhcnNl ciwgdHJlZSBleHByKQotewotICB0cmVlIHJlc3VsdCA9IE5VTExfVFJFRTsK LSAgd2hpbGUgKDEpCi0gICAgewotICAgICAgLy8gSWYgd2UgY2FuIHBhcnNl IGEgY29uc3RyYWludCBzcGVjaWZpZXIsIGluc2VydCBpdCBpbnRvCi0gICAg ICAvLyB0aGUgbGlzdCBvZiByZXF1aXJlbWVudHMuCi0gICAgICBpZiAodHJl ZSBzcGVjID0gY3BfcGFyc2VyX2NvbnN0cmFpbnRfc3BlYyAocGFyc2VyLCBl eHByKSkKLSAgICAgICAgewotICAgICAgICAgIHJlc3VsdCA9IHRyZWVfY29u cyAoTlVMTF9UUkVFLCBzcGVjLCByZXN1bHQpOwotICAgICAgICAgIGNvbnRp bnVlOwotICAgICAgICB9Ci0gICAgICBicmVhazsKLSAgICB9Ci0gIHJldHVy biByZXN1bHQ7CisgIHRyZWUgcmVxID0gY3BfcGFyc2VyX3JlcXVpcmVzX2Ns YXVzZSAocGFyc2VyKTsKKyAgaWYgKHJlcSA9PSBlcnJvcl9tYXJrX25vZGUp CisgICAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKyAgcmV0dXJuIGZpbmlz aF9uZXN0ZWRfcmVxdWlyZW1lbnQgKHJlcSk7CiB9CiAKIC8qIFN1cHBvcnQg RnVuY3Rpb25zICovCkBAIC0yNDQyOCw3ICsyNDM4Nyw3IEBAIGNwX3BhcnNl cl90ZW1wbGF0ZV9pbnRyb2R1Y3Rpb24gKGNwX3BhcnNlciogcGFyc2VyKQog ICAgIH0KIAogICAvLyBCdWlsZCBhbmQgYXNzb2NpYXRlIHRoZSBjb25zdHJh aW50LgotICB0cmVlIHBhcm1zID0gZmluaXNoX2NvbmNlcHRfaW50cm9kdWN0 aW9uICh0bXBsX2RlY2wsIGludHJvZHVjdGlvbl9saXN0KTsKKyAgdHJlZSBw YXJtcyA9IGZpbmlzaF90ZW1wbGF0ZV9pbnRyb2R1Y3Rpb24gKHRtcGxfZGVj bCwgaW50cm9kdWN0aW9uX2xpc3QpOwogICBpZiAocGFybXMpCiAgICAgcmV0 dXJuIHBhcm1zOwogCkBAIC0yNDUxNSwxNCArMjQ0NzQsMTUgQEAgY3BfcGFy c2VyX3RlbXBsYXRlX2RlY2xhcmF0aW9uX2FmdGVyX2V4cG9ydCAoY3BfcGFy c2VyKiBwYXJzZXIsIGJvb2wgbWVtYmVyX3ApCiAgICAgICAvKiBMb29rIGZv ciB0aGUgYD4nLiAgKi8KICAgICAgIGNwX3BhcnNlcl9za2lwX3RvX2VuZF9v Zl90ZW1wbGF0ZV9wYXJhbWV0ZXJfbGlzdCAocGFyc2VyKTsKIAotICAgICAg Ly8gTWFuYWdlIHRlbXBsYXRlIHJlcXVpcmVtZW50cwotICAgICAgaWYgKGZs YWdfY29uY2VwdHMpCi0JewotCSAgdHJlZSByZXFzID0gZ2V0X3Nob3J0aGFu ZF9jb25zdHJhaW50cyAoY3VycmVudF90ZW1wbGF0ZV9wYXJtcyk7Ci0JICBp ZiAodHJlZSByID0gY3BfcGFyc2VyX3JlcXVpcmVzX2NsYXVzZV9vcHQgKHBh cnNlcikpCi0JICAgIHJlcXMgPSBjb25qb2luX2NvbnN0cmFpbnRzIChyZXFz LCByKTsKKyAgICAgICAgLyogTWFuYWdlIHRlbXBsYXRlIHJlcXVpcmVtZW50 cyAqLworICAgICAgICBpZiAoZmxhZ19jb25jZXB0cykKKyAgICAgICAgewor ICAgICAgICAgIHRyZWUgcmVxcyA9IGdldF9zaG9ydGhhbmRfY29uc3RyYWlu dHMgKGN1cnJlbnRfdGVtcGxhdGVfcGFybXMpOworICAgICAgICAgIGlmICh0 cmVlIHIgPSBjcF9wYXJzZXJfcmVxdWlyZXNfY2xhdXNlX29wdCAocGFyc2Vy KSkgeworICAgICAgICAgICAgcmVxcyA9IGNvbmpvaW5fY29uc3RyYWludHMg KHJlcXMsIG1ha2VfcHJlZGljYXRlX2NvbnN0cmFpbnQgKHIpKTsKKyAgICAg ICAgICAgfQogICAgICAgICAgIFRFTVBMQVRFX1BBUk1TX0NPTlNUUkFJTlRT IChjdXJyZW50X3RlbXBsYXRlX3Bhcm1zKSA9IHJlcXM7Ci0JfQorICAgICAg ICB9CiAgICAgfQogICBlbHNlIGlmIChmbGFnX2NvbmNlcHRzKQogICAgIHsK QEAgLTMzNjI0LDE0ICszMzU4NCwxNiBAQCB0cmVlX3R5cGVfaXNfYXV0b19v cl9jb25jZXB0IChjb25zdF90cmVlIHQpCiAgIHJldHVybiBUUkVFX1RZUEUg KHQpICYmIGlzX2F1dG9fb3JfY29uY2VwdCAoVFJFRV9UWVBFICh0KSk7CiB9 CiAKLS8vIFJldHVybiB0aGUgdGVtcGxhdGUgZGVjbCBiZWluZyBjYWxsZWQg b3IgZXZhbHVhdGVkIGFzIHBhcnQgb2YgdGhlCi0vLyBjb25zdHJhaW50IGNo ZWNrLgorLyogUmV0dXJucyB0aGUgdGVtcGxhdGUgZGVjbGFyYXRpb24gYmVp bmcgY2FsbGVkIG9yIGV2YWx1YXRlZCBhcyAKKyAgIHBhcnQgb2YgdGhlIGNv bnN0cmFpbnQgY2hlY2suIE5vdGUgdGhhdCBUIG11c3QgYmUgYSBwcmVkaWNh dGUKKyAgIGNvbnN0cmFpbnQgKGl0IGNhbid0IGJlIGFueSBvdGhlciBraW5k IG9mIGNvbnN0cmFpbnQpLiAqLwogc3RhdGljIHRyZWUKIGdldF9jb25jZXB0 X2Zyb21fY29uc3RyYWludCAodHJlZSB0KQogeworICBnY2NfYXNzZXJ0IChU UkVFX0NPREUgKHQpID09IFBSRURfQ09OU1RSKTsKKyAgdCA9IFBSRURfQ09O U1RSX0VYUFIgKHQpOwogICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKHQpID09 IENBTExfRVhQUiB8fCBUUkVFX0NPREUgKHQpID09IFRFTVBMQVRFX0lEX0VY UFIpOwogCi0gIC8vIFZhcmlhYmxlIGNvbmNlcHRzIHdpbGwgYmUgYSBURU1Q TEFURV9JRF9FWFBSLgogICBpZiAoVFJFRV9DT0RFICh0KSA9PSBURU1QTEFU RV9JRF9FWFBSKQogICAgIHJldHVybiBERUNMX1RFTVBMQVRFX1JFU1VMVCAo VFJFRV9PUEVSQU5EICh0LCAwKSk7CiAgIGVsc2UKZGlmZiAtLWdpdCBhL2dj Yy9jcC9wdC5jIGIvZ2NjL2NwL3B0LmMKaW5kZXggNThkNTIyMy4uMTFhYWNk MyAxMDA2NDQKLS0tIGEvZ2NjL2NwL3B0LmMKKysrIGIvZ2NjL2NwL3B0LmMK QEAgLTQ2LDYgKzQ2LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmls ZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJ0aW1ldmFyLmgi CiAjaW5jbHVkZSAidHJlZS1pdGVyYXRvci5oIgogI2luY2x1ZGUgInR5cGUt dXRpbHMuaCIKKyNpbmNsdWRlICJoYXNoLW1hcC5oIgogI2luY2x1ZGUgImdp bXBsaWZ5LmgiCiAKIC8qIFRoZSB0eXBlIG9mIGZ1bmN0aW9ucyB0YWtpbmcg YSB0cmVlLCBhbmQgc29tZSBhZGRpdGlvbmFsIGRhdGEsIGFuZApAQCAtOTE2 LDkgKzkxNyw5IEBAIG1heWJlX25ld19wYXJ0aWFsX3NwZWNpYWxpemF0aW9u ICh0cmVlIHR5cGUpCiAKICAgICAgIC8vIElmIHRoZSBjb25zdHJhaW50cyBh cmUgbm90IHRoZSBzYW1lIGFzIHRob3NlIG9mIHRoZSBwcmltYXJ5CiAgICAg ICAvLyB0aGVuLCB3ZSBjYW4gcHJvYmFibHkgY3JlYXRlIGEgbmV3IHNwZWNp YWxpemF0aW9uLgotICAgICAgdHJlZSB0eXBlX3JlcXMgPSBURU1QTEFURV9Q QVJNX0NPTlNUUkFJTlRTIChjdXJyZW50X3RlbXBsYXRlX3Bhcm1zKTsKLSAg ICAgIHRyZWUgdHlwZV9jb25zdHIgPSBidWlsZF9jb25zdHJhaW50cyAodHlw ZV9yZXFzLCBOVUxMX1RSRUUpOwotICAgICAgdHJlZSBtYWluX2NvbnN0ciA9 IGdldF9jb25zdHJhaW50cyAoREVDTF9URU1QTEFURV9SRVNVTFQgKHRtcGwp KTsKKyAgICAgIHRyZWUgdG1wbF9jb25zdHIgPSBURU1QTEFURV9QQVJNX0NP TlNUUkFJTlRTIChjdXJyZW50X3RlbXBsYXRlX3Bhcm1zKTsKKyAgICAgIHRy ZWUgdHlwZV9jb25zdHIgPSBidWlsZF9jb25zdHJhaW50cyAodG1wbF9jb25z dHIsIE5VTExfVFJFRSk7CisgICAgICB0cmVlIG1haW5fY29uc3RyID0gZ2V0 X2NvbnN0cmFpbnRzICh0bXBsKTsKICAgICAgIGlmIChlcXVpdmFsZW50X2Nv bnN0cmFpbnRzICh0eXBlX2NvbnN0ciwgbWFpbl9jb25zdHIpKQogICAgICAg ICByZXR1cm4gTlVMTF9UUkVFOwogCkBAIC05MjgsNyArOTI5LDcgQEAgbWF5 YmVfbmV3X3BhcnRpYWxfc3BlY2lhbGl6YXRpb24gKHRyZWUgdHlwZSkKICAg ICAgIHdoaWxlIChzcGVjcykKICAgICAgICAgewogICAgICAgICAgIHRyZWUg c3BlY190bXBsID0gVFJFRV9WQUxVRSAoc3BlY3MpOwotICAgICAgICAgIHRy ZWUgc3BlY19jb25zdHIgPSBnZXRfY29uc3RyYWludHMgKERFQ0xfVEVNUExB VEVfUkVTVUxUIChzcGVjX3RtcGwpKTsKKyAgICAgICAgICB0cmVlIHNwZWNf Y29uc3RyID0gZ2V0X2NvbnN0cmFpbnRzIChzcGVjX3RtcGwpOwogICAgICAg ICAgIGlmIChlcXVpdmFsZW50X2NvbnN0cmFpbnRzICh0eXBlX2NvbnN0ciwg c3BlY19jb25zdHIpKQogICAgICAgICAgICAgcmV0dXJuIE5VTExfVFJFRTsK ICAgICAgICAgICBzcGVjcyA9IFRSRUVfQ0hBSU4gKHNwZWNzKTsKQEAgLTE5 NTQsMTAgKzE5NTUsMjYgQEAgcHJpbnRfY2FuZGlkYXRlcyAodHJlZSBmbnMp CiAgIGdjY19hc3NlcnQgKHN0ciA9PSBOVUxMKTsKIH0KIAotLy8gQW1vbmcg Y2FuZGlkYXRlcyBoYXZpbmcgdGhlIHNhbWUgc2lnbmF0dXJlLCByZXR1cm4g dGhlIG1vc3QgY29uc3RyYWluZWQKLS8vIG9yIE5VTExfVFJFRSBpZiB0aGVy ZSBpcyBubyBiZXN0IGNhbmRpZGF0ZS4gSWYgdGhlIHNpZ25hdHVyZXMgb2Yg Y2FuZGlkYXRlcwotLy8gdmFyeSAoZS5nLiwgdGVtcGxhdGUgc3BlY2lhbGl6 YXRpb24gdnMuIG1lbWJlciBmdW5jdGlvbiksIHRoZW4gdGhlcmUgY2FuCi0v LyBiZSBubyBtb3N0IGNvbnN0cmFpbmVkLgorLyogR2V0IGEgKHBvc3NpYmx5 KSBjb25zdHJhaW5lZCB0ZW1wbGF0ZSBkZWNsYXJhdGlvbiBmb3IgdGhlCisg ICBwdXJwb3NlIG9mIG9yZGVyaW5nIGNhbmRpZGF0ZXMuICAqLworc3RhdGlj IHRyZWUKK2dldF90ZW1wbGF0ZV9mb3Jfb3JkZXJpbmcgKHRyZWUgbGlzdCkK K3sKKyAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChsaXN0KSA9PSBUUkVFX0xJ U1QpOworICB0cmVlIGYgPSBUUkVFX1ZBTFVFIChsaXN0KTsKKyAgaWYgKHRy ZWUgdGkgPSBERUNMX1RFTVBMQVRFX0lORk8gKGYpKQorICAgIHJldHVybiBU SV9URU1QTEFURSAodGkpOworICByZXR1cm4gZjsKK30KKworLyogQW1vbmcg Y2FuZGlkYXRlcyBoYXZpbmcgdGhlIHNhbWUgc2lnbmF0dXJlLCByZXR1cm4g dGhlIAorICAgbW9zdCBjb25zdHJhaW5lZCBvciBOVUxMX1RSRUUgaWYgdGhl cmUgaXMgbm8gYmVzdCBjYW5kaWRhdGUuIAorICAgSWYgdGhlIHNpZ25hdHVy ZXMgb2YgY2FuZGlkYXRlcyB2YXJ5IChlLmcuLCB0ZW1wbGF0ZSAKKyAgIHNw ZWNpYWxpemF0aW9uIHZzLiBtZW1iZXIgZnVuY3Rpb24pLCB0aGVuIHRoZXJl IGNhbiBiZSBubyAKKyAgIG1vc3QgY29uc3RyYWluZWQuIAorCisgICBOb3Rl IHRoYXQgd2UgZG9uJ3QgY29tcGFyZSBjb25zdHJhaW50cyBvbiB0aGUgZnVu Y3Rpb25zCisgICB0aGVtc2VsdmVzLCBidXQgcmF0aGVyIHRob3NlIG9mIHRo ZWlyIHRlbXBsYXRlcy4gKi8KIHN0YXRpYyB0cmVlCiBtb3N0X2NvbnN0cmFp bmVkX2Z1bmN0aW9uICh0cmVlIGNhbmRpZGF0ZXMpCiB7CkBAIC0xOTY1LDcg KzE5ODIsOCBAQCBtb3N0X2NvbnN0cmFpbmVkX2Z1bmN0aW9uICh0cmVlIGNh bmRpZGF0ZXMpCiAgIHRyZWUgY2hhbXAgPSBjYW5kaWRhdGVzOwogICBmb3Ig KHRyZWUgYyA9IFRSRUVfQ0hBSU4gKGNoYW1wKTsgYzsgYyA9IFRSRUVfQ0hB SU4gKGMpKQogICAgIHsKLSAgICAgIGludCB3aW5uZXIgPSBtb3JlX2NvbnN0 cmFpbmVkIChUUkVFX1ZBTFVFIChjaGFtcCksIFRSRUVfVkFMVUUgKGMpKTsK KyAgICAgIGludCB3aW5uZXIgPSBtb3JlX2NvbnN0cmFpbmVkIChnZXRfdGVt cGxhdGVfZm9yX29yZGVyaW5nIChjaGFtcCksIAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldF90ZW1wbGF0ZV9mb3Jfb3JkZXJp bmcgKGMpKTsKICAgICAgIGlmICh3aW5uZXIgPT0gLTEpCiAgICAgICAgIGNo YW1wID0gYzsgLy8gVGhlIGNhbmRpZGF0ZSBpcyBtb3JlIGNvbnN0cmFpbmVk CiAgICAgICBlbHNlIGlmICh3aW5uZXIgPT0gMCkKQEAgLTE5NzQsNyArMTk5 Miw4IEBAIG1vc3RfY29uc3RyYWluZWRfZnVuY3Rpb24gKHRyZWUgY2FuZGlk YXRlcykKIAogICAvLyBWZXJpZnkgdGhhdCB0aGUgY2hhbXAgaXMgYmV0dGVy IHRoYW4gcHJldmlvdXMgY2FuZGlkYXRlcy4KICAgZm9yICh0cmVlIGMgPSBj YW5kaWRhdGVzOyBjICE9IGNoYW1wOyBjID0gVFJFRV9DSEFJTiAoYykpIHsK LSAgICBpZiAoIW1vcmVfY29uc3RyYWluZWQgKFRSRUVfVkFMVUUgKGNoYW1w KSwgVFJFRV9WQUxVRSAoYykpKQorICAgIGlmICghbW9yZV9jb25zdHJhaW5l ZCAoZ2V0X3RlbXBsYXRlX2Zvcl9vcmRlcmluZyAoY2hhbXApLCAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdldF90ZW1wbGF0ZV9mb3Jfb3JkZXJp bmcgKGMpKSkKICAgICAgIHJldHVybiBOVUxMX1RSRUU7CiAgIH0KIApAQCAt MjE3NCw5ICsyMTkzLDkgQEAgZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uICh0 cmVlIHRlbXBsYXRlX2lkLAogCSAgICAgICBzcGVjaWFsaXplIFRNUEwgd2ls bCBwcm9kdWNlIERFQ0wuICAqLwogCSAgICBjb250aW51ZTsKIAotCSAgLy8g VGhlIGRlZHVjZWQgYXJndW1lbnRzIG11c3Qgc2F0aXNmeSB0aGUgdGVtcGxh dGUgY29uc3RyYWludHMKLSAgICAgICAgICAvLyBpbiBvcmRlciB0byBiZSB2 aWFibGUuCi0gICAgICAgICAgaWYgKCFjaGVja190ZW1wbGF0ZV9jb25zdHJh aW50cyAoZm4sIHRhcmdzKSkKKyAgICAgICAgICAvKiBSZW1vdmUsIGZyb20g dGhlIHNldCBvZiBjYW5kaWRhdGVzLCBhbGwgdGhvc2UgZnVuY3Rpb25zCisg ICAgICAgICAgICAgd2hvc2UgY29uc3RyYWludHMgYXJlIG5vdCBzYXRpc2Zp ZWQuICovCisgICAgICAgICAgaWYgKGZsYWdfY29uY2VwdHMgJiYgIWNvbnN0 cmFpbnRzX3NhdGlzZmllZF9wIChmbiwgdGFyZ3MpKSAKICAgICAgICAgICAg IGNvbnRpbnVlOwogCiAgICAgICAgICAgLy8gVGhlbiwgdHJ5IHRvIGZvcm0g dGhlIG5ldyBmdW5jdGlvbiB0eXBlLgpAQCAtMjI0NSw4ICsyMjY0LDcgQEAg ZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uICh0cmVlIHRlbXBsYXRlX2lkLAog ICAgICAgICAgIC8vIElmIHRoZSBkZWR1Y2VkIGFyZ3VtZW50cyBkbyBub3Qg c2F0aXNmeSB0aGUgY29uc3RyYWludHMsCiAgICAgICAgICAgLy8gdGhpcyBp cyBub3QgYSBjYW5kaWRhdGUuIElmIGl0IGZhaWxzLCByZWNvcmQgdGhlCiAg ICAgICAgICAgLy8gcmVqZWN0ZWQgY2FuZGlkYXRlLgotICAgICAgICAgIHRy ZWUgdGFyZ3MgPSBERUNMX1RJX0FSR1MgKGZuKTsKLSAgICAgICAgICBpZiAo IWNoZWNrX3RlbXBsYXRlX2NvbnN0cmFpbnRzIChmbiwgdGFyZ3MpKQorICAg ICAgICAgIGlmIChmbGFnX2NvbmNlcHRzICYmICFjb25zdHJhaW50c19zYXRp c2ZpZWRfcCAoZm4pKQogICAgICAgICAgIHsKICAgICAgICAgICAgIHJlamVj dGlvbnMgPSB0cmVlX2NvbnMgKE5VTExfVFJFRSwgZm4sIHJlamVjdGlvbnMp OwogICAgICAgICAgICAgY29udGludWU7CkBAIC0yMzY2LDkgKzIzODQsMTQg QEAgZGV0ZXJtaW5lX3NwZWNpYWxpemF0aW9uICh0cmVlIHRlbXBsYXRlX2lk LAogICAgICp0YXJnc19vdXQgPSBUUkVFX1BVUlBPU0UgKHRlbXBsYXRlcyk7 CiAKICAgLy8gQXNzb2NpYXRlIHRoZSBkZWR1Y2VkIGNvbnN0cmFpbnRzIHdp dGggdGhlIG5ldyBkZWNsYXJhdGlvbi4KKyAgLyoKICAgdHJlZSB0bXBsID0g VFJFRV9WQUxVRSAodGVtcGxhdGVzKTsKLSAgaWYgKHRyZWUgY2kgPSBnZXRf Y29uc3RyYWludHMgKERFQ0xfVEVNUExBVEVfUkVTVUxUICh0bXBsKSkpCi0g ICAgc2V0X2NvbnN0cmFpbnRzIChkZWNsLCB0c3Vic3RfY29uc3RyYWludF9p bmZvIChjaSwgKnRhcmdzX291dCkpOworICBpZiAodHJlZSBjaSA9IGdldF9j b25zdHJhaW50cyAodG1wbCkpCisgICAgeworICAgICAgY2kgPSB0c3Vic3Rf Y29uc3RyYWludF9pbmZvIChjaSwgKnRhcmdzX291dCwgdGZfbm9uZSwgTlVM TF9UUkVFKTsKKyAgICAgIHNldF9jb25zdHJhaW50cyAoZGVjbCwgY2kpOwor ICAgIH0KKyAgKi8KIAogICByZXR1cm4gVFJFRV9WQUxVRSAodGVtcGxhdGVz KTsKIH0KQEAgLTQ0NzMsNyArNDQ5Niw3IEBAIHByb2Nlc3NfcGFydGlhbF9z cGVjaWFsaXphdGlvbiAodHJlZSBkZWNsKQogICAgICB0aGUgaW1wbGljaXQg YXJndW1lbnQgbGlzdCBvZiB0aGUgcHJpbWFyeSB0ZW1wbGF0ZS4KIAogICAg ICBGSVhNRTogVGhpcyBpcyByZWR1bmRhbnQgd2l0aCB0aGUgcmVxdWlyZW1l bnQgdGhhdCBhIHNwZWNpYWxpemF0aW9uCi0gICAgIHNoYWxsIGJlIG1vcmUg c3BlY2lhbGl6ZWQgdGhhbiB0aGUgcHJpbWFyeS4gSAorICAgICBzaGFsbCBi ZSBtb3JlIHNwZWNpYWxpemVkIHRoYW4gdGhlIHByaW1hcnkuCiAKICAgICAg Tm90ZSB0aGF0IGNvbmNlcHRzIGFsbG93IHBhcnRpYWwgc3BlY2lhbGl6YXRp b25zIHdpdGggdGhlIHNhbWUgbGlzdCBvZgogICAgICBhcmd1bWVudHMgYnV0 IGRpZmZlcmVudCBjb25zdHJhaW50cy4gKi8KQEAgLTQ2NDksNiArNDY3Miw3 IEBAIHByb2Nlc3NfcGFydGlhbF9zcGVjaWFsaXphdGlvbiAodHJlZSBkZWNs KQogICBTRVRfREVDTF9URU1QTEFURV9TUEVDSUFMSVpBVElPTiAodG1wbCk7 CiAgIERFQ0xfVEVNUExBVEVfSU5GTyAodG1wbCkgPSBidWlsZF90ZW1wbGF0 ZV9pbmZvIChtYWludG1wbCwgc3BlY2FyZ3MpOwogICBERUNMX1BSSU1BUllf VEVNUExBVEUgKHRtcGwpID0gbWFpbnRtcGw7CisgIHNldF9jb25zdHJhaW50 cyAodG1wbCwgdG1wbF9jb25zdHIpOwogCiAgIERFQ0xfVEVNUExBVEVfU1BF Q0lBTElaQVRJT05TIChtYWludG1wbCkKICAgICA9IHRyZWVfY29ucyAoc3Bl Y2FyZ3MsIHRtcGwsCkBAIC02ODEyLDcgKzY4MzYsNyBAQCBpc19jb21wYXRp YmxlX3RlbXBsYXRlX2FyZyAodHJlZSBwYXJtLCB0cmVlIGFyZykKICAgaWYg KHBhcm1fY29ucykKICAgICB7CiAgICAgICB0cmVlIGFyZ3MgPSB0ZW1wbGF0 ZV9wYXJtc190b19hcmdzIChERUNMX1RFTVBMQVRFX1BBUk1TIChhcmcpKTsK LSAgICAgIHBhcm1fY29ucyA9IHRzdWJzdF9jb25zdHJhaW50X2luZm8gKHBh cm1fY29ucywgYXJncyk7CisgICAgICBwYXJtX2NvbnMgPSB0c3Vic3RfY29u c3RyYWludF9pbmZvIChwYXJtX2NvbnMsIGFyZ3MsIHRmX25vbmUsIE5VTExf VFJFRSk7CiAgICAgICBpZiAocGFybV9jb25zID09IGVycm9yX21hcmtfbm9k ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTgxNTQsMjEg KzgxNzgsMTkgQEAgbG9va3VwX3RlbXBsYXRlX2NsYXNzXzEgKHRyZWUgZDEs IHRyZWUgYXJnbGlzdCwgdHJlZSBpbl9kZWNsLCB0cmVlIGNvbnRleHQsCiAg ICAgICBpZiAoZW50cnkpCiAJcmV0dXJuIGVudHJ5LT5zcGVjOwogCi0gICAg ICAvLyBJZiB0aGUgdGhlIHRlbXBsYXRlJ3MgY29uc3RyYWludHMgYXJlIG5v dCBzYXRpc2ZpZWQsIHRoZW4gd2UKLSAgICAgIC8vIGNhbm5vdCBmb3JtIGEg dmFsaWQgdHlwZS4KLSAgICAgIC8vCi0gICAgICAvLyBOb3RlIHRoYXQgdGhl IGNoZWNrIGlzIGRlZmVycmVkIHVudGlsIGFmdGVyIHRoZSBoYXNoLWxvb2t1 cC4KLSAgICAgIC8vIFRoaXMgcHJldmVudHMgcmVkdW5kYW50IGNoZWNrcyBv biBzcGVjaWFsaXphdGlvbnMuCi0gICAgICBpZiAoIWNoZWNrX3RlbXBsYXRl X2NvbnN0cmFpbnRzIChnZW5fdG1wbCwgYXJnbGlzdCkpCisgICAgICAvKiBJ ZiB0aGUgdGhlIHRlbXBsYXRlJ3MgY29uc3RyYWludHMgYXJlIG5vdCBzYXRp c2ZpZWQsIAorICAgICAgICAgdGhlbiB3ZSBjYW5ub3QgZm9ybSBhIHZhbGlk IHR5cGUuCisgICAgICAKKyAgICAgICAgIE5vdGUgdGhhdCB0aGUgY2hlY2sg aXMgZGVmZXJyZWQgdW50aWwgYWZ0ZXIgdGhlIGhhc2ggCisgICAgICAgICBs b29rdXAuIFRoaXMgcHJldmVudHMgcmVkdW5kYW50IGNoZWNrcyBvbiBwcmV2 aW91c2x5CisgICAgICAgICBpbnN0YW50aWF0ZWQgc3BlY2lhbGl6YXRpb25z LiAqLworICAgICAgaWYgKGZsYWdfY29uY2VwdHMgJiYgIWNvbnN0cmFpbnRz X3NhdGlzZmllZF9wIChnZW5fdG1wbCwgYXJnbGlzdCkpCiAgICAgICAgIHsK LSAgICAgICAgICAvLyBEaWFnbm9zZSBjb25zdHJhaW50cyBoZXJlIHNpbmNl IHRoZXkgYXJlIG5vdCBkaWFnbm9zZWQKLSAgICAgICAgICAvLyBhbnl3aGVy ZSBlbHNlLgogICAgICAgICAgIGlmIChjb21wbGFpbiAmIHRmX2Vycm9yKQog ICAgICAgICAgICAgewogICAgICAgICAgICAgICBlcnJvciAoInRlbXBsYXRl IGNvbnN0cmFpbnQgZmFpbHVyZSIpOwogICAgICAgICAgICAgICBkaWFnbm9z ZV9jb25zdHJhaW50cyAoaW5wdXRfbG9jYXRpb24sIGdlbl90bXBsLCBhcmds aXN0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gZXJyb3Jf bWFya19ub2RlOwogICAgICAgICB9CiAKICAgICAgIGlzX2RlcGVuZGVudF90 eXBlID0gdXNlc190ZW1wbGF0ZV9wYXJtcyAoYXJnbGlzdCk7CkBAIC0xMDI3 OSwyMCArMTAzMDEsMjIgQEAgZ2VuX2VsZW1fb2ZfcGFja19leHBhbnNpb25f aW5zdGFudGlhdGlvbiAodHJlZSBwYXR0ZXJuLAogICByZXR1cm4gdDsKIH0K IAotLy8gU3Vic3RpdHV0ZSBhcmdzIGludG8gdGhlIHBhY2sgZXhwYW5zaW9u IFQsIGFuZCByZXdyaXRlIHRoZSByZXN1bHRpbmcKLS8vIGxpc3QgYXMgYSBj b25qdW5jdGlvbiBvZiB0aGUgc3BlY2lmaWVkIHRlcm1zLiBJZiB0aGUgcmVz dWx0IGlzIGFuIGVtcHR5Ci0vLyBleHByZXNzaW9uLCByZXR1cm4gYm9vbGVh bl90cnVlX25vZGUuCisvKiBTdWJzdGl0dXRlIGFyZ3MgaW50byB0aGUgcGFj ayBleHBhbnNpb24gVCwgYW5kIHJld3JpdGUgdGhlIHJlc3VsdGluZworICAg bGlzdCBhcyBhIGNvbmp1bmN0aW9uIG9mIHRoZSBzcGVjaWZpZWQgdGVybXMu IElmIHRoZSByZXN1bHQgaXMgYW4gZW1wdHkKKyAgIGV4cHJlc3Npb24sIHJl dHVybiBib29sZWFuX3RydWVfbm9kZS4KKworICAgRklYTUU6IFRoaXMgZ29l cyBhd2F5IHdpdGggZm9sZCBleHByZXNzaW9ucy4gICovCiB0cmVlCiB0c3Vi c3RfcGFja19jb25qdW5jdGlvbiAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJz dF9mbGFnc190IGNvbXBsYWluLAogICAgICAgICAgICAgICAgICAgICAgICAg IHRyZWUgaW5fZGVjbCkKIHsKICAgdHJlZSB0ZXJtcyA9IHRzdWJzdF9wYWNr X2V4cGFuc2lvbiAodCwgYXJncywgY29tcGxhaW4sIGluX2RlY2wpOwogCi0g IC8vIElmIHRoZSByZXN1bHRpbmcgZXhwcmVzc2lvbiBpcyB0eXBlLSBvciB2 YWx1ZS1kZXBlbmRlbnQsIHRoZW4KLSAgLy8gcmV0dXJuIGl0IGFmdGVyIHNl dHRpbmcgdGhlIHJlc3VsdCB0eXBlIHRvIGJvb2wgKHNvIGl0IGNhbiBiZQot ICAvLyBleHBhbmRlZCBhcyBhIGNvbmp1bmN0aW9uKS4gVGhpcyBoYXBwZW5z IHdoZW4gaW5zdGFudGlhdGluZyAKLSAgLy8gY29uc3RyYWluZWQgdmFyaWFk aWMgbWVtYmVyIGZ1bmN0aW9uIHRlbXBsYXRlcy4gSnVzdCByZWJ1aWxkCi0g IC8vIHRoZSBkZXBlbmRlbnQgcGFjayBleHBhbnNpb24uCisvKiBJZiB0aGUg cmVzdWx0aW5nIGV4cHJlc3Npb24gaXMgdHlwZS0gb3IgdmFsdWUtZGVwZW5k ZW50LCB0aGVuCisgICByZXR1cm4gaXQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVz dWx0IHR5cGUgdG8gYm9vbCAoc28gaXQgY2FuIGJlCisgICBleHBhbmRlZCBh cyBhIGNvbmp1bmN0aW9uKS4gVGhpcyBoYXBwZW5zIHdoZW4gaW5zdGFudGlh dGluZyAKKyAgIGNvbnN0cmFpbmVkIHZhcmlhZGljIG1lbWJlciBmdW5jdGlv biB0ZW1wbGF0ZXMuIEp1c3QgcmVidWlsZAorICAgdGhlIGRlcGVuZGVudCBw YWNrIGV4cGFuc2lvbi4gICovCiAgIGlmIChpbnN0YW50aWF0aW9uX2RlcGVu ZGVudF9leHByZXNzaW9uX3AgKHRlcm1zKSkKICAgICB7CiAgICAgICB0ZXJt cyA9IFRSRUVfVkVDX0VMVCAodGVybXMsIDApOwpAQCAtMTAzMDAsMTEgKzEw MzI0LDE4IEBAIHRzdWJzdF9wYWNrX2Nvbmp1bmN0aW9uICh0cmVlIHQsIHRy ZWUgYXJncywgdHN1YnN0X2ZsYWdzX3QgY29tcGxhaW4sCiAgICAgICByZXR1 cm4gdGVybXM7CiAgICAgfQogCi0gIC8vIENvbmpvaW4gcmVxdWlyZW1lbnRz LiBBbiBlbXB0eSBjb25qdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHR1cmUu Ci0gIGlmICh0cmVlIHJlcXMgPSBjb25qb2luX2NvbnN0cmFpbnRzICh0ZXJt cykpCi0gICAgcmV0dXJuIHJlcXM7Ci0gIGVsc2UKKyAgLyogRW1wdHkgZXhw YW5zaW9ucyBhcmUgZXF1aXZhbGVudCB0byAndHJ1ZScuICAqLworICBpZiAo VFJFRV9WRUNfTEVOR1RIICh0ZXJtcykgPT0gMCkKICAgICByZXR1cm4gYm9v bGVhbl90cnVlX25vZGU7CisKKyAgLyogT3RoZXJ3aXNlLCBhbmQgdGhlIHRl cm1zIHRvZ2V0aGVyLiAgVGhlc2UgYXJlIHRyYW5zZm9ybWVkCisgICAgIGlu dG8gY29uc3RyYWludHMgbGF0ZXIuICAqLyAgCisgIHRyZWUgcmVzdWx0ID0g VFJFRV9WRUNfRUxUICh0ZXJtcywgMCk7CisgIGZvciAoaW50IGkgPSAxOyBp IDwgVFJFRV9WRUNfTEVOR1RIICh0ZXJtcyk7ICsraSkgeworICAgIHRyZWUg dCA9IFRSRUVfVkVDX0VMVCAodGVybXMsIGkpOworICAgIHJlc3VsdCA9IGJ1 aWxkX21pbiAoVFJVVEhfQU5ESUZfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUs IHJlc3VsdCwgdCk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKIH0KIAogCkBA IC0xMTI5OSwxNiArMTEzMzAsMTUgQEAgdHN1YnN0X2RlY2wgKHRyZWUgdCwg dHJlZSBhcmdzLCB0c3Vic3RfZmxhZ3NfdCBjb21wbGFpbikKIAkgICAgJiYg IWdyb2tfb3BfcHJvcGVydGllcyAociwgLypjb21wbGFpbj0qL2ZhbHNlKSkK IAkgIFJFVFVSTiAoZXJyb3JfbWFya19ub2RlKTsKIAotICAgICAgICAvLyBQ cm9wYWdhdGUgY29uc3RyYWludHMgdG8gdGhlIG5ldyBkZWNsYXJhdGlvbi4K KyAgICAgICAgLyogV2hlbiBpbnN0YW50aWF0aW5nIGEgY29uc3RyYWluZWQg bWVtYmVyLCBzdWJzdGl0dXRlCisgICAgICAgICAgIGludG8gdGhlIGNvbnN0 cmFpbnRzIHRvIGNyZWF0ZSBhIG5ldyBjb25zdHJhaW50IGludG8KKyAgICAg ICAgICAgdGhlICAqLwogICAgICAgICBpZiAodHJlZSBjaSA9IGdldF9jb25z dHJhaW50cyAodCkpIHsKLSAgICAgICAgICBpZiAoIXVzZXNfdGVtcGxhdGVf cGFybXMgKGFyZ3ZlYykpCisgICAgICAgICAgaWYgKG1lbWJlcikKICAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgdHJlZSB0ciA9IENJX1RFTVBMQVRF X1JFUVMgKGNpKTsKLSAgICAgICAgICAgICAgdHJlZSBkciA9IENJX0RFQ0xB UkFUT1JfUkVRUyAoY2kpOwotICAgICAgICAgICAgICBjaSA9IGJ1aWxkX2Nv bnN0cmFpbnRzIChOVUxMX1RSRUUsIGNvbmpvaW5fY29uc3RyYWludHMgKHRy LCBkcikpOworICAgICAgICAgICAgICBjaSA9IHRzdWJzdF9jb25zdHJhaW50 X2luZm8gKGNpLCBhcmd2ZWMsIGNvbXBsYWluLCBOVUxMX1RSRUUpOworICAg ICAgICAgICAgICBzZXRfY29uc3RyYWludHMgKHIsIGNpKTsKICAgICAgICAg ICAgIH0KLSAgICAgICAgICB0cmVlIG5ld19jaSA9IHRzdWJzdF9jb25zdHJh aW50X2luZm8gKGNpLCBhcmd2ZWMpOwotICAgICAgICAgIHNldF9jb25zdHJh aW50cyAociwgbmV3X2NpKTsKICAgICAgICAgfQogCiAJLyogU2V0IHVwIHRo ZSBERUNMX1RFTVBMQVRFX0lORk8gZm9yIFIuICBUaGVyZSdzIG5vIG5lZWQg dG8gZG8KQEAgLTEyMTk3LDggKzEyMjI3LDYgQEAgdHN1YnN0X2V4Y2VwdGlv bl9zcGVjaWZpY2F0aW9uICh0cmVlIGZudHlwZSwKICAgcmV0dXJuIG5ld19z cGVjczsKIH0KIAotZXh0ZXJuIGludCBwcm9jZXNzaW5nX2NvbnN0cmFpbnQ7 Ci0KIC8qIFRha2UgdGhlIHRyZWUgc3RydWN0dXJlIFQgYW5kIHJlcGxhY2Ug dGVtcGxhdGUgcGFyYW1ldGVycyB1c2VkCiAgICB0aGVyZWluIHdpdGggdGhl IGFyZ3VtZW50IHZlY3RvciBBUkdTLiAgSU5fREVDTCBpcyBhbiBhc3NvY2lh dGVkCiAgICBkZWNsIGZvciBkaWFnbm9zdGljcy4gIElmIGFuIGVycm9yIG9j Y3VycywgcmV0dXJucyBFUlJPUl9NQVJLX05PREUuCkBAIC0xMjIzMyw3ICsx MjI2MSw3IEBAIHRzdWJzdCAodHJlZSB0LCB0cmVlIGFyZ3MsIHRzdWJzdF9m bGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiAgIGlmIChERUNMX1Ag KHQpKQogICAgIHJldHVybiB0c3Vic3RfZGVjbCAodCwgYXJncywgY29tcGxh aW4pOwogCi0gIGlmIChhcmdzID09IE5VTExfVFJFRSAmJiAhcHJvY2Vzc2lu Z19jb25zdHJhaW50KQorICBpZiAoYXJncyA9PSBOVUxMX1RSRUUpCiAgICAg cmV0dXJuIHQ7CiAKICAgY29kZSA9IFRSRUVfQ09ERSAodCk7CkBAIC0xMjM3 OSw3ICsxMjQwNyw2IEBAIHRzdWJzdCAodHJlZSB0LCB0cmVlIGFyZ3MsIHRz dWJzdF9mbGFnc190IGNvbXBsYWluLCB0cmVlIGluX2RlY2wpCiAJaWYgKGxl dmVsIDw9IGxldmVscykKIAkgIHsKIAkgICAgYXJnID0gVE1QTF9BUkcgKGFy Z3MsIGxldmVsLCBpZHgpOwotCiAJICAgIGlmIChhcmcgJiYgVFJFRV9DT0RF IChhcmcpID09IEFSR1VNRU5UX1BBQ0tfU0VMRUNUKQogCSAgICAgIHsKIAkJ LyogU2VlIHRocm91Z2ggQVJHVU1FTlRfUEFDS19TRUxFQ1QgYXJndW1lbnRz LiAqLwpAQCAtMTYxNzgsMjggKzE2MjA1LDYgQEAgdHN1YnN0X2NvcHlfYW5k X2J1aWxkICh0cmVlIHQsCiAgICAgY2FzZSBSRVFVSVJFU19FWFBSOgogICAg ICAgUkVUVVJOICh0c3Vic3RfcmVxdWlyZXNfZXhwciAodCwgYXJncywgY29t cGxhaW4sIGluX2RlY2wpKTsKIAotICAgIGNhc2UgVkFMSURFWFBSX0VYUFI6 Ci0gICAgICBSRVRVUk4gKHRzdWJzdF92YWxpZGV4cHJfZXhwciAodCwgYXJn cywgaW5fZGVjbCkpOwotCi0gICAgY2FzZSBWQUxJRFRZUEVfRVhQUjoKLSAg ICAgIFJFVFVSTiAodHN1YnN0X3ZhbGlkdHlwZV9leHByICh0LCBhcmdzLCBp bl9kZWNsKSk7Ci0KLSAgICBjYXNlIENPTlNURVhQUl9FWFBSOgotICAgICAg UkVUVVJOICh0c3Vic3RfY29uc3RleHByX2V4cHIgKHQsIGFyZ3MsIGluX2Rl Y2wpKTsKLQotICAgIC8vIE5vcm1hbGx5LCAqX1JFUSBhcmUgcmVkdWNlZCBv dXQgb2YgcmVxdWlyZW1ldG5zIHdoZW4gdXNlZAotICAgIC8vIGFzIGNvbnN0 cmFpbnRzLiBJZiBhIGNvbmNlcHQgaXMgY2hlY2tlZCBkaXJlY3RseSB2aWEg ZS5nLiwKLSAgICAvLyBhIHN0YXRpY19hc3NlcnQsIGhvd2V2ZXIsIHRoZXNl IGFwcGVhciBpbiB0aGUgaW5wdXQgdHJlZS4KLQotICAgIGNhc2UgRVhQUl9S RVE6Ci0gICAgICBSRVRVUk4gKHRzdWJzdF9leHByX3JlcSAodCwgYXJncywg aW5fZGVjbCkpOwotCi0gICAgY2FzZSBUWVBFX1JFUToKLSAgICAgIFJFVFVS TiAodHN1YnN0X3R5cGVfcmVxICh0LCBhcmdzLCBpbl9kZWNsKSk7Ci0KLSAg ICBjYXNlIE5FU1RFRF9SRVE6Ci0gICAgICBSRVRVUk4gKHRzdWJzdF9uZXN0 ZWRfcmVxICh0LCBhcmdzLCBpbl9kZWNsKSk7Ci0KICAgICBkZWZhdWx0Ogog ICAgICAgLyogSGFuZGxlIE9iamVjdGl2ZS1DKysgY29uc3RydWN0cywgaWYg YXBwcm9wcmlhdGUuICAqLwogICAgICAgewpAQCAtMTY1MjgsOCArMTY1MzMs OSBAQCBpbnN0YW50aWF0ZV9hbGlhc190ZW1wbGF0ZSAodHJlZSB0bXBsLCB0 cmVlIGFyZ3MsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQogICAvKiBXZSBj YW4ndCBmcmVlIHRoaXMgaWYgYSBwZW5kaW5nX3RlbXBsYXRlIGVudHJ5IG9y IGxhc3RfZXJyb3JfdGluc3RfbGV2ZWwKICAgICAgaXMgcG9pbnRpbmcgYXQg aXQuICAqLwogICBpZiAobGFzdF9wZW5kaW5nX3RlbXBsYXRlID09IG9sZF9s YXN0X3BlbmQKLSAgICAgICYmIGxhc3RfZXJyb3JfdGluc3RfbGV2ZWwgPT0g b2xkX2Vycm9yX3RpbnN0KQorICAgICAgJiYgbGFzdF9lcnJvcl90aW5zdF9s ZXZlbCA9PSBvbGRfZXJyb3JfdGluc3QpIHsKICAgICBnZ2NfZnJlZSAodGlu c3QpOworICB9CiAKICAgcmV0dXJuIHI7CiB9CkBAIC0xNjg5Nyw4ICsxNjkw Myw5IEBAIGZuX3R5cGVfdW5pZmljYXRpb24gKHRyZWUgZm4sCiAgIC8qIFdl IGNhbid0IGZyZWUgdGhpcyBpZiBhIHBlbmRpbmdfdGVtcGxhdGUgZW50cnkg b3IgbGFzdF9lcnJvcl90aW5zdF9sZXZlbAogICAgICBpcyBwb2ludGluZyBh dCBpdC4gICovCiAgIGlmIChsYXN0X3BlbmRpbmdfdGVtcGxhdGUgPT0gb2xk X2xhc3RfcGVuZAotICAgICAgJiYgbGFzdF9lcnJvcl90aW5zdF9sZXZlbCA9 PSBvbGRfZXJyb3JfdGluc3QpCisgICAgICAmJiBsYXN0X2Vycm9yX3RpbnN0 X2xldmVsID09IG9sZF9lcnJvcl90aW5zdCkgewogICAgIGdnY19mcmVlICh0 aW5zdCk7CisgIH0KIAogICByZXR1cm4gcjsKIH0KQEAgLTE5ODgxLDEzICsx OTg4OCwxMiBAQCBtb3N0X3NwZWNpYWxpemVkX3BhcnRpYWxfc3BlYyAodHJl ZSB0YXJnZXQsIHRzdWJzdF9mbGFnc190IGNvbXBsYWluKQogCSAgaWYgKG91 dGVyX2FyZ3MpCiAJICAgIHNwZWNfYXJncyA9IGFkZF90b190ZW1wbGF0ZV9h cmdzIChvdXRlcl9hcmdzLCBzcGVjX2FyZ3MpOwogCi0gICAgICAgICAgLy8g S2VlcCB0aGUgY2FuZGlkYXRlIG9ubHkgaWYgdGhlIGNvbnN0cmFpbnRzIGFy ZSBzYXRpc2ZpZWQuCi0gICAgICAgICAgdHJlZSBzcGVjX2RlY2wgPSBERUNM X1RFTVBMQVRFX1JFU1VMVCAoc3BlY190bXBsKTsKLSAgICAgICAgICB0cmVl IHNwZWNfY29uc3RyID0gZ2V0X2NvbnN0cmFpbnRzIChzcGVjX2RlY2wpOwot ICAgICAgICAgIGlmIChjaGVja19jb25zdHJhaW50cyAoc3BlY19jb25zdHIs IHNwZWNfYXJncykpCisgICAgICAgICAgLyogS2VlcCB0aGUgY2FuZGlkYXRl IG9ubHkgaWYgdGhlIGNvbnN0cmFpbnRzIGFyZSBzYXRpc2ZpZWQsCisgICAg ICAgICAgICAgb3IgaWYgd2UncmUgbm90IGNvbXBpbGluZyB3aXRoIGNvbmNl cHRzLiAgKi8KKyAgICAgICAgICBpZiAoIWZsYWdfY29uY2VwdHMgfHwgY29u c3RyYWludHNfc2F0aXNmaWVkX3AgKHNwZWNfdG1wbCwgc3BlY19hcmdzKSkK ICAgICAgICAgICAgIHsKLQkgICAgICBsaXN0ID0gdHJlZV9jb25zIChzcGVj X2FyZ3MsIFRSRUVfVkFMVUUgKHQpLCBsaXN0KTsKLQkgICAgICBUUkVFX1RZ UEUgKGxpc3QpID0gVFJFRV9UWVBFICh0KTsKKyAgICAgICAgICAgICAgbGlz dCA9IHRyZWVfY29ucyAoc3BlY19hcmdzLCBUUkVFX1ZBTFVFICh0KSwgbGlz dCk7CisgICAgICAgICAgICAgIFRSRUVfVFlQRSAobGlzdCkgPSBUUkVFX1RZ UEUgKHQpOwogICAgICAgICAgICAgfQogCX0KICAgICB9CkBAIC0yMDQ1Niw3 ICsyMDQ2Miw3IEBAIHRlbXBsYXRlX2Zvcl9zdWJzdGl0dXRpb24gKHRyZWUg ZGVjbCkKIH0KIAogLyogUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQgdG8gaW5z dGFudGlhdGUgdGhpcyB0ZW1wbGF0ZSBpbnN0YW5jZSBldmVuIGlmIHdlCi0g ICBrbm93IHdlIGFyZW4ndCBnb2luZyB0byBlbWl0IGl0Li4gICovCisgICBr bm93IHdlIGFyZW4ndCBnb2luZyB0byBlbWl0IGl0LiAgKi8KIAogYm9vbAog YWx3YXlzX2luc3RhbnRpYXRlX3AgKHRyZWUgZGVjbCkKQEAgLTIwNTY2LDYg KzIwNTcyLDkgQEAgaW5zdGFudGlhdGVfZGVjbCAodHJlZSBkLCBpbnQgZGVm ZXJfb2ssCiAgICAgIGZ1bmN0aW9ucyBhbmQgc3RhdGljIG1lbWJlciB2YXJp YWJsZXMuICAqLwogICBnY2NfYXNzZXJ0IChWQVJfT1JfRlVOQ1RJT05fREVD TF9QIChkKSk7CiAKKyAgLyogQSBjb25jZXB0IGlzIG5ldmVyIGluc3RhbnRp YXRlZC4gKi8KKyAgZ2NjX2Fzc2VydCAoIURFQ0xfREVDTEFSRURfQ09OQ0VQ VF9QIChkKSk7CisKICAgLyogVmFyaWFibGVzIGFyZSBuZXZlciBkZWZlcnJl ZDsgaWYgaW5zdGFudGlhdGlvbiBpcyByZXF1aXJlZCwgdGhleQogICAgICBh cmUgaW5zdGFudGlhdGVkIHJpZ2h0IGF3YXkuICBUaGF0IGFsbG93cyBmb3Ig YmV0dGVyIGNvZGUgaW4gdGhlCiAgICAgIGNhc2UgdGhhdCBhbiBleHByZXNz aW9uIHJlZmVycyB0byB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIC0tCkBA IC0yMTcwNCwyMCArMjE3MTMsNiBAQCB2YWx1ZV9kZXBlbmRlbnRfZXhwcmVz c2lvbl9wICh0cmVlIGV4cHJlc3Npb24pCiAJCXx8IGhhc192YWx1ZV9kZXBl bmRlbnRfYWRkcmVzcyAob3ApKTsKICAgICAgIH0KIAotICAgIGNhc2UgUkVR VUlSRVNfRVhQUjoKLSAgICAgIHsKLSAgICAgICAgLy8gQ2hlY2sgaWYgYW55 IHBhcnRzIG9mIGEgcmVxdWlyZXMgZXhwcmVzc2lvbiBhcmUgZGVwZW5kZW50 LgotICAgICAgICB0cmVlIHJlcSA9IFRSRUVfT1BFUkFORCAoZXhwcmVzc2lv biwgMSk7Ci0gICAgICAgIHdoaWxlIChyZXEgIT0gTlVMTF9UUkVFKQotICAg ICAgICAgIHsKLSAgICAgICAgICAgIHRyZWUgciA9IFRSRUVfVkFMVUUgKHJl cSk7Ci0gICAgICAgICAgICBpZiAodmFsdWVfZGVwZW5kZW50X2V4cHJlc3Np b25fcCAocikpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg ICAgICAgcmVxID0gVFJFRV9DSEFJTiAocmVxKTsKLSAgICAgICAgICB9Ci0g ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLQogICAgIGNhc2UgVFlQ RV9SRVE6CiAgICAgY2FzZSBWQUxJREVYUFJfRVhQUjoKICAgICBjYXNlIFZB TElEVFlQRV9FWFBSOgpAQCAtMjE4MzcsNyArMjE4MzIsOCBAQCB0eXBlX2Rl cGVuZGVudF9leHByZXNzaW9uX3AgKHRyZWUgZXhwcmVzc2lvbikKICAgICAg IHx8IFRSRUVfQ09ERSAoZXhwcmVzc2lvbikgPT0gVFlQRUlEX0VYUFIKICAg ICAgIHx8IFRSRUVfQ09ERSAoZXhwcmVzc2lvbikgPT0gREVMRVRFX0VYUFIK ICAgICAgIHx8IFRSRUVfQ09ERSAoZXhwcmVzc2lvbikgPT0gVkVDX0RFTEVU RV9FWFBSCi0gICAgICB8fCBUUkVFX0NPREUgKGV4cHJlc3Npb24pID09IFRI Uk9XX0VYUFIpCisgICAgICB8fCBUUkVFX0NPREUgKGV4cHJlc3Npb24pID09 IFRIUk9XX0VYUFIKKyAgICAgIHx8IFRSRUVfQ09ERSAoZXhwcmVzc2lvbikg PT0gUkVRVUlSRVNfRVhQUikKICAgICByZXR1cm4gZmFsc2U7CiAKICAgLyog VGhlIHR5cGVzIG9mIHRoZXNlIGV4cHJlc3Npb25zIGRlcGVuZHMgb25seSBv biB0aGUgdHlwZSB0byB3aGljaApAQCAtMjE4NjksMTYgKzIxODY1LDYgQEAg dHlwZV9kZXBlbmRlbnRfZXhwcmVzc2lvbl9wICh0cmVlIGV4cHJlc3Npb24p CiAJcmV0dXJuIGRlcGVuZGVudF90eXBlX3AgKHR5cGUpOwogICAgIH0KIAot ICAvLyBBIHJlcXVpcmVzIGV4cHJlc3Npb24gaGFzIHR5cGUgYm9vbCwgYnV0 IGlzIGFsd2F5cyB0cmVhdGVkIGFzIGlmCi0gIC8vIGl0IHdlcmUgYSBkZXBl bmRlbnQgZXhwcmVzc2lvbi4KLSAgLy8KLSAgLy8gRklYTUU6IFRoaXMgY291 bGQgYmUgaW1wcm92ZWQuIFBlcmhhcHMgdGhlIHR5cGUgb2YgdGhlIHJlcXVp cmVzCi0gIC8vIGV4cHJlc3Npb24gZGVwZW5kcyBvbiB0aGUgc2F0aXNmYWN0 aW9uIG9mIGl0cyBjb25zdHJhaW50cy4gVGhhdAotICAvLyBpcywgaXRzIHR5 cGUgaXMgYm9vbCBvbmx5IGlmIGl0cyBzdWJzdGl0dXRpb24gaW50byBpdHMg bm9ybWFsaXplZAotICAvLyBjb25zdHJhaW50cyBzdWNjZWVkcy4KLSAgaWYg KFRSRUVfQ09ERSAoZXhwcmVzc2lvbikgPT0gUkVRVUlSRVNfRVhQUikKLSAg ICByZXR1cm4gdHJ1ZTsKLQogICBpZiAoVFJFRV9DT0RFIChleHByZXNzaW9u KSA9PSBTQ09QRV9SRUYpCiAgICAgewogICAgICAgdHJlZSBzY29wZSA9IFRS RUVfT1BFUkFORCAoZXhwcmVzc2lvbiwgMCk7CkBAIC0yMjA5MSw2ICsyMjA3 NywxMCBAQCBpbnN0YW50aWF0aW9uX2RlcGVuZGVudF9yICh0cmVlICp0cCwg aW50ICp3YWxrX3N1YnRyZWVzLAogICAgIGNhc2UgQklORF9FWFBSOgogICAg ICAgcmV0dXJuICp0cDsKIAorICAgIGNhc2UgUkVRVUlSRVNfRVhQUjoKKyAg ICAgIC8qIFRyZWF0IHJlcXVpcmVzLWV4cHJlc3Npb25zIGFzIGRlcGVuZGVu dC4gKi8KKyAgICAgIHJldHVybiAqdHA7CisKICAgICBkZWZhdWx0OgogICAg ICAgYnJlYWs7CiAgICAgfQpAQCAtMjMwMTUsNiArMjMwMDUsMTAwIEBAIGNv bnZlcnRfZ2VuZXJpY190eXBlc190b19wYWNrcyAodHJlZSBwYXJtLCBpbnQg c3RhcnRfaWR4LCBpbnQgZW5kX2lkeCkKICAgcmV0dXJuIHRzdWJzdCAocGFy bSwgcmVwbGFjZW1lbnQsIHRmX25vbmUsIE5VTExfVFJFRSk7CiB9CiAKKy8q IEVudHJpZXMgaW4gdGhlIGRlY2xfY29uc3RyYWludCBoYXNoIHRhYmxlLiAq Lworc3RydWN0IEdUWSgoZm9yX3VzZXIpKSBjb25zdHJfZW50cnkKK3sKKyAg dHJlZSBkZWNsOworICB0cmVlIGNpOworfTsKKworLyogSGFzaGluZyBmdW5j dGlvbiBhbmQgZXF1YWxpdHkgZm8gY29uc3RyYWludCBlbnRyaWVzLi4gKi8K K3N0cnVjdCBjb25zdHJfaGFzaGVyIDogZ2djX2hhc2hlcjxjb25zdHJfZW50 cnkgKj4KK3sKKyAgc3RhdGljIGhhc2h2YWxfdCBoYXNoIChjb25zdHJfZW50 cnkgKmUpCisgIHsKKyAgICByZXR1cm4gKGhhc2h2YWxfdClERUNMX1VJRCAo ZS0+ZGVjbCk7CisgIH0KKyAgCisgIHN0YXRpYyBib29sIGVxdWFsIChjb25z dHJfZW50cnkgKmUxLCBjb25zdHJfZW50cnkgKmUyKQorICB7CisgICAgcmV0 dXJuIGUxLT5kZWNsID09IGUyLT5kZWNsOworICB9Cit9OworCisKKy8qIEEg bWFwcGluZyBmcm9tIGRlY2xhcmF0aW9ucyB0byBjb25zdHJhaW50IGluZm9y bWF0aW9uLiBOb3RlIHRoYXQgCisgICBib3RoIHRlbXBsYXRlcyBhbmQgdGhl aXIgdW5kZXJseWluZyBkZWNsYXJhdGlvbnMgYXJlIG1hcHBlZCB0byB0aGUg CisgICBzYW1lIGNvbnN0cmFpbnQgaW5mb3JtYXRpb24uCisKKyAgIEZJWE1F OiBUaGlzIGlzIGRlZmluZWQgaW4gcHQuYyBiZWNhdXNlIGl0J3MgZ2FyYmFn ZSBjb2xsZWN0aW9uCisgICBjb2RlIGlzIG5vdCBiZWluZyBnZW5lcmF0ZWQg Zm9yIGNvbnN0cmFpbnQuY2MuICovCitzdGF0aWMgR1RZICgoKSkgaGFzaF90 YWJsZTxjb25zdHJfaGFzaGVyPiAqZGVjbF9jb25zdHJhaW50czsKKworLyog UmV0dXJucyB0cnVlIGlmZiBjaW5mbyBjb250YWlucyBhIHZhbGlkIHNldCBv ZiBjb25zdHJhaW50cy4KKyAgIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUg YXNzb2NpYXRlZCByZXF1aXJlbWVudHMgaGF2ZSBiZWVuCisgICBzdWNjZXNz ZnVsbHkgZGVjb21wb3NlZCBpbnRvIGxpc3RzIG9mIGF0b21pYyBjb25zdHJh aW50cy4KKyAgIFRoYXQgaXMsIHdoZW4gdGhlIHNhdmVkIGFzc3VtcHRpb25z IGFyZSBub3QgZXJyb3JfbWFya19ub2RlLiAgKi8KK2Jvb2wKK3ZhbGlkX2Nv bnN0cmFpbnRzX3AgKHRyZWUgY2luZm8pCit7CisgIGdjY19hc3NlcnQgKGNp bmZvKTsKKyAgcmV0dXJuIENJX0FTU1VNUFRJT05TIChjaW5mbykgIT0gZXJy b3JfbWFya19ub2RlOworfQorCisvKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBj b25zdHJhaW50cyBvZiBkZWNsYXJhdGlvbiBULiBJZiBUIGlzIG5vdAorICAg Y29uc3RyYWluZWQsIHJldHVybiBOVUxMX1RSRUUuIE5vdGUgdGhhdCBUIG11 c3QgYmUgbm9uLW51bGwuICovCit0cmVlCitnZXRfY29uc3RyYWludHMgKHRy ZWUgdCkKK3sKKyAgZ2NjX2Fzc2VydCAoREVDTF9QICh0KSk7CisgIGlmIChU UkVFX0NPREUgKHQpID09IFRFTVBMQVRFX0RFQ0wpCisgICAgdCA9IERFQ0xf VEVNUExBVEVfUkVTVUxUICh0KTsKKyAgY29uc3RyX2VudHJ5IGVsdCA9IHsg dCwgTlVMTF9UUkVFIH07CisgIGNvbnN0cl9lbnRyeSogZm91bmQgPSBkZWNs X2NvbnN0cmFpbnRzLT5maW5kICgmZWx0KTsKKyAgaWYgKGZvdW5kKQorICAg IHJldHVybiBmb3VuZC0+Y2k7CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTF9U UkVFOworfQorCisvKiBBc3NvY2lhdGUgdGhlIGdpdmVuIGNvbnN0cmFpbnQg aW5mb3JtYXRpb24gQ0kgd2l0aCB0aGUgZGVjbGFyYXRpb24gCisgICBULiBJ ZiBUIGlzIGEgdGVtcGxhdGUsIHRoZW4gdGhlIGNvbnN0cmFpbnRzIGFyZSBh c3NvY2lhdGVkIHdpdGggCisgICBpdHMgdW5kZXJseWluZyBkZWNsYXJhdGlv bi4gRG9uJ3QgYnVpbGQgYXNzb2NpYXRpb25zIGlmIENJIGlzIAorICAgTlVM TF9UUkVFLiAgKi8KK3ZvaWQKK3NldF9jb25zdHJhaW50cyAodHJlZSB0LCB0 cmVlIGNpKQoreworICBpZiAoIWNpKQorICAgIHJldHVybjsKKyAgZ2NjX2Fz c2VydCAodCk7CisgIGlmIChUUkVFX0NPREUgKHQpID09IFRFTVBMQVRFX0RF Q0wpCisgICAgdCA9IERFQ0xfVEVNUExBVEVfUkVTVUxUICh0KTsKKyAgZ2Nj X2Fzc2VydCAoIWdldF9jb25zdHJhaW50cyAodCkpOworICBjb25zdHJfZW50 cnkgZWx0ID0ge3QsIGNpfTsKKyAgY29uc3RyX2VudHJ5Kiogc2xvdCA9IGRl Y2xfY29uc3RyYWludHMtPmZpbmRfc2xvdCAoJmVsdCwgSU5TRVJUKTsKKyAg Y29uc3RyX2VudHJ5KiBlbnRyeSA9IGdnY19hbGxvYzxjb25zdHJfZW50cnk+ ICgpOworICAqZW50cnkgPSBlbHQ7CisgICpzbG90ID0gZW50cnk7Cit9CisK Ky8qIFJlbW92ZSB0aGUgYXNzb2NpYXRlZCBjb25zdHJhaW50cyBvZiB0aGUg ZGVjbGFyYXRpb24gVC4gCisgICBJZiB0aGVyZSBhcmUgbm8gY29uc3RyYWlu dHMgYXNzb2NpYXRlZCB3aXRoIFQsIHRoZW4KKyAgIHJldHVybiBOVUxMX1RS RUUuICAqLwordm9pZAorcmVtb3ZlX2NvbnN0cmFpbnRzICh0cmVlIHQpCit7 CisgIGlmICghREVDTF9QICh0KSkKKyAgICBkZWJ1Z190cmVlICh0KTsKKyAg Z2NjX2Fzc2VydCAoREVDTF9QICh0KSk7CisgIGlmIChUUkVFX0NPREUgKHQp ID09IFRFTVBMQVRFX0RFQ0wpCisgICAgdCA9IERFQ0xfVEVNUExBVEVfUkVT VUxUICh0KTsKKworICBjb25zdHJfZW50cnkgZWx0ID0ge3QsIE5VTExfVFJF RX07CisgIGNvbnN0cl9lbnRyeSoqIHNsb3QgPSBkZWNsX2NvbnN0cmFpbnRz LT5maW5kX3Nsb3QgKCZlbHQsIE5PX0lOU0VSVCk7CisgIGlmIChzbG90KQor ICAgIGRlY2xfY29uc3RyYWludHMtPmNsZWFyX3Nsb3Qoc2xvdCk7Cit9CiAK IC8qIFNldCB1cCB0aGUgaGFzaCB0YWJsZXMgZm9yIHRlbXBsYXRlIGluc3Rh bnRpYXRpb25zLiAgKi8KIApAQCAtMjMwMjMsNiArMjMxMDcsNyBAQCBpbml0 X3RlbXBsYXRlX3Byb2Nlc3NpbmcgKHZvaWQpCiB7CiAgIGRlY2xfc3BlY2lh bGl6YXRpb25zID0gaGFzaF90YWJsZTxzcGVjX2hhc2hlcj46OmNyZWF0ZV9n Z2MgKDM3KTsKICAgdHlwZV9zcGVjaWFsaXphdGlvbnMgPSBoYXNoX3RhYmxl PHNwZWNfaGFzaGVyPjo6Y3JlYXRlX2dnYyAoMzcpOworICBkZWNsX2NvbnN0 cmFpbnRzID0gaGFzaF90YWJsZTxjb25zdHJfaGFzaGVyPjo6Y3JlYXRlX2dn YygzNyk7CiB9CiAKIC8qIFByaW50IHN0YXRzIGFib3V0IHRoZSB0ZW1wbGF0 ZSBoYXNoIHRhYmxlcyBmb3IgLWZzdGF0cy4gICovCmRpZmYgLS1naXQgYS9n Y2MvY3Avc2VtYW50aWNzLmMgYi9nY2MvY3Avc2VtYW50aWNzLmMKaW5kZXgg ZjgzZGY3Zi4uY2Y4OGQzMyAxMDA2NDQKLS0tIGEvZ2NjL2NwL3NlbWFudGlj cy5jCisrKyBiL2djYy9jcC9zZW1hbnRpY3MuYwpAQCAtMjQ0MCw3ICsyNDQw LDcgQEAgZmluaXNoX2NhbGxfZXhwciAodHJlZSBmbiwgdmVjPHRyZWUsIHZh X2djPiAqKmFyZ3MsIGJvb2wgZGlzYWxsb3dfdmlydHVhbCwKIAkgICAgewog CSAgICAgIG5leHQgPSBPVkxfQ0hBSU4gKGZuKTsKICAgICAgICAgICAgICAg aWYgKGZsYWdfY29uY2VwdHMpCi0gICAgICAgICAgICAgICAgcmVtb3ZlX2Nv bnN0cmFpbnRzIChmbik7CisgICAgICAgICAgICAgICAgcmVtb3ZlX2NvbnN0 cmFpbnRzIChPVkxfRlVOQ1RJT04gKGZuKSk7CiAJICAgICAgZ2djX2ZyZWUg KGZuKTsKIAkgICAgfQogCX0KQEAgLTI0NTQsMTEgKzI0NTQsMjQgQEAgZmlu aXNoX2NhbGxfZXhwciAodHJlZSBmbiwgdmVjPHRyZWUsIHZhX2djPiAqKmFy Z3MsIGJvb2wgZGlzYWxsb3dfdmlydHVhbCwKIHRyZWUKIGZpbmlzaF90ZW1w bGF0ZV92YXJpYWJsZSAodHJlZSB2YXIpCiB7CisgIGdjY19hc3NlcnQgKFRS RUVfQ09ERSAodmFyKSA9PSBURU1QTEFURV9JRF9FWFBSKTsKICAgaWYgKHBy b2Nlc3NpbmdfdGVtcGxhdGVfZGVjbCkKICAgICByZXR1cm4gdmFyOwogCi0g IHJldHVybiBpbnN0YW50aWF0ZV90ZW1wbGF0ZSAoVFJFRV9PUEVSQU5EICh2 YXIsIDApLCBUUkVFX09QRVJBTkQgKHZhciwgMSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGZfZXJyb3IpOworICAvKiBJZiBhIHRlbXBs YXRlLWlkIHJlZmVycyB0byBhIHNwZWNpYWxpemF0aW9uIG9mIGEgdmFyaWFi bGUKKyAgICAgY29uY2VwdCwgdGhlbiB0aGUgZXhwcmVzc2lvbiBpcyB0cnVl IGlmIGFuZCBvbmx5IGlmIHRoZQorICAgICBjb25jZXB0J3MgY29uc3RyYWlu dHMgYXJlIHNhdGlzZmllZCBieSB0aGUgZ2l2ZW4gdGVtcGxhdGUKKyAgICAg YXJndW1lbnRzLgorCisgICAgIE5PVEU6IFRoaXMgaXMgYW4gZXh0ZW5zaW9u IG9mIENvbmNlcHRzIExpdGUgVFMgdGhhdAorICAgICBhbGxvd3MgY29uc3Ry YWludHMgdG8gYmUgdXNlZCBpbiBleHByZXNzaW9ucy4gKi8KKyAgdHJlZSB0 bXBsID0gVFJFRV9PUEVSQU5EICh2YXIsIDApOworICB0cmVlIGFyZ3MgPSBU UkVFX09QRVJBTkQgKHZhciwgMSk7CisgIHRyZWUgZGVjbCA9IERFQ0xfVEVN UExBVEVfUkVTVUxUICh0bXBsKTsKKyAgaWYgKGZsYWdfY29uY2VwdHMgJiYg REVDTF9ERUNMQVJFRF9DT05DRVBUX1AgKGRlY2wpKQorICAgIHJldHVybiBl dmFsdWF0ZV92YXJpYWJsZV9jb25jZXB0IChkZWNsLCBhcmdzKTsKKworICBy ZXR1cm4gaW5zdGFudGlhdGVfdGVtcGxhdGUgKHRtcGwsIGFyZ3MsIHRmX2Vy cm9yKTsKIH0KIAogLyogRmluaXNoIGEgY2FsbCB0byBhIHBvc3RmaXggaW5j cmVtZW50IG9yIGRlY3JlbWVudCBvciBFWFBSLiAgKFdoaWNoCmRpZmYgLS1n aXQgYS9nY2MvY3AvdHlwZWNrLmMgYi9nY2MvY3AvdHlwZWNrLmMKaW5kZXgg MGFmZWVlOC4uMjQ4ZTE3ZiAxMDA2NDQKLS0tIGEvZ2NjL2NwL3R5cGVjay5j CisrKyBiL2djYy9jcC90eXBlY2suYwpAQCAtMzQ2MywyMiArMzQ2MywyMiBA QCBjcF9idWlsZF9mdW5jdGlvbl9jYWxsX3ZlYyAodHJlZSBmdW5jdGlvbiwg dmVjPHRyZWUsIHZhX2djPiAqKnBhcmFtcywKIAogICBpZiAoVFJFRV9DT0RF IChmdW5jdGlvbikgPT0gRlVOQ1RJT05fREVDTCkKICAgICB7Ci0gICAgICAv LyBJZiB0aGUgZnVuY3Rpb24gaXMgYSBub24tdGVtcGxhdGUgbWVtYmVyIGZ1 bmN0aW9uIG9yIGEKLSAgICAgIC8vIG5vbi10ZW1wbGF0ZSBmcmllbmQsIHRo ZW4gd2UgbmVlZCB0byBjaGVjayB0aGUgY29uc3RyYWludHMuCi0gICAgICAv LwotICAgICAgLy8gTm90ZSB0aGF0IGlmIG92ZXJsb2FkIHJlc29sdXRpb24g ZmFpbGVkIHdpdGggYSBzaW5nbGUgY2FuZGlkYXRlCi0gICAgICAvLyB0aGlz IGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBleHBsaWNpdGx5IGRpYWdub3Nl IHRoZSBmYWlsdXJlCi0gICAgICAvLyBmb3IgdGhlIHNpbmdsZSBjYWxsIGV4 cHJlc3Npb24uIFRoZSBjaGVjayBpcyB0ZWNobmljYWxseQotICAgICAgLy8g cmVkdW5kYW50IHNpbmNlIHdlIHdvdWxkIGhhdmUgZmFpbGVkIGluIGFkZF9m dW5jdGlvbl9jYW5kaWRhdGUuCi0gICAgICBpZiAoZmxhZ19jb25jZXB0cykK LSAgICAgICAgaWYgKHRyZWUgY2kgPSBnZXRfY29uc3RyYWludHMgKGZ1bmN0 aW9uKSkKLSAgICAgICAgICBpZiAoIWNoZWNrX2NvbnN0cmFpbnRzIChjaSkp Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGVycm9yICgiY2Fubm90 IGNhbGwgZnVuY3Rpb24gJXFEIiwgZnVuY3Rpb24pOwotICAgICAgICAgICAg ICBsb2NhdGlvbl90IGxvYyA9IERFQ0xfU09VUkNFX0xPQ0FUSU9OIChmdW5j dGlvbik7Ci0gICAgICAgICAgICAgIGRpYWdub3NlX2NvbnN0cmFpbnRzIChs b2MsIGZ1bmN0aW9uLCBOVUxMX1RSRUUpOwotICAgICAgICAgICAgICByZXR1 cm4gZXJyb3JfbWFya19ub2RlOwotICAgICAgICAgICAgfQorICAgICAgLyog SWYgdGhlIGZ1bmN0aW9uIGlzIGEgbm9uLXRlbXBsYXRlIG1lbWJlciBmdW5j dGlvbiAKKyAgICAgICAgIG9yIGEgbm9uLXRlbXBsYXRlIGZyaWVuZCwgdGhl biB3ZSBuZWVkIHRvIGNoZWNrIHRoZSAKKyAgICAgICAgIGNvbnN0cmFpbnRz LgorICAgICAgCisgICAgICAgIE5vdGUgdGhhdCBpZiBvdmVybG9hZCByZXNv bHV0aW9uIGZhaWxlZCB3aXRoIGEgc2luZ2xlIAorICAgICAgICBjYW5kaWRh dGUgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZXhwbGljaXRseSBk aWFnbm9zZSAKKyAgICAgICAgdGhlIGZhaWx1cmUgZm9yIHRoZSBzaW5nbGUg Y2FsbCBleHByZXNzaW9uLiBUaGUgY2hlY2sgaXMgCisgICAgICAgIHRlY2hu aWNhbGx5IHJlZHVuZGFudCBzaW5jZSB3ZSBhbHNvIHdvdWxkIGhhdmUgZmFp bGVkIGluCisgICAgICAgIGFkZF9mdW5jdGlvbl9jYW5kaWRhdGUuICovCisg ICAgICBpZiAoZmxhZ19jb25jZXB0cyAmJiAhY29uc3RyYWludHNfc2F0aXNm aWVkX3AgKGZ1bmN0aW9uKSkKKyAgICAgICAgeworICAgICAgICAgIGVycm9y ICgiY2Fubm90IGNhbGwgZnVuY3Rpb24gJXFEIiwgZnVuY3Rpb24pOworICAg ICAgICAgIGxvY2F0aW9uX3QgbG9jID0gREVDTF9TT1VSQ0VfTE9DQVRJT04g KGZ1bmN0aW9uKTsKKyAgICAgICAgICBkaWFnbm9zZV9jb25zdHJhaW50cyAo bG9jLCBmdW5jdGlvbiwgTlVMTF9UUkVFKTsKKyAgICAgICAgICByZXR1cm4g ZXJyb3JfbWFya19ub2RlOworICAgICAgICB9CiAKICAgICAgIG1hcmtfdXNl ZCAoZnVuY3Rpb24pOwogICAgICAgZm5kZWNsID0gZnVuY3Rpb247CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9jb25jZXB0 cy5leHAgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9jb25jZXB0 cy5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1 NjI3NwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZysrLmRn L2NvbmNlcHRzL2NvbmNlcHRzLmV4cApAQCAtMCwwICsxLDM1IEBACisjICAg Q29weXJpZ2h0IChDKSAyMDAyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMgCisj IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorIyBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAg SWYgbm90IHNlZQorIyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u CisKKyMgR0NDIHRlc3RzdWl0ZSB0aGF0IHVzZXMgdGhlIGBkZy5leHAnIGRy aXZlci4KKworIyBMb2FkIHN1cHBvcnQgcHJvY3MuCitsb2FkX2xpYiBnKyst ZGcuZXhwCisKKyMgSWYgYSB0ZXN0Y2FzZSBkb2Vzbid0IGhhdmUgc3BlY2lh bCBvcHRpb25zLCB1c2UgdGhlc2UuCitnbG9iYWwgREVGQVVMVF9DWFhGTEFH UworaWYgIVtpbmZvIGV4aXN0cyBERUZBVUxUX0NYWEZMQUdTXSB0aGVuIHsK KyAgICBzZXQgREVGQVVMVF9DWFhGTEFHUyAiIC1wZWRhbnRpYy1lcnJvcnMg LVduby1sb25nLWxvbmciCit9CisKKyMgSW5pdGlhbGl6ZSBgZGcnLgorZGct aW5pdAorCisjIE1haW4gbG9vcC4KK2crKy1kZy1ydW50ZXN0IFtsc29ydCBb Z2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5DXV0gIiIgJERF RkFVTFRfQ1hYRkxBR1MKKworIyBBbGwgZG9uZS4KK2RnLWZpbmlzaApkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvZXhwcmVz c2lvbi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvZXhwcmVz c2lvbi5DCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0 NDY4NGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2crKy5k Zy9jb25jZXB0cy9leHByZXNzaW9uLkMKQEAgLTAsMCArMSwyMCBAQAorLy8g eyBkZy1kbyBydW4gfQorLy8geyBkZy1vcHRpb25zICItc3RkPWMrKzF6IiB9 CisKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPGlvc3RyZWFtPgor Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICBjb25jZXB0IGJvb2wgQzEgPSBf X2lzX2NsYXNzKFQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAgCisgIGNv bmNlcHQgYm9vbCBDMigpIHsgcmV0dXJuIF9faXNfY2xhc3MoVCk7IH0KKwor dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgY29uY2VwdCBib29sIEMzKCkgeyBy ZXR1cm4gcmVxdWlyZXMgKFQgYSkgeyArK2E7IH07IH0KKworaW50IG1haW4o KSB7CisgIGlmIChDMTxpbnQ+KSBhc3NlcnQoZmFsc2UpOworICBpZiAoQzI8 aW50PigpKSBhc3NlcnQoZmFsc2UpOworICBpZiAoIUMzPGludD4oKSkgYXNz ZXJ0KGZhbHNlKTsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysr LmRnL2NvbmNlcHRzL2ZuNy5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u Y2VwdHMvZm43LkMKaW5kZXggZmExYjI3Zi4uMmFiZDM0YSAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvZm43LkMKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvZm43LkMKQEAgLTEsOCAr MSw4IEBACiAvLyB7IGRnLWRvIGxpbmsgfQogLy8geyBkZy1vcHRpb25zICIt c3RkPWMrKzF6IiB9CiAKLSNpbmNsdWRlIDxjYXNzZXJ0PgorLy8gRklYTUU6 IFdoYXQgaXMgdGhpcyBhY3R1YWxseSB0ZXN0aW5nPwogCi12b2lkIGYoKSBy ZXF1aXJlcyB0cnVlIHsgfTsgLy8geyBkZy14ZmFpbC1pZiAiIiB7ICotKi0q IH0gfQordm9pZCBmKCkgcmVxdWlyZXMgdHJ1ZSB7IH0KIAogaW50IG1haW4o KSB7IH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNl cHRzL2dlbmVyaWMtZm4tZXJyLkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9j b25jZXB0cy9nZW5lcmljLWZuLWVyci5DCmluZGV4IGJjZTg2NTMuLmM2Yjc0 NTcgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRz L2dlbmVyaWMtZm4tZXJyLkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29uY2VwdHMvZ2VuZXJpYy1mbi1lcnIuQwpAQCAtMSw3ICsxLDUgQEAKIC8v IHsgZGctb3B0aW9ucyAiLXN0ZD1jKysxeiIgfQogCi0jaW5jbHVkZSA8Y2Fz c2VydD4KLQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgY29uY2VwdCBib29s IEMoKSB7IHJldHVybiBfX2lzX2NsYXNzKFQpOyB9CiAKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL2ludHJvNC5DIGIvZ2Nj L3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvaW50cm80LkMKaW5kZXggZjgy MWMxYy4uNTI2YWEyMyAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29uY2VwdHMvaW50cm80LkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29uY2VwdHMvaW50cm80LkMKQEAgLTE4LDkgKzE4LDkgQEAgdGVtcGxh dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA9IGludD4KICAgY29uY2VwdCBi b29sIEM1KCkgeyByZXR1cm4gX19pc19jbGFzcyhVKTsgfQogCiBDMXsuLi5B LCBCfSB2b2lkIGYxKCkge307IC8vIHsgZGctZXJyb3IgIm5vIG1hdGNoaW5n fHdyb25nIG51bWJlciIgfQotQzF7QX0gdm9pZCBmMigpIHt9IC8vIHsgZGct ZXJyb3IgIm1hdGNoIHBhY2siIH0KLUMye0EsIEJ9IHZvaWQgZjMoKSB7fTsg Ly8geyBkZy1lcnJvciAibWF0Y2ggcGFjayIgfQotQzN7Li4uQX0gdm9pZCBm NCgpIHt9OyAvLyB7IGRnLWVycm9yICJtYXRjaCBwYWNrIiB9CitDMXtBfSB2 b2lkIGYyKCkge30gLy8geyBkZy1lcnJvciAiY2Fubm90IG1hdGNoIHBhY2t8 bm8gbWF0Y2hpbmcgY29uY2VwdCIgfQorQzJ7QSwgQn0gdm9pZCBmMygpIHt9 OyAvLyB7IGRnLWVycm9yICJjYW5ub3QgbWF0Y2ggcGFja3xubyBtYXRjaGlu ZyBjb25jZXB0IiB9CitDM3suLi5BfSB2b2lkIGY0KCkge307IC8vIHsgZGct ZXJyb3IgImNhbm5vdCBtYXRjaCBwYWNrfG5vIG1hdGNoaW5nIGNvbmNlcHQi IH0KIEM0e0F9IHZvaWQgZjUoKSB7fTsgLy8geyBkZy1lcnJvciAibm8gbWF0 Y2hpbmcgY29uY2VwdCIgfQogQzV7QSwgQn0gdm9pZCBmNigpIHt9OwogCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXEx LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXExLkMKaW5k ZXggZTVmMmZjOS4uN2ZhZDFkOSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0 ZS9nKysuZGcvY29uY2VwdHMvcmVxMS5DCisrKyBiL2djYy90ZXN0c3VpdGUv ZysrLmRnL2NvbmNlcHRzL3JlcTEuQwpAQCAtNCw2ICs0LDEwIEBACiB0ZW1w bGF0ZTx0eXBlbmFtZSBUPgogICBjb25jZXB0IGJvb2wgQ2xhc3MgKCkgeyBy ZXR1cm4gX19pc19jbGFzcyhUKTsgfQogCisvLyBBbGxvdyBhIHJlcXVpcmVz LWV4cHJlc3Npb24gd2l0aCBubyBwYXJtcy4KK3RlbXBsYXRlPHR5cGVuYW1l IFQ+CisgIGNvbmNlcHQgYm9vbCBDID0gcmVxdWlyZXMgeyB0eXBlbmFtZSBU Ojp0eXBlOyB9OworCiB2b2lkIGYxKGF1dG8gYSkgcmVxdWlyZXMgQ2xhc3M8 ZGVjbHR5cGUoYSk+KCkgeyB9CiB2b2lkIGYyKGF1dG8gYSkgcmVxdWlyZXMg cmVxdWlyZXMgKGRlY2x0eXBlKGEpIHgpIHsgLXg7IH0geyB9CiAKZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTIuQyBi L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTIuQwppbmRleCBj NTg1NWRmLi42MjUwMTI4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2cr Ky5kZy9jb25jZXB0cy9yZXEyLkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysu ZGcvY29uY2VwdHMvcmVxMi5DCkBAIC0xLDcgKzEsNSBAQAogLy8geyBkZy1v cHRpb25zICItc3RkPWMrKzF6IiB9CiAKLSNpbmNsdWRlIDxjYXNzZXJ0Pgot CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICBjb25jZXB0IGJvb2wgQ2xhc3Mg KCkgeyByZXR1cm4gX19pc19jbGFzcyhUKTsgfQogCkBAIC0xOSwzICsxNyw1 IEBAIGludCBtYWluKCkgewogICBmMSgwKTsgLy8geyBkZy1lcnJvciAiY2Fu bm90IGNhbGwiIH0KICAgZjIoKHZvaWQqKTApOyAvLyB7IGRnLWVycm9yICJj YW5ub3QgY2FsbCIgfQogfQorCisvLyB7IGRnLWV4Y2Vzcy1lcnJvcnMgInh8 d2l0aCIgfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29u Y2VwdHMvcmVxNC5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMv cmVxNC5DCmluZGV4IDkyN2U0ZTUuLmIyNmM0NzEgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTQuQworKysgYi9nY2Mv dGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXE0LkMKQEAgLTksMTAgKzks MTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGZvb2wgcDEo KSB7IHJldHVybiB7fTsgfQogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl eHByIGZvb2wgcDIoKSB7IHJldHVybiB7fTsgfQogCiB0ZW1wbGF0ZTx0eXBl bmFtZSBUPgotICBjb25jZXB0IGJvb2wgQygpIHsgcmV0dXJuIHAxPFQ+KCkg JiYgcDI8VD4oKTsgfQorICBjb25jZXB0IGJvb2wgQygpIHsgcmV0dXJuIHAx PFQ+KCkgJiYgcDI8VD4oKTsgfSAKIAotdGVtcGxhdGU8QyBUPiB2b2lkIGYo VCB4KSB7IH0KK3RlbXBsYXRlPEMgVD4gdm9pZCBmKFQgeCkgeyB9IC8vIHsg ZGctZXJyb3IgInVzZXItZGVmaW5lZCBvcGVyYXRvciIgfQogCiBpbnQgbWFp bigpIHsKLSAgZigwKTsgLy8geyBkZy1lcnJvciAiY2Fubm90IGNhbGx8cHJl ZGljYXRlIGNvbnN0cmFpbnQiIH0KKyAgLy8gRklYTUU6IFdlIHNob3VsZCBi ZSBkaWFnbm9zaW5nIHRoZSBmYWlsZWQgbG9va3VwCisgIC8vIG9mIG9wZXJh dG9yJiYsIG5vdCB0aGUgZmFjdCB0aGF0IG5laXRoZXIgaGF2ZSB0aGUKKyAg Ly8gcmlnaHQgdHlwZSAod2hpY2ggaXMgdHJ1ZSwgYnV0IG5vdCB0aGUgYmVz dCBlcnJvcikuCisgIGYoMCk7IC8vIHsgZGctZXJyb3IgIm5vdHxib29sIiB9 CiB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0 cy9yZXE1LkMgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXE1 LkMKaW5kZXggYzU2NmQzMS4uYjYzY2E3NyAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvcmVxNS5DCisrKyBiL2djYy90ZXN0 c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTUuQwpAQCAtOSwxMCArOSwxMCBA QCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgZm9vbCBwMSgpIHsg cmV0dXJuIHt9OyB9CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIg Zm9vbCBwMigpIHsgcmV0dXJuIHt9OyB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l IFQ+Ci0gIGNvbmNlcHQgYm9vbCBDKCkgeyByZXR1cm4gcDE8VD4oKSAmJiBw MjxUPigpOyB9CisgIGNvbmNlcHQgYm9vbCBDKCkgeyByZXR1cm4gcDE8VD4o KSAmJiBwMjxUPigpOyB9IAogCi10ZW1wbGF0ZTxDIFQ+IHZvaWQgZihUIHgp IHsgfQordGVtcGxhdGU8QyBUPiB2b2lkIGYoVCB4KSB7IH0gLy8geyBkZy1l cnJvciAidXNlci1kZWZpbmVkIG9wZXJhdG9yIiB9CiAKIGludCBtYWluKCkg ewotICBmKDApOyAvLyB7IGRnLWVycm9yICJjYW5ub3QgY2FsbHxwcmVkaWNh dGUgY29uc3RyYWludCIgfQorICBmKDApOyAvLyB7IGRnLWVycm9yICJub3R8 Ym9vbCIgfQogfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcv Y29uY2VwdHMvcmVxNi5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2Vw dHMvcmVxNi5DCmluZGV4IDAwZTMzZmMuLjljYWM4ZjggMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTYuQworKysgYi9n Y2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy9yZXE2LkMKQEAgLTcsNyAr Nyw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgIGNvbmNlcHQgYm9vbCBD MSgpIHsgcmV0dXJuIFgoKTsgfQogCiB0ZW1wbGF0ZTxDMSBUPgotICB2b2lk IGgoVCkgeyB9IC8vIHsgZGctZXJyb3IgIm5vdCBjb252ZXJ0aWJsZSIgfQor ICB2b2lkIGgoVCkgeyB9IC8vIHsgZGctZXJyb3IgIm5vdHxib29sIiB9CiAK IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgIGNvbmNlcHQgYm9vbCBDMigpIHsg cmV0dXJuIFgoKSA9PSBYKCk7IH0gLy8gT0sKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3JlcTcuQyBiL2djYy90ZXN0c3Vp dGUvZysrLmRnL2NvbmNlcHRzL3JlcTcuQwppbmRleCBkZDY2YjM5Li4xMGMz ZTY1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0 cy9yZXE3LkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMv cmVxNy5DCkBAIC0yMCw2ICsyMCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFNl cSwgdHlwZW5hbWUgRm4+CiAgICAgfQogCiBpbnQgbWFpbigpIHsKLSAgYWxs KHZlY3RvcjxpbnQ+ezAsIDJ9LCB0cnVlKTsgLy8geyBkZy1lcnJvciAiY2Fu bm90IGNhbGwiIH0KKyAgYWxsKHZlY3RvcjxpbnQ+ezAsIDJ9LCB0cnVlKTsg Ly8geyBkZy1lcnJvciAibm90fGJvb2wiIH0KIH0KIApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvdmFyLWNvbmNlcHRzMy5D IGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvY29uY2VwdHMvdmFyLWNvbmNlcHRz My5DCmluZGV4IDAxMGE5NmUuLjVmNmJlNzMgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvZysrLmRnL2NvbmNlcHRzL3Zhci1jb25jZXB0czMuQworKysg Yi9nY2MvdGVzdHN1aXRlL2crKy5kZy9jb25jZXB0cy92YXItY29uY2VwdHMz LkMKQEAgLTEyLDExICsxMiwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog CiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogICByZXF1aXJlcyBDMTxVPigpCi0g IHZvaWQgZjEoVSkgeyB9IC8vIHsgZGctZXJyb3IgImludmFsaWQgY29uc3Ry YWludCIgfQorICB2b2lkIGYxKFUpIHsgfSAvLyB7IGRnLWVycm9yICJmdW5j dGlvbiBjYWxsIiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFU+CiAgIHJlcXVp cmVzIEMyPFU+Ci0gIHZvaWQgZjIoVSkgeyB9IC8vIHsgZGctZXJyb3IgImlu dmFsaWQgY29uc3RyYWludCIgfQorICB2b2lkIGYyKFUpIHsgfSAvLyB7IGRn LWVycm9yICJpbnZhbGlkIHJlZmVyZW5jZSIgfQogCiB0ZW1wbGF0ZTxDMyBU PiAgLy8geyBkZy1lcnJvciAibm90IGEgdHlwZSIgfQogICB2b2lkIGYoVCkg eyB9IC8vIHsgZGctZXJyb3IgImRlY2xhcmVkIHZvaWQiIH0K --20cf3079bd8e6b7bb20510db7441--