From 111ae37989765813df37a15f017cfcfdb43580b4 Mon Sep 17 00:00:00 2001 From: voodoos <5031221+voodoos@users.noreply.github.com> Date: Mon, 19 Aug 2024 19:45:48 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20voodoos/?= =?UTF-8?q?ocamix@2dbefb8c2250b5ac4e456341d304698c46a797de=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db_worker.bc.js | 3875 +++++++++++++++--------------- main.bc.js | 6014 +++++++++++++++++++++++++---------------------- 2 files changed, 5126 insertions(+), 4763 deletions(-) diff --git a/db_worker.bc.js b/db_worker.bc.js index 851c6d7..47aa6c7 100644 --- a/db_worker.bc.js +++ b/db_worker.bc.js @@ -3990,84 +3990,85 @@ _c5_ = "nextUnique", _c6_ = "prev", _c7_ = "prevUnique", - _df_ = "CCResult.Get_error", - _dj_ = [0, cst_src_core_CCString_pp_ml, 116, 10], - _di_ = [0, cst_src_core_CCString_pp_ml, 89, 10], - _dh_ = cst$1, - _dt_ = "expected low surrogate escape sequence (u)", - _du_ = "invalid low surrogate for code point beyond U+FFFF'", - _dv_ = "expected low surrogate escape char (\\)", - _dw_ = "invalid escape in string", - _ds_ = "end of string in escape sequence", - _dn_ = "' ", - _do_ = " '", - _dr_ = cst$1, - _dp_ = cst$4, - _dq_ = " at offset ", - _dl_ = cst$7, - _dm_ = "invalid hex char in unicode escape: '", - _dk_ = "Jsonxt__Lexxer_utils.Lex_error", - _dx_ = [6, 1], - _dy_ = [6, 0], - _dz_ = cst$7, - _dA_ = cst_unexpected_character, - _dB_ = cst$7, - _dC_ = cst_unexpected_character, - _dD_ = cst$7, - _dE_ = cst_unexpected_character, - _dF_ = cst$7, - _dG_ = cst_unexpected_character, - _dH_ = [0, cst$1], - _dI_ = cst$7, - _dJ_ = cst_unexpected_character, - _dK_ = "unexpected EOF in comment", - _dL_ = "Jsonxt__Error_info.Json_error_info", - _dM_ = cst_0, + _df_ = [0, [11, "\x1b[", [4, 0, 0, 0, [12, 109, 0]]], "\x1b[%dm"], + _dg_ = "CCResult.Get_error", + _dk_ = [0, cst_src_core_CCString_pp_ml, 116, 10], + _dj_ = [0, cst_src_core_CCString_pp_ml, 89, 10], + _di_ = cst$1, + _du_ = "expected low surrogate escape sequence (u)", + _dv_ = "invalid low surrogate for code point beyond U+FFFF'", + _dw_ = "expected low surrogate escape char (\\)", + _dx_ = "invalid escape in string", + _dt_ = "end of string in escape sequence", + _do_ = "' ", + _dp_ = " '", + _ds_ = cst$1, + _dq_ = cst$4, + _dr_ = " at offset ", + _dm_ = cst$7, + _dn_ = "invalid hex char in unicode escape: '", + _dl_ = "Jsonxt__Lexxer_utils.Lex_error", + _dy_ = [6, 1], + _dz_ = [6, 0], + _dA_ = cst$7, + _dB_ = cst_unexpected_character, + _dC_ = cst$7, + _dD_ = cst_unexpected_character, + _dE_ = cst$7, + _dF_ = cst_unexpected_character, + _dG_ = cst$7, + _dH_ = cst_unexpected_character, + _dI_ = [0, cst$1], + _dJ_ = cst$7, + _dK_ = cst_unexpected_character, + _dL_ = "unexpected EOF in comment", + _dM_ = "Jsonxt__Error_info.Json_error_info", _dN_ = cst_0, - _dO_ = "unexpected '{'", - _dP_ = "unexpected '}'", - _dQ_ = "unexpected null value", - _dR_ = "unexpected negative infinity", - _dS_ = "unexpected Not-a-Number", - _dT_ = "unexpected infinity", - _dU_ = "unexpected end-of-input", - _dV_ = "unexpected ','", - _dW_ = "unexpected ':'", - _dX_ = "unexpected '['", - _dY_ = "unexpected ']'", - _dZ_ = "unexpected '<'", - _d0_ = "unexpected '>'", - _d1_ = "unexpected '('", - _d2_ = "unexpected ')'", - _d3_ = cst$7, - _d4_ = "unexpected string '", - _d5_ = cst$7, - _d6_ = "unexpected large integer '", - _d7_ = cst$7, - _d8_ = "unexpected integer '", - _d9_ = cst$7, - _d__ = "unexpected float '", - _d$_ = cst$7, - _ea_ = "compliance error '", - _eb_ = cst$7, - _ec_ = cst_true, - _ee_ = cst_false, - _ed_ = "unexpected boolean '", - _ei_ = [1, "Unexpected end-of-input"], - _eg_ = [0, 148000204, "tuple must have at least 2 elements"], - _eh_ = [0, 148000204, "variant must have at least a string"], - _ef_ = "Jsonxt__Parser.Make(Compliance).Parse_error", - _el_ = cst_b, - _em_ = cst_t, - _en_ = cst_n, - _eo_ = cst_f, - _ep_ = cst_r, - _eq_ = cst$8, - _ej_ = cst$0, - _ek_ = cst_u00, - _es_ = cst_null, - _et_ = cst$9, - _eu_ = + _dO_ = cst_0, + _dP_ = "unexpected '{'", + _dQ_ = "unexpected '}'", + _dR_ = "unexpected null value", + _dS_ = "unexpected negative infinity", + _dT_ = "unexpected Not-a-Number", + _dU_ = "unexpected infinity", + _dV_ = "unexpected end-of-input", + _dW_ = "unexpected ','", + _dX_ = "unexpected ':'", + _dY_ = "unexpected '['", + _dZ_ = "unexpected ']'", + _d0_ = "unexpected '<'", + _d1_ = "unexpected '>'", + _d2_ = "unexpected '('", + _d3_ = "unexpected ')'", + _d4_ = cst$7, + _d5_ = "unexpected string '", + _d6_ = cst$7, + _d7_ = "unexpected large integer '", + _d8_ = cst$7, + _d9_ = "unexpected integer '", + _d__ = cst$7, + _d$_ = "unexpected float '", + _ea_ = cst$7, + _eb_ = "compliance error '", + _ec_ = cst$7, + _ed_ = cst_true, + _ef_ = cst_false, + _ee_ = "unexpected boolean '", + _ej_ = [1, "Unexpected end-of-input"], + _eh_ = [0, 148000204, "tuple must have at least 2 elements"], + _ei_ = [0, 148000204, "variant must have at least a string"], + _eg_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _em_ = cst_b, + _en_ = cst_t, + _eo_ = cst_n, + _ep_ = cst_f, + _eq_ = cst_r, + _er_ = cst$8, + _ek_ = cst$0, + _el_ = cst_u00, + _et_ = cst_null, + _eu_ = cst$9, + _ev_ = [0, [12, 123, @@ -4075,9 +4076,9 @@ [0, cst_1_0, 1, 0], [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], "{@;<1 0>%a@;<1 -2>}"], - _ev_ = "{}", - _ew_ = cst$9, - _ex_ = + _ew_ = "{}", + _ex_ = cst$9, + _ey_ = [0, [12, 91, @@ -4087,16 +4088,16 @@ [1, [0, [11, cst_hov, 0], cst_hov]], [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], "[@;<1 0>@[%a@]@;<1 -2>]"], - _ey_ = "[]", - _ez_ = "()", - _eA_ = cst$9, - _eB_ = + _ez_ = "[]", + _eA_ = "()", + _eB_ = cst$9, + _eC_ = [0, [12, 40, [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], "(@,%a@;<0 -2>)"], - _eC_ = + _eD_ = [0, [12, 60, @@ -4104,103 +4105,103 @@ [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$4, [15, [17, 0, [12, 62, 0]]]]]]], "<@[%s: %a@]>"], - _eD_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], - _eE_ = + _eE_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _eF_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$4, [15, [17, 0, 0]]]]], "@[%s: %a@]"], - _eH_ = [0, [15, [17, 2, 0]], "%a@?"], - _eG_ = [0, [15, 0], cst_a], - _eF_ = + _eI_ = [0, [15, [17, 2, 0]], "%a@?"], + _eH_ = [0, [15, 0], cst_a], + _eG_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], "@[%a@]"], - _er_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], - _eK_ = "Expected `String", - _eJ_ = "Expected `Assoc", - _eM_ = "{", - _eN_ = "}", - _eO_ = "Null", - _eP_ = cst_Infinity, - _eQ_ = "NAN", - _eR_ = cst_Infinity$0, - _eS_ = "end-of-file", - _eT_ = cst$9, - _eU_ = cst$10, - _eV_ = "[", - _eW_ = "]", - _eX_ = cst$6, - _eY_ = cst$5, - _eZ_ = "(", - _e0_ = ")", - _e1_ = cst$7, - _e2_ = "input error '", - _e3_ = cst_true, - _e4_ = cst_false, - _e7_ = cst_junk_after_end_of_JSON_val, - _e8_ = [0, 0], - _e9_ = [1, cst_empty_input], - _e5_ = cst_junk_after_end_of_JSON_val, - _e6_ = [1, cst_empty_input], - _fk_ = cst$1, + _es_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _eL_ = "Expected `String", + _eK_ = "Expected `Assoc", + _eN_ = "{", + _eO_ = "}", + _eP_ = "Null", + _eQ_ = cst_Infinity, + _eR_ = "NAN", + _eS_ = cst_Infinity$0, + _eT_ = "end-of-file", + _eU_ = cst$9, + _eV_ = cst$10, + _eW_ = "[", + _eX_ = "]", + _eY_ = cst$6, + _eZ_ = cst$5, + _e0_ = "(", + _e1_ = ")", + _e2_ = cst$7, + _e3_ = "input error '", + _e4_ = cst_true, + _e5_ = cst_false, + _e8_ = cst_junk_after_end_of_JSON_val, + _e9_ = [0, 0], + _e__ = [1, cst_empty_input], + _e6_ = cst_junk_after_end_of_JSON_val, + _e7_ = [1, cst_empty_input], _fl_ = cst$1, - _fh_ = cst_null, - _fi_ = cst$9, + _fm_ = cst$1, + _fi_ = cst_null, _fj_ = cst$9, - _fg_ = cst$10, - _fa_ = cst_b, - _fb_ = cst_t, - _fc_ = cst_n, - _fd_ = cst_f, - _fe_ = cst_r, - _ff_ = cst$8, - _e__ = cst$0, - _e$_ = cst_u00, - _fu_ = cst_null, - _fw_ = cst$9, - _fv_ = cst$1, - _fy_ = cst$9, - _fx_ = cst$1, - _fo_ = cst_b, - _fp_ = cst_t, - _fq_ = cst_n, - _fr_ = cst_f, - _fs_ = cst_r, - _ft_ = cst$8, - _fm_ = cst$0, - _fn_ = cst_u00, - _f2_ = [0, 928231259, cst_Infinity$0], - _f3_ = [0, 928231259, cst_Infinity], - _f1_ = [0, 928231259, cst_NaN], - _f0_ = cst_NaN, - _fY_ = cst_Infinity, - _fZ_ = cst_Infinity$0, - _fX_ = [0, 0], - _fV_ = cst$11, + _fk_ = cst$9, + _fh_ = cst$10, + _fb_ = cst_b, + _fc_ = cst_t, + _fd_ = cst_n, + _fe_ = cst_f, + _ff_ = cst_r, + _fg_ = cst$8, + _e$_ = cst$0, + _fa_ = cst_u00, + _fv_ = cst_null, + _fx_ = cst$9, + _fw_ = cst$1, + _fz_ = cst$9, + _fy_ = cst$1, + _fp_ = cst_b, + _fq_ = cst_t, + _fr_ = cst_n, + _fs_ = cst_f, + _ft_ = cst_r, + _fu_ = cst$8, + _fn_ = cst$0, + _fo_ = cst_u00, + _f3_ = [0, 928231259, cst_Infinity$0], + _f4_ = [0, 928231259, cst_Infinity], + _f2_ = [0, 928231259, cst_NaN], + _f1_ = cst_NaN, + _fZ_ = cst_Infinity, + _f0_ = cst_Infinity$0, + _fY_ = [0, 0], _fW_ = cst$11, - _fU_ = "floatlit not supported in yojson safe mode", - _fT_ = cst_NaN, - _fR_ = cst_Infinity, - _fS_ = cst_Infinity$0, - _fQ_ = [0, 0], + _fX_ = cst$11, + _fV_ = "floatlit not supported in yojson safe mode", + _fU_ = cst_NaN, + _fS_ = cst_Infinity, + _fT_ = cst_Infinity$0, + _fR_ = [0, 0], + _fQ_ = cst_variants_not_supported_in_, _fP_ = cst_variants_not_supported_in_, - _fO_ = cst_variants_not_supported_in_, + _fO_ = cst_tuples_not_supported_in_yo, _fN_ = cst_tuples_not_supported_in_yo, - _fM_ = cst_tuples_not_supported_in_yo, - _fL_ = "floatlit not supported in yojson basic mode", - _fK_ = cst_variants_not_supported_in_, - _fJ_ = cst_tuples_not_supported_in_yo, - _fI_ = cst_NaN, - _fG_ = cst_Infinity, - _fH_ = cst_Infinity$0, - _fF_ = [0, 0], - _fE_ = [5, "Integer out of bounds"], - _fA_ = ", line", - _fB_ = "File ", - _fD_ = "Line", - _fC_ = + _fM_ = "floatlit not supported in yojson basic mode", + _fL_ = cst_variants_not_supported_in_, + _fK_ = cst_tuples_not_supported_in_yo, + _fJ_ = cst_NaN, + _fH_ = cst_Infinity, + _fI_ = cst_Infinity$0, + _fG_ = [0, 0], + _fF_ = [5, "Integer out of bounds"], + _fB_ = ", line", + _fC_ = "File ", + _fE_ = "Line", + _fD_ = [0, [2, 0, @@ -4214,16 +4215,16 @@ " chars ", [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$4, 0]]]]]]]], "%s %d chars %d-%d: "], - _fz_ = "Jsonxt__Yojson.Json_error", - _f4_ = [1, [0, 3854881, "Failed to unmarshal data"]], - _f9_ = "list_of_yojson: list needed", - _f8_ = "int_of_yojson: integer needed", - _f7_ = "string_of_yojson: string needed", - _f6_ = "bool_of_yojson: true/false needed", - _f5_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _gg_ = cst$12, - _gi_ = "_of_yojson: list instead of atom for record expected", - _gh_ = + _fA_ = "Jsonxt__Yojson.Json_error", + _f5_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _f__ = "list_of_yojson: list needed", + _f9_ = "int_of_yojson: integer needed", + _f8_ = "string_of_yojson: string needed", + _f7_ = "bool_of_yojson: true/false needed", + _f6_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _gh_ = cst$12, + _gj_ = "_of_yojson: list instead of atom for record expected", + _gi_ = [0, [2, 0, @@ -4231,276 +4232,276 @@ "_of_yojson: the following record elements were undefined: ", [2, 0, 0]]], "%s_of_yojson: the following record elements were undefined: %s"], - _gf_ = "extra fields", - _ge_ = "duplicate fields", - _gc_ = cst$12, - _gd_ = + _gg_ = "extra fields", + _gf_ = "duplicate fields", + _gd_ = cst$12, + _ge_ = [0, [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$4, [2, 0, 0]]]]], "%s_of_yojson: %s: %s"], - _gb_ = "_of_yojson: unexpected variant constructor", - _ga_ = "_of_yojson: expected a variant type, saw an empty list", - _f$_ = "_of_yojson: expected a variant type, saw a nested list", - _f__ = "_of_yojson: this constructor does not take arguments", - _i7_ = "An error occured while decoding response: ", - _i3_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], - _i6_ = cst$1, - _i4_ = cst$1, - _i5_ = + _gc_ = "_of_yojson: unexpected variant constructor", + _gb_ = "_of_yojson: expected a variant type, saw an empty list", + _ga_ = "_of_yojson: expected a variant type, saw a nested list", + _f$_ = "_of_yojson: this constructor does not take arguments", + _i8_ = "An error occured while decoding response: ", + _i4_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _i7_ = cst$1, + _i5_ = cst$1, + _i6_ = [0, [11, 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _i0_ = cst_ItemId, - _i1_ = cst_Locations, - _i2_ = cst_Name, - _iX_ = "item_id", - _iY_ = "locations", - _iZ_ = cst_name, - _iV_ = [0, "Views", 0], - _iW_ = "Users", - _iS_ = cst_StartIndex, - _iT_ = cst_TotalRecordCount, - _iU_ = cst_Items, - _iP_ = cst_start_index, - _iQ_ = cst_total_record_count, - _iR_ = cst_items, - _iO_ = cst_includeExternalContent, - _iN_ = "include_external_content", - _iM_ = [0, cst_Items, 0], - _iJ_ = cst_StartIndex, - _iK_ = cst_TotalRecordCount, - _iL_ = cst_Items, - _iG_ = cst_start_index, - _iH_ = cst_total_record_count, - _iI_ = cst_items, - _iu_ = cst_enableImages, - _iv_ = cst_enableUserData, - _iw_ = cst_recursive, - _ix_ = cst_sortBy, - _iy_ = cst_sortOrder, - _iz_ = cst_limit, - _iA_ = cst_startIndex, - _iB_ = cst_includeItemTypes, - _iC_ = cst_fields, - _iD_ = cst_userId, - _iE_ = cst_parentId, - _iF_ = cst_ids, - _in_ = "enable_images", - _io_ = "enable_user_data", - _ip_ = cst_recursive, - _iq_ = "sort_by", - _ir_ = "include_item_types", - _is_ = cst_fields, - _it_ = "user_id", - _im_ = cst_CollectionType, - _id_ = cst_Type, - _ie_ = cst_ImageBlurHashes, - _if_ = cst_ServerId, - _ig_ = cst_ParentId, - _ih_ = cst_AlbumId, - _ii_ = cst_Path, - _ij_ = cst_Id, - _ik_ = cst_SortName, - _il_ = cst_Name, - _h__ = "type_", - _h$_ = "image_blur_hashes", - _ia_ = "server_id", - _ib_ = cst_id, - _ic_ = cst_name, - _h9_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], - _ha_ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], - _hb_ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], - _hc_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], - _hd_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], - _he_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], - _hf_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], - _hg_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], - _hh_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], - _hi_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], - _hj_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], - _hk_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _hl_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], - _hm_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], - _hn_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], - _ho_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], - _hp_ = + _i1_ = cst_ItemId, + _i2_ = cst_Locations, + _i3_ = cst_Name, + _iY_ = "item_id", + _iZ_ = "locations", + _i0_ = cst_name, + _iW_ = [0, "Views", 0], + _iX_ = "Users", + _iT_ = cst_StartIndex, + _iU_ = cst_TotalRecordCount, + _iV_ = cst_Items, + _iQ_ = cst_start_index, + _iR_ = cst_total_record_count, + _iS_ = cst_items, + _iP_ = cst_includeExternalContent, + _iO_ = "include_external_content", + _iN_ = [0, cst_Items, 0], + _iK_ = cst_StartIndex, + _iL_ = cst_TotalRecordCount, + _iM_ = cst_Items, + _iH_ = cst_start_index, + _iI_ = cst_total_record_count, + _iJ_ = cst_items, + _iv_ = cst_enableImages, + _iw_ = cst_enableUserData, + _ix_ = cst_recursive, + _iy_ = cst_sortBy, + _iz_ = cst_sortOrder, + _iA_ = cst_limit, + _iB_ = cst_startIndex, + _iC_ = cst_includeItemTypes, + _iD_ = cst_fields, + _iE_ = cst_userId, + _iF_ = cst_parentId, + _iG_ = cst_ids, + _io_ = "enable_images", + _ip_ = "enable_user_data", + _iq_ = cst_recursive, + _ir_ = "sort_by", + _is_ = "include_item_types", + _it_ = cst_fields, + _iu_ = "user_id", + _in_ = cst_CollectionType, + _ie_ = cst_Type, + _if_ = cst_ImageBlurHashes, + _ig_ = cst_ServerId, + _ih_ = cst_ParentId, + _ii_ = cst_AlbumId, + _ij_ = cst_Path, + _ik_ = cst_Id, + _il_ = cst_SortName, + _im_ = cst_Name, + _h$_ = "type_", + _ia_ = "image_blur_hashes", + _ib_ = "server_id", + _ic_ = cst_id, + _id_ = cst_name, + _h__ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _hb_ = [0, 848054398, [0, [0, -976970511, cst_AirTime], 0]], + _hc_ = [0, 848054398, [0, [0, -976970511, cst_BasicSyncInfo], 0]], + _hd_ = [0, 848054398, [0, [0, -976970511, cst_CanDelete], 0]], + _he_ = [0, 848054398, [0, [0, -976970511, cst_CanDownload], 0]], + _hf_ = [0, 848054398, [0, [0, -976970511, cst_ChannelImage], 0]], + _hg_ = [0, 848054398, [0, [0, -976970511, cst_ChannelInfo], 0]], + _hh_ = [0, 848054398, [0, [0, -976970511, cst_Chapters], 0]], + _hi_ = [0, 848054398, [0, [0, -976970511, cst_ChildCount], 0]], + _hj_ = [0, 848054398, [0, [0, -976970511, cst_CumulativeRunTimeTicks], 0]], + _hk_ = [0, 848054398, [0, [0, -976970511, cst_CustomRating], 0]], + _hl_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _hm_ = [0, 848054398, [0, [0, -976970511, cst_DateLastMediaAdded], 0]], + _hn_ = [0, 848054398, [0, [0, -976970511, cst_DateLastRefreshed], 0]], + _ho_ = [0, 848054398, [0, [0, -976970511, cst_DateLastSaved], 0]], + _hp_ = [0, 848054398, [0, [0, -976970511, cst_DisplayPreferencesId], 0]], + _hq_ = [0, 848054398, [0, [0, -976970511, cst_EnableMediaSourceDisplay], 0]], - _hq_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], - _hr_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], - _hs_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], - _ht_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], - _hu_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], - _hv_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], - _hw_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], - _hx_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], - _hy_ = + _hr_ = [0, 848054398, [0, [0, -976970511, cst_Etag], 0]], + _hs_ = [0, 848054398, [0, [0, -976970511, cst_ExternalEtag], 0]], + _ht_ = [0, 848054398, [0, [0, -976970511, cst_ExternalSeriesId], 0]], + _hu_ = [0, 848054398, [0, [0, -976970511, cst_ExternalUrls], 0]], + _hv_ = [0, 848054398, [0, [0, -976970511, cst_ExtraIds], 0]], + _hw_ = [0, 848054398, [0, [0, -976970511, cst_Genres], 0]], + _hx_ = [0, 848054398, [0, [0, -976970511, cst_Height], 0]], + _hy_ = [0, 848054398, [0, [0, -976970511, cst_HomePageUrl], 0]], + _hz_ = [0, 848054398, [0, [0, -976970511, cst_InheritedParentalRatingVal], 0]], - _hz_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], - _hA_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], - _hB_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], - _hC_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], - _hD_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], - _hE_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], - _hF_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], - _hG_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], - _hH_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], - _hI_ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], - _hJ_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], - _hK_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], - _hL_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], - _hM_ = + _hA_ = [0, 848054398, [0, [0, -976970511, cst_IsHD], 0]], + _hB_ = [0, 848054398, [0, [0, -976970511, cst_ItemCounts], 0]], + _hC_ = [0, 848054398, [0, [0, -976970511, cst_LocalTrailerCount], 0]], + _hD_ = [0, 848054398, [0, [0, -976970511, cst_MediaSourceCount], 0]], + _hE_ = [0, 848054398, [0, [0, -976970511, cst_MediaSources], 0]], + _hF_ = [0, 848054398, [0, [0, -976970511, cst_MediaStreams], 0]], + _hG_ = [0, 848054398, [0, [0, -976970511, cst_OriginalTitle], 0]], + _hH_ = [0, 848054398, [0, [0, -976970511, cst_Overview], 0]], + _hI_ = [0, 848054398, [0, [0, -976970511, cst_ParentId], 0]], + _hJ_ = [0, 848054398, [0, [0, -976970511, cst_Path], 0]], + _hK_ = [0, 848054398, [0, [0, -976970511, cst_People], 0]], + _hL_ = [0, 848054398, [0, [0, -976970511, cst_PlayAccess], 0]], + _hM_ = [0, 848054398, [0, [0, -976970511, cst_PresentationUniqueKey], 0]], + _hN_ = [0, 848054398, [0, [0, -976970511, cst_PrimaryImageAspectRatio], 0]], - _hN_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], - _hO_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], - _hP_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], - _hQ_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], - _hR_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], - _hS_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], - _hT_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], - _hU_ = + _hO_ = [0, 848054398, [0, [0, -976970511, cst_ProductionLocations], 0]], + _hP_ = [0, 848054398, [0, [0, -976970511, cst_ProviderIds], 0]], + _hQ_ = [0, 848054398, [0, [0, -976970511, cst_RecursiveItemCount], 0]], + _hR_ = [0, 848054398, [0, [0, -976970511, cst_RefreshState], 0]], + _hS_ = [0, 848054398, [0, [0, -976970511, cst_RemoteTrailers], 0]], + _hT_ = [0, 848054398, [0, [0, -976970511, cst_ScreenshotImageTags], 0]], + _hU_ = [0, 848054398, [0, [0, -976970511, cst_SeasonUserData], 0]], + _hV_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPresentationUniqueKe], 0]], - _hV_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], - _hW_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], - _hX_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], - _hY_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], - _hZ_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _h0_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], - _h1_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], - _h2_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], - _h3_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], - _h4_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], - _h5_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], - _h6_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], - _h7_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], - _h8_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], - _gB_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _gC_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _gD_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _gE_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _gF_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _gG_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _gH_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _gI_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _gJ_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _gK_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _gL_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _gM_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _gN_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _gO_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _gP_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _gQ_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _gR_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _gS_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _gT_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _gU_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _gV_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _gW_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _gX_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _gY_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _gZ_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _g0_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _g1_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _g2_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _g3_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _g4_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _g5_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _g6_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _g7_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _g8_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _g9_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _g__ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _g$_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _gA_ = cst_Primary, - _gl_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], - _gm_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], - _gn_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], - _go_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], - _gp_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], - _gq_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], - _gr_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], - _gs_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], - _gt_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], - _gu_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], - _gv_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], - _gw_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], - _gx_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], - _gy_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], - _gz_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], - _gj_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], - _gk_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], - _ju_ = [0, cst_lib_db_stores_ml, 116, 13], - _jt_ = [0, cst_lib_db_stores_ml, 107, 19], - _jq_ = [0, cst_lib_db_stores_ml, 99, 13], - _jp_ = [0, cst_lib_db_stores_ml, 93, 19], - _jl_ = [0, cst_lib_db_stores_ml, 66, 13], - _jj_ = cst_item, - _jk_ = cst_sorts, - _jh_ = cst_item, - _ji_ = cst_sorts, - _je_ = cst_sort_name, - _jf_ = cst_views, - _jg_ = cst_date_added, - _jb_ = cst_sort_name, - _jc_ = cst_views, - _jd_ = cst_date_added, - _i$_ = cst_item, - _ja_ = cst_id, - _i9_ = cst_item, - _i__ = cst_id, - _jm_ = [0, cst_sorts_views], - _jn_ = [0, "item.Name"], - _jo_ = [0, cst_item_Id], - _jr_ = [0, cst_sorts_views], - _js_ = [0, "item.Type"], - _jv_ = [0, "sorts.sort_name"], - _jw_ = [0, "item.CollectionType"], - _j2_ = [0, 1, 0], - _jW_ = [0, 6, 0], - _jX_ = [0, 0], - _jY_ = [0, 33, [0, 34, 0]], - _j0_ = cst$1, - _jZ_ = [0, 1], - _j1_ = [0, "lib/db/sync.ml", 313, 6], - _jT_ = [0, cst$10, 0], - _jU_ = cst_to, - _jV_ = "Fetching items", - _jS_ = [0, 1], - _jR_ = [0, 34, 0], - _jQ_ = [0, 33, 0], - _jO_ = [0, 1], - _jP_ = [0, 0], - _jM_ = [0, 0], - _jN_ = [0, 2], - _jJ_ = [0, 6, 0], - _jK_ = [0, 0], + _hW_ = [0, 848054398, [0, [0, -976970511, cst_SeriesPrimaryImage], 0]], + _hX_ = [0, 848054398, [0, [0, -976970511, cst_SeriesStudio], 0]], + _hY_ = [0, 848054398, [0, [0, -976970511, cst_ServiceName], 0]], + _hZ_ = [0, 848054398, [0, [0, -976970511, cst_Settings], 0]], + _h0_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _h1_ = [0, 848054398, [0, [0, -976970511, cst_SpecialEpisodeNumbers], 0]], + _h2_ = [0, 848054398, [0, [0, -976970511, cst_SpecialFeatureCount], 0]], + _h3_ = [0, 848054398, [0, [0, -976970511, cst_Studios], 0]], + _h4_ = [0, 848054398, [0, [0, -976970511, cst_SyncInfo], 0]], + _h5_ = [0, 848054398, [0, [0, -976970511, cst_Taglines], 0]], + _h6_ = [0, 848054398, [0, [0, -976970511, cst_Tags], 0]], + _h7_ = [0, 848054398, [0, [0, -976970511, cst_ThemeSongIds], 0]], + _h8_ = [0, 848054398, [0, [0, -976970511, cst_ThemeVideoIds], 0]], + _h9_ = [0, 848054398, [0, [0, -976970511, cst_Width], 0]], + _gC_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _gD_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _gE_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _gF_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _gG_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _gH_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _gI_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _gJ_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _gK_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _gL_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _gM_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _gN_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _gO_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _gP_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _gQ_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _gR_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _gS_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _gT_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _gU_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _gV_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _gW_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _gX_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _gY_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _gZ_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _g0_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _g1_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _g2_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _g3_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _g4_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _g5_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _g6_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _g7_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _g8_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _g9_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _g__ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _g$_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _ha_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _gB_ = cst_Primary, + _gm_ = [0, 848054398, [0, [0, -976970511, cst_Album], 0]], + _gn_ = [0, 848054398, [0, [0, -976970511, cst_AlbumArtist], 0]], + _go_ = [0, 848054398, [0, [0, -976970511, cst_Artist], 0]], + _gp_ = [0, 848054398, [0, [0, -976970511, cst_Budget], 0]], + _gq_ = [0, 848054398, [0, [0, -976970511, cst_CommunityRating], 0]], + _gr_ = [0, 848054398, [0, [0, -976970511, cst_CriticRating], 0]], + _gs_ = [0, 848054398, [0, [0, -976970511, cst_DateCreated], 0]], + _gt_ = [0, 848054398, [0, [0, -976970511, cst_DatePlayed], 0]], + _gu_ = [0, 848054398, [0, [0, -976970511, cst_PlayCount], 0]], + _gv_ = [0, 848054398, [0, [0, -976970511, cst_PremiereDate], 0]], + _gw_ = [0, 848054398, [0, [0, -976970511, cst_ProductionYear], 0]], + _gx_ = [0, 848054398, [0, [0, -976970511, cst_SortName], 0]], + _gy_ = [0, 848054398, [0, [0, -976970511, cst_Random], 0]], + _gz_ = [0, 848054398, [0, [0, -976970511, cst_Revenue], 0]], + _gA_ = [0, 848054398, [0, [0, -976970511, cst_Runtime], 0]], + _gk_ = [0, 848054398, [0, [0, -976970511, cst_Descending], 0]], + _gl_ = [0, 848054398, [0, [0, -976970511, cst_Ascending], 0]], + _jv_ = [0, cst_lib_db_stores_ml, 116, 13], + _ju_ = [0, cst_lib_db_stores_ml, 107, 19], + _jr_ = [0, cst_lib_db_stores_ml, 99, 13], + _jq_ = [0, cst_lib_db_stores_ml, 93, 19], + _jm_ = [0, cst_lib_db_stores_ml, 66, 13], + _jk_ = cst_item, + _jl_ = cst_sorts, + _ji_ = cst_item, + _jj_ = cst_sorts, + _jf_ = cst_sort_name, + _jg_ = cst_views, + _jh_ = cst_date_added, + _jc_ = cst_sort_name, + _jd_ = cst_views, + _je_ = cst_date_added, + _ja_ = cst_item, + _jb_ = cst_id, + _i__ = cst_item, + _i$_ = cst_id, + _jn_ = [0, cst_sorts_views], + _jo_ = [0, "item.Name"], + _jp_ = [0, cst_item_Id], + _js_ = [0, cst_sorts_views], + _jt_ = [0, "item.Type"], + _jw_ = [0, "sorts.sort_name"], + _jx_ = [0, "item.CollectionType"], + _j3_ = [0, 1, 0], + _jX_ = [0, 6, 0], + _jY_ = [0, 0], + _jZ_ = [0, 33, [0, 34, 0]], + _j1_ = cst$1, + _j0_ = [0, 1], + _j2_ = [0, "lib/db/sync.ml", 334, 6], + _jU_ = [0, cst$10, 0], + _jV_ = cst_to, + _jW_ = "Fetching items", + _jT_ = [0, 1], + _jS_ = [0, 34, 0], + _jR_ = [0, 33, 0], + _jP_ = [0, 1], + _jQ_ = [0, 0], + _jN_ = [0, 0], + _jO_ = [0, 2], + _jK_ = [0, 6, 0], _jL_ = [0, 0], - _j3_ = cst_to, - _j4_ = "Upgrading indexed_db schema from version", - _j5_ = [0, "Erasing existing stores", 0], - _j6_ = [0, 0], + _jM_ = [0, 0], + _j4_ = cst_to, + _j5_ = "Upgrading indexed_db schema from version", + _j6_ = [0, "Erasing existing stores", 0], _j7_ = [0, 0], _j8_ = [0, 0], - _j9_ = "Stores created:", - _kp_ = "An error occured while loading item", - _kl_ = cst_music, - _km_ = cst_music$0, - _kn_ = [0, 0], - _ko_ = [0, 1], - _kk_ = "Item should exists.", - _kg_ = cst_music, - _kh_ = cst_music$0, - _ki_ = [0, 0], - _kj_ = [0, 1], - _kb_ = [0, [2, 0, 0], cst_s], - _kc_ = cst_Audio, - _kd_ = "Audio\0", - _ke_ = [0, 0], - _kf_ = [0, 1], - _ka_ = [0, 0], - _j__ = "tracks", - _j$_ = [0, 1]; + _j9_ = [0, 0], + _j__ = "Stores created:", + _kq_ = "An error occured while loading item", + _km_ = cst_music, + _kn_ = cst_music$0, + _ko_ = [0, 0], + _kp_ = [0, 1], + _kl_ = "Item should exists.", + _kh_ = cst_music, + _ki_ = cst_music$0, + _kj_ = [0, 0], + _kk_ = [0, 1], + _kc_ = [0, [2, 0, 0], cst_s], + _kd_ = cst_Audio, + _ke_ = "Audio\0", + _kf_ = [0, 0], + _kg_ = [0, 1], + _kb_ = [0, 0], + _j$_ = "tracks", + _ka_ = [0, 1]; function erase_rel(param){ if(typeof param === "number") return 0; switch(param[0]){ @@ -4728,9 +4729,9 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; try{caml_ml_flush(a);} - catch(_tP_){ - var _tO_ = caml_wrap_exception(_tP_); - if(_tO_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_tO_, 0); + catch(_tR_){ + var _tQ_ = caml_wrap_exception(_tR_); + if(_tQ_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_tQ_, 0); } param$0 = l; } @@ -4778,15 +4779,15 @@ return caml_call1(old_exit$0, 0); }, success = compare_and_set(exit_function, old_exit, new_exit), - _tN_ = 1 - success; - if(! _tN_) return _tN_; + _tP_ = 1 - success; + if(! _tP_) return _tP_; } } function do_at_exit(param){return caml_call1(get(exit_function), 0);} caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - function _i_(_tM_){return caml_ml_close_channel(_tM_);} - function _j_(_tL_, _tK_){return caml_ml_output_char(_tL_, _tK_);} - function _k_(_tJ_){return caml_ml_flush(_tJ_);} + function _i_(_tO_){return caml_ml_close_channel(_tO_);} + function _j_(_tN_, _tM_){return caml_ml_output_char(_tN_, _tM_);} + function _k_(_tL_){return caml_ml_flush(_tL_);} var max_array_length = caml_sys_const_max_wosize(0), max_string_length = (4 * max_array_length | 0) - 1 | 0; @@ -4953,8 +4954,8 @@ var param$0 = param; for(;;){ if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _tI_ = caml_call1(p, a); - if(_tI_) return _tI_; + var l = param$0[2], a = param$0[1], _tK_ = caml_call1(p, a); + if(_tK_) return _tK_; param$0 = l; } } @@ -4962,8 +4963,8 @@ var param$0 = param; for(;;){ if(! param$0) return 0; - var l = param$0[2], a = param$0[1], _tH_ = a === x ? 1 : 0; - if(_tH_) return _tH_; + var l = param$0[2], a = param$0[1], _tJ_ = a === x ? 1 : 0; + if(_tJ_) return _tJ_; param$0 = l; } } @@ -5013,9 +5014,9 @@ return invalid_arg(_y_); } function escaped$0(s){ - var n = [0, 0], _tA_ = caml_ml_bytes_length(s) - 1 | 0, _tz_ = 0; - if(_tA_ >= 0){ - var i$0 = _tz_; + var n = [0, 0], _tC_ = caml_ml_bytes_length(s) - 1 | 0, _tB_ = 0; + if(_tC_ >= 0){ + var i$0 = _tB_; for(;;){ var match = caml_bytes_unsafe_get(s, i$0); a: @@ -5025,12 +5026,12 @@ c: { if(32 <= match){ - var _tE_ = match - 34 | 0; - if(58 < _tE_ >>> 0){ - if(93 <= _tE_) break c; + var _tG_ = match - 34 | 0; + if(58 < _tG_ >>> 0){ + if(93 <= _tG_) break c; } - else if(56 < _tE_ - 1 >>> 0) break b; - var _tF_ = 1; + else if(56 < _tG_ - 1 >>> 0) break b; + var _tH_ = 1; break a; } if(11 <= match){ @@ -5038,23 +5039,23 @@ } else if(8 <= match) break b; } - var _tF_ = 4; + var _tH_ = 4; break a; } - var _tF_ = 2; + var _tH_ = 2; } - n[1] = n[1] + _tF_ | 0; - var _tG_ = i$0 + 1 | 0; - if(_tA_ === i$0) break; - i$0 = _tG_; + n[1] = n[1] + _tH_ | 0; + var _tI_ = i$0 + 1 | 0; + if(_tC_ === i$0) break; + i$0 = _tI_; } } if(n[1] === caml_ml_bytes_length(s)) return copy(s); var s$0 = caml_create_bytes(n[1]); n[1] = 0; - var _tC_ = caml_ml_bytes_length(s) - 1 | 0, _tB_ = 0; - if(_tC_ >= 0){ - var i = _tB_; + var _tE_ = caml_ml_bytes_length(s) - 1 | 0, _tD_ = 0; + if(_tE_ >= 0){ + var i = _tD_; for(;;){ var c = caml_bytes_unsafe_get(s, i); a: @@ -5112,9 +5113,9 @@ caml_bytes_unsafe_set(s$0, n[1], c); } n[1]++; - var _tD_ = i + 1 | 0; - if(_tC_ === i) break; - i = _tD_; + var _tF_ = i + 1 | 0; + if(_tE_ === i) break; + i = _tF_; } } return s$0; @@ -5122,22 +5123,22 @@ function map$2(f, s){ var l = caml_ml_bytes_length(s); if(0 === l) return s; - var r = caml_create_bytes(l), _tx_ = l - 1 | 0, _tw_ = 0; - if(_tx_ >= 0){ - var i = _tw_; + var r = caml_create_bytes(l), _tz_ = l - 1 | 0, _ty_ = 0; + if(_tz_ >= 0){ + var i = _ty_; for(;;){ caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _ty_ = i + 1 | 0; - if(_tx_ === i) break; - i = _ty_; + var _tA_ = i + 1 | 0; + if(_tz_ === i) break; + i = _tA_; } } return r; } function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} function lowercase_ascii$0(s){return map$2(lowercase_ascii, s);} - function unsafe_of_string(_tv_){return caml_bytes_of_string(_tv_);} - function unsafe_to_string(_tu_){return caml_string_of_bytes(_tu_);} + function unsafe_of_string(_tx_){return caml_bytes_of_string(_tx_);} + function unsafe_to_string(_tw_){return caml_string_of_bytes(_tw_);} function make$1(n, c){return unsafe_to_string(make$0(n, c));} function sub$0(s, ofs, len){ return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); @@ -5191,13 +5192,13 @@ var i$0 = i; for(;;){ if(n <= i$0) return s; - var _tt_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + var _tv_ = caml_string_unsafe_get(s, i$0) - 32 | 0; a: { - if(59 < _tt_ >>> 0){ - if(33 < _tt_ - 61 >>> 0) break a; + if(59 < _tv_ >>> 0){ + if(33 < _tv_ - 61 >>> 0) break a; } - else if(2 === _tt_) break a; + else if(2 === _tv_) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -5224,11 +5225,11 @@ function contains_from(s, i, c){ var l = caml_ml_string_length(s); if(0 <= i && l >= i) - try{index_rec(s, l, i, c); var _tr_ = 1; return _tr_;} - catch(_ts_){ - var _tq_ = caml_wrap_exception(_ts_); - if(_tq_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_tq_, 0); + try{index_rec(s, l, i, c); var _tt_ = 1; return _tt_;} + catch(_tu_){ + var _ts_ = caml_wrap_exception(_tu_); + if(_ts_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_ts_, 0); } return invalid_arg(_C_); } @@ -5240,18 +5241,18 @@ return unsafe_to_string(lowercase_ascii$0(unsafe_of_string(s))); } function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_tp_, _to_){return _tp_ == _to_ ? 1 : 0;} + function symbol$0(_tr_, _tq_){return _tr_ == _tq_ ? 1 : 0;} function init$0(l, f){ if(0 === l) return [0]; if(0 > l) return invalid_arg(_D_); - var res = caml_make_vect(l, caml_call1(f, 0)), _tm_ = l - 1 | 0, _tl_ = 1; - if(_tm_ >= 1){ - var i = _tl_; + var res = caml_make_vect(l, caml_call1(f, 0)), _to_ = l - 1 | 0, _tn_ = 1; + if(_to_ >= 1){ + var i = _tn_; for(;;){ res[1 + i] = caml_call1(f, i); - var _tn_ = i + 1 | 0; - if(_tm_ === i) break; - i = _tn_; + var _tp_ = i + 1 | 0; + if(_to_ === i) break; + i = _tp_; } } return res; @@ -5270,14 +5271,14 @@ return invalid_arg(_E_); } function iter$0(f, a){ - var _tj_ = a.length - 2 | 0, _ti_ = 0; - if(_tj_ >= 0){ - var i = _ti_; + var _tl_ = a.length - 2 | 0, _tk_ = 0; + if(_tl_ >= 0){ + var i = _tk_; for(;;){ caml_call1(f, a[1 + i]); - var _tk_ = i + 1 | 0; - if(_tj_ === i) break; - i = _tk_; + var _tm_ = i + 1 | 0; + if(_tl_ === i) break; + i = _tm_; } } return; @@ -5287,15 +5288,15 @@ if(0 === l) return [0]; var r = caml_make_vect(l, caml_call1(f, a[1])), - _tg_ = l - 1 | 0, - _tf_ = 1; - if(_tg_ >= 1){ - var i = _tf_; + _ti_ = l - 1 | 0, + _th_ = 1; + if(_ti_ >= 1){ + var i = _th_; for(;;){ r[1 + i] = caml_call1(f, a[1 + i]); - var _th_ = i + 1 | 0; - if(_tg_ === i) break; - i = _th_; + var _tj_ = i + 1 | 0; + if(_ti_ === i) break; + i = _tj_; } } return r; @@ -5342,20 +5343,20 @@ function maxson(l, i){ var i31 = ((i + i | 0) + i | 0) + 1 | 0, x = [0, i31]; if((i31 + 2 | 0) < l){ - var _s__ = i31 + 1 | 0, _s$_ = caml_check_bound(a, _s__)[1 + _s__]; - if(caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _s$_) < 0) + var _ta_ = i31 + 1 | 0, _tb_ = caml_check_bound(a, _ta_)[1 + _ta_]; + if(caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _tb_) < 0) x[1] = i31 + 1 | 0; var - _ta_ = i31 + 2 | 0, - _tb_ = caml_check_bound(a, _ta_)[1 + _ta_], - _tc_ = x[1]; - if(caml_call2(cmp, caml_check_bound(a, _tc_)[1 + _tc_], _tb_) < 0) + _tc_ = i31 + 2 | 0, + _td_ = caml_check_bound(a, _tc_)[1 + _tc_], + _te_ = x[1]; + if(caml_call2(cmp, caml_check_bound(a, _te_)[1 + _te_], _td_) < 0) x[1] = i31 + 2 | 0; return x[1]; } if((i31 + 1 | 0) < l){ - var _td_ = i31 + 1 | 0, _te_ = caml_check_bound(a, _td_)[1 + _td_]; - if(0 > caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _te_)) + var _tf_ = i31 + 1 | 0, _tg_ = caml_check_bound(a, _tf_)[1 + _tf_]; + if(0 > caml_call2(cmp, caml_check_bound(a, i31)[1 + i31], _tg_)) return i31 + 1 | 0; } if(i31 < l) return i31; @@ -5366,8 +5367,8 @@ for(;;){ var j = maxson(l, i$0); if(0 >= caml_call2(cmp, caml_check_bound(a, j)[1 + j], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _s9_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _s9_; + var _s$_ = caml_check_bound(a, j)[1 + j]; + caml_check_bound(a, i$0)[1 + i$0] = _s$_; i$0 = j; } } @@ -5384,13 +5385,13 @@ function bubbledown(l, i){ var i$0 = i; for(;;){ - var j = maxson(l, i$0), _s8_ = caml_check_bound(a, j)[1 + j]; - caml_check_bound(a, i$0)[1 + i$0] = _s8_; + var j = maxson(l, i$0), _s__ = caml_check_bound(a, j)[1 + j]; + caml_check_bound(a, i$0)[1 + i$0] = _s__; i$0 = j; } } function bubble(l, i){ - try{var _s7_ = bubbledown(l, i); return _s7_;} + try{var _s9_ = bubbledown(l, i); return _s9_;} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Bottom) throw caml_maybe_attach_backtrace(exn, 0); @@ -5405,32 +5406,32 @@ if(i$0 === father) throw caml_maybe_attach_backtrace([0, Assert_failure, _G_], 1); if(0 <= caml_call2(cmp, caml_check_bound(a, father)[1 + father], e)){caml_check_bound(a, i$0)[1 + i$0] = e; return;} - var _s6_ = caml_check_bound(a, father)[1 + father]; - caml_check_bound(a, i$0)[1 + i$0] = _s6_; + var _s8_ = caml_check_bound(a, father)[1 + father]; + caml_check_bound(a, i$0)[1 + i$0] = _s8_; if(0 >= father){caml_check_bound(a, 0)[1] = e; return;} i$0 = father; } } - var l = a.length - 1, _s2_ = ((l + 1 | 0) / 3 | 0) - 1 | 0; - if(_s2_ >= 0){ - var i$0 = _s2_; + var l = a.length - 1, _s4_ = ((l + 1 | 0) / 3 | 0) - 1 | 0; + if(_s4_ >= 0){ + var i$0 = _s4_; for(;;){ trickle(l, i$0, caml_check_bound(a, i$0)[1 + i$0]); - var _s5_ = i$0 - 1 | 0; + var _s7_ = i$0 - 1 | 0; if(0 === i$0) break; - i$0 = _s5_; + i$0 = _s7_; } } - var _s3_ = l - 1 | 0; - if(_s3_ >= 2){ - var i = _s3_; + var _s5_ = l - 1 | 0; + if(_s5_ >= 2){ + var i = _s5_; for(;;){ var e$0 = caml_check_bound(a, i)[1 + i]; a[1 + i] = caml_check_bound(a, 0)[1]; trickleup(bubble(i, 0), e$0); - var _s4_ = i - 1 | 0; + var _s6_ = i - 1 | 0; if(2 === i) break; - i = _s4_; + i = _s6_; } } if(1 < l){ @@ -5464,15 +5465,15 @@ lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; - var t = lexbuf[10], _s0_ = t.length - 2 | 0, _sZ_ = 0; - if(_s0_ >= 0){ - var i = _sZ_; + var t = lexbuf[10], _s2_ = t.length - 2 | 0, _s1_ = 0; + if(_s2_ >= 0){ + var i = _s1_; for(;;){ var v = caml_check_bound(t, i)[1 + i]; if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; - var _s1_ = i + 1 | 0; - if(_s0_ === i) break; - i = _s1_; + var _s3_ = i + 1 | 0; + if(_s2_ === i) break; + i = _s3_; } } } @@ -5486,11 +5487,11 @@ else var with_positions = 1; var - _sV_ = with_positions ? zero_pos : dummy_pos, - _sW_ = with_positions ? zero_pos : dummy_pos, - _sX_ = caml_create_bytes(512); + _sX_ = with_positions ? zero_pos : dummy_pos, + _sY_ = with_positions ? zero_pos : dummy_pos, + _sZ_ = caml_create_bytes(512); return [0, - function(_sY_){return lex_refill(f, _sX_, _sY_);}, + function(_s0_){return lex_refill(f, _sZ_, _s0_);}, caml_create_bytes(1024), 0, 0, @@ -5500,8 +5501,8 @@ 0, 0, [0], - _sW_, - _sV_]; + _sY_, + _sX_]; } function from_channel(with_positions, ic){ return from_function @@ -5513,8 +5514,8 @@ else var with_positions = 1; var - _sT_ = with_positions ? zero_pos : dummy_pos, - _sU_ = with_positions ? zero_pos : dummy_pos; + _sV_ = with_positions ? zero_pos : dummy_pos, + _sW_ = with_positions ? zero_pos : dummy_pos; return [0, function(lexbuf){lexbuf[9] = 1; return 0;}, of_string(s), @@ -5526,8 +5527,8 @@ 0, 1, [0], - _sU_, - _sT_]; + _sW_, + _sV_]; } function lexeme(lexbuf){ var len = lexbuf[6] - lexbuf[5] | 0; @@ -5542,30 +5543,30 @@ function create(l, v, r){ if(l) var h = l[4], hl = h; else var hl = 0; if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - var _sS_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _sS_]; + var _sU_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sU_]; } function bal(l, v, r){ if(l) var h = l[4], hl = h; else var hl = 0; if(r) var h$0 = r[4], hr = h$0; else var hr = 0; if((hr + 2 | 0) < hl){ if(! l) return invalid_arg(_J_); - var lr = l[3], lv = l[2], ll = l[1], _sN_ = height(lr); - if(_sN_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + var lr = l[3], lv = l[2], ll = l[1], _sP_ = height(lr); + if(_sP_ <= height(ll)) return create(ll, lv, create(lr, v, r)); if(! lr) return invalid_arg(_I_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _sO_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _sO_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _sQ_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _sQ_); } if((hl + 2 | 0) >= hr){ - var _sR_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _sR_]; + var _sT_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _sT_]; } if(! r) return invalid_arg(_L_); - var rr = r[3], rv = r[2], rl = r[1], _sP_ = height(rl); - if(_sP_ <= height(rr)) return create(create(l, v, rl), rv, rr); + var rr = r[3], rv = r[2], rl = r[1], _sR_ = height(rl); + if(_sR_ <= height(rr)) return create(create(l, v, rl), rv, rr); if(! rl) return invalid_arg(_K_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _sQ_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _sQ_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _sS_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _sS_); } function add(x, t){ if(! t) return [0, 0, x, 0, 1]; @@ -5668,13 +5669,13 @@ , find_last_opt]; } - function _M_(_sL_){ - var _sM_ = Make(_sL_); + function _M_(_sN_){ + var _sO_ = Make(_sN_); return [0, - _sM_[17], + _sO_[17], , , - _sM_[4], + _sO_[4], , , , @@ -5684,7 +5685,7 @@ , , , - _sM_[31], + _sO_[31], , , , @@ -5693,7 +5694,7 @@ , , , - _sM_[39], + _sO_[39], , , , @@ -5706,7 +5707,7 @@ , , , - _sM_[50]]; + _sO_[50]]; } function create(param){return [0, 0, 0];} function clear(s){s[1] = 0; s[2] = 0; return;} @@ -5742,18 +5743,18 @@ return [0, content]; } function take(q){ - var _sK_ = q[2]; - if(! _sK_) throw caml_maybe_attach_backtrace(Empty, 1); - if(_sK_[2]){var next = _sK_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} + var _sM_ = q[2]; + if(! _sM_) throw caml_maybe_attach_backtrace(Empty, 1); + if(_sM_[2]){var next = _sM_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return;} clear$0(q); return; } function take_opt(q){ - var _sJ_ = q[2]; - if(! _sJ_) return 0; - var content = _sJ_[1]; - if(_sJ_[2]){ - var next = _sJ_[2]; + var _sL_ = q[2]; + if(! _sL_) return 0; + var content = _sL_[1]; + if(_sL_[2]){ + var next = _sL_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return [0, content]; @@ -5811,14 +5812,14 @@ return 0; } function add_substring(b, s, offset, len){ - var _sG_ = offset < 0 ? 1 : 0; - if(_sG_) - var _sH_ = _sG_; + var _sI_ = offset < 0 ? 1 : 0; + if(_sI_) + var _sJ_ = _sI_; else var - _sI_ = len < 0 ? 1 : 0, - _sH_ = _sI_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_sH_) invalid_arg(_S_); + _sK_ = len < 0 ? 1 : 0, + _sJ_ = _sK_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_sJ_) invalid_arg(_S_); var new_position = b[2] + len | 0; if(b[3] < new_position) resize(b, len); caml_blit_string(s, offset, b[1], b[2], len); @@ -6454,8 +6455,8 @@ var rest2$7 = ty2[2], ty2$0 = ty2[1], - _sF_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _sF_]; + _sH_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _sH_]; case 10: break a; case 11: @@ -6628,10 +6629,10 @@ throw caml_maybe_attach_backtrace(Type_mismatch, 1); } function type_format(fmt, fmtty){ - var _sE_ = type_format_gen(fmt, fmtty); - if(typeof _sE_[2] !== "number") + var _sG_ = type_format_gen(fmt, fmtty); + if(typeof _sG_[2] !== "number") throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _sE_[1]; + var fmt$0 = _sG_[1]; return fmt$0; } function type_format_gen(fmt, fmtty){ @@ -6850,8 +6851,8 @@ fmt_rest$13 = fmt[3], sub_fmtty$1 = fmt[2], pad_opt$0 = fmt[1], - _sD_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _sD_)) + _sF_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _sF_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), @@ -6987,11 +6988,11 @@ var sub_fmtty$0 = ign[2], pad_opt$0 = ign[1], - _sC_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _sC_[2], + _sE_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _sE_[2], fmtty$1 = match$0[2], fmt$1 = match$0[1], - sub_fmtty$1 = _sC_[1]; + sub_fmtty$1 = _sE_[1]; return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; case 10: return type_ignored_param_one(ign, fmt, fmtty); @@ -7151,11 +7152,11 @@ sub_fmtty_rest$17 = sub_fmtty[3], sub2_fmtty$2 = sub_fmtty[2], sub1_fmtty$0 = sub_fmtty[1], - _sA_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _sA_)) + _sC_ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _sC_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _sB_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _sB_)) + var _sD_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _sD_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), @@ -7239,7 +7240,7 @@ padty$0 = 0 <= width ? padty : 0, width$0 = abs(width); if(width$0 <= len) return str; - var _sz_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _sz_); + var _sB_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _sB_); switch(padty$0){ case 0: blit_string(str, 0, res, 0, len); break; @@ -7466,14 +7467,14 @@ } function transform_int_alt(iconv, s){ if(13 > iconv) return s; - var n = [0, 0], _su_ = caml_ml_string_length(s) - 1 | 0, _st_ = 0; - if(_su_ >= 0){ - var i$0 = _st_; + var n = [0, 0], _sw_ = caml_ml_string_length(s) - 1 | 0, _sv_ = 0; + if(_sw_ >= 0){ + var i$0 = _sv_; for(;;){ if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _sy_ = i$0 + 1 | 0; - if(_su_ === i$0) break; - i$0 = _sy_; + var _sA_ = i$0 + 1 | 0; + if(_sw_ === i$0) break; + i$0 = _sA_; } } var @@ -7485,18 +7486,18 @@ function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} var left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _sw_ = caml_ml_string_length(s) - 1 | 0, - _sv_ = 0; - if(_sw_ >= 0){ - var i = _sv_; + _sy_ = caml_ml_string_length(s) - 1 | 0, + _sx_ = 0; + if(_sy_ >= 0){ + var i = _sx_; for(;;){ var c = caml_string_unsafe_get(s, i); if(9 < c - 48 >>> 0) put(c); else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} - var _sx_ = i + 1 | 0; - if(_sw_ === i) break; - i = _sx_; + var _sz_ = i + 1 | 0; + if(_sy_ === i) break; + i = _sz_; } } return unsafe_to_string(buf); @@ -7534,13 +7535,13 @@ var i$0 = i; for(;;){ if(i$0 === len) return 0; - var _ss_ = caml_string_get(str, i$0) - 46 | 0; + var _su_ = caml_string_get(str, i$0) - 46 | 0; a: { - if(23 < _ss_ >>> 0){ - if(55 === _ss_) break a; + if(23 < _su_ >>> 0){ + if(55 === _su_) break a; } - else if(21 < _ss_ - 1 >>> 0) break a; + else if(21 < _su_ - 1 >>> 0) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -7698,9 +7699,9 @@ fmt$0 = rest$16; break; case 18: - var _sq_ = fmt$0[1]; - if(0 === _sq_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _sq_[1][1]; + var _ss_ = fmt$0[1]; + if(0 === _ss_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _ss_[1][1]; let acc = acc$0, k = k$0, rest = rest$17; var k$1 = @@ -7710,7 +7711,7 @@ fmt$0 = fmt$1; } else{ - var rest$18 = fmt$0[2], fmt$2 = _sq_[1][1]; + var rest$18 = fmt$0[2], fmt$2 = _ss_[1][1]; let acc = acc$0, k = k$0, rest = rest$18; var k$2 = @@ -7747,12 +7748,12 @@ rest$23 = fmt$0[3], f = fmt$0[2], arity = fmt$0[1], - _sr_ = caml_call1(f, 0); + _st_ = caml_call1(f, 0); if(counter >= 50) return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _sr_]); + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _st_]); var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _sr_); + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _st_); } } } @@ -7885,7 +7886,7 @@ return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; case 10: var rest$9 = fmtty[1]; - return function(param, _sp_){ + return function(param, _sr_){ return make_from_fmtty(k, acc, rest$9, fmt);}; case 11: var rest$10 = fmtty[1]; @@ -7907,11 +7908,11 @@ return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); } function make_invalid_arg(counter, k, acc, fmt){ - var _so_ = [8, acc, _bG_]; + var _sq_ = [8, acc, _bG_]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _so_, fmt]); + return caml_trampoline_return(make_printf$0, [0, k, _sq_, fmt]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _so_, fmt); + return make_printf$0(counter$0, k, _sq_, fmt); } function make_padding(k, acc, fmt, pad, trans){ if(typeof pad === "number") @@ -8068,11 +8069,11 @@ return function(x){ return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; } - var _sn_ = [4, acc, f]; + var _sp_ = [4, acc, f]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _sn_, rest]); + return caml_trampoline_return(make_printf$0, [0, k, _sp_, rest]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _sn_, rest); + return make_printf$0(counter$0, k, _sp_, rest); } function make_custom(k, acc, rest, arity, f){ return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); @@ -8230,13 +8231,13 @@ else try{ var - _sl_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _sl_; + _sn_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _sn_; } - catch(_sm_){ - var _sj_ = caml_wrap_exception(_sm_); - if(_sj_[1] !== Failure) throw caml_maybe_attach_backtrace(_sj_, 0); - var _sk_ = invalid_box(0), indent = _sk_; + catch(_so_){ + var _sl_ = caml_wrap_exception(_so_); + if(_sl_[1] !== Failure) throw caml_maybe_attach_backtrace(_sl_, 0); + var _sm_ = invalid_box(0), indent = _sm_; } var exp_end = parse_spaces(nend); if(exp_end !== len) invalid_box(0); @@ -8262,7 +8263,7 @@ fmt); } function fprintf(oc, fmt){ - return kfprintf(function(_si_){return 0;}, oc, fmt); + return kfprintf(function(_sk_){return 0;}, oc, fmt); } function eprintf(fmt){return fprintf(stderr, fmt);} function ksprintf(k, param){ @@ -8288,8 +8289,8 @@ } function other_fields(x, i){ if(x.length - 1 <= i) return _bQ_; - var _sg_ = other_fields(x, i + 1 | 0), _sh_ = field(x, i); - return caml_call2(sprintf(_bR_), _sh_, _sg_); + var _si_ = other_fields(x, i + 1 | 0), _sj_ = field(x, i); + return caml_call2(sprintf(_bR_), _sj_, _si_); } function fields(x){ var match = x.length - 1; @@ -8300,10 +8301,10 @@ case 1: return _bU_; default: - var _sf_ = field(x, 1); return caml_call1(sprintf(_bV_), _sf_); + var _sh_ = field(x, 1); return caml_call1(sprintf(_bV_), _sh_); } - var _sd_ = other_fields(x, 2), _se_ = field(x, 1); - return caml_call2(sprintf(_bS_), _se_, _sd_); + var _sf_ = other_fields(x, 2), _sg_ = field(x, 1); + return caml_call2(sprintf(_bS_), _sg_, _sf_); } function use_printers(x){ function conv(param){ @@ -8313,7 +8314,7 @@ var tl = param$0[2], hd = param$0[1]; a: { - try{var val = caml_call1(hd, x);}catch(_sc_){break a;} + try{var val = caml_call1(hd, x);}catch(_se_){break a;} if(val){var s = val[1]; return [0, s];} } param$0 = tl; @@ -8358,8 +8359,8 @@ return s; } function convert_raw_backtrace(bt){ - var _sb_ = [0, caml_convert_raw_backtrace(bt)]; - return _sb_; + var _sd_ = [0, caml_convert_raw_backtrace(bt)]; + return _sd_; } function format_backtrace_slot(pos, slot){ function info(is_raise){ @@ -8367,32 +8368,32 @@ } if(0 === slot[0]){ var - _r5_ = slot[5], - _r6_ = slot[4], - _r7_ = slot[3], - _r8_ = slot[6] ? _b5_ : _b7_, - _r9_ = slot[2], - _r__ = slot[7], - _r$_ = info(slot[1]); + _r7_ = slot[5], + _r8_ = slot[4], + _r9_ = slot[3], + _r__ = slot[6] ? _b5_ : _b7_, + _r$_ = slot[2], + _sa_ = slot[7], + _sb_ = info(slot[1]); return [0, caml_call7 - (sprintf(_b6_), _r$_, _r__, _r9_, _r8_, _r7_, _r6_, _r5_)]; + (sprintf(_b6_), _sb_, _sa_, _r$_, _r__, _r9_, _r8_, _r7_)]; } if(slot[1]) return 0; - var _sa_ = info(0); - return [0, caml_call1(sprintf(_b8_), _sa_)]; + var _sc_ = info(0); + return [0, caml_call1(sprintf(_b8_), _sc_)]; } function print_exception_backtrace(outchan, backtrace){ if(! backtrace) return fprintf(outchan, _b__); - var a = backtrace[1], _r3_ = a.length - 2 | 0, _r2_ = 0; - if(_r3_ >= 0){ - var i = _r2_; + var a = backtrace[1], _r5_ = a.length - 2 | 0, _r4_ = 0; + if(_r5_ >= 0){ + var i = _r4_; for(;;){ var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); if(match){var str = match[1]; caml_call1(fprintf(outchan, _b9_), str);} - var _r4_ = i + 1 | 0; - if(_r3_ === i) break; - i = _r4_; + var _r6_ = i + 1 | 0; + if(_r5_ === i) break; + i = _r6_; } } return; @@ -8407,64 +8408,64 @@ old_printers = get(printers), new_printers = [0, fn, old_printers], success = compare_and_set(printers, old_printers, new_printers), - _r1_ = 1 - success; - if(! _r1_) return _r1_; + _r3_ = 1 - success; + if(! _r3_) return _r3_; } } var errors = _b$_.slice(); function default_uncaught_exception_han(exn, raw_backtrace){ - var _rZ_ = to_string$0(exn); - caml_call1(eprintf(_ca_), _rZ_); + var _r1_ = to_string$0(exn); + caml_call1(eprintf(_ca_), _r1_); print_raw_backtrace(stderr, raw_backtrace); var status = caml_ml_debug_info_status(0); if(status < 0){ - var _r0_ = abs(status); - prerr_endline(caml_check_bound(errors, _r0_)[1 + _r0_]); + var _r2_ = abs(status); + prerr_endline(caml_check_bound(errors, _r2_)[1 + _r2_]); } return _k_(stderr); } var empty_backtrace = [0]; function try_get_raw_backtrace(param){ - var _rY_ = caml_get_exception_raw_backtrace(0); - return _rY_; + var _r0_ = caml_get_exception_raw_backtrace(0); + return _r0_; } function handle_uncaught_exception(exn, debugger_in_use){ try{ var raw_backtrace = debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_rX_){} + try{do_at_exit(0);}catch(_rZ_){} try{ var - _rV_ = default_uncaught_exception_han(exn, raw_backtrace), - _rU_ = _rV_; + _rX_ = default_uncaught_exception_han(exn, raw_backtrace), + _rW_ = _rX_; } catch(exn$1){ var exn$0 = caml_wrap_exception(exn$1), raw_backtrace$0 = try_get_raw_backtrace(0), - _rS_ = to_string$0(exn); - caml_call1(eprintf(_cc_), _rS_); + _rU_ = to_string$0(exn); + caml_call1(eprintf(_cc_), _rU_); print_raw_backtrace(stderr, raw_backtrace); - var _rT_ = to_string$0(exn$0); - caml_call1(eprintf(_cd_), _rT_); + var _rV_ = to_string$0(exn$0); + caml_call1(eprintf(_cd_), _rV_); print_raw_backtrace(stderr, raw_backtrace$0); - var _rU_ = _k_(stderr); + var _rW_ = _k_(stderr); } - return _rU_; + return _rW_; } - catch(_rW_){ - var _rR_ = caml_wrap_exception(_rW_); - if(_rR_ === Out_of_memory) return prerr_endline(_cb_); - throw caml_maybe_attach_backtrace(_rR_, 0); + catch(_rY_){ + var _rT_ = caml_wrap_exception(_rY_); + if(_rT_ === Out_of_memory) return prerr_endline(_cb_); + throw caml_maybe_attach_backtrace(_rT_, 0); } } function handle_uncaught_exception$0(exn, debugger_in_use){ try{ - var _rP_ = handle_uncaught_exception(exn, debugger_in_use); - return _rP_; + var _rR_ = handle_uncaught_exception(exn, debugger_in_use); + return _rR_; } - catch(_rQ_){return 0;} + catch(_rS_){return 0;} } caml_register_named_value ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); @@ -8490,10 +8491,10 @@ } function extract(d){ var - _rM_ = caml_string_get(d, 3) << 24, - _rN_ = caml_string_get(d, 2) << 16, - _rO_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _rO_ | 0) + _rN_ | 0) + _rM_ | 0; + _rO_ = caml_string_get(d, 3) << 24, + _rP_ = caml_string_get(d, 2) << 16, + _rQ_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _rQ_ | 0) + _rP_ | 0) + _rO_ | 0; } var seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, @@ -8501,26 +8502,26 @@ i$0 = 0; for(;;){ caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _rL_ = i$0 + 1 | 0; + var _rN_ = i$0 + 1 | 0; if(54 === i$0) break; - i$0 = _rL_; + i$0 = _rN_; } - var accu = [0, _cg_], _rG_ = 54 + max(55, l) | 0, _rF_ = 0; - if(_rG_ >= 0){ - var i = _rF_; + var accu = [0, _cg_], _rI_ = 54 + max(55, l) | 0, _rH_ = 0; + if(_rI_ >= 0){ + var i = _rH_; for(;;){ var j = i % 55 | 0, k = caml_mod(i, l), - _rH_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _rH_); + _rJ_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _rJ_); var - _rI_ = extract(accu[1]), - _rJ_ = (caml_check_bound(s[1], j)[1 + j] ^ _rI_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _rJ_; - var _rK_ = i + 1 | 0; - if(_rG_ === i) break; - i = _rK_; + _rK_ = extract(accu[1]), + _rL_ = (caml_check_bound(s[1], j)[1 + j] ^ _rK_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _rL_; + var _rM_ = i + 1 | 0; + if(_rI_ === i) break; + i = _rM_; } } s[2] = 0; @@ -8540,16 +8541,16 @@ function bits(s){ s[2] = (s[2] + 1 | 0) % 55 | 0; var - _rC_ = s[2], - curval = caml_check_bound(s[1], _rC_)[1 + _rC_], - _rD_ = (s[2] + 24 | 0) % 55 | 0, + _rE_ = s[2], + curval = caml_check_bound(s[1], _rE_)[1 + _rE_], + _rF_ = (s[2] + 24 | 0) % 55 | 0, newval = - caml_check_bound(s[1], _rD_)[1 + _rD_] + caml_check_bound(s[1], _rF_)[1 + _rF_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30 = newval & 1073741823, - _rE_ = s[2]; - caml_check_bound(s[1], _rE_)[1 + _rE_] = newval30; + _rG_ = s[2]; + caml_check_bound(s[1], _rG_)[1 + _rG_] = newval30; return newval30; } var default$0 = [0, _ch_.slice(), 0]; @@ -8557,16 +8558,16 @@ function self_init(param){return full_init$0(caml_sys_random_seed(0));} function get_state(param){return copy$0(default$0);} function ongoing_traversal(h){ - var _rA_ = h.length - 1 < 4 ? 1 : 0, _rB_ = _rA_ || (h[4] < 0 ? 1 : 0); - return _rB_; + var _rC_ = h.length - 1 < 4 ? 1 : 0, _rD_ = _rC_ || (h[4] < 0 ? 1 : 0); + return _rD_; } - try{var _kr_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _kr_;} - catch(_ry_){ - var _ci_ = caml_wrap_exception(_ry_); + try{var _ks_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _ks_;} + catch(_rA_){ + var _ci_ = caml_wrap_exception(_rA_); if(_ci_ !== Not_found) throw caml_maybe_attach_backtrace(_ci_, 0); - try{var _kq_ = caml_sys_getenv("CAMLRUNPARAM"), _cl_ = _kq_;} - catch(_rz_){ - var _cj_ = caml_wrap_exception(_rz_); + try{var _kr_ = caml_sys_getenv("CAMLRUNPARAM"), _cl_ = _kr_;} + catch(_rB_){ + var _cj_ = caml_wrap_exception(_rB_); if(_cj_ !== Not_found) throw caml_maybe_attach_backtrace(_cj_, 0); var _cl_ = _ck_; } @@ -8574,7 +8575,7 @@ } var randomized_default = contains(params, 82), - prng = [246, function(_rx_){return make_self_init(0);}]; + prng = [246, function(_rz_){return make_self_init(0);}]; function power_2_above(x, n){ var x$0 = x; for(;;){ @@ -8592,10 +8593,10 @@ var s = power_2_above(16, initial_size); if(random) var - _rv_ = caml_obj_tag(prng), - _rw_ = - 250 === _rv_ ? prng[1] : 246 === _rv_ ? force_lazy_block(prng) : prng, - seed = bits(_rw_); + _rx_ = caml_obj_tag(prng), + _ry_ = + 250 === _rx_ ? prng[1] : 246 === _rx_ ? force_lazy_block(prng) : prng, + seed = bits(_ry_); else var seed = 0; return [0, 0, caml_make_vect(s, 0), seed, s]; @@ -8621,26 +8622,26 @@ cell$0 = next; } } - var _rq_ = odata.length - 2 | 0, _rp_ = 0; - if(_rq_ >= 0){ - var i$0 = _rp_; + var _rs_ = odata.length - 2 | 0, _rr_ = 0; + if(_rs_ >= 0){ + var i$0 = _rr_; for(;;){ insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _ru_ = i$0 + 1 | 0; - if(_rq_ === i$0) break; - i$0 = _ru_; + var _rw_ = i$0 + 1 | 0; + if(_rs_ === i$0) break; + i$0 = _rw_; } } if(inplace){ - var _rs_ = nsize - 1 | 0, _rr_ = 0; - if(_rs_ >= 0){ - var i = _rr_; + var _ru_ = nsize - 1 | 0, _rt_ = 0; + if(_ru_ >= 0){ + var i = _rt_; for(;;){ var match = caml_check_bound(ndata_tail, i)[1 + i]; if(match) match[3] = 0; - var _rt_ = i + 1 | 0; - if(_rs_ === i) break; - i = _rt_; + var _rv_ = i + 1 | 0; + if(_ru_ === i) break; + i = _rv_; } } } @@ -8651,8 +8652,8 @@ odata = h[2], osize = odata.length - 1, nsize = osize * 2 | 0, - _ro_ = nsize < max_array_length ? 1 : 0; - if(! _ro_) return _ro_; + _rq_ = nsize < max_array_length ? 1 : 0; + if(! _rq_) return _rq_; var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); h[2] = ndata; return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); @@ -8669,8 +8670,8 @@ bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; caml_check_bound(h[2], i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; - var _rn_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _rn_ ? resize$0(key_index, h) : _rn_; + var _rp_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _rp_ ? resize$0(key_index, h) : _rp_; } function remove_bucket(h, i, key, prec, c){ var prec$1 = prec, prec$0 = c; @@ -8702,8 +8703,8 @@ } function find(h, key){ var - _rm_ = key_index(h, key), - match = caml_check_bound(h[2], _rm_)[1 + _rm_]; + _ro_ = key_index(h, key), + match = caml_check_bound(h[2], _ro_)[1 + _ro_]; if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); var k1 = match[1], d1 = match[2], next1 = match[3]; if(0 === caml_compare(key, k1)) return d1; @@ -8724,8 +8725,8 @@ param$0 = next; } } - var _rl_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _rl_)[1 + _rl_]); + var _rn_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _rn_)[1 + _rn_]); } function id(x){return x;} var zero = 0, unknown = -1; @@ -8754,8 +8755,8 @@ return; } function format_string(state, s){ - var _rk_ = s !== cst$1 ? 1 : 0; - return _rk_ ? format_pp_text(state, caml_ml_string_length(s), s) : _rk_; + var _rm_ = s !== cst$1 ? 1 : 0; + return _rm_ ? format_pp_text(state, caml_ml_string_length(s), s) : _rm_; } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -8787,8 +8788,8 @@ match$0 = match[1], width = match$0[2], box_type = match$0[1], - _rj_ = state[9] < width ? 1 : 0; - if(! _rj_) return _rj_; + _rl_ = state[9] < width ? 1 : 0; + if(! _rl_) return _rl_; if(3 < box_type - 1 >>> 0) return; return break_line(state, width); } @@ -8797,8 +8798,8 @@ if(! match) return; var match$0 = match[1], size = match$0[1], length = match$0[3]; state[12] = state[12] - length | 0; - var _ri_ = id(size); - state[9] = state[9] + _ri_ | 0; + var _rk_ = id(size); + state[9] = state[9] + _rk_ | 0; return; } function format_pp_token(state, size, param){ @@ -8827,8 +8828,8 @@ var width = match$0[1][2]; return break_line(state, width); case 4: - var _rh_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _rh_ ? pp_skip_token(state) : _rh_; + var _rj_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _rj_ ? pp_skip_token(state) : _rj_; default: var match$1 = pop_opt(state[5]); if(! match$1) return; @@ -8935,9 +8936,9 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - _rf_ = is_known(size), - _rg_ = _rf_ || (state[9] <= pending_count ? 1 : 0); - if(! _rg_) return _rg_; + _rh_ = is_known(size), + _ri_ = _rh_ || (state[9] <= pending_count ? 1 : 0); + if(! _ri_) return _ri_; take(state[28]); var size$0 = is_known(size) ? id(size) : pp_infinity; format_pp_token(state, size$0, token); @@ -8968,9 +8969,9 @@ left_total = match$0[1], size = id(queue_elem[1]); if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _re_ = queue_elem[2]; - if(typeof _re_ !== "number") - switch(_re_[0]){ + var _rg_ = queue_elem[2]; + if(typeof _rg_ !== "number") + switch(_rg_[0]){ case 3: if(1 - ty){ queue_elem[1] = id(state[13] + size | 0); @@ -8996,46 +8997,46 @@ var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; return scan_push(state, 0, elem); } - var _rd_ = state[14] === state[15] ? 1 : 0; - return _rd_ ? enqueue_string(state, state[16]) : _rd_; + var _rf_ = state[14] === state[15] ? 1 : 0; + return _rf_ ? enqueue_string(state, state[16]) : _rf_; } function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} function pp_close_box(state, param){ - var _rb_ = 1 < state[14] ? 1 : 0; - if(_rb_){ + var _rd_ = 1 < state[14] ? 1 : 0; + if(_rd_){ if(state[14] < state[15]){ pp_enqueue(state, [0, zero, 1, 0]); set_size(state, 1); set_size(state, 0); } state[14] = state[14] - 1 | 0; - var _rc_ = 0; + var _re_ = 0; } else - var _rc_ = _rb_; - return _rc_; + var _re_ = _rd_; + return _re_; } function pp_open_stag(state, tag_name){ if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _ra_ = state[23]; - if(! _ra_) return _ra_; + var _rc_ = state[23]; + if(! _rc_) return _rc_; var token = [5, tag_name]; return pp_enqueue(state, [0, zero, token, 0]); } function pp_close_stag(state, param){ if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); - var _q__ = state[22]; - if(_q__){ + var _ra_ = state[22]; + if(_ra_){ var match = pop_opt(state[4]); if(match){ var tag_name = match[1]; return caml_call1(state[27], tag_name); } - var _q$_ = 0; + var _rb_ = 0; } else - var _q$_ = _q__; - return _q$_; + var _rb_ = _ra_; + return _rb_; } function pp_close_tag(state, param){return pp_close_stag(state, 0);} function pp_rinit(state){ @@ -9066,8 +9067,8 @@ } } function pp_print_as_size(state, size, s){ - var _q9_ = state[14] < state[15] ? 1 : 0; - return _q9_ ? enqueue_string_as(state, size, s) : _q9_; + var _q$_ = state[14] < state[15] ? 1 : 0; + return _q$_ ? enqueue_string_as(state, size, s) : _q$_; } function pp_print_as(state, isize, s){ return pp_print_as_size(state, id(isize), s); @@ -9090,16 +9091,16 @@ return caml_call1(state[18], 0); } function pp_force_newline(state, param){ - var _q8_ = state[14] < state[15] ? 1 : 0; - return _q8_ ? enqueue_advance(state, [0, zero, 3, 0]) : _q8_; + var _q__ = state[14] < state[15] ? 1 : 0; + return _q__ ? enqueue_advance(state, [0, zero, 3, 0]) : _q__; } function pp_print_custom_break(state, fits, breaks){ var after = fits[3], width = fits[2], before = fits[1], - _q7_ = state[14] < state[15] ? 1 : 0; - if(! _q7_) return _q7_; + _q9_ = state[14] < state[15] ? 1 : 0; + if(! _q9_) return _q9_; var size = id(- state[13] | 0), token = [1, fits, breaks], @@ -9122,8 +9123,8 @@ function display_blanks(state, n){ var n$0 = n; for(;;){ - var _q6_ = 0 < n$0 ? 1 : 0; - if(! _q6_) return _q6_; + var _q8_ = 0 < n$0 ? 1 : 0; + if(! _q8_) return _q8_; if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); caml_call3(state[17], blank_line, 0, 80); var n$1 = n$0 - 80 | 0; @@ -9140,21 +9141,21 @@ var s = param[2]; return symbol_concat(_cD_, symbol_concat(s, _cC_)); } - function default_pp_print_open_tag(_q5_){return 0;} - function default_pp_print_close_tag(_q4_){return 0;} + function default_pp_print_open_tag(_q7_){return 0;} + function default_pp_print_close_tag(_q6_){return 0;} function pp_make_formatter(f, g, h, i, j){ var pp_queue = create$0(0), sys_tok = [0, unknown, _cF_, 0]; add(sys_tok, pp_queue); var scan_stack = create(0); initialize_scan_stack(scan_stack); push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _q1_ = create(0), _q2_ = create(0), _q3_ = create(0); + var pp_margin = 78, _q3_ = create(0), _q4_ = create(0), _q5_ = create(0); return [0, scan_stack, create(0), + _q5_, + _q4_, _q3_, - _q2_, - _q1_, pp_margin, 10, 68, @@ -9185,27 +9186,27 @@ pp_make_formatter (output, flush, - function(_q0_){return 0;}, - function(_qZ_){return 0;}, - function(_qY_){return 0;}); - ppf[19] = function(_qX_){return display_newline(ppf, _qX_);}; - ppf[20] = function(_qW_){return display_blanks(ppf, _qW_);}; - ppf[21] = function(_qV_){return display_blanks(ppf, _qV_);}; + function(_q2_){return 0;}, + function(_q1_){return 0;}, + function(_q0_){return 0;}); + ppf[19] = function(_qZ_){return display_newline(ppf, _qZ_);}; + ppf[20] = function(_qY_){return display_blanks(ppf, _qY_);}; + ppf[21] = function(_qX_){return display_blanks(ppf, _qX_);}; return ppf; } function formatter_of_out_channel(oc){ return make_formatter - (function(_qS_, _qT_, _qU_){ - return output_substring(oc, _qS_, _qT_, _qU_); + (function(_qU_, _qV_, _qW_){ + return output_substring(oc, _qU_, _qV_, _qW_); }, function(param){return _k_(oc);}); } function formatter_of_buffer(b){ return make_formatter - (function(_qP_, _qQ_, _qR_){ - return add_substring(b, _qP_, _qQ_, _qR_); + (function(_qR_, _qS_, _qT_){ + return add_substring(b, _qR_, _qS_, _qT_); }, - function(_qO_){return 0;}); + function(_qQ_){return 0;}); } var pp_buffer_size = 512; function pp_make_buffer(param){return create$1(pp_buffer_size);} @@ -9303,48 +9304,48 @@ indent = match$0[1]; return pp_open_box_gen(ppf, indent, bty); case 2: - var _qF_ = acc[1]; - if(typeof _qF_ !== "number" && 0 === _qF_[0]){ - var _qG_ = _qF_[2]; - if(typeof _qG_ !== "number" && 1 === _qG_[0]){ - var s$0 = acc[2], size = _qG_[2], p$2 = _qF_[1]; + var _qH_ = acc[1]; + if(typeof _qH_ !== "number" && 0 === _qH_[0]){ + var _qI_ = _qH_[2]; + if(typeof _qI_ !== "number" && 1 === _qI_[0]){ + var s$0 = acc[2], size = _qI_[2], p$2 = _qH_[1]; break b; } } - var s = acc[2], p$1 = _qF_; + var s = acc[2], p$1 = _qH_; break a; case 3: - var _qH_ = acc[1]; - if(typeof _qH_ !== "number" && 0 === _qH_[0]){ - var _qI_ = _qH_[2]; - if(typeof _qI_ !== "number" && 1 === _qI_[0]){ - var c$0 = acc[2], size$0 = _qI_[2], p$4 = _qH_[1]; + var _qJ_ = acc[1]; + if(typeof _qJ_ !== "number" && 0 === _qJ_[0]){ + var _qK_ = _qJ_[2]; + if(typeof _qK_ !== "number" && 1 === _qK_[0]){ + var c$0 = acc[2], size$0 = _qK_[2], p$4 = _qJ_[1]; break; } } - var c = acc[2], p$3 = _qH_; + var c = acc[2], p$3 = _qJ_; break c; case 4: - var _qK_ = acc[1]; - if(typeof _qK_ !== "number" && 0 === _qK_[0]){ - var _qL_ = _qK_[2]; - if(typeof _qL_ !== "number" && 1 === _qL_[0]){ - var s$0 = acc[2], size = _qL_[2], p$2 = _qK_[1]; + var _qM_ = acc[1]; + if(typeof _qM_ !== "number" && 0 === _qM_[0]){ + var _qN_ = _qM_[2]; + if(typeof _qN_ !== "number" && 1 === _qN_[0]){ + var s$0 = acc[2], size = _qN_[2], p$2 = _qM_[1]; break b; } } - var s = acc[2], p$1 = _qK_; + var s = acc[2], p$1 = _qM_; break a; case 5: - var _qM_ = acc[1]; - if(typeof _qM_ !== "number" && 0 === _qM_[0]){ - var _qN_ = _qM_[2]; - if(typeof _qN_ !== "number" && 1 === _qN_[0]){ - var c$0 = acc[2], size$0 = _qN_[2], p$4 = _qM_[1]; + var _qO_ = acc[1]; + if(typeof _qO_ !== "number" && 0 === _qO_[0]){ + var _qP_ = _qO_[2]; + if(typeof _qP_ !== "number" && 1 === _qP_[0]){ + var c$0 = acc[2], size$0 = _qP_[2], p$4 = _qO_[1]; break; } } - var c = acc[2], p$3 = _qM_; + var c = acc[2], p$3 = _qO_; break c; case 6: var f$0 = acc[2], p$5 = acc[1]; @@ -9360,8 +9361,8 @@ return invalid_arg(msg); } output_acc$0(ppf, p$4); - var _qJ_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _qJ_); + var _qL_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _qL_); } output_acc$0(ppf, p$3); return pp_print_char(ppf, c); @@ -9380,8 +9381,8 @@ fmt); } function fprintf$0(ppf){ - function _qC_(_qE_){return 0;} - return function(_qD_){return kfprintf$0(_qC_, ppf, _qD_);}; + function _qE_(_qG_){return 0;} + return function(_qF_){return kfprintf$0(_qE_, ppf, _qF_);}; } function kasprintf(k, param){ var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); @@ -9426,8 +9427,8 @@ function is_null(v){return v === null$0 ? 1 : 0;} function is_undefined(v){return v === undefined$0 ? 1 : 0;} function is_none(v){ - var _qB_ = is_null(v); - return _qB_ ? _qB_ : is_undefined(v); + var _qD_ = is_null(v); + return _qD_ ? _qD_ : is_undefined(v); } function to_option(conv, v){ return is_none(v) ? 0 : [0, caml_call1(conv, v)]; @@ -9465,14 +9466,14 @@ return init$0(len, function(i){return caml_call1(conv, v[i]);}); } function of_array(conv, a){ - var len = a.length - 1, ja = create$3(len), _qz_ = len - 1 | 0, _qy_ = 0; - if(_qz_ >= 0){ - var i = _qy_; + var len = a.length - 1, ja = create$3(len), _qB_ = len - 1 | 0, _qA_ = 0; + if(_qB_ >= 0){ + var i = _qA_; for(;;){ ja[i] = caml_call1(conv, caml_check_bound(a, i)[1 + i]); - var _qA_ = i + 1 | 0; - if(_qz_ === i) break; - i = _qA_; + var _qC_ = i + 1 | 0; + if(_qB_ === i) break; + i = _qC_; } } return ja; @@ -9522,8 +9523,8 @@ caml_js_wrap_callback_strict(1, rej)); } function all(arr){return promise.all(arr);} - function _cJ_(_qx_){return caml_string_of_jsstring(_qx_);} - function _cK_(_qw_){return caml_jsstring_of_string(_qw_);} + function _cJ_(_qz_){return caml_string_of_jsstring(_qz_);} + function _cK_(_qy_){return caml_jsstring_of_string(_qy_);} function fut(p){return {fut: p};} function promise$0(f){return f[cst_fut];} function promise$1(f){return f[cst_fut];} @@ -9551,7 +9552,7 @@ function of_list$1(fs){ var arr = of_list$0(promise$1, fs), all$0 = all(arr); function to_list(l){ - return resolve(to_list$0(function(_qv_){return _qv_;}, l)); + return resolve(to_list$0(function(_qx_){return _qx_;}, l)); } return fut(bind(all$0, to_list)); } @@ -9562,11 +9563,11 @@ return fut(then(p, ok$0, error$0)); } function of_promise$0(ok, v){ - return of_promise(ok, function(_qu_){return _qu_;}, v); + return of_promise(ok, function(_qw_){return _qw_;}, v); } function let$0(f, fn){return map$4(fn, f);} function let$1(f, fn){ - return function(_qt_){return bind$0(f, _qt_);} + return function(_qv_){return bind$0(f, _qv_);} (function(e){ if(0 !== e[0]) return return$0(e); var v = e[1]; @@ -9574,7 +9575,7 @@ }); } function let$2(f, fn){ - return map$4(function(_qs_){return map$0(fn, _qs_);}, f); + return map$4(function(_qu_){return map$0(fn, _qu_);}, f); } global["Event"]; function current_target(e){return e["currentTarget"];} @@ -9619,8 +9620,8 @@ var p = path(u), p$0 = starts_with(prefix, p) ? slice(_cN_, 0, p) : p, - _qr_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; - return _qr_; + _qt_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; + return _qt_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -9634,8 +9635,8 @@ try{ var u$0 = new url(u), path = concat$0(0, map$1(encode_seg, segs)); u$0[cst_pathname] = path; - var _qq_ = [0, u$0]; - return _qq_; + var _qs_ = [0, u$0]; + return _qs_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -9681,9 +9682,9 @@ get$0(global, _cT_); global["ClipboardItem"]; global["FormData"]; - function of_jstr(_qp_){return _qp_;} + function of_jstr(_qr_){return _qr_;} function text(r){ - return of_promise$0(function(_qo_){return _qo_;}, r.text()); + return of_promise$0(function(_qq_){return _qq_;}, r.text()); } var headers = global["Headers"]; function of_assoc(init, l){ @@ -9694,7 +9695,7 @@ hs.append(k, v); return 0; } - iter(function(_qn_){return add(hs, _qn_);}, l); + iter(function(_qp_){return add(hs, _qp_);}, l); return hs; } function init$1 @@ -9712,10 +9713,10 @@ signal, param){ var o = {}; - o["body"] = of_option(undefined$0, function(_qm_){return _qm_;}, body); + o["body"] = of_option(undefined$0, function(_qo_){return _qo_;}, body); set_if_some$1(o, _cU_, cache); set_if_some$1(o, _cV_, credentials); - set_if_some(o, _cW_, map(function(_ql_){return _ql_;}, headers)); + set_if_some(o, _cW_, map(function(_qn_){return _qn_;}, headers)); set_if_some$1(o, _cX_, integrity); set_if_some$0(o, _cY_, keepalive); set_if_some$1(o, _cZ_, method); @@ -9723,7 +9724,7 @@ set_if_some$1(o, _c1_, redirect); set_if_some$1(o, _c2_, referrer); set_if_some$1(o, _c3_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_qk_){return _qk_;}, signal); + o["signal"] = of_option(undefined$0, function(_qm_){return _qm_;}, signal); return o; } var request = global["Request"]; @@ -9734,8 +9735,8 @@ global["Response"]; var fetch = global["fetch"]; function request$0(r){ - function _qh_(_qj_){return _qj_;} - return function(_qi_){return of_promise$0(_qh_, _qi_);}(fetch(r)); + function _qj_(_ql_){return _ql_;} + return function(_qk_){return of_promise$0(_qj_, _qk_);}(fetch(r)); } global["MediaStream"]; global["MediaRecorder"]; @@ -9764,9 +9765,9 @@ var keys = param[1]; return of_array(to_jv, keys); } - function bound(lower, upper, opt, _qg_, param){ + function bound(lower, upper, opt, _qi_, param){ if(opt) var sth = opt[1], lower_open = sth; else var lower_open = 0; - if(_qg_) var sth$0 = _qg_[1], upper_open = sth$0; else var upper_open = 0; + if(_qi_) var sth$0 = _qi_[1], upper_open = sth$0; else var upper_open = 0; var c = global["IDBKeyRange"]; return c.bound(lower, upper, ! ! lower_open, ! ! upper_open); } @@ -9779,8 +9780,8 @@ function of_jv(f, j){return [0, j, f];} function error$1(t){return t[1][cst_error];} function result(t){ - var _qf_ = t[1]["result"]; - return caml_call1(t[2], _qf_); + var _qh_ = t[1]["result"]; + return caml_call1(t[2], _qh_); } function on_success(f, t){ function f$0(ev){return caml_call2(f, ev, t);} @@ -9815,14 +9816,14 @@ function f(jv){ return to_option(function(j){return caml_call1(Content[4], j);}, jv); } - return function(_qe_){return of_jv(f, _qe_);} + return function(_qg_){return of_jv(f, _qg_);} (t.get(caml_call1(Key[2], key))); } function get_all(t){ function f(jv){ return to_array(function(c){return caml_call1(Content[4], c);}, jv); } - return function(_qd_){return of_jv(f, _qd_);}(t.getAll()); + return function(_qf_){return of_jv(f, _qf_);}(t.getAll()); } function get_all_keys(query, t){ if(query) @@ -9832,16 +9833,16 @@ function f(jv){ return to_array(function(c){return caml_call1(Content[1][3], c);}, jv); } - return function(_qc_){return of_jv(f, _qc_);} + return function(_qe_){return of_jv(f, _qe_);} (caml_js_meth_call(t, "getAllKeys", args)); } function key(t){ - var _p$_ = t["key"], _qa_ = Key[3]; - return function(_qb_){return to_option(_qa_, _qb_);}(_p$_); + var _qb_ = t["key"], _qc_ = Key[3]; + return function(_qd_){return to_option(_qc_, _qd_);}(_qb_); } function primary_key(t){ - var _p8_ = t["primaryKey"], _p9_ = Content[1][3]; - return function(_p__){return to_option(_p9_, _p__);}(_p8_); + var _p__ = t["primaryKey"], _p$_ = Content[1][3]; + return function(_qa_){return to_option(_p$_, _qa_);}(_p__); } function advance(count, t){t.advance(count); return t;} function continue$0(key, t){ @@ -9864,12 +9865,12 @@ return to_option(of_jv, v); } function delete$0(t){ - function _p6_(param){return 0;} - return function(_p7_){return of_jv(_p6_, _p7_);}(t.delete()); + function _p8_(param){return 0;} + return function(_p9_){return of_jv(_p8_, _p9_);}(t.delete()); } function update(v, t){ - var _p3_ = t.update(caml_call1(Content[3], v)), _p4_ = Content[1][3]; - return function(_p5_){return of_jv(_p4_, _p5_);}(_p3_); + var _p5_ = t.update(caml_call1(Content[3], v)), _p6_ = Content[1][3]; + return function(_p7_){return of_jv(_p6_, _p7_);}(_p5_); } var Cursor_with_value = @@ -9886,30 +9887,30 @@ if(query){ var q = query[1]; if(direction$0) - var d = direction$0[1], _p0_ = [0, q, d]; + var d = direction$0[1], _p2_ = [0, q, d]; else - var _p0_ = [0, q]; - var args = _p0_; + var _p2_ = [0, q]; + var args = _p2_; } else if(direction$0) var d$0 = direction$0[1], args = [0, null$0, d$0]; else var args = [0]; - function f(jv){return to_option(function(_p2_){return _p2_;}, jv);} - return function(_p1_){return of_jv(f, _p1_);} + function f(jv){return to_option(function(_p4_){return _p4_;}, jv);} + return function(_p3_){return of_jv(f, _p3_);} (caml_js_meth_call(t, "openCursor", args)); } return [0, , get, get_all, get_all_keys, , Cursor_with_value, open_cursor]; } function Make_index(P, C, K){ var - get_all_keys = function(_pZ_){return Content_access(C, _pZ_);}(K)[4], + get_all_keys = function(_p1_){return Content_access(C, _p1_);}(K)[4], name = P[1]; return [0, , K, , , , get_all_keys, , , , , , name]; } function Make_object_store(C){ var - include = function(_pY_){return Content_access(C, _pY_);}(C[1]), + include = function(_p0_){return Content_access(C, _p0_);}(C[1]), get = include[2], get_all = include[3], Cursor_with_value = include[6], @@ -9918,24 +9919,24 @@ return function(t){ var key_path = to_jv(I[3][1]), - _pX_ = t.createIndex(_cK_(I[2]), key_path); - return caml_call1(I[1], _pX_);}; + _pZ_ = t.createIndex(_cK_(I[2]), key_path); + return caml_call1(I[1], _pZ_);}; } function index(I){ return function(t){ - var _pW_ = t.index(_cK_(I[2])); - return caml_call1(I[1], _pW_);}; + var _pY_ = t.index(_cK_(I[2])); + return caml_call1(I[1], _pY_);}; } function put(v, key, t){ if(key) var key$0 = key[1], - _pS_ = caml_call1(C[1][2], key$0), - args = [0, caml_call1(C[3], v), _pS_]; + _pU_ = caml_call1(C[1][2], key$0), + args = [0, caml_call1(C[3], v), _pU_]; else var args = [0, caml_call1(C[3], v)]; - var _pT_ = caml_js_meth_call(t, "put", args), _pU_ = C[1][3]; - return function(_pV_){return of_jv(_pU_, _pV_);}(_pT_); + var _pV_ = caml_js_meth_call(t, "put", args), _pW_ = C[1][3]; + return function(_pX_){return of_jv(_pW_, _pX_);}(_pV_); } return [0, C, @@ -9964,8 +9965,8 @@ } function object_store(S){ return function(t){ - var _pR_ = t.objectStore(_cK_(S[2][2])); - return caml_call1(S[1], _pR_);}; + var _pT_ = t.objectStore(_cK_(S[2][2])); + return caml_call1(S[1], _pT_);}; } function create_object_store(S){ return function(opt, db){ @@ -9979,8 +9980,8 @@ opts$0 = [0, [0, _da_, key_path], opts], options = caml_js_object(of_list(opts$0)); info([0, _db_, [0, options, 0]]); - var _pQ_ = db.createObjectStore(_cK_(S[2][2]), options); - return caml_call1(S[1], _pQ_);}; + var _pS_ = db.createObjectStore(_cK_(S[2][2]), options); + return caml_call1(S[1], _pS_);}; } function delete_object_store(t, name){ t.deleteObjectStore(_cK_(name)); @@ -9993,12 +9994,12 @@ return t.transaction(of_list$0(jv_of_store, stores), mode$0); } function object_store_names(t){ - return function(_pP_){return to_array(_cJ_, _pP_);}(t["objectStoreNames"]); + return function(_pR_){return to_array(_cJ_, _pR_);}(t["objectStoreNames"]); } function on_upgrade_needed(f, t){ function f$0(ev){ - function _pM_(_pO_){return _pO_;} - var req = function(_pN_){return of_jv(_pM_, _pN_);}(current_target(ev)); + function _pO_(_pQ_){return _pQ_;} + var req = function(_pP_){return of_jv(_pO_, _pP_);}(current_target(ev)); return caml_call2(f, ev, req); } listen(0, upgrade_needed, f$0, t[1]); @@ -10009,57 +10010,57 @@ var v = version[1], args = [0, name, string_of_int(v)]; else var args = [0, name]; - function _pE_(_pL_, _pK_, _pJ_){ - return caml_js_meth_call(_pL_, _pK_, _pJ_); + function _pG_(_pN_, _pM_, _pL_){ + return caml_js_meth_call(_pN_, _pM_, _pL_); } - function _pF_(_pI_){return _pI_;} - return function(_pG_){return of_jv(_pF_, _pG_);} - (function(_pH_){return _pE_(t, _dc_, _pH_);}(map$3(_cK_, args))); + function _pH_(_pK_){return _pK_;} + return function(_pI_){return of_jv(_pH_, _pI_);} + (function(_pJ_){return _pG_(t, _dc_, _pJ_);}(map$3(_cK_, args))); } function get_factory(opt, param){ if(opt) var sth = opt[1], global$0 = sth; else var global$0 = global; return global$0["indexedDB"]; } - function _dd_(_pC_){ - var _pD_ = Make_object_store(_pC_); + function _dd_(_pE_){ + var _pF_ = Make_object_store(_pE_); return [0, - _pD_[1], + _pF_[1], , - _pD_[7], + _pF_[7], , - _pD_[3], - _pD_[4], + _pF_[3], + _pF_[4], , , - _pD_[8], + _pF_[8], , , - _pD_[12], - _pD_[13], - _pD_[14]]; + _pF_[12], + _pF_[13], + _pF_[14]]; } - function _de_(_pA_, _pz_, _py_){ - var _pB_ = Make_index(_pA_, _pz_, _py_); - return [0, , _pB_[2], , , , , , _pB_[6], , , , _pB_[12]]; + function _de_(_pC_, _pB_, _pA_){ + var _pD_ = Make_index(_pC_, _pB_, _pA_); + return [0, , _pD_[2], , , , , , _pD_[6], , , , _pD_[12]]; } - function symbol$1(_px_, _pw_){return _px_ === _pw_ ? 1 : 0;} - function symbol$2(_pv_, _pu_){return _pv_ < _pu_ ? 1 : 0;} - function symbol$3(_pt_, _ps_){return _ps_ < _pt_ ? 1 : 0;} - function symbol$4(_pr_, _pq_){return _pq_ <= _pr_ ? 1 : 0;} + function symbol$1(_pz_, _py_){return _pz_ === _py_ ? 1 : 0;} + function symbol$2(_px_, _pw_){return _px_ < _pw_ ? 1 : 0;} + function symbol$3(_pv_, _pu_){return _pu_ < _pv_ ? 1 : 0;} + function symbol$4(_pt_, _ps_){return _ps_ <= _pt_ ? 1 : 0;} function reverse_in_place(a){ var len = a.length - 1; if(symbol$3(len, 0)){ - var _pm_ = (len - 1 | 0) / 2 | 0, _pl_ = 0; - if(_pm_ >= 0){ - var k = _pl_; + var _po_ = (len - 1 | 0) / 2 | 0, _pn_ = 0; + if(_po_ >= 0){ + var k = _pn_; for(;;){ - var t = caml_check_bound(a, k)[1 + k], _pn_ = (len - 1 | 0) - k | 0; - a[1 + k] = caml_check_bound(a, _pn_)[1 + _pn_]; - var _po_ = (len - 1 | 0) - k | 0; - caml_check_bound(a, _po_)[1 + _po_] = t; - var _pp_ = k + 1 | 0; - if(_pm_ === k) break; - k = _pp_; + var t = caml_check_bound(a, k)[1 + k], _pp_ = (len - 1 | 0) - k | 0; + a[1 + k] = caml_check_bound(a, _pp_)[1 + _pp_]; + var _pq_ = (len - 1 | 0) - k | 0; + caml_check_bound(a, _pq_)[1 + _pq_] = t; + var _pr_ = k + 1 | 0; + if(_po_ === k) break; + k = _pr_; } } } @@ -10088,6 +10089,28 @@ function filter(p, a){ return filter_map(function(x){return caml_call1(p, x) ? [0, x] : 0;}, a); } + function int_of_color(param){ + return 82908052 <= param + ? 749039939 + <= param + ? 756711075 <= param ? 2 : 6 + : 737308346 <= param ? 4 : 3 + : -588596599 + <= param + ? 4100401 <= param ? 1 : 7 + : -605101559 <= param ? 5 : 0; + } + function code_of_style(param){ + if(typeof param === "number") return 737455525 <= param ? 1 : 0; + if(15681 <= param[1]){var c = param[2]; return 30 + int_of_color(c) | 0;} + var c$0 = param[2]; + return 40 + int_of_color(c$0) | 0; + } + function string_of_style(a){ + var _pm_ = code_of_style(a); + return caml_call1(sprintf(_df_), _pm_); + } + string_of_style(-101336657); function equal$0(a, b){return a === b ? 1 : 0;} function is_empty(param){return param ? 0 : 1;} function symbol$5(f, l){ @@ -10173,7 +10196,7 @@ var y = e[1]; return [1, caml_call1(f, y)]; } - var Get_error = [248, _df_, caml_fresh_oo_id(0)]; + var Get_error = [248, _dg_, caml_fresh_oo_id(0)]; function get_exn(param){ if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); var x = param[1]; @@ -10249,13 +10272,13 @@ , elements]; } - function _dg_(_pj_){ - var _pk_ = Make$0(_pj_); + function _dh_(_pk_){ + var _pl_ = Make$0(_pk_); return [0, - _pk_[4], + _pl_[4], , , - _pk_[7], + _pl_[7], , , , @@ -10300,10 +10323,10 @@ , , , - _pk_[51]]; + _pl_[51]]; } - function length$2(_pi_){return caml_ml_string_length(_pi_);} - function is_empty$0(s){return symbol$0(s, _dh_);} + function length$2(_pj_){return caml_ml_string_length(_pj_);} + function is_empty$0(s){return symbol$0(s, _di_);} function kmp_pattern_length(p){return caml_ml_string_length(p[2]);} function get$2(dir){ return dir @@ -10312,7 +10335,7 @@ return caml_string_get (s, (caml_ml_string_length(s) - i | 0) - 1 | 0); } - : function(_ph_, _pg_){return caml_string_get(_ph_, _pg_);}; + : function(_pi_, _ph_){return caml_string_get(_pi_, _ph_);}; } function kmp_compile(dir, str){ var len = length$2(str), get = get$2(dir); @@ -10323,23 +10346,23 @@ var i = [0, 2], j = [0, 0]; for(;;){ if(! symbol$2(i[1], len)) return [0, failure, str]; - var match = j[1], _pb_ = get(str, j[1]); - if(equal(get(str, i[1] - 1 | 0), _pb_)){ + var match = j[1], _pc_ = get(str, j[1]); + if(equal(get(str, i[1] - 1 | 0), _pc_)){ j[1]++; - var _pd_ = i[1], _pc_ = j[1]; - caml_check_bound(failure, _pd_)[1 + _pd_] = _pc_; + var _pe_ = i[1], _pd_ = j[1]; + caml_check_bound(failure, _pe_)[1 + _pe_] = _pd_; i[1]++; } else if(0 === match){ - var _pe_ = i[1]; - caml_check_bound(failure, _pe_)[1 + _pe_] = 0; + var _pf_ = i[1]; + caml_check_bound(failure, _pf_)[1 + _pf_] = 0; i[1]++; } else{ if(! symbol$3(j[1], 0)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _di_], 1); - var _pf_ = j[1]; - j[1] = caml_check_bound(failure, _pf_)[1 + _pf_]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dj_], 1); + var _pg_ = j[1]; + j[1] = caml_check_bound(failure, _pg_)[1 + _pg_]; } } } @@ -10359,11 +10382,11 @@ j[1]++; else{ var - _pa_ = j[1], - fail_offset = caml_check_bound(pattern[1], _pa_)[1 + _pa_]; + _pb_ = j[1], + fail_offset = caml_check_bound(pattern[1], _pb_)[1 + _pb_]; if(symbol$4(fail_offset, 0)){ if(! symbol$2(fail_offset, j[1])) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dj_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dk_], 1); i[1] = (i[1] + j[1] | 0) - fail_offset | 0; j[1] = fail_offset; } @@ -10387,11 +10410,11 @@ return kmp_find(pattern$0, s, start); } var c = pattern[1]; - try{var _o__ = index_from(s, start, c); return _o__;} - catch(_o$_){ - var _o9_ = caml_wrap_exception(_o$_); - if(_o9_ === Not_found) return -1; - throw caml_maybe_attach_backtrace(_o9_, 0); + try{var _o$_ = index_from(s, start, c); return _o$_;} + catch(_pa_){ + var _o__ = caml_wrap_exception(_pa_); + if(_o__ === Not_found) return -1; + throw caml_maybe_attach_backtrace(_o__, 0); }}; } function prefix$0(pre, s){ @@ -10409,7 +10432,7 @@ } return check(0); } - var Lex_error = [248, _dk_, caml_fresh_oo_id(0)]; + var Lex_error = [248, _dl_, caml_fresh_oo_id(0)]; function lex_error(err){ throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); } @@ -10421,11 +10444,11 @@ return [0, start[2], cnum, enum$0]; } function string2num(s){ - try{var _o7_ = [3, caml_int_of_string(s)]; return _o7_;} - catch(_o8_){ - var _o6_ = caml_wrap_exception(_o8_); - if(_o6_[1] === Failure) return [2, s]; - throw caml_maybe_attach_backtrace(_o6_, 0); + try{var _o8_ = [3, caml_int_of_string(s)]; return _o8_;} + catch(_o9_){ + var _o7_ = caml_wrap_exception(_o9_); + if(_o7_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_o7_, 0); } } function update_pos(lexbuf){ @@ -10441,7 +10464,7 @@ else if(71 > c) return (c - 65 | 0) + 10 | 0; } else if(9 >= c - 48 >>> 0) return c - 48 | 0; - return lex_error(symbol_concat(_dm_, symbol_concat(make$1(1, c), _dl_))); + return lex_error(symbol_concat(_dn_, symbol_concat(make$1(1, c), _dm_))); } function utf8_of_code(buf, idx, u){ var i = [0, idx]; @@ -10497,16 +10520,16 @@ if(c) var c$0 = c[1], - cs = symbol_concat(_do_, symbol_concat(make$1(1, c$0), _dn_)); + cs = symbol_concat(_dp_, symbol_concat(make$1(1, c$0), _do_)); else - var cs = _dr_; + var cs = _ds_; return lex_error (symbol_concat (msg, symbol_concat - (_dq_, + (_dr_, symbol_concat - (offs, symbol_concat(cs, symbol_concat(_dp_, s)))))); + (offs, symbol_concat(cs, symbol_concat(_dq_, s)))))); } function unescape_string(s){ var @@ -10516,76 +10539,76 @@ u1 = [0, 0], u2 = [0, 0], state = [0, 748194550], - _oX_ = l - 1 | 0, - _oW_ = 0; - if(_oX_ >= 0){ - var i = _oW_; + _oY_ = l - 1 | 0, + _oX_ = 0; + if(_oY_ >= 0){ + var i = _oX_; for(;;){ - var _oY_ = state[1]; + var _oZ_ = state[1]; a: - if(308570827 <= _oY_) - if(308570829 <= _oY_) - if(748194550 <= _oY_) - if(945120947 <= _oY_) + if(308570827 <= _oZ_) + if(308570829 <= _oZ_) + if(748194550 <= _oZ_) + if(945120947 <= _oZ_) if(117 === caml_string_get(s, i)) state[1] = 308570827; else - escaping_error(_dt_, s, [0, caml_string_get(s, i)], i); + escaping_error(_du_, s, [0, caml_string_get(s, i)], i); else{ var c = caml_string_get(s, i); if(92 === c) state[1] = 258914209; else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} } - else if(308570830 <= _oY_){ + else if(308570830 <= _oZ_){ state[1] = 748194550; - var _o0_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o0_; + var _o1_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o1_; if(56320 <= u2[1] && 57343 >= u2[1]){ j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); break a; } - escaping_error(_du_, s, 0, i); + escaping_error(_dv_, s, 0, i); } else{ - var _o1_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o1_; + var _o2_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o2_; state[1] = 308570830; } - else if(308570828 <= _oY_){ - var _o2_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _o2_; + else if(308570828 <= _oZ_){ + var _o3_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _o3_; state[1] = 308570829; } else{ u2[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 308570828; } - else if(297481261 <= _oY_) - if(297481263 <= _oY_) - if(308569555 <= _oY_) + else if(297481261 <= _oZ_) + if(297481263 <= _oZ_) + if(308569555 <= _oZ_) if(92 === caml_string_get(s, i)) state[1] = 945120947; else - escaping_error(_dv_, s, [0, caml_string_get(s, i)], i); + escaping_error(_dw_, s, [0, caml_string_get(s, i)], i); else{ - var _o3_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o3_; + var _o4_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o4_; if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} j[1] = utf8_of_code(s$0, j[1], u1[1]); state[1] = 748194550; } - else if(297481262 <= _oY_){ - var _o4_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o4_; + else if(297481262 <= _oZ_){ + var _o5_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o5_; state[1] = 297481263; } else{ - var _o5_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _o5_; + var _o6_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _o6_; state[1] = 297481262; } - else if(297481260 <= _oY_){ + else if(297481260 <= _oZ_){ u1[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 297481261; } @@ -10645,15 +10668,15 @@ j[1] = j[1] + 1 | 0; break b; } - escaping_error(_dw_, s, [0, caml_string_get(s, i)], i); + escaping_error(_dx_, s, [0, caml_string_get(s, i)], i); } } - var _oZ_ = i + 1 | 0; - if(_oX_ === i) break; - i = _oZ_; + var _o0_ = i + 1 | 0; + if(_oY_ === i) break; + i = _o0_; } } - if(748194550 !== state[1]) escaping_error(_ds_, s, 0, l); + if(748194550 !== state[1]) escaping_error(_dt_, s, 0, l); return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; } function engine(tbl, state, buf){ @@ -10662,11 +10685,11 @@ } function Make$1(Compliance){ function read$0(counter, lexbuf){ - var _oV_ = 0; + var _oW_ = 0; if(counter >= 50) - return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _oV_]); + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _oW_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_rec(counter$0, lexbuf, _oV_); + return ocaml_lex_read_rec(counter$0, lexbuf, _oW_); } function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ @@ -10677,9 +10700,9 @@ if(26 >= ocaml_lex_state$1 >>> 0) switch(ocaml_lex_state$1){ case 0: - return _dx_; - case 1: return _dy_; + case 1: + return _dz_; case 2: return 2; case 3: @@ -10694,22 +10717,22 @@ return caml_call1(Compliance[5], 13) ? 13 : lex_error - (symbol_concat(_dA_, symbol_concat(lexeme(lexbuf), _dz_))); + (symbol_concat(_dB_, symbol_concat(lexeme(lexbuf), _dA_))); case 8: return caml_call1(Compliance[5], 14) ? 14 : lex_error - (symbol_concat(_dC_, symbol_concat(lexeme(lexbuf), _dB_))); + (symbol_concat(_dD_, symbol_concat(lexeme(lexbuf), _dC_))); case 9: return caml_call1(Compliance[6], 11) ? 11 : lex_error - (symbol_concat(_dE_, symbol_concat(lexeme(lexbuf), _dD_))); + (symbol_concat(_dF_, symbol_concat(lexeme(lexbuf), _dE_))); case 10: return caml_call1(Compliance[6], 12) ? 12 : lex_error - (symbol_concat(_dG_, symbol_concat(lexeme(lexbuf), _dF_))); + (symbol_concat(_dH_, symbol_concat(lexeme(lexbuf), _dG_))); case 11: return 7; case 12: @@ -10733,10 +10756,10 @@ } return tok; case 18: - var _oU_ = [4, caml_float_of_string(lexeme(lexbuf))]; - return caml_call1(Compliance[2], _oU_); + var _oV_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _oV_); case 19: - return _dH_; + return _dI_; case 20: var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); return [0, unescape_string(s)]; @@ -10770,19 +10793,19 @@ return read$0(counter$3, lexbuf); default: return lex_error - (symbol_concat(_dJ_, symbol_concat(lexeme(lexbuf), _dI_))); + (symbol_concat(_dK_, symbol_concat(lexeme(lexbuf), _dJ_))); } caml_call1(lexbuf[1], lexbuf); ocaml_lex_state$0 = ocaml_lex_state$1; } } function read_comment$0(counter, lexbuf){ - var _oT_ = 88; + var _oU_ = 88; if(counter >= 50) return caml_trampoline_return - (ocaml_lex_read_comment_rec, [0, lexbuf, _oT_]); + (ocaml_lex_read_comment_rec, [0, lexbuf, _oU_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_comment_rec(counter$0, lexbuf, _oT_); + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _oU_); } function read_comment(lexbuf){ return caml_trampoline(read_comment$0(0, lexbuf)); @@ -10803,7 +10826,7 @@ var counter$0 = counter + 1 | 0; return read_comment$0(counter$0, lexbuf); case 2: - return lex_error(_dK_); + return lex_error(_dL_); default: if(counter >= 50) return caml_trampoline_return(read_comment$0, [0, lexbuf]); @@ -10816,7 +10839,7 @@ } return [0, read]; } - var Json_error_info = [248, _dL_, caml_fresh_oo_id(0)]; + var Json_error_info = [248, _dM_, caml_fresh_oo_id(0)]; function create_from_lexbuf(lexbuf, emsg){ var match = error_pos(lexbuf), @@ -10832,81 +10855,81 @@ var is_int = (f | 0) == f ? 1 : 0; if(is_int && Math.abs(f) <= max_json_int){ var int_value = f | 0; - return symbol_concat(string_of_int(int_value), _dM_); + return symbol_concat(string_of_int(int_value), _dN_); } var s = caml_format_float("%.16g", f), s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); if(! contains(s$0, 46) && ! contains(s$0, 101)) - return symbol_concat(s$0, _dN_); + return symbol_concat(s$0, _dO_); return s$0; } function token_error(tok){ if(typeof tok === "number") switch(tok){ case 0: - var err = _dO_; break; - case 1: var err = _dP_; break; - case 2: + case 1: var err = _dQ_; break; - case 3: + case 2: var err = _dR_; break; - case 4: + case 3: var err = _dS_; break; - case 5: + case 4: var err = _dT_; break; - case 6: + case 5: var err = _dU_; break; - case 7: + case 6: var err = _dV_; break; - case 8: + case 7: var err = _dW_; break; - case 9: + case 8: var err = _dX_; break; - case 10: + case 9: var err = _dY_; break; - case 11: + case 10: var err = _dZ_; break; - case 12: + case 11: var err = _d0_; break; - case 13: + case 12: var err = _d1_; break; - default: var err = _d2_; + case 13: + var err = _d2_; break; + default: var err = _d3_; } else switch(tok[0]){ case 0: - var s = tok[1], err = symbol_concat(_d4_, symbol_concat(s, _d3_)); + var s = tok[1], err = symbol_concat(_d5_, symbol_concat(s, _d4_)); break; case 1: var s$0 = tok[1], err = s$0; break; case 2: - var s$1 = tok[1], err = symbol_concat(_d6_, symbol_concat(s$1, _d5_)); + var s$1 = tok[1], err = symbol_concat(_d7_, symbol_concat(s$1, _d6_)); break; case 3: var i = tok[1], - err = symbol_concat(_d8_, symbol_concat(string_of_int(i), _d7_)); + err = symbol_concat(_d9_, symbol_concat(string_of_int(i), _d8_)); break; case 4: var f = tok[1], - err = symbol_concat(_d__, symbol_concat(string_of_float(f), _d9_)); + err = symbol_concat(_d$_, symbol_concat(string_of_float(f), _d__)); break; case 5: - var s$2 = tok[1], err = symbol_concat(_ea_, symbol_concat(s$2, _d$_)); + var s$2 = tok[1], err = symbol_concat(_eb_, symbol_concat(s$2, _ea_)); break; default: var b = tok[1], - _oS_ = b ? _ec_ : _ee_, - err = symbol_concat(_ed_, symbol_concat(_oS_, _eb_)); + _oT_ = b ? _ed_ : _ef_, + err = symbol_concat(_ee_, symbol_concat(_oT_, _ec_)); } return [0, 148000204, err]; } function Make$2(Compliance){ - var Parse_error = [248, _ef_, caml_fresh_oo_id(0)]; + var Parse_error = [248, _eg_, caml_fresh_oo_id(0)]; function json_value(reader){ function token_value(tok){ if(typeof tok === "number") @@ -10957,8 +10980,8 @@ if(typeof tok$0 === "number"){ if(7 === tok$0) return array_values([0, v, acc]); if(10 === tok$0){ - var _oR_ = rev([0, v, acc]); - return caml_call1(Compliance[16], _oR_); + var _oS_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _oS_); } } throw caml_maybe_attach_backtrace @@ -10971,8 +10994,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(10 === tok){ - var _oQ_ = rev([0, v, acc$0]); - return caml_call1(Compliance[16], _oQ_); + var _oR_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _oR_); } } throw caml_maybe_attach_backtrace @@ -10989,8 +11012,8 @@ var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); if(typeof tok$0 === "number"){ if(1 === tok$0){ - var _oP_ = rev([0, v, acc]); - return caml_call1(Compliance[15], _oP_); + var _oQ_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _oQ_); } if(7 === tok$0) return object_values([0, v, acc]); } @@ -11003,8 +11026,8 @@ var v = key_colon_value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(1 === tok){ - var _oO_ = rev([0, v, acc$0]); - return caml_call1(Compliance[15], _oO_); + var _oP_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _oP_); } if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} } @@ -11045,7 +11068,7 @@ ([0, Parse_error, token_error(tok$0)], 1); } if(14 <= tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _eg_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _eh_], 1); } throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); } @@ -11056,8 +11079,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(14 <= tok){ - var _oN_ = rev([0, v, acc$0]); - return caml_call1(Compliance[17], _oN_); + var _oO_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _oO_); } } throw caml_maybe_attach_backtrace @@ -11068,7 +11091,7 @@ var tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(12 === tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _eh_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _ei_], 1); } else if(0 === tok[0]){ var k = tok[1], tok$0 = caml_call1(reader, 0); @@ -11102,7 +11125,7 @@ var exn = caml_wrap_exception(exn$0); if(exn[1] === Parse_error){ var match = exn[2]; - if(typeof match === "number") return _ei_; + if(typeof match === "number") return _ej_; var err = match[2]; return [1, err]; } @@ -11115,22 +11138,22 @@ return [0, Compliance, decode]; } function nibble_to_hex(i){ - var _oM_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_oM_); + var _oN_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_oN_); } function add_hex_byte(add_char, i){ caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); return caml_call1(add_char, nibble_to_hex(i & 15)); } function escape(add_char, add_string, s){ - var l = caml_ml_string_length(s), _oK_ = l - 1 | 0, _oJ_ = 0; - if(_oK_ >= 0){ - var i = _oJ_; + var l = caml_ml_string_length(s), _oL_ = l - 1 | 0, _oK_ = 0; + if(_oL_ >= 0){ + var i = _oK_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - caml_call1(add_string, _ej_); + caml_call1(add_string, _ek_); else{ b: { @@ -11140,17 +11163,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - caml_call1(add_string, _el_); break; - case 1: caml_call1(add_string, _em_); break; - case 2: + case 1: caml_call1(add_string, _en_); break; - case 4: + case 2: caml_call1(add_string, _eo_); break; - case 5: + case 4: caml_call1(add_string, _ep_); break; - case 26: + case 5: caml_call1(add_string, _eq_); break; + case 26: + caml_call1(add_string, _er_); break; case 24: case 25: break c; @@ -11163,12 +11186,12 @@ caml_call1(add_char, caml_string_get(s, i)); break a; } - caml_call1(add_string, _ek_); + caml_call1(add_string, _el_); add_hex_byte(add_char, c); } - var _oL_ = i + 1 | 0; - if(_oK_ === i) break; - i = _oL_; + var _oM_ = i + 1 | 0; + if(_oL_ === i) break; + i = _oM_; } } return; @@ -11176,8 +11199,8 @@ function Make$3(Compliance){ function to_json_string(s){ var buf = create$1(100); - function add_char$0(_oI_){return add_char(buf, _oI_);} - function add_string$0(_oH_){return add_string(buf, _oH_);} + function add_char$0(_oJ_){return add_char(buf, _oJ_);} + function add_string$0(_oI_){return add_string(buf, _oI_);} function add_quote_string(s){ add_char$0(34); escape(add_char$0, add_string$0, s); @@ -11188,68 +11211,68 @@ } function pp_list(sep, ppx, out, l){ function pp_sep(out, param){ - return caml_call1(fprintf$0(out)(_er_), sep); + return caml_call1(fprintf$0(out)(_es_), sep); } return pp_print_list([0, pp_sep], ppx, out, l); } function format(out, json){ - if(typeof json === "number") return pp_print_string(out, _es_); - var _oy_ = json[1]; - if(726928360 <= _oy_){ - if(737456202 === _oy_){var b = json[2]; return pp_print_bool(out, b);} - if(928231259 > _oy_){ - if(848054398 <= _oy_){ + if(typeof json === "number") return pp_print_string(out, _et_); + var _oz_ = json[1]; + if(726928360 <= _oz_){ + if(737456202 === _oz_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _oz_){ + if(848054398 <= _oz_){ var l$0 = json[2]; return l$0 ? caml_call2 - (fprintf$0(out)(_ex_), - function(_oF_, _oG_){ - return pp_list(_ew_, format, _oF_, _oG_); + (fprintf$0(out)(_ey_), + function(_oG_, _oH_){ + return pp_list(_ex_, format, _oG_, _oH_); }, l$0) - : pp_print_string(out, _ey_); + : pp_print_string(out, _ez_); } var l$1 = json[2]; return 0 === l$1 - ? pp_print_string(out, _ez_) + ? pp_print_string(out, _eA_) : caml_call2 - (fprintf$0(out)(_eB_), - function(_oD_, _oE_){ - return pp_list(_eA_, format, _oD_, _oE_); + (fprintf$0(out)(_eC_), + function(_oE_, _oF_){ + return pp_list(_eB_, format, _oE_, _oF_); }, l$1); } - if(963043957 <= _oy_){ + if(963043957 <= _oz_){ var l = json[2]; return l ? caml_call2 - (fprintf$0(out)(_eu_), - function(_oB_, _oC_){ - return pp_list(_et_, format_field, _oB_, _oC_); + (fprintf$0(out)(_ev_), + function(_oC_, _oD_){ + return pp_list(_eu_, format_field, _oC_, _oD_); }, l) - : pp_print_string(out, _ev_); + : pp_print_string(out, _ew_); } } else{ - if(3654863 === _oy_){ + if(3654863 === _oz_){ var i = json[2]; return pp_print_string(out, string_of_int(i)); } - if(365180284 <= _oy_){ - if(708012133 > _oy_){ + if(365180284 <= _oz_){ + if(708012133 > _oz_){ var f = json[2], s$2 = caml_call1(Compliance[8], f); return pp_print_string(out, s$2); } - var _oz_ = json[2], match = _oz_[2], s$0 = _oz_[1]; + var _oA_ = json[2], match = _oA_[2], s$0 = _oA_[1]; if(match){ var json$0 = match[1], s$1 = to_json_string(s$0); - return caml_call3(fprintf$0(out)(_eC_), s$1, format, json$0); + return caml_call3(fprintf$0(out)(_eD_), s$1, format, json$0); } - var _oA_ = to_json_string(s$0); - return caml_call1(fprintf$0(out)(_eD_), _oA_); + var _oB_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_eE_), _oB_); } - if(-752863768 > _oy_){ + if(-752863768 > _oz_){ var s$3 = json[2]; return pp_print_string(out, to_json_string(s$3)); } @@ -11258,18 +11281,18 @@ return pp_print_string(out, s); } function format_field(out, param){ - var json = param[2], name = param[1], _ox_ = to_json_string(name); - return caml_call3(fprintf$0(out)(_eE_), _ox_, format, json); + var json = param[2], name = param[1], _oy_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_eF_), _oy_, format, json); } function pretty_print(out, json){ - return caml_call2(fprintf$0(out)(_eF_), format, json); + return caml_call2(fprintf$0(out)(_eG_), format, json); } function pretty_print_to_string(json){ - return caml_call2(asprintf(_eG_), pretty_print, json); + return caml_call2(asprintf(_eH_), pretty_print, json); } function pretty_print_to_channel(oc, json){ var fmt = formatter_of_out_channel(oc); - return caml_call2(fprintf$0(fmt)(_eH_), pretty_print, json); + return caml_call2(fprintf$0(fmt)(_eI_), pretty_print, json); } return [0, , @@ -11280,9 +11303,9 @@ pretty_print_to_string, pretty_print_to_channel]; } - function _eI_(_ov_){ - var _ow_ = Make$3(_ov_); - return [0, _ow_[5], _ow_[6], _ow_[7]]; + function _eJ_(_ow_){ + var _ox_ = Make$3(_ow_); + return [0, _ox_[5], _ox_[6], _ox_[7]]; } function error$2(msg, json){ throw caml_maybe_attach_backtrace([0, Failure, msg], 1); @@ -11290,58 +11313,58 @@ function Strict(M){ function to_assoc(json){ if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} - return error$2(_eJ_, json); + return error$2(_eK_, json); } function to_string(json){ if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} - return error$2(_eK_, json); + return error$2(_eL_, json); } return [0, , , , to_assoc, , , to_string]; } function null$1(param){return 870828711;} var M = [0, null$1], - _eL_ = Strict(M), - to_assoc = _eL_[4], - to_string$2 = _eL_[7]; + _eM_ = Strict(M), + to_assoc = _eM_[4], + to_string$2 = _eM_[7]; function token_to_string(tok){ if(typeof tok === "number") switch(tok){ case 0: - return _eM_; - case 1: return _eN_; - case 2: + case 1: return _eO_; - case 3: + case 2: return _eP_; - case 4: + case 3: return _eQ_; - case 5: + case 4: return _eR_; - case 6: + case 5: return _eS_; - case 7: + case 6: return _eT_; - case 8: + case 7: return _eU_; - case 9: + case 8: return _eV_; - case 10: + case 9: return _eW_; - case 11: + case 10: return _eX_; - case 12: + case 11: return _eY_; - case 13: + case 12: return _eZ_; - default: return _e0_; + case 13: + return _e0_; + default: return _e1_; } switch(tok[0]){ case 0: var s = tok[1]; return s; case 1: - var err = tok[1]; return symbol_concat(_e2_, symbol_concat(err, _e1_)); + var err = tok[1]; return symbol_concat(_e3_, symbol_concat(err, _e2_)); case 2: var s$0 = tok[1]; return s$0; case 3: @@ -11350,7 +11373,7 @@ var f = tok[1]; return string_of_float(f); case 5: var err$0 = tok[1]; return err$0; - default: var b = tok[1]; return b ? _e3_ : _e4_; + default: var b = tok[1]; return b ? _e4_ : _e5_; } } function Make$4(Lexxer, Parser){ @@ -11359,7 +11382,7 @@ var match = caml_call1(Parser[2], reader); if(0 !== match[0]){var s = match[1]; return [1, s];} var match$0 = match[1]; - if(! match$0) return _e6_; + if(! match$0) return _e7_; var res = match$0[1]; try{var tok = reader(0);} catch(exn$0){ @@ -11369,7 +11392,7 @@ return [1, err]; } if(typeof tok === "number" && 6 === tok) return [0, res]; - return [1, symbol_concat(_e5_, token_to_string(tok))]; + return [1, symbol_concat(_e6_, token_to_string(tok))]; } function read_json_error_info(lexbuf){ var res = read_json(lexbuf); @@ -11408,27 +11431,27 @@ var res = match$0[1]; a: if(stream) - var _or_ = [0, [0, res]]; + var _os_ = [0, [0, res]]; else{ try{var tok = reader(0);} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); - var err = exn[2], _ot_ = [1, err], _or_ = _ot_; + var err = exn[2], _ou_ = [1, err], _os_ = _ou_; break a; } b: { - if(typeof tok === "number" && 6 === tok){var _ou_ = [0, [0, res]]; break b;} - var _ou_ = [1, symbol_concat(_e7_, token_to_string(tok))]; + if(typeof tok === "number" && 6 === tok){var _ov_ = [0, [0, res]]; break b;} + var _ov_ = [1, symbol_concat(_e8_, token_to_string(tok))]; } - var _or_ = _ou_; + var _os_ = _ov_; } - var _os_ = _or_; + var _ot_ = _os_; } else - var _os_ = stream ? _e8_ : _e9_; - var res$0 = _os_; + var _ot_ = stream ? _e9_ : _e__; + var res$0 = _ot_; } else var s$0 = match[1], res$0 = [1, s$0]; @@ -11507,24 +11530,24 @@ } function Make$5(Compliance){ function nibble_to_hex(i){ - var _oq_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_oq_); + var _or_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_or_); } function add_hex_byte(oc, i){ _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); return _j_(oc, nibble_to_hex(i & 15)); } function escape(oc, s){ - function add_char(_op_){return _j_(oc, _op_);} - function add_string(_oo_){return output_string(oc, _oo_);} - var l = caml_ml_string_length(s), _om_ = l - 1 | 0, _ol_ = 0; - if(_om_ >= 0){ - var i = _ol_; + function add_char(_oq_){return _j_(oc, _oq_);} + function add_string(_op_){return output_string(oc, _op_);} + var l = caml_ml_string_length(s), _on_ = l - 1 | 0, _om_ = 0; + if(_on_ >= 0){ + var i = _om_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string(_e__); + add_string(_e$_); else{ b: { @@ -11534,17 +11557,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string(_fa_); break; - case 1: add_string(_fb_); break; - case 2: + case 1: add_string(_fc_); break; - case 4: + case 2: add_string(_fd_); break; - case 5: + case 4: add_string(_fe_); break; - case 26: + case 5: add_string(_ff_); break; + case 26: + add_string(_fg_); break; case 24: case 25: break c; @@ -11557,19 +11580,19 @@ add_char(caml_string_get(s, i)); break a; } - add_string(_e$_); + add_string(_fa_); add_hex_byte(oc, c); } - var _on_ = i + 1 | 0; - if(_om_ === i) break; - i = _on_; + var _oo_ = i + 1 | 0; + if(_on_ === i) break; + i = _oo_; } } return; } function json_to_channel_fmt(oc, json, eol, incr, psep){ - function add_char(_ok_){return _j_(oc, _ok_);} - function add_string(_oj_){return output_string(oc, _oj_);} + function add_char(_ol_){return _j_(oc, _ol_);} + function add_string(_ok_){return output_string(oc, _ok_);} function add_quote_string(s){ add_char(34); escape(oc, s); @@ -11577,13 +11600,13 @@ } function add_int(i){return add_string(string_of_int(i));} function add_float(f){return add_string(caml_call1(Compliance[8], f));} - var psep$0 = symbol_concat(_fg_, psep); + var psep$0 = symbol_concat(_fh_, psep); function fmt(off, value){ - if(typeof value === "number") return add_string(_fh_); - var _oi_ = value[1]; - if(708012133 <= _oi_){ - if(737456202 > _oi_){ - if(726928360 <= _oi_){ + if(typeof value === "number") return add_string(_fi_); + var _oj_ = value[1]; + if(708012133 <= _oj_){ + if(737456202 > _oj_){ + if(726928360 <= _oj_){ var t = value[2], ldr$1 = make$1(off, 32); add_char(40); add_string(eol); @@ -11600,8 +11623,8 @@ add_string(ldr$2); return add_char(62); } - if(928231259 <= _oi_){ - if(963043957 <= _oi_){ + if(928231259 <= _oj_){ + if(963043957 <= _oj_){ var o = value[2], ldr = make$1(off, 32); add_char(123); add_string(eol); @@ -11613,7 +11636,7 @@ var s = value[2]; return add_string(s); } - if(848054398 <= _oi_){ + if(848054398 <= _oj_){ var l = value[2], ldr$0 = make$1(off, 32); add_char(91); add_string(eol); @@ -11625,13 +11648,13 @@ var b = value[2]; return add_string(string_of_bool(b)); } - if(-752863768 === _oi_){var s$0 = value[2]; return add_string(s$0);} - if(3654863 <= _oi_){ - if(365180284 <= _oi_){var f = value[2]; return add_float(f);} + if(-752863768 === _oj_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _oj_){ + if(365180284 <= _oj_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _oi_){var s$1 = value[2]; return add_string(s$1);} + if(-375152890 <= _oj_){var s$1 = value[2]; return add_string(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -11639,7 +11662,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol_concat(_fi_, symbol_concat(eol, ldr)); + newsep = symbol_concat(_fj_, symbol_concat(eol, ldr)); return iter (function(v){ add_string(sep[1]); @@ -11658,7 +11681,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol_concat(_fj_, symbol_concat(eol, ldr)); + newsep = symbol_concat(_fk_, symbol_concat(eol, ldr)); return iter (function(v){ add_string(sep[1]); @@ -11678,11 +11701,11 @@ fmt(0, json); return add_string(eol); } - function json_to_channel(_ob_){ - function _oc_(_oe_, _of_, _og_, _oh_){ - return json_to_channel_fmt(_ob_, _oe_, _of_, _og_, _oh_); + function json_to_channel(_oc_){ + function _od_(_of_, _og_, _oh_, _oi_){ + return json_to_channel_fmt(_oc_, _of_, _og_, _oh_, _oi_); } - return function(_od_){return _oc_(_od_, _fl_, 0, _fk_);}; + return function(_oe_){return _od_(_oe_, _fm_, 0, _fl_);}; } function json_to_file_exn(file, json){ var oc = open_out(file); @@ -11697,24 +11720,24 @@ } function Make$6(Compliance){ function nibble_to_hex(i){ - var _oa_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_oa_); + var _ob_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_ob_); } function add_hex_byte(buf, i){ add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); return add_char(buf, nibble_to_hex(i & 15)); } function escape(buf, s){ - function add_char$0(_n$_){return add_char(buf, _n$_);} - function add_string$0(_n__){return add_string(buf, _n__);} - var l = caml_ml_string_length(s), _n8_ = l - 1 | 0, _n7_ = 0; - if(_n8_ >= 0){ - var i = _n7_; + function add_char$0(_oa_){return add_char(buf, _oa_);} + function add_string$0(_n$_){return add_string(buf, _n$_);} + var l = caml_ml_string_length(s), _n9_ = l - 1 | 0, _n8_ = 0; + if(_n9_ >= 0){ + var i = _n8_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string$0(_fm_); + add_string$0(_fn_); else{ b: { @@ -11724,17 +11747,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string$0(_fo_); break; - case 1: add_string$0(_fp_); break; - case 2: + case 1: add_string$0(_fq_); break; - case 4: + case 2: add_string$0(_fr_); break; - case 5: + case 4: add_string$0(_fs_); break; - case 26: + case 5: add_string$0(_ft_); break; + case 26: + add_string$0(_fu_); break; case 24: case 25: break c; @@ -11747,19 +11770,19 @@ add_char$0(caml_string_get(s, i)); break a; } - add_string$0(_fn_); + add_string$0(_fo_); add_hex_byte(buf, c); } - var _n9_ = i + 1 | 0; - if(_n8_ === i) break; - i = _n9_; + var _n__ = i + 1 | 0; + if(_n9_ === i) break; + i = _n__; } } return; } function json_to_buffer(buf, json){ - function add_char$0(_n6_){return add_char(buf, _n6_);} - function add_string$0(_n5_){return add_string(buf, _n5_);} + function add_char$0(_n7_){return add_char(buf, _n7_);} + function add_string$0(_n6_){return add_string(buf, _n6_);} function add_quote_string(s){ add_char$0(34); escape(buf, s); @@ -11768,11 +11791,11 @@ function add_int(i){return add_string$0(string_of_int(i));} function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} function fmt(value){ - if(typeof value === "number") return add_string$0(_fu_); - var _n4_ = value[1]; - if(708012133 <= _n4_){ - if(737456202 > _n4_){ - if(726928360 <= _n4_){ + if(typeof value === "number") return add_string$0(_fv_); + var _n5_ = value[1]; + if(708012133 <= _n5_){ + if(737456202 > _n5_){ + if(726928360 <= _n5_){ var t = value[2]; add_char$0(40); json_list(t); @@ -11783,8 +11806,8 @@ variant(v); return add_char$0(62); } - if(928231259 <= _n4_){ - if(963043957 <= _n4_){ + if(928231259 <= _n5_){ + if(963043957 <= _n5_){ var o = value[2]; add_char$0(123); json_assoc(o); @@ -11793,7 +11816,7 @@ var s = value[2]; return add_string$0(s); } - if(848054398 <= _n4_){ + if(848054398 <= _n5_){ var l = value[2]; add_char$0(91); json_list(l); @@ -11802,22 +11825,22 @@ var b = value[2]; return add_string$0(string_of_bool(b)); } - if(-752863768 === _n4_){var s$0 = value[2]; return add_string$0(s$0);} - if(3654863 <= _n4_){ - if(365180284 <= _n4_){var f = value[2]; return add_float(f);} + if(-752863768 === _n5_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _n5_){ + if(365180284 <= _n5_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _n4_){var s$1 = value[2]; return add_string$0(s$1);} + if(-375152890 <= _n5_){var s$1 = value[2]; return add_string$0(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } function json_assoc(o){ - var sep = [0, _fv_]; + var sep = [0, _fw_]; return iter (function(v){ add_string$0(sep[1]); - sep[1] = _fw_; + sep[1] = _fx_; return pair(v); }, o); @@ -11829,11 +11852,11 @@ return fmt(v); } function json_list(l){ - var sep = [0, _fx_]; + var sep = [0, _fy_]; return iter (function(v){ add_string$0(sep[1]); - sep[1] = _fy_; + sep[1] = _fz_; return fmt(v); }, l); @@ -11855,7 +11878,7 @@ } return [0, , , json_to_string, , , , , , , , json_to_buffer]; } - var Json_error = [248, _fz_, caml_fresh_oo_id(0)]; + var Json_error = [248, _fA_, caml_fresh_oo_id(0)]; function json_error(msg){ throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); } @@ -11863,7 +11886,7 @@ var Lexxer = Make$1(Compliance), Parser = Make$2(Compliance), - include = function(_n3_){return Make$4(Lexxer, _n3_);}(Parser), + include = function(_n4_){return Make$4(Lexxer, _n4_);}(Parser), json_of_string_error_info = include[15], json_of_file_error_info = include[16], json_of_channel_error_info = include[17], @@ -11909,18 +11932,18 @@ function error_to_string(error_info, fname, lnum){ if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; var - _nZ_ = error_info[4], - _n0_ = error_info[3], - _n1_ = error_info[2], - _n2_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + _n0_ = error_info[4], + _n1_ = error_info[3], + _n2_ = error_info[2], + _n3_ = (lnum$1 + error_info[1] | 0) - 1 | 0; if(fname) var name = fname[1], - fname$0 = symbol_concat(_fB_, symbol_concat(name, _fA_)); + fname$0 = symbol_concat(_fC_, symbol_concat(name, _fB_)); else - var fname$0 = _fD_; - var loc = caml_call4(sprintf(_fC_), fname$0, _n2_, _n1_, _n0_); - return symbol_concat(loc, _nZ_); + var fname$0 = _fE_; + var loc = caml_call4(sprintf(_fD_), fname$0, _n3_, _n2_, _n1_); + return symbol_concat(loc, _n0_); } function apply_and_handle_errors(f, a, fname, lnum){ var match = caml_call1(f, a); @@ -11935,13 +11958,13 @@ } function Common_writer(Compliance){ var - _nU_ = Make$6(Compliance), - to_string = _nU_[3], - to_buffer = _nU_[11], - _nV_ = Make$5(Compliance), - to_file = _nV_[9], - to_channel = _nV_[11], - include = _eI_(Compliance), + _nV_ = Make$6(Compliance), + to_string = _nV_[3], + to_buffer = _nV_[11], + _nW_ = Make$5(Compliance), + to_file = _nW_[9], + to_channel = _nW_[11], + include = _eJ_(Compliance), pretty_print = include[1], pretty_print_to_string = include[2], pretty_print_to_channel = include[3], @@ -11981,14 +12004,14 @@ function to_standard(json){ function map(node){ if(typeof node === "number") return 870828711; - var _nY_ = node[1]; - if(708012133 > _nY_){ - if(-752863768 === _nY_){ + var _nZ_ = node[1]; + if(708012133 > _nZ_){ + if(-752863768 === _nZ_){ var v$1 = node[2]; return [0, -976970511, v$1]; } - if(3654863 <= _nY_) return 365180284 <= _nY_ ? node : node; - if(-375152890 > _nY_) return node; + if(3654863 <= _nZ_) return 365180284 <= _nZ_ ? node : node; + if(-375152890 > _nZ_) return node; var s = node[2]; return 1 < caml_ml_string_length(s) >>> 0 ? [0, @@ -11996,8 +12019,8 @@ sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] : [0, -976970511, s]; } - if(737456202 > _nY_){ - if(726928360 <= _nY_){ + if(737456202 > _nZ_){ + if(726928360 <= _nZ_){ var tpl = node[2]; return [0, 848054398, map$1(map, tpl)]; } @@ -12006,12 +12029,12 @@ var v$0 = jopt[1]; return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; } - if(928231259 > _nY_){ - if(848054398 > _nY_) return node; + if(928231259 > _nZ_){ + if(848054398 > _nZ_) return node; var l = node[2]; return [0, 848054398, map$1(map, l)]; } - if(963043957 <= _nY_){ + if(963043957 <= _nZ_){ var a = node[2]; return [0, 963043957, @@ -12027,26 +12050,26 @@ } return map(json); } - function to_string$0(param, _nW_, opt, json){ + function to_string$0(param, _nX_, opt, json){ if(opt) var sth = opt[1], std = sth; else var std = 0; if(! std) return Internal_writer[3].call(null, json); - var _nX_ = to_standard(json); - return Internal_writer[3].call(null, _nX_); + var _nY_ = to_standard(json); + return Internal_writer[3].call(null, _nY_); } return [0, , , to_string$0]; } function lex_string(s){return unescape_string(s);} function lex_number(token){return token;} function lex_integer(token){return token;} - function lex_largeint(param){return _fE_;} + function lex_largeint(param){return _fF_;} function lex_variant(param){return 0;} function lex_tuple(param){return 0;} - function comment_check(param){return _fF_;} + function comment_check(param){return _fG_;} function number_to_string(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fG_ : _fH_ - : 4 <= match ? _fI_ : string_of_float_json(f); + ? f < 0. ? _fH_ : _fI_ + : 4 <= match ? _fJ_ : string_of_float_json(f); } function largeint(s){return [0, 365180284, caml_float_of_string(s)];} function integer(i){return [0, 3654863, i];} @@ -12056,10 +12079,10 @@ function assoc(a){return [0, 963043957, a];} function list(l){return [0, 848054398, l];} function tuple(l){ - throw caml_maybe_attach_backtrace([0, Failure, _fJ_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fK_], 1); } function variant(l){ - throw caml_maybe_attach_backtrace([0, Failure, _fK_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fL_], 1); } function number(param){ if(typeof param === "number") @@ -12070,7 +12093,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _fL_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fM_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -12079,16 +12102,16 @@ function object_start(param){return 17732;} function object_end(param){return 17718;} function tuple_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fM_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fN_], 1); } function tuple_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fN_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fO_], 1); } function variant_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fO_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fP_], 1); } function variant_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _fP_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fQ_], 1); } function name(s){return [0, 869834347, s];} Common_reader @@ -12169,12 +12192,12 @@ function lex_largeint$0(token){return token;} function lex_variant$0(param){return 1;} function lex_tuple$0(param){return 1;} - function comment_check$0(param){return _fQ_;} + function comment_check$0(param){return _fR_;} function number_to_string$0(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fR_ : _fS_ - : 4 <= match ? _fT_ : string_of_float_json(f); + ? f < 0. ? _fS_ : _fT_ + : 4 <= match ? _fU_ : string_of_float_json(f); } function largeint$0(s){return [0, -752863768, s];} function integer$0(i){return [0, 3654863, i];} @@ -12194,7 +12217,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _fU_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _fV_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -12285,19 +12308,19 @@ name$0]]), to_string$3 = include[3]; function lex_string$1(s){ - return symbol_concat(_fW_, symbol_concat(s, _fV_)); + return symbol_concat(_fX_, symbol_concat(s, _fW_)); } function lex_number$1(token){return token;} function lex_integer$1(token){return token;} function lex_largeint$1(token){return token;} function lex_variant$1(param){return 1;} function lex_tuple$1(param){return 1;} - function comment_check$1(param){return _fX_;} + function comment_check$1(param){return _fY_;} function number_to_string$1(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _fY_ : _fZ_ - : 4 <= match ? _f0_ : string_of_float_json(f); + ? f < 0. ? _fZ_ : _f0_ + : 4 <= match ? _f1_ : string_of_float_json(f); } function largeint$1(s){return [0, -752863768, s];} function integer$1(i){return [0, -752863768, string_of_int(i)];} @@ -12310,7 +12333,7 @@ function variant$1(k, v){return [0, 708012133, [0, k, v]];} function number$1(param){ if(typeof param === "number") - return 3900603 === param ? _f1_ : 874173192 <= param ? _f2_ : _f3_; + return 3900603 === param ? _f2_ : 874173192 <= param ? _f3_ : _f4_; if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} var f$0 = param[2]; return [0, 928231259, string_of_float(f$0)]; @@ -12406,68 +12429,68 @@ r3 = caml_call1(rand, 0), r4 = caml_call1(rand, 0), u = caml_create_bytes(16), - _mo_ = 0; - function _mp_(_nT_, _nS_, _nR_){caml_bytes_set(_nT_, _nS_, _nR_); return;} - (function(_nQ_){return _mp_(u, _mo_, _nQ_);}(r0 & 255)); - var _mq_ = 1; - function _mr_(_nP_, _nO_, _nN_){caml_bytes_set(_nP_, _nO_, _nN_); return;} - (function(_nM_){return _mr_(u, _mq_, _nM_);}((r0 >>> 8 | 0) & 255)); - var _ms_ = 2; - function _mt_(_nL_, _nK_, _nJ_){caml_bytes_set(_nL_, _nK_, _nJ_); return;} - (function(_nI_){return _mt_(u, _ms_, _nI_);}((r0 >>> 16 | 0) & 255)); - var _mu_ = 3; - function _mv_(_nH_, _nG_, _nF_){caml_bytes_set(_nH_, _nG_, _nF_); return;} - (function(_nE_){return _mv_(u, _mu_, _nE_);}(r1 & 255)); - var _mw_ = 4; - function _mx_(_nD_, _nC_, _nB_){caml_bytes_set(_nD_, _nC_, _nB_); return;} - (function(_nA_){return _mx_(u, _mw_, _nA_);}((r1 >>> 8 | 0) & 255)); - var _my_ = 5; - function _mz_(_nz_, _ny_, _nx_){caml_bytes_set(_nz_, _ny_, _nx_); return;} - (function(_nw_){return _mz_(u, _my_, _nw_);}((r1 >>> 16 | 0) & 255)); - var _mA_ = 6; - function _mB_(_nv_, _nu_, _nt_){caml_bytes_set(_nv_, _nu_, _nt_); return;} - (function(_ns_){return _mB_(u, _mA_, _ns_);}(64 | (r1 >>> 24 | 0) & 15)); - var _mC_ = 7; - function _mD_(_nr_, _nq_, _np_){caml_bytes_set(_nr_, _nq_, _np_); return;} - (function(_no_){return _mD_(u, _mC_, _no_);}(r2 & 255)); - var _mE_ = 8; - function _mF_(_nn_, _nm_, _nl_){caml_bytes_set(_nn_, _nm_, _nl_); return;} - (function(_nk_){return _mF_(u, _mE_, _nk_);}(128 | (r2 >>> 24 | 0) & 63)); - var _mG_ = 9; - function _mH_(_nj_, _ni_, _nh_){caml_bytes_set(_nj_, _ni_, _nh_); return;} - (function(_ng_){return _mH_(u, _mG_, _ng_);}((r2 >>> 8 | 0) & 255)); - var _mI_ = 10; - function _mJ_(_nf_, _ne_, _nd_){caml_bytes_set(_nf_, _ne_, _nd_); return;} - (function(_nc_){return _mJ_(u, _mI_, _nc_);}((r2 >>> 16 | 0) & 255)); - var _mK_ = 11; - function _mL_(_nb_, _na_, _m$_){caml_bytes_set(_nb_, _na_, _m$_); return;} - (function(_m__){return _mL_(u, _mK_, _m__);}(r3 & 255)); - var _mM_ = 12; - function _mN_(_m9_, _m8_, _m7_){caml_bytes_set(_m9_, _m8_, _m7_); return;} - (function(_m6_){return _mN_(u, _mM_, _m6_);}((r3 >>> 8 | 0) & 255)); - var _mO_ = 13; - function _mP_(_m5_, _m4_, _m3_){caml_bytes_set(_m5_, _m4_, _m3_); return;} - (function(_m2_){return _mP_(u, _mO_, _m2_);}((r3 >>> 16 | 0) & 255)); - var _mQ_ = 14; - function _mR_(_m1_, _m0_, _mZ_){caml_bytes_set(_m1_, _m0_, _mZ_); return;} - (function(_mY_){return _mR_(u, _mQ_, _mY_);}(r4 & 255)); - var _mS_ = 15; - function _mT_(_mX_, _mW_, _mV_){caml_bytes_set(_mX_, _mW_, _mV_); return;} - (function(_mU_){return _mT_(u, _mS_, _mU_);}((r4 >>> 8 | 0) & 255)); + _mp_ = 0; + function _mq_(_nU_, _nT_, _nS_){caml_bytes_set(_nU_, _nT_, _nS_); return;} + (function(_nR_){return _mq_(u, _mp_, _nR_);}(r0 & 255)); + var _mr_ = 1; + function _ms_(_nQ_, _nP_, _nO_){caml_bytes_set(_nQ_, _nP_, _nO_); return;} + (function(_nN_){return _ms_(u, _mr_, _nN_);}((r0 >>> 8 | 0) & 255)); + var _mt_ = 2; + function _mu_(_nM_, _nL_, _nK_){caml_bytes_set(_nM_, _nL_, _nK_); return;} + (function(_nJ_){return _mu_(u, _mt_, _nJ_);}((r0 >>> 16 | 0) & 255)); + var _mv_ = 3; + function _mw_(_nI_, _nH_, _nG_){caml_bytes_set(_nI_, _nH_, _nG_); return;} + (function(_nF_){return _mw_(u, _mv_, _nF_);}(r1 & 255)); + var _mx_ = 4; + function _my_(_nE_, _nD_, _nC_){caml_bytes_set(_nE_, _nD_, _nC_); return;} + (function(_nB_){return _my_(u, _mx_, _nB_);}((r1 >>> 8 | 0) & 255)); + var _mz_ = 5; + function _mA_(_nA_, _nz_, _ny_){caml_bytes_set(_nA_, _nz_, _ny_); return;} + (function(_nx_){return _mA_(u, _mz_, _nx_);}((r1 >>> 16 | 0) & 255)); + var _mB_ = 6; + function _mC_(_nw_, _nv_, _nu_){caml_bytes_set(_nw_, _nv_, _nu_); return;} + (function(_nt_){return _mC_(u, _mB_, _nt_);}(64 | (r1 >>> 24 | 0) & 15)); + var _mD_ = 7; + function _mE_(_ns_, _nr_, _nq_){caml_bytes_set(_ns_, _nr_, _nq_); return;} + (function(_np_){return _mE_(u, _mD_, _np_);}(r2 & 255)); + var _mF_ = 8; + function _mG_(_no_, _nn_, _nm_){caml_bytes_set(_no_, _nn_, _nm_); return;} + (function(_nl_){return _mG_(u, _mF_, _nl_);}(128 | (r2 >>> 24 | 0) & 63)); + var _mH_ = 9; + function _mI_(_nk_, _nj_, _ni_){caml_bytes_set(_nk_, _nj_, _ni_); return;} + (function(_nh_){return _mI_(u, _mH_, _nh_);}((r2 >>> 8 | 0) & 255)); + var _mJ_ = 10; + function _mK_(_ng_, _nf_, _ne_){caml_bytes_set(_ng_, _nf_, _ne_); return;} + (function(_nd_){return _mK_(u, _mJ_, _nd_);}((r2 >>> 16 | 0) & 255)); + var _mL_ = 11; + function _mM_(_nc_, _nb_, _na_){caml_bytes_set(_nc_, _nb_, _na_); return;} + (function(_m$_){return _mM_(u, _mL_, _m$_);}(r3 & 255)); + var _mN_ = 12; + function _mO_(_m__, _m9_, _m8_){caml_bytes_set(_m__, _m9_, _m8_); return;} + (function(_m7_){return _mO_(u, _mN_, _m7_);}((r3 >>> 8 | 0) & 255)); + var _mP_ = 13; + function _mQ_(_m6_, _m5_, _m4_){caml_bytes_set(_m6_, _m5_, _m4_); return;} + (function(_m3_){return _mQ_(u, _mP_, _m3_);}((r3 >>> 16 | 0) & 255)); + var _mR_ = 14; + function _mS_(_m2_, _m1_, _m0_){caml_bytes_set(_m2_, _m1_, _m0_); return;} + (function(_mZ_){return _mS_(u, _mR_, _mZ_);}(r4 & 255)); + var _mT_ = 15; + function _mU_(_mY_, _mX_, _mW_){caml_bytes_set(_mY_, _mX_, _mW_); return;} + (function(_mV_){return _mU_(u, _mT_, _mV_);}((r4 >>> 8 | 0) & 255)); return unsafe_to_string(u); } function v4_gen(seed){ - function rand$0(_mn_){return rand(seed, _mn_);} + function rand$0(_mo_){return rand(seed, _mo_);} return function(param){return v4_ocaml_random_uuid(rand$0);}; } - var Set = _dg_([0, compare$0]); + var Set = _dh_([0, compare$0]); function to_jstr$1(t){return encode(t);} function of_jstr$0(jstr){ var match = decode(jstr); if(0 === match[0]){var v = match[1]; return [0, v];} var err = match[1]; error([0, err, 0]); - return _f4_; + return _f5_; } var random_state = get_state(0); function new_uuid_v4(param){return v4_gen(random_state)(0);} @@ -12483,7 +12506,7 @@ return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; } var - Of_yojson_error = [248, _f5_, caml_fresh_oo_id(0)], + Of_yojson_error = [248, _f6_, caml_fresh_oo_id(0)], record_check_extra_fields = [0, 1]; function of_yojson_error(what, yojson){ throw caml_maybe_attach_backtrace @@ -12491,15 +12514,15 @@ } function bool_of_yojson(yojson){ if(typeof yojson !== "number" && 737456202 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_f6_, yojson); + return of_yojson_error(_f7_, yojson); } function string_of_yojson(yojson){ if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_f7_, yojson); + return of_yojson_error(_f8_, yojson); } function int_of_yojson(yojson){ if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_f8_, yojson); + return of_yojson_error(_f9_, yojson); } function option_of_yojson(a_of_yojson, yojson){ return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; @@ -12509,39 +12532,39 @@ var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); return rev(rev_lst); } - return of_yojson_error(_f9_, yojson); + return of_yojson_error(_f__, yojson); } function stag_no_args(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _f__), yojson); + return of_yojson_error(symbol_concat(loc, _f$_), yojson); } function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _f$_), yojson); + return of_yojson_error(symbol_concat(loc, _ga_), yojson); } function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _ga_), yojson); + return of_yojson_error(symbol_concat(loc, _gb_), yojson); } function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _gb_), yojson); + return of_yojson_error(symbol_concat(loc, _gc_), yojson); } function record_superfluous_fields(what, loc, rev_fld_names, yojson){ var - fld_names_str = concat(_gc_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_gd_), loc, what, fld_names_str); + fld_names_str = concat(_gd_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_ge_), loc, what, fld_names_str); return of_yojson_error(msg, yojson); } function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_ge_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_gf_, loc, rev_fld_names, yojson); } function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_gf_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_gg_, loc, rev_fld_names, yojson); } function record_get_undefined_loop(fields, param){ var fields$0 = fields, param$0 = param; for(;;){ - if(! param$0) return concat(_gg_, rev(fields$0)); - var _mm_ = param$0[1]; - if(_mm_[1]){ - var rest = param$0[2], field = _mm_[2], fields$1 = [0, field, fields$0]; + if(! param$0) return concat(_gh_, rev(fields$0)); + var _mn_ = param$0[1]; + if(_mn_[1]){ + var rest = param$0[2], field = _mn_[2], fields$1 = [0, field, fields$0]; fields$0 = fields$1; param$0 = rest; } @@ -12551,82 +12574,82 @@ function record_undefined_elements(loc, yojson, lst){ var undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_gh_), loc, undefined$0); + msg = caml_call2(sprintf(_gi_), loc, undefined$0); return of_yojson_error(msg, yojson); } function record_list_instead_atom(loc, yojson){ - var msg = symbol_concat(loc, _gi_); + var msg = symbol_concat(loc, _gj_); return of_yojson_error(msg, yojson); } function symbol$9(x){return x[1];} function jstr_of_method(param){return param ? "POST" : "GET";} function order_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mi_ = yojson[2]; - if(! _mi_) return empty_list_invalid_sum(tp_loc, yojson); - var _mj_ = _mi_[1]; - if(typeof _mj_ !== "number"){ - var _mk_ = _mj_[1]; - if(-976970511 === _mk_){ - var _ml_ = _mj_[2]; - if(_ml_ === cst_Ascending) - return _mi_[2] ? stag_no_args(tp_loc, yojson) : 0; - if(_ml_ === cst_Descending) - return _mi_[2] ? stag_no_args(tp_loc, yojson) : 1; + var _mj_ = yojson[2]; + if(! _mj_) return empty_list_invalid_sum(tp_loc, yojson); + var _mk_ = _mj_[1]; + if(typeof _mk_ !== "number"){ + var _ml_ = _mk_[1]; + if(-976970511 === _ml_){ + var _mm_ = _mk_[2]; + if(_mm_ === cst_Ascending) + return _mj_[2] ? stag_no_args(tp_loc, yojson) : 0; + if(_mm_ === cst_Descending) + return _mj_[2] ? stag_no_args(tp_loc, yojson) : 1; } - else if(848054398 === _mk_) + else if(848054398 === _ml_) return nested_list_invalid_sum(tp_loc, yojson); } } return unexpected_stag(tp_loc, yojson); } - function yojson_of_order(param){return param ? _gj_ : _gk_;} + function yojson_of_order(param){return param ? _gk_ : _gl_;} function sort_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _me_ = yojson[2]; - if(! _me_) return empty_list_invalid_sum(tp_loc$0, yojson); - var _mf_ = _me_[1]; - if(typeof _mf_ !== "number"){ - var _mg_ = _mf_[1]; - if(-976970511 === _mg_){ + var _mf_ = yojson[2]; + if(! _mf_) return empty_list_invalid_sum(tp_loc$0, yojson); + var _mg_ = _mf_[1]; + if(typeof _mg_ !== "number"){ + var _mh_ = _mg_[1]; + if(-976970511 === _mh_){ var - _mh_ = _mf_[2], - switch$0 = caml_string_compare(_mh_, cst_DatePlayed); + _mi_ = _mg_[2], + switch$0 = caml_string_compare(_mi_, cst_DatePlayed); if(0 <= switch$0){ - if(0 >= switch$0) return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 7; - if(_mh_ === cst_PlayCount) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 8; - if(_mh_ === cst_PremiereDate) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 9; - if(_mh_ === cst_ProductionYear) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 10; - if(_mh_ === cst_Random) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 12; - if(_mh_ === cst_Revenue) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 13; - if(_mh_ === cst_Runtime) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 14; - if(_mh_ === cst_SortName) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 11; + if(0 >= switch$0) return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 7; + if(_mi_ === cst_PlayCount) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 8; + if(_mi_ === cst_PremiereDate) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 9; + if(_mi_ === cst_ProductionYear) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 10; + if(_mi_ === cst_Random) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 12; + if(_mi_ === cst_Revenue) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 13; + if(_mi_ === cst_Runtime) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 14; + if(_mi_ === cst_SortName) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 11; } else{ - if(_mh_ === cst_Album) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 0; - if(_mh_ === cst_AlbumArtist) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 1; - if(_mh_ === cst_Artist) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 2; - if(_mh_ === cst_Budget) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 3; - if(_mh_ === cst_CommunityRating) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 4; - if(_mh_ === cst_CriticRating) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 5; - if(_mh_ === cst_DateCreated) - return _me_[2] ? stag_no_args(tp_loc$0, yojson) : 6; + if(_mi_ === cst_Album) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 0; + if(_mi_ === cst_AlbumArtist) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 1; + if(_mi_ === cst_Artist) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 2; + if(_mi_ === cst_Budget) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 3; + if(_mi_ === cst_CommunityRating) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 4; + if(_mi_ === cst_CriticRating) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 5; + if(_mi_ === cst_DateCreated) + return _mf_[2] ? stag_no_args(tp_loc$0, yojson) : 6; } } - else if(848054398 === _mg_) + else if(848054398 === _mh_) return nested_list_invalid_sum(tp_loc$0, yojson); } } @@ -12635,34 +12658,34 @@ function yojson_of_sort(param){ switch(param){ case 0: - return _gl_; - case 1: return _gm_; - case 2: + case 1: return _gn_; - case 3: + case 2: return _go_; - case 4: + case 3: return _gp_; - case 5: + case 4: return _gq_; - case 6: + case 5: return _gr_; - case 7: + case 6: return _gs_; - case 8: + case 7: return _gt_; - case 9: + case 8: return _gu_; - case 10: + case 9: return _gv_; - case 11: + case 10: return _gw_; - case 12: + case 11: return _gx_; - case 13: + case 12: return _gy_; - default: return _gz_; + case 13: + return _gz_; + default: return _gA_; } } function image_blur_hash_of_yojson(y){ @@ -12728,7 +12751,7 @@ var v = v_primary[1], arg = yojson_of_image_blur_hash(v), - bnd = [0, _gA_, arg], + bnd = [0, _gB_, arg], bnds$0 = [0, bnd, bnds]; else var bnds$0 = bnds; @@ -12736,105 +12759,105 @@ } function type_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _ma_ = yojson[2]; - if(! _ma_) return empty_list_invalid_sum(tp_loc$2, yojson); - var _mb_ = _ma_[1]; - if(typeof _mb_ !== "number"){ - var _mc_ = _mb_[1]; - if(-976970511 === _mc_){ + var _mb_ = yojson[2]; + if(! _mb_) return empty_list_invalid_sum(tp_loc$2, yojson); + var _mc_ = _mb_[1]; + if(typeof _mc_ !== "number"){ + var _md_ = _mc_[1]; + if(-976970511 === _md_){ var - _md_ = _mb_[2], - switch$0 = caml_string_compare(_md_, cst_MusicGenre); + _me_ = _mc_[2], + switch$0 = caml_string_compare(_me_, cst_MusicGenre); if(0 <= switch$0){ if(0 >= switch$0) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 18; - var switch$1 = caml_string_compare(_md_, cst_Series); + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 18; + var switch$1 = caml_string_compare(_me_, cst_Series); if(0 <= switch$1){ if(0 >= switch$1) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 28; - if(_md_ === cst_Studio) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 29; - if(_md_ === cst_Trailer) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 30; - if(_md_ === cst_TvChannel) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 31; - if(_md_ === cst_TvProgram) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 32; - if(_md_ === cst_UserRootFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 33; - if(_md_ === cst_UserView) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 34; - if(_md_ === cst_Video) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 35; - if(_md_ === cst_Year) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 36; + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 28; + if(_me_ === cst_Studio) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 29; + if(_me_ === cst_Trailer) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 30; + if(_me_ === cst_TvChannel) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 31; + if(_me_ === cst_TvProgram) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 32; + if(_me_ === cst_UserRootFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 33; + if(_me_ === cst_UserView) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 34; + if(_me_ === cst_Video) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 35; + if(_me_ === cst_Year) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 36; } else{ - if(_md_ === cst_MusicVideo) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 19; - if(_md_ === cst_Person) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 20; - if(_md_ === cst_Photo) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 21; - if(_md_ === cst_PhotoAlbum) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 22; - if(_md_ === cst_Playlist) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 23; - if(_md_ === cst_PlaylistsFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 24; - if(_md_ === cst_Program) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 25; - if(_md_ === cst_Recording) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 26; - if(_md_ === cst_Season) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 27; + if(_me_ === cst_MusicVideo) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 19; + if(_me_ === cst_Person) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 20; + if(_me_ === cst_Photo) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 21; + if(_me_ === cst_PhotoAlbum) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 22; + if(_me_ === cst_Playlist) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 23; + if(_me_ === cst_PlaylistsFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 24; + if(_me_ === cst_Program) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 25; + if(_me_ === cst_Recording) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 26; + if(_me_ === cst_Season) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 27; } } else{ - var switch$2 = caml_string_compare(_md_, cst_Episode); + var switch$2 = caml_string_compare(_me_, cst_Episode); if(0 <= switch$2){ if(0 >= switch$2) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 9; - if(_md_ === cst_Folder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 10; - if(_md_ === cst_Genre) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 11; - if(_md_ === cst_LiveTvChannel) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 12; - if(_md_ === cst_LiveTvProgram) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 13; - if(_md_ === cst_ManualPlaylistsFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 14; - if(_md_ === cst_Movie) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 15; - if(_md_ === cst_MusicAlbum) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 16; - if(_md_ === cst_MusicArtist) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 17; + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 9; + if(_me_ === cst_Folder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 10; + if(_me_ === cst_Genre) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 11; + if(_me_ === cst_LiveTvChannel) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 12; + if(_me_ === cst_LiveTvProgram) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 13; + if(_me_ === cst_ManualPlaylistsFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 14; + if(_me_ === cst_Movie) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 15; + if(_me_ === cst_MusicAlbum) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 16; + if(_me_ === cst_MusicArtist) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 17; } else{ - if(_md_ === cst_AggregateFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 0; - if(_md_ === cst_Audio) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 1; - if(_md_ === cst_AudioBook) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 2; - if(_md_ === cst_BasePluginFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 3; - if(_md_ === cst_Book) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 4; - if(_md_ === cst_BoxSet) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 5; - if(_md_ === cst_Channel) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 6; - if(_md_ === cst_ChannelFolderItem) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 7; - if(_md_ === cst_CollectionFolder) - return _ma_[2] ? stag_no_args(tp_loc$2, yojson) : 8; + if(_me_ === cst_AggregateFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 0; + if(_me_ === cst_Audio) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 1; + if(_me_ === cst_AudioBook) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 2; + if(_me_ === cst_BasePluginFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 3; + if(_me_ === cst_Book) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 4; + if(_me_ === cst_BoxSet) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 5; + if(_me_ === cst_Channel) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 6; + if(_me_ === cst_ChannelFolderItem) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 7; + if(_me_ === cst_CollectionFolder) + return _mb_[2] ? stag_no_args(tp_loc$2, yojson) : 8; } } } - else if(848054398 === _mc_) + else if(848054398 === _md_) return nested_list_invalid_sum(tp_loc$2, yojson); } } @@ -12843,383 +12866,383 @@ function yojson_of_type(param){ switch(param){ case 0: - return _gB_; - case 1: return _gC_; - case 2: + case 1: return _gD_; - case 3: + case 2: return _gE_; - case 4: + case 3: return _gF_; - case 5: + case 4: return _gG_; - case 6: + case 5: return _gH_; - case 7: + case 6: return _gI_; - case 8: + case 7: return _gJ_; - case 9: + case 8: return _gK_; - case 10: + case 9: return _gL_; - case 11: + case 10: return _gM_; - case 12: + case 11: return _gN_; - case 13: + case 12: return _gO_; - case 14: + case 13: return _gP_; - case 15: + case 14: return _gQ_; - case 16: + case 15: return _gR_; - case 17: + case 16: return _gS_; - case 18: + case 17: return _gT_; - case 19: + case 18: return _gU_; - case 20: + case 19: return _gV_; - case 21: + case 20: return _gW_; - case 22: + case 21: return _gX_; - case 23: + case 22: return _gY_; - case 24: + case 23: return _gZ_; - case 25: + case 24: return _g0_; - case 26: + case 25: return _g1_; - case 27: + case 26: return _g2_; - case 28: + case 27: return _g3_; - case 29: + case 28: return _g4_; - case 30: + case 29: return _g5_; - case 31: + case 30: return _g6_; - case 32: + case 31: return _g7_; - case 33: + case 32: return _g8_; - case 34: + case 33: return _g9_; - case 35: + case 34: return _g__; - default: return _g$_; + case 35: + return _g$_; + default: return _ha_; } } function field_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _l8_ = yojson[2]; - if(! _l8_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _l9_ = _l8_[1]; - if(typeof _l9_ !== "number"){ - var _l__ = _l9_[1]; - if(-976970511 === _l__){ + var _l9_ = yojson[2]; + if(! _l9_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _l__ = _l9_[1]; + if(typeof _l__ !== "number"){ + var _l$_ = _l__[1]; + if(-976970511 === _l$_){ var - _l$_ = _l9_[2], - switch$0 = caml_string_compare(_l$_, cst_MediaStreams); + _ma_ = _l__[2], + switch$0 = caml_string_compare(_ma_, cst_MediaStreams); if(0 <= switch$0){ if(0 >= switch$0) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 30; var - switch$1 = caml_string_compare(_l$_, cst_SeriesPresentationUniqueKe); + switch$1 = caml_string_compare(_ma_, cst_SeriesPresentationUniqueKe); if(0 <= switch$1){ if(0 >= switch$1) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 46; - var switch$2 = caml_string_compare(_l$_, cst_Studios); + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 46; + var switch$2 = caml_string_compare(_ma_, cst_Studios); if(0 <= switch$2){ if(0 >= switch$2) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 54; - if(_l$_ === cst_SyncInfo) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 55; - if(_l$_ === cst_Taglines) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 56; - if(_l$_ === cst_Tags) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 57; - if(_l$_ === cst_ThemeSongIds) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 58; - if(_l$_ === cst_ThemeVideoIds) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 59; - if(_l$_ === cst_Width) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 60; + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 54; + if(_ma_ === cst_SyncInfo) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 55; + if(_ma_ === cst_Taglines) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 56; + if(_ma_ === cst_Tags) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 57; + if(_ma_ === cst_ThemeSongIds) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 58; + if(_ma_ === cst_ThemeVideoIds) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 59; + if(_ma_ === cst_Width) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 60; } else{ - if(_l$_ === cst_SeriesPrimaryImage) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 47; - if(_l$_ === cst_SeriesStudio) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 48; - if(_l$_ === cst_ServiceName) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 49; - if(_l$_ === cst_Settings) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 50; - if(_l$_ === cst_SortName) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 51; - if(_l$_ === cst_SpecialEpisodeNumbers) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 52; - if(_l$_ === cst_SpecialFeatureCount) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 53; + if(_ma_ === cst_SeriesPrimaryImage) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 47; + if(_ma_ === cst_SeriesStudio) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 48; + if(_ma_ === cst_ServiceName) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 49; + if(_ma_ === cst_Settings) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 50; + if(_ma_ === cst_SortName) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 51; + if(_ma_ === cst_SpecialEpisodeNumbers) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 52; + if(_ma_ === cst_SpecialFeatureCount) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 53; } } else{ var - switch$3 = caml_string_compare(_l$_, cst_PrimaryImageAspectRatio); + switch$3 = caml_string_compare(_ma_, cst_PrimaryImageAspectRatio); if(0 <= switch$3){ if(0 >= switch$3) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 38; - if(_l$_ === cst_ProductionLocations) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 39; - if(_l$_ === cst_ProviderIds) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 40; - if(_l$_ === cst_RecursiveItemCount) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 41; - if(_l$_ === cst_RefreshState) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 42; - if(_l$_ === cst_RemoteTrailers) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 43; - if(_l$_ === cst_ScreenshotImageTags) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 44; - if(_l$_ === cst_SeasonUserData) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 45; + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 38; + if(_ma_ === cst_ProductionLocations) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 39; + if(_ma_ === cst_ProviderIds) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 40; + if(_ma_ === cst_RecursiveItemCount) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 41; + if(_ma_ === cst_RefreshState) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 42; + if(_ma_ === cst_RemoteTrailers) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 43; + if(_ma_ === cst_ScreenshotImageTags) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 44; + if(_ma_ === cst_SeasonUserData) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 45; } else{ - if(_l$_ === cst_OriginalTitle) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(_l$_ === cst_Overview) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(_l$_ === cst_ParentId) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(_l$_ === cst_Path) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(_l$_ === cst_People) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(_l$_ === cst_PlayAccess) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 36; - if(_l$_ === cst_PresentationUniqueKey) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 37; + if(_ma_ === cst_OriginalTitle) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(_ma_ === cst_Overview) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(_ma_ === cst_ParentId) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(_ma_ === cst_Path) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(_ma_ === cst_People) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(_ma_ === cst_PlayAccess) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + if(_ma_ === cst_PresentationUniqueKey) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 37; } } } else{ var - switch$4 = caml_string_compare(_l$_, cst_EnableMediaSourceDisplay); + switch$4 = caml_string_compare(_ma_, cst_EnableMediaSourceDisplay); if(0 <= switch$4){ if(0 >= switch$4) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - var switch$5 = caml_string_compare(_l$_, cst_HomePageUrl); + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + var switch$5 = caml_string_compare(_ma_, cst_HomePageUrl); if(0 <= switch$5){ if(0 >= switch$5) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(_l$_ === cst_InheritedParentalRatingVal) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(_l$_ === cst_IsHD) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(_l$_ === cst_ItemCounts) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(_l$_ === cst_LocalTrailerCount) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 27; - if(_l$_ === cst_MediaSourceCount) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(_l$_ === cst_MediaSources) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(_ma_ === cst_InheritedParentalRatingVal) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(_ma_ === cst_IsHD) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(_ma_ === cst_ItemCounts) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(_ma_ === cst_LocalTrailerCount) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(_ma_ === cst_MediaSourceCount) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(_ma_ === cst_MediaSources) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 29; } else{ - if(_l$_ === cst_Etag) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(_l$_ === cst_ExternalEtag) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 17; - if(_l$_ === cst_ExternalSeriesId) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - if(_l$_ === cst_ExternalUrls) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(_l$_ === cst_ExtraIds) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(_l$_ === cst_Genres) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(_l$_ === cst_Height) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(_ma_ === cst_Etag) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(_ma_ === cst_ExternalEtag) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + if(_ma_ === cst_ExternalSeriesId) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + if(_ma_ === cst_ExternalUrls) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(_ma_ === cst_ExtraIds) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(_ma_ === cst_Genres) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(_ma_ === cst_Height) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 22; } } else{ - var switch$6 = caml_string_compare(_l$_, cst_ChildCount); + var switch$6 = caml_string_compare(_ma_, cst_ChildCount); if(0 <= switch$6){ if(0 >= switch$6) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(_l$_ === cst_CumulativeRunTimeTicks) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 8; - if(_l$_ === cst_CustomRating) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(_l$_ === cst_DateCreated) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(_l$_ === cst_DateLastMediaAdded) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(_l$_ === cst_DateLastRefreshed) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(_l$_ === cst_DateLastSaved) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(_l$_ === cst_DisplayPreferencesId) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(_ma_ === cst_CumulativeRunTimeTicks) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(_ma_ === cst_CustomRating) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(_ma_ === cst_DateCreated) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(_ma_ === cst_DateLastMediaAdded) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(_ma_ === cst_DateLastRefreshed) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(_ma_ === cst_DateLastSaved) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(_ma_ === cst_DisplayPreferencesId) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 14; } else{ - if(_l$_ === cst_AirTime) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(_l$_ === cst_BasicSyncInfo) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(_l$_ === cst_CanDelete) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(_l$_ === cst_CanDownload) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(_l$_ === cst_ChannelImage) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(_l$_ === cst_ChannelInfo) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(_l$_ === cst_Chapters) - return _l8_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(_ma_ === cst_AirTime) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(_ma_ === cst_BasicSyncInfo) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(_ma_ === cst_CanDelete) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(_ma_ === cst_CanDownload) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(_ma_ === cst_ChannelImage) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(_ma_ === cst_ChannelInfo) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(_ma_ === cst_Chapters) + return _l9_[2] ? stag_no_args(tp_loc$3, yojson) : 6; } } } } - else if(848054398 === _l__) + else if(848054398 === _l$_) return nested_list_invalid_sum(tp_loc$3, yojson); } } return unexpected_stag(tp_loc$3, yojson); } function yojson_of_field(param){ - var _l7_ = param; - if(31 <= _l7_) - switch(_l7_){ + var _l8_ = param; + if(31 <= _l8_) + switch(_l8_){ case 31: - return _hF_; - case 32: return _hG_; - case 33: + case 32: return _hH_; - case 34: + case 33: return _hI_; - case 35: + case 34: return _hJ_; - case 36: + case 35: return _hK_; - case 37: + case 36: return _hL_; - case 38: + case 37: return _hM_; - case 39: + case 38: return _hN_; - case 40: + case 39: return _hO_; - case 41: + case 40: return _hP_; - case 42: + case 41: return _hQ_; - case 43: + case 42: return _hR_; - case 44: + case 43: return _hS_; - case 45: + case 44: return _hT_; - case 46: + case 45: return _hU_; - case 47: + case 46: return _hV_; - case 48: + case 47: return _hW_; - case 49: + case 48: return _hX_; - case 50: + case 49: return _hY_; - case 51: + case 50: return _hZ_; - case 52: + case 51: return _h0_; - case 53: + case 52: return _h1_; - case 54: + case 53: return _h2_; - case 55: + case 54: return _h3_; - case 56: + case 55: return _h4_; - case 57: + case 56: return _h5_; - case 58: + case 57: return _h6_; - case 59: + case 58: return _h7_; - default: return _h8_; + case 59: + return _h8_; + default: return _h9_; } - switch(_l7_){ + switch(_l8_){ case 0: - return _ha_; - case 1: return _hb_; - case 2: + case 1: return _hc_; - case 3: + case 2: return _hd_; - case 4: + case 3: return _he_; - case 5: + case 4: return _hf_; - case 6: + case 5: return _hg_; - case 7: + case 6: return _hh_; - case 8: + case 7: return _hi_; - case 9: + case 8: return _hj_; - case 10: + case 9: return _hk_; - case 11: + case 10: return _hl_; - case 12: + case 11: return _hm_; - case 13: + case 12: return _hn_; - case 14: + case 13: return _ho_; - case 15: + case 14: return _hp_; - case 16: + case 15: return _hq_; - case 17: + case 16: return _hr_; - case 18: + case 17: return _hs_; - case 19: + case 18: return _ht_; - case 20: + case 19: return _hu_; - case 21: + case 20: return _hv_; - case 22: + case 21: return _hw_; - case 23: + case 22: return _hx_; - case 24: + case 23: return _hy_; - case 25: + case 24: return _hz_; - case 26: + case 25: return _hA_; - case 27: + case 26: return _hB_; - case 28: + case 27: return _hC_; - case 29: + case 28: return _hD_; - default: return _hE_; + case 29: + return _hE_; + default: return _hF_; } } function type_str_of_yojson(j){ @@ -13229,10 +13252,10 @@ function yojson_of_type_str(ts){ var match = yojson_of_type(ts); if(typeof match !== "number" && 848054398 === match[1]){ - var _l6_ = match[2]; - if(_l6_ && ! _l6_[2]){var json = _l6_[1]; return json;} + var _l7_ = match[2]; + if(_l7_ && ! _l7_[2]){var json = _l7_[1]; return json;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _h9_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _h__], 1); } function t_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -13382,15 +13405,15 @@ v$0]; } var - _l2_ = [0, [0, 0 === symbol$9(type_field) ? 1 : 0, _h__], 0], - _l3_ = - [0, [0, 0 === symbol$9(image_blur_hashes_field) ? 1 : 0, _h$_], _l2_], - _l4_ = [0, [0, 0 === symbol$9(server_id_field) ? 1 : 0, _ia_], _l3_], - _l5_ = [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _ib_], _l4_]; + _l3_ = [0, [0, 0 === symbol$9(type_field) ? 1 : 0, _h$_], 0], + _l4_ = + [0, [0, 0 === symbol$9(image_blur_hashes_field) ? 1 : 0, _ia_], _l3_], + _l5_ = [0, [0, 0 === symbol$9(server_id_field) ? 1 : 0, _ib_], _l4_], + _l6_ = [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _ic_], _l5_]; return record_undefined_elements (tp_loc$4, yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _ic_], _l5_]); + [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _id_], _l6_]); } return record_list_instead_atom(tp_loc$4, yojson); } @@ -13412,22 +13435,22 @@ else var arg$8 = - function(_l1_){return yojson_of_option(yojson_of_string, _l1_);} + function(_l2_){return yojson_of_option(yojson_of_string, _l2_);} (v_collection_type), - bnd$3 = [0, _im_, arg$8], + bnd$3 = [0, _in_, arg$8], bnds$0 = [0, bnd$3, bnds]; var arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _id_, arg], bnds$0], + bnds$1 = [0, [0, _ie_, arg], bnds$0], arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _ie_, arg$0], bnds$1], + bnds$2 = [0, [0, _if_, arg$0], bnds$1], arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _if_, arg$1], bnds$2]; + bnds$3 = [0, [0, _ig_, arg$1], bnds$2]; if(v_parent_id) var v = v_parent_id[1], arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _ig_, arg$2], + bnd = [0, _ih_, arg$2], bnds$4 = [0, bnd, bnds$3]; else var bnds$4 = bnds$3; @@ -13435,7 +13458,7 @@ var v$0 = v_album_id[1], arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _ih_, arg$3], + bnd$0 = [0, _ii_, arg$3], bnds$5 = [0, bnd$0, bnds$4]; else var bnds$5 = bnds$4; @@ -13443,24 +13466,24 @@ var v$1 = v_path[1], arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _ii_, arg$4], + bnd$1 = [0, _ij_, arg$4], bnds$6 = [0, bnd$1, bnds$5]; else var bnds$6 = bnds$5; var arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _ij_, arg$5], bnds$6]; + bnds$7 = [0, [0, _ik_, arg$5], bnds$6]; if(v_sort_name) var v$2 = v_sort_name[1], arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _ik_, arg$6], + bnd$2 = [0, _il_, arg$6], bnds$8 = [0, bnd$2, bnds$7]; else var bnds$8 = bnds$7; var arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _il_, arg$7], bnds$8]; + bnds$9 = [0, [0, _im_, arg$7], bnds$8]; return [0, 963043957, bnds$9]; } function params_of_yojson(yojson){ @@ -13635,18 +13658,18 @@ enable_images_value]; } var - _lV_ = [0, [0, 0 === symbol$9(enable_images_field) ? 1 : 0, _in_], 0], - _lW_ = - [0, [0, 0 === symbol$9(enable_user_data_field) ? 1 : 0, _io_], _lV_], - _lX_ = [0, [0, 0 === symbol$9(recursive_field) ? 1 : 0, _ip_], _lW_], - _lY_ = [0, [0, 0 === symbol$9(sort_by_field) ? 1 : 0, _iq_], _lX_], - _lZ_ = - [0, [0, 0 === symbol$9(include_item_types_field) ? 1 : 0, _ir_], _lY_], - _l0_ = [0, [0, 0 === symbol$9(fields_field) ? 1 : 0, _is_], _lZ_]; + _lW_ = [0, [0, 0 === symbol$9(enable_images_field) ? 1 : 0, _io_], 0], + _lX_ = + [0, [0, 0 === symbol$9(enable_user_data_field) ? 1 : 0, _ip_], _lW_], + _lY_ = [0, [0, 0 === symbol$9(recursive_field) ? 1 : 0, _iq_], _lX_], + _lZ_ = [0, [0, 0 === symbol$9(sort_by_field) ? 1 : 0, _ir_], _lY_], + _l0_ = + [0, [0, 0 === symbol$9(include_item_types_field) ? 1 : 0, _is_], _lZ_], + _l1_ = [0, [0, 0 === symbol$9(fields_field) ? 1 : 0, _it_], _l0_]; return record_undefined_elements (tp_loc$5, yojson, - [0, [0, 0 === symbol$9(user_id_field) ? 1 : 0, _it_], _l0_]); + [0, [0, 0 === symbol$9(user_id_field) ? 1 : 0, _iu_], _l1_]); } return record_list_instead_atom(tp_loc$5, yojson); } @@ -13665,18 +13688,18 @@ v_parent_id = param[2], v_ids = param[1], arg = yojson_of_bool(v_enable_images), - bnds = [0, [0, _iu_, arg], 0], + bnds = [0, [0, _iv_, arg], 0], arg$0 = yojson_of_bool(v_enable_user_data), - bnds$0 = [0, [0, _iv_, arg$0], bnds], + bnds$0 = [0, [0, _iw_, arg$0], bnds], arg$1 = yojson_of_bool(v_recursive), - bnds$1 = [0, [0, _iw_, arg$1], bnds$0], + bnds$1 = [0, [0, _ix_, arg$1], bnds$0], arg$2 = yojson_of_list(yojson_of_sort, v_sort_by), - bnds$2 = [0, [0, _ix_, arg$2], bnds$1]; + bnds$2 = [0, [0, _iy_, arg$2], bnds$1]; if(v_sort_order) var v = v_sort_order[1], arg$3 = yojson_of_order(v), - bnd = [0, _iy_, arg$3], + bnd = [0, _iz_, arg$3], bnds$3 = [0, bnd, bnds$2]; else var bnds$3 = bnds$2; @@ -13684,7 +13707,7 @@ var v$0 = v_limit[1], arg$4 = yojson_of_int(v$0), - bnd$0 = [0, _iz_, arg$4], + bnd$0 = [0, _iA_, arg$4], bnds$4 = [0, bnd$0, bnds$3]; else var bnds$4 = bnds$3; @@ -13692,22 +13715,22 @@ var v$1 = v_start_index[1], arg$5 = yojson_of_int(v$1), - bnd$1 = [0, _iA_, arg$5], + bnd$1 = [0, _iB_, arg$5], bnds$5 = [0, bnd$1, bnds$4]; else var bnds$5 = bnds$4; var arg$6 = yojson_of_list(yojson_of_type, v_include_item_types), - bnds$6 = [0, [0, _iB_, arg$6], bnds$5], + bnds$6 = [0, [0, _iC_, arg$6], bnds$5], arg$7 = yojson_of_list(yojson_of_field, v_fields), - bnds$7 = [0, [0, _iC_, arg$7], bnds$6], + bnds$7 = [0, [0, _iD_, arg$7], bnds$6], arg$8 = yojson_of_string(v_user_id), - bnds$8 = [0, [0, _iD_, arg$8], bnds$7]; + bnds$8 = [0, [0, _iE_, arg$8], bnds$7]; if(v_parent_id) var v$2 = v_parent_id[1], arg$9 = yojson_of_string(v$2), - bnd$2 = [0, _iE_, arg$9], + bnd$2 = [0, _iF_, arg$9], bnds$9 = [0, bnd$2, bnds$8]; else var bnds$9 = bnds$8; @@ -13716,8 +13739,8 @@ else var arg$10 = - function(_lU_){return yojson_of_list(yojson_of_string, _lU_);}(v_ids), - bnd$3 = [0, _iF_, arg$10], + function(_lV_){return yojson_of_list(yojson_of_string, _lV_);}(v_ids), + bnd$3 = [0, _iG_, arg$10], bnds$10 = [0, bnd$3, bnds$9]; return [0, 963043957, bnds$10]; } @@ -13782,13 +13805,13 @@ return [0, items_value, total_record_count_value, start_index_value]; } var - _lS_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iG_], 0], - _lT_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iH_], _lS_]; + _lT_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iH_], 0], + _lU_ = + [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iI_], _lT_]; return record_undefined_elements (tp_loc$6, yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iI_], _lT_]); + [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iJ_], _lU_]); } return record_list_instead_atom(tp_loc$6, yojson); } @@ -13798,15 +13821,15 @@ v_total_record_count = param[2], v_items = param[1], arg = yojson_of_int(v_start_index), - bnds = [0, [0, _iJ_, arg], 0], + bnds = [0, [0, _iK_, arg], 0], arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _iK_, arg$0], bnds], + bnds$0 = [0, [0, _iL_, arg$0], bnds], arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _iL_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iM_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } var method = 0; - function endpoint(param){return _iM_;} + function endpoint(param){return _iN_;} function params_of_yojson$0(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ var @@ -13850,7 +13873,7 @@ [0, [0, 0 === symbol$9(include_external_content_field) ? 1 : 0, - _iN_], + _iO_], 0]); var include_external_content_value = match[1]; return [0, include_external_content_value]; @@ -13861,7 +13884,7 @@ var v_include_external_content = param[1], arg = yojson_of_bool(v_include_external_content), - bnds = [0, [0, _iO_, arg], 0]; + bnds = [0, [0, _iP_, arg], 0]; return [0, 963043957, bnds]; } function response_of_yojson$0(yojson){ @@ -13925,13 +13948,13 @@ return [0, items_value, total_record_count_value, start_index_value]; } var - _lQ_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iP_], 0], - _lR_ = - [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iQ_], _lQ_]; + _lR_ = [0, [0, 0 === symbol$9(start_index_field) ? 1 : 0, _iQ_], 0], + _lS_ = + [0, [0, 0 === symbol$9(total_record_count_field) ? 1 : 0, _iR_], _lR_]; return record_undefined_elements (tp_loc$8, yojson, - [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iR_], _lR_]); + [0, [0, 0 === symbol$9(items_field) ? 1 : 0, _iS_], _lS_]); } return record_list_instead_atom(tp_loc$8, yojson); } @@ -13941,14 +13964,14 @@ v_total_record_count = param[2], v_items = param[1], arg = yojson_of_int(v_start_index), - bnds = [0, [0, _iS_, arg], 0], + bnds = [0, [0, _iT_, arg], 0], arg$0 = yojson_of_int(v_total_record_count), - bnds$0 = [0, [0, _iT_, arg$0], bnds], + bnds$0 = [0, [0, _iU_, arg$0], bnds], arg$1 = yojson_of_list(yojson_of_t, v_items), - bnds$1 = [0, [0, _iU_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iV_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } - function endpoint$0(pp){return [0, _iW_, [0, pp[1], _iV_]];} + function endpoint$0(pp){return [0, _iX_, [0, pp[1], _iW_]];} function virtual_folder_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ var @@ -14010,12 +14033,12 @@ return [0, name_value, locations_value, item_id_value]; } var - _lO_ = [0, [0, 0 === symbol$9(item_id_field) ? 1 : 0, _iX_], 0], - _lP_ = [0, [0, 0 === symbol$9(locations_field) ? 1 : 0, _iY_], _lO_]; + _lP_ = [0, [0, 0 === symbol$9(item_id_field) ? 1 : 0, _iY_], 0], + _lQ_ = [0, [0, 0 === symbol$9(locations_field) ? 1 : 0, _iZ_], _lP_]; return record_undefined_elements (tp_loc$9, yojson, - [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _iZ_], _lP_]); + [0, [0, 0 === symbol$9(name_field) ? 1 : 0, _i0_], _lQ_]); } return record_list_instead_atom(tp_loc$9, yojson); } @@ -14025,22 +14048,22 @@ v_locations = param[2], v_name = param[1], arg = yojson_of_string(v_item_id), - bnds = [0, [0, _i0_, arg], 0], + bnds = [0, [0, _i1_, arg], 0], arg$0 = yojson_of_list(yojson_of_string, v_locations), - bnds$0 = [0, [0, _i1_, arg$0], bnds], + bnds$0 = [0, [0, _i2_, arg$0], bnds], arg$1 = yojson_of_string(v_name), - bnds$1 = [0, [0, _i2_, arg$1], bnds$0]; + bnds$1 = [0, [0, _i3_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } var session_uuid = [0, 0]; function set_session_uuid(s){session_uuid[1] = [0, s]; return;} function authorization(token, param){ if(token) - var t = token[1], token$0 = caml_call1(sprintf(_i3_), t); + var t = token[1], token$0 = caml_call1(sprintf(_i4_), t); else - var token$0 = _i6_; - var session_uuid$0 = value(session_uuid[1], _i4_); - return caml_call2(sprintf(_i5_), session_uuid$0, token$0); + var token$0 = _i7_; + var session_uuid$0 = value(session_uuid[1], _i5_); + return caml_call2(sprintf(_i6_), session_uuid$0, token$0); } function request$1(base_url, token, headers, Q){ return function(params, path_params){ @@ -14049,7 +14072,7 @@ base_path_segments = get_ok(path_segments(base_uri)), endpoint_path_segments = map$1 - (function(_lN_){return caml_jsstring_of_string(_lN_);}, + (function(_lO_){return caml_jsstring_of_string(_lO_);}, caml_call1(Q[6], path_params)), path_segments$0 = caml_equal(base_path_segments, [0, empty, 0]) @@ -14115,10 +14138,10 @@ var yojson = from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _lM_ = caml_call1(Q[4], yojson); return _lM_;} + try{var _lN_ = caml_call1(Q[4], yojson); return _lN_;} catch(e$0){ var e = caml_wrap_exception(e$0); - log([0, _i7_, [0, json, 0]]); + log([0, _i8_, [0, json, 0]]); log([0, e, 0]); throw caml_maybe_attach_backtrace(e, 0); } @@ -14128,9 +14151,9 @@ var method$0 = 0; function get_token(t){return t[2][2];} function query(t){ - var token = get_token(t), base_url = t[1], _lJ_ = [0, token]; - return function(_lK_, _lL_){ - return request$1(base_url, _lJ_, _lK_, _lL_);}; + var token = get_token(t), base_url = t[1], _lK_ = [0, token]; + return function(_lL_, _lM_){ + return request$1(base_url, _lK_, _lL_, _lM_);}; } function tag_of(obj){ return is_block(obj) ? [0, caml_obj_tag(obj)] : [1, obj]; @@ -14155,14 +14178,14 @@ return caml_call1(f, data); } var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _lH_(f){return caml_call1(f, v);} - return function(_lI_){return iter(_lH_, _lI_);} + function _lI_(f){return caml_call1(f, v);} + return function(_lJ_){return iter(_lI_, _lJ_);} (find_all(listeners, tag_of(e))); }); return 0; } - var _lF_ = 0; - (function(_lG_){return listen(_lF_, message, on_message, _lG_);}(worker)); + var _lG_ = 0; + (function(_lH_){return listen(_lG_, message, on_message, _lH_);}(worker)); return; } function dispatch_event(e, v){return post(0, to_jstr$1([1, [0, e, v]]));} @@ -14187,9 +14210,9 @@ } return [0, Start_client, dispatch_event, Make_worker]; } - function _i8_(_lB_){ - var _lC_ = Make$7(_lB_), _lD_ = _lC_[3]; - return [0, , _lC_[2], function(_lE_){_lD_(_lE_); return;}]; + function _i9_(_lC_){ + var _lD_ = Make$7(_lC_), _lE_ = _lD_[3]; + return [0, , _lD_[2], function(_lF_){_lE_(_lF_); return;}]; } function apply(t, size, i){ if(typeof t === "number") return 2 <= t ? (size - 1 | 0) - i | 0 : i; @@ -14256,11 +14279,11 @@ var item_value = match$0[1], id_value = match[1]; return [0, id_value, item_value]; } - var _lA_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _i9_], 0]; + var _lB_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _i__], 0]; return record_undefined_elements (tp_loc$10, yojson, - [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _i__], _lA_]); + [0, [0, 0 === symbol$9(id_field) ? 1 : 0, _i$_], _lB_]); } return record_list_instead_atom(tp_loc$10, yojson); } @@ -14269,9 +14292,9 @@ v_item = param[2], v_id = param[1], arg = yojson_of_option(yojson_of_string, v_item), - bnds = [0, [0, _i$_, arg], 0], + bnds = [0, [0, _ja_, arg], 0], arg$0 = yojson_of_int(v_id), - bnds$0 = [0, [0, _ja_, arg$0], bnds]; + bnds$0 = [0, [0, _jb_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function to_jv$1(k){return k;} @@ -14342,12 +14365,12 @@ return [0, date_added_value, views_value, sort_name_value]; } var - _ly_ = [0, [0, 0 === symbol$9(sort_name_field) ? 1 : 0, _jb_], 0], - _lz_ = [0, [0, 0 === symbol$9(views_field) ? 1 : 0, _jc_], _ly_]; + _lz_ = [0, [0, 0 === symbol$9(sort_name_field) ? 1 : 0, _jc_], 0], + _lA_ = [0, [0, 0 === symbol$9(views_field) ? 1 : 0, _jd_], _lz_]; return record_undefined_elements (tp_loc$11, yojson, - [0, [0, 0 === symbol$9(date_added_field) ? 1 : 0, _jd_], _lz_]); + [0, [0, 0 === symbol$9(date_added_field) ? 1 : 0, _je_], _lA_]); } return record_list_instead_atom(tp_loc$11, yojson); } @@ -14357,11 +14380,11 @@ v_views = param[2], v_date_added = param[1], arg = yojson_of_string(v_sort_name), - bnds = [0, [0, _je_, arg], 0], + bnds = [0, [0, _jf_, arg], 0], arg$0 = yojson_of_list(yojson_of_string, v_views), - bnds$0 = [0, [0, _jf_, arg$0], bnds], + bnds$0 = [0, [0, _jg_, arg$0], bnds], arg$1 = yojson_of_int(v_date_added), - bnds$1 = [0, [0, _jg_, arg$1], bnds$0]; + bnds$1 = [0, [0, _jh_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } function t_of_yojson$1(yojson){ @@ -14412,11 +14435,11 @@ var item_value = match$0[1], sorts_value = match[1]; return [0, sorts_value, item_value]; } - var _lx_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _jh_], 0]; + var _ly_ = [0, [0, 0 === symbol$9(item_field) ? 1 : 0, _ji_], 0]; return record_undefined_elements (tp_loc$12, yojson, - [0, [0, 0 === symbol$9(sorts_field) ? 1 : 0, _ji_], _lx_]); + [0, [0, 0 === symbol$9(sorts_field) ? 1 : 0, _jj_], _ly_]); } return record_list_instead_atom(tp_loc$12, yojson); } @@ -14425,9 +14448,9 @@ v_item = param[2], v_sorts = param[1], arg = yojson_of_t(v_item), - bnds = [0, [0, _jj_, arg], 0], + bnds = [0, [0, _jk_, arg], 0], arg$0 = yojson_of_sorts(v_sorts), - bnds$0 = [0, [0, _jk_, arg$0], bnds]; + bnds$0 = [0, [0, _jl_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function to_jv$3(param){ @@ -14443,7 +14466,7 @@ function of_jv$2(j){ var match = caml_js_to_array(j), len = match.length - 1; if(3 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jl_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jm_], 1); var id = match[1], sort_name = match[2], @@ -14453,36 +14476,36 @@ views$0 = to_list$0(_cJ_, views); return [0, id$0, sort_name$0, views$0]; } - var path$1 = [1, [0, _jo_, _jn_, _jm_]]; + var path$1 = [1, [0, _jp_, _jo_, _jn_]]; function to_jv$4(k){return k;} function of_jv$3(j){return j;} function to_jv$5(k){return _cK_(k);} function of_jv$4(j){return _cJ_(j);} function to_jv$6(k){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jp_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jq_], 1); } function of_jv$5(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jq_], 1); - var type = match[1], views = match[2], _lw_ = to_list$0(_cJ_, views); - return [0, _cJ_(type), _lw_]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _jr_], 1); + var type = match[1], views = match[2], _lx_ = to_list$0(_cJ_, views); + return [0, _cJ_(type), _lx_]; } - var path$4 = [1, [0, _js_, _jr_]]; + var path$4 = [1, [0, _jt_, _js_]]; function to_jv$7(t){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jt_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ju_], 1); } function of_jv$6(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ju_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jv_], 1); var collection_type = match[1], sort_name = match[2], - _lv_ = _cJ_(sort_name); - return [0, _cJ_(collection_type), _lv_]; + _lw_ = _cJ_(sort_name); + return [0, _cJ_(collection_type), _lw_]; } - var path$5 = [1, [0, _jw_, _jv_]]; + var path$5 = [1, [0, _jx_, _jw_]]; function to_jv$8(t){return t_to_jv(yojson_of_t$1, t);} function of_jv$7(j){return get_exn(jv_to_t(t_of_yojson$1, j));} function get_key$0(t){return [0, t[2][3], t[1][3], t[1][2]];} @@ -14511,38 +14534,38 @@ to_jv$10, of_jv$9, get_key$1]), - _jx_ = + _jy_ = [0, [0, path$1, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jy_ = [0, name$5]; - function _jz_(_lt_, _lu_){return _de_(_jy_, _lt_, _lu_);} + _jz_ = [0, name$5]; + function _jA_(_lu_, _lv_){return _de_(_jz_, _lu_, _lv_);} var ItemsByDateAdded = - function(_ls_){return _jz_(_jx_, _ls_);}([0, path$2, to_jv$4, of_jv$3]), - _jA_ = + function(_lt_){return _jA_(_jy_, _lt_);}([0, path$2, to_jv$4, of_jv$3]), + _jB_ = [0, [0, path$1, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jB_ = [0, name$6]; - function _jC_(_lq_, _lr_){return _de_(_jB_, _lq_, _lr_);} + _jC_ = [0, name$6]; + function _jD_(_lr_, _ls_){return _de_(_jC_, _lr_, _ls_);} var ItemsByViewAndKind = - function(_lp_){return _jC_(_jA_, _lp_);}([0, path$4, to_jv$6, of_jv$5]), - _jD_ = + function(_lq_){return _jD_(_jB_, _lq_);}([0, path$4, to_jv$6, of_jv$5]), + _jE_ = [0, [0, path$1, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jE_ = [0, name$7]; - function _jF_(_ln_, _lo_){return _de_(_jE_, _ln_, _lo_);} + _jF_ = [0, name$7]; + function _jG_(_lo_, _lp_){return _de_(_jF_, _lo_, _lp_);} var ItemsById = - function(_lm_){return _jF_(_jD_, _lm_);}([0, path$3, to_jv$5, of_jv$4]), - _jG_ = + function(_ln_){return _jG_(_jE_, _ln_);}([0, path$3, to_jv$5, of_jv$4]), + _jH_ = [0, [0, path$1, to_jv$3, of_jv$2], name$3, to_jv$8, of_jv$7, get_key$0], - _jH_ = [0, name$8]; - function _jI_(_lk_, _ll_){return _de_(_jH_, _lk_, _ll_);} + _jI_ = [0, name$8]; + function _jJ_(_ll_, _lm_){return _de_(_jI_, _ll_, _lm_);} var ItemsByTypeAndName = - function(_lj_){return _jI_(_jG_, _lj_);}([0, path$5, to_jv$7, of_jv$6]), + function(_lk_){return _jJ_(_jH_, _lk_);}([0, path$5, to_jv$7, of_jv$6]), chunk_size = 500; function fetch_total_item_count(source){ var - _li_ = + _lj_ = [0, 0, 0, @@ -14550,9 +14573,9 @@ 0, include_item_types, 0, + _jM_, _jL_, _jK_, - _jJ_, 1, 0, 0]; @@ -14567,7 +14590,7 @@ response_of_yojson, method, endpoint]), - _li_, + _lj_, 0), function(res){return res[2];}); } @@ -14578,14 +14601,14 @@ infos = match[1], transaction$0 = transaction - ([0, [0, function(_lh_){return _lh_;}, Orderred_items_store[1]], 0], - _jM_, + ([0, [0, function(_li_){return _li_;}, Orderred_items_store[1]], 0], + _jN_, idb), store = object_store - ([0, function(_lg_){return _lg_;}, Orderred_items_store[1]]) + ([0, function(_lh_){return _lh_;}, Orderred_items_store[1]]) (transaction$0), - req = Orderred_items_store[9].call(null, 0, _jN_, store), + req = Orderred_items_store[9].call(null, 0, _jO_, store), last_key = [0, 0]; on_success (function(param, q){ @@ -14648,7 +14671,7 @@ }); } function update_views(source, idb){ - var _lc_ = [0, source[2][1][4]]; + var _ld_ = [0, source[2][1][4]]; return let$2 (caml_call2 (query(source) @@ -14660,8 +14683,8 @@ response_of_yojson$0, method$0, endpoint$0]), - _jP_, - _lc_), + _jQ_, + _ld_), function(views){ iter (function(item){ @@ -14669,13 +14692,13 @@ transaction$0 = transaction ([0, - [0, function(_lf_){return _lf_;}, Orderred_items_store[1]], - [0, [0, function(_le_){return _le_;}, Items_store[1]], 0]], - _jO_, + [0, function(_lg_){return _lg_;}, Orderred_items_store[1]], + [0, [0, function(_lf_){return _lf_;}, Items_store[1]], 0]], + _jP_, idb), s_items = object_store - ([0, function(_ld_){return _ld_;}, Items_store[1]]) + ([0, function(_le_){return _le_;}, Items_store[1]]) (transaction$0), sort_name = value$0(item[2], item[1]); Items_store[14].call @@ -14690,7 +14713,7 @@ function parent_ids_of_view_children(param){ var id = param[3], - _lb_ = [0, 0, [0, id], source[2][1][4], _jQ_, 0, 0, 0, 0, 0, 0, 0, 0]; + _lc_ = [0, 0, [0, id], source[2][1][4], _jR_, 0, 0, 0, 0, 0, 0, 0, 0]; return let$2 (caml_call2 (query(source) @@ -14702,7 +14725,7 @@ response_of_yojson, method, endpoint]), - _lb_, + _lc_, 0), function(res){ return fold_left @@ -14723,13 +14746,13 @@ } function paths_of_parents(parents){ var - _k$_ = source[2][1][4], - _la_ = + _la_ = source[2][1][4], + _lb_ = [0, Set[49].call(null, parents), 0, - _k$_, - _jR_, + _la_, + _jS_, 0, 0, 0, @@ -14749,7 +14772,7 @@ response_of_yojson, method, endpoint]), - _la_, + _lb_, 0), function(res){ return filter_map$0 @@ -14801,20 +14824,20 @@ var transaction$0 = transaction - ([0, [0, function(_k__){return _k__;}, Orderred_items_store[1]], 0], - _jS_, + ([0, [0, function(_k$_){return _k$_;}, Orderred_items_store[1]], 0], + _jT_, idb), store = object_store - ([0, function(_k9_){return _k9_;}, Orderred_items_store[1]]) + ([0, function(_k__){return _k__;}, Orderred_items_store[1]]) (transaction$0); if(last >= first){ var i = first; for(;;){ Orderred_items_store[14].call(null, [0, i, 0], 0, store); - var _k8_ = i + 1 | 0; + var _k9_ = i + 1 | 0; if(last === i) break; - i = _k8_; + i = _k9_; } } return; @@ -14826,15 +14849,15 @@ return let$1 (deduce_virtual_folders_from_vi(source, views), function(vfolders){ - info([0, _jV_, [0, first, [0, _jU_, [0, last, _jT_]]]]); + info([0, _jW_, [0, first, [0, _jV_, [0, last, _jU_]]]]); var fetch_queue = create$0(0), total = (last - first | 0) + 1 | 0; function enqueue(start_index, todo){ var start_index$0 = start_index, todo$0 = todo; for(;;){ - var _k7_ = symbol$3(todo$0, 0); - if(! _k7_) return _k7_; + var _k8_ = symbol$3(todo$0, 0); + if(! _k8_) return _k8_; var limit = min(todo$0, chunk_size), req = @@ -14842,12 +14865,12 @@ 0, 0, source[2][1][4], - _jY_, + _jZ_, include_item_types, [0, start_index$0], [0, limit], + _jY_, _jX_, - _jW_, 1, 0, 1]; @@ -14868,7 +14891,7 @@ var threads = 1; if(! symbol$3(threads, 0)) throw caml_maybe_attach_backtrace - ([0, Assert_failure, _j1_], 1); + ([0, Assert_failure, _j2_], 1); function take_n(acc, n){ var acc$0 = acc, n$0 = n; for(;;){ @@ -14906,17 +14929,17 @@ transaction$0 = transaction ([0, - [0, function(_k6_){return _k6_;}, Orderred_items_store[1]], - [0, [0, function(_k5_){return _k5_;}, Items_store[1]], 0]], - _jZ_, + [0, function(_k7_){return _k7_;}, Orderred_items_store[1]], + [0, [0, function(_k6_){return _k6_;}, Items_store[1]], 0]], + _j0_, idb), s_list = object_store - ([0, function(_k4_){return _k4_;}, Orderred_items_store[1]]) + ([0, function(_k5_){return _k5_;}, Orderred_items_store[1]]) (transaction$0), s_items = object_store - ([0, function(_k3_){return _k3_;}, Items_store[1]]) + ([0, function(_k4_){return _k4_;}, Items_store[1]]) (transaction$0); return iteri (function(index, item){ @@ -14924,7 +14947,7 @@ path = item[4], id = item[3], index$0 = start_index + index | 0, - path$0 = value$0(path, _j0_), + path$0 = value$0(path, _j1_), views = views_of_path(vfolders, path$0), sort_name = value$0(item[2], item[1]); Orderred_items_store[14].call @@ -14984,41 +15007,41 @@ (caml_call1(sync(report$0, source)(idb), status), function(param){ return iter$2 - (function(report){return caml_call1(report, _j2_);}, report); + (function(report){return caml_call1(report, _j3_);}, report); }); }); } var Queries = [0], - include$0 = _i8_(Queries), + include$0 = _i9_(Queries), dispatch_event = include$0[2], Make_worker = include$0[3], get$3 = Items_store[5], index = Items_store[13]; function on_upgrade_needed$0(e, q){ var new_version$0 = new_version(e), old_version$0 = old_version(e); - info([0, _j4_, [0, old_version$0, [0, _j3_, [0, new_version$0, 0]]]]); + info([0, _j5_, [0, old_version$0, [0, _j4_, [0, new_version$0, 0]]]]); var db = result(q), stores = object_store_names(db); - info(_j5_); - iter$0(function(_k2_){return delete_object_store(db, _k2_);}, stores); + info(_j6_); + iter$0(function(_k3_){return delete_object_store(db, _k3_);}, stores); var list = create_object_store - ([0, function(_k1_){return _k1_;}, Orderred_items_store[1]]) - (_j6_, db), - items = - create_object_store([0, function(_k0_){return _k0_;}, Items_store[1]]) + ([0, function(_k2_){return _k2_;}, Orderred_items_store[1]]) (_j7_, db), + items = + create_object_store([0, function(_k1_){return _k1_;}, Items_store[1]]) + (_j8_, db), virtual_folders = create_object_store - ([0, function(_kZ_){return _kZ_;}, Virtual_folder_store[1]]) - (_j8_, db), + ([0, function(_k0_){return _k0_;}, Virtual_folder_store[1]]) + (_j9_, db), index_date_added = caml_call1 (Items_store[12].call (null, [0, - function(_kY_){return _kY_;}, + function(_kZ_){return _kZ_;}, ItemsByDateAdded[12], ItemsByDateAdded[2]]), items); @@ -15026,7 +15049,7 @@ (Items_store[12].call (null, [0, - function(_kX_){return _kX_;}, + function(_kY_){return _kY_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), items); @@ -15034,26 +15057,26 @@ (Items_store[12].call (null, [0, - function(_kW_){return _kW_;}, + function(_kX_){return _kX_;}, ItemsByViewAndKind[12], ItemsByViewAndKind[2]]), items); caml_call1 (Items_store[12].call - (null, [0, function(_kV_){return _kV_;}, ItemsById[12], ItemsById[2]]), + (null, [0, function(_kW_){return _kW_;}, ItemsById[12], ItemsById[2]]), items); return info ([0, - _j9_, + _j__, [0, list, [0, items, [0, index_date_added, [0, virtual_folders, 0]]]]]); } function with_idb(version, name, f){ function f$0(ev, dbr){var db = result(dbr); return caml_call1(f, db);} - (function(_kS_){return on_success(f$0, _kS_);} - (function(_kT_){return on_upgrade_needed(on_upgrade_needed$0, _kT_);} - (function(_kU_){return open(name, version, _kU_);}(get_factory(0, 0))))); + (function(_kT_){return on_success(f$0, _kT_);} + (function(_kU_){return on_upgrade_needed(on_upgrade_needed$0, _kU_);} + (function(_kV_){return open(name, version, _kV_);}(get_factory(0, 0))))); return; } self_init(0); @@ -15070,7 +15093,7 @@ function promise(f){return f[cst_fut];} var arr = of_array(promise, fs), all$0 = all(arr); function to_array$0(l){ - return resolve(to_array(function(_kR_){return _kR_;}, l)); + return resolve(to_array(function(_kS_){return _kS_;}, l)); } return fut(bind(all$0, to_array$0)); } @@ -15083,21 +15106,21 @@ return check_and_sync([0, report], source$0, idb); } var match = create$5(0), set_idb = match[2], idb = match[1]; - (function(_kQ_){return with_idb(_j$_, _j__, _kQ_);} + (function(_kR_){return with_idb(_ka_, _j$_, _kR_);} (function(idb){set_idb([0, idb]); return 0;})); function read_only_store(param){ return let$2 (idb, function(idb){ var - _kN_ = + _kO_ = transaction - ([0, [0, function(_kP_){return _kP_;}, Items_store[1]], 0], - _ka_, + ([0, [0, function(_kQ_){return _kQ_;}, Items_store[1]], 0], + _kb_, idb); return object_store - ([0, function(_kO_){return _kO_;}, Items_store[1]]) - (_kN_); + ([0, function(_kP_){return _kP_;}, Items_store[1]]) + (_kO_); }); } var view_memo = create$2(0, 64), last_view = [0, [0, -1, [0]]]; @@ -15108,7 +15131,7 @@ src_views = param[2], hash$0 = hash([0, src_views, sort$0, filters]); if(equal$0(last_view[1][1], hash$0)) return ok(last_view[1][2]); - function _kE_(keys){ + function _kF_(keys){ a: { if(filters && ! filters[2]){ @@ -15116,17 +15139,17 @@ if(! is_empty$0(sub)){ var sub$0 = lowercase_ascii$1(sub), - _kL_ = + _kM_ = filter (function(param){ var sort_name = param[2], sort_name$0 = lowercase_ascii$1(sort_name), - pattern = compile(caml_call1(sprintf(_kb_), sub$0)); + pattern = compile(caml_call1(sprintf(_kc_), sub$0)); return symbol$4(find$0(0, pattern)(sort_name$0), 0); }, keys), - keys$0 = _kL_; + keys$0 = _kM_; break a; } } @@ -15134,31 +15157,31 @@ } if(sort$0) sort - (function(param, _kM_){ - var snb = _kM_[2], sna = param[2]; + (function(param, _kN_){ + var snb = _kN_[2], sna = param[2]; return compare$0(sna, snb); }, keys$0); last_view[1] = [0, hash$0, keys$0]; return keys$0; } - try{var _kI_ = ok(find(view_memo, [0, src_views, sort$0])), _kH_ = _kI_;} - catch(_kJ_){ - var _kF_ = caml_wrap_exception(_kJ_); - if(_kF_ !== Not_found) throw caml_maybe_attach_backtrace(_kF_, 0); + try{var _kJ_ = ok(find(view_memo, [0, src_views, sort$0])), _kI_ = _kJ_;} + catch(_kK_){ + var _kG_ = caml_wrap_exception(_kK_); + if(_kG_ !== Not_found) throw caml_maybe_attach_backtrace(_kG_, 0); var - lower = of_array(_cK_, [0, _kc_]), - upper = of_array(_cK_, [0, _kd_]), - query = bound(lower, upper, _kf_, _ke_, 0), + lower = of_array(_cK_, [0, _kd_]), + upper = of_array(_cK_, [0, _ke_]), + query = bound(lower, upper, _kg_, _kf_, 0), idx = caml_call1 (index ([0, - function(_kK_){return _kK_;}, + function(_kL_){return _kL_;}, ItemsByViewAndKind[12], ItemsByViewAndKind[2]]), store), - _kG_ = + _kH_ = let$2 (as_fut(ItemsByViewAndKind[8].call(null, [0, query], idx)), function(all_keys){ @@ -15178,9 +15201,9 @@ add$0(view_memo, [0, src_views, sort$0], keys); return keys; }), - _kH_ = _kG_; + _kI_ = _kH_; } - return let$2(_kH_, _kE_); + return let$2(_kI_, _kF_); } function on_query(q){ switch(q[0]){ @@ -15216,13 +15239,13 @@ caml_call1 (index ([0, - function(_kD_){return _kD_;}, + function(_kE_){return _kE_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), store), - lower = of_array(_cK_, [0, _kg_]), - upper = of_array(_cK_, [0, _kh_]), - query = bound(lower, upper, _kj_, _ki_, 0); + lower = of_array(_cK_, [0, _kh_]), + upper = of_array(_cK_, [0, _ki_]), + query = bound(lower, upper, _kk_, _kj_, 0); return let$1 (as_fut (ItemsByTypeAndName[8].call(null, [0, query], index$0)), @@ -15233,13 +15256,13 @@ (function(k){return as_fut(get$3(k, store));}, to_list(keys))), function(items){ - function _kA_(l){ + function _kB_(l){ return symbol$5 - (function(_kC_){return get_exn_or(_kk_, _kC_);}, l); + (function(_kD_){return get_exn_or(_kl_, _kD_);}, l); } var items$0 = - function(_kB_){return symbol$7(_kA_, _kB_);} + function(_kC_){return symbol$7(_kB_, _kC_);} (flatten_l(items)); return items$0; }); @@ -15255,13 +15278,13 @@ caml_call1 (index ([0, - function(_kz_){return _kz_;}, + function(_kA_){return _kA_;}, ItemsByTypeAndName[12], ItemsByTypeAndName[2]]), store), - lower = of_array(_cK_, [0, _kl_]), - upper = of_array(_cK_, [0, _km_]), - query = bound(lower, upper, _ko_, _kn_, 0); + lower = of_array(_cK_, [0, _km_]), + upper = of_array(_cK_, [0, _kn_]), + query = bound(lower, upper, _kp_, _ko_, 0); return let$1 (as_fut (ItemsByTypeAndName[8].call(null, [0, query], index$0)), @@ -15272,17 +15295,17 @@ (function(k){return as_fut(get$3(k, store));}, to_list(keys))), function(items){ - function _kv_(param){ + function _kw_(param){ if(param){ var item = param[1], server_id$0 = item[2][7]; if(symbol$0(server_id$0, server_id)) return [0, item]; } return 0; } - function _kw_(_ky_){return filter_map$0(_kv_, _ky_);} + function _kx_(_kz_){return filter_map$0(_kw_, _kz_);} var items$0 = - function(_kx_){return symbol$7(_kw_, _kx_);} + function(_ky_){return symbol$7(_kx_, _ky_);} (flatten_l(items)); return items$0; }); @@ -15317,13 +15340,13 @@ index$0 = index + view[3] | 0, index$1 = apply(order, view[4], index$0), key = caml_check_bound(keys, index$1)[1 + index$1], - _kt_ = + _ku_ = let$0 (fut$0(get$3(key, store)), function(result){ if(0 !== result[0]){ var err = result[1]; - error([0, _kp_, [0, key, [0, err, 0]]]); + error([0, _kq_, [0, key, [0, err, 0]]]); return 0; } var match = result[1]; @@ -15331,9 +15354,9 @@ var v = match[1]; return [0, v]; }); - return _kt_; + return _ku_; } - catch(_ku_){return return$0(0);} + catch(_kv_){return return$0(0);} }, indexes)), function(results){return [0, results];}); @@ -15343,10 +15366,10 @@ } return [0, , , , , on_query]; } - Make_worker(function(_ks_){return [0, Worker(_ks_)[5]];}); + Make_worker(function(_kt_){return [0, Worker(_kt_)[5]];}); do_at_exit(0); return; } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJ2IiwiTWxCeXRlcyIsInRhZyIsImNvbnRlbnRzIiwibGVuZ3RoIiwidGhpcyIsImNvbnRlbnQiLCJjYW1sX2J5dGVzX29mX2pzYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwieCIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9ibGl0X3N0cmluZyIsImQiLCJlIiwianNvb19zeXNfZ2V0ZW52IiwicHJvY2VzcyIsImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyIsImNhbWxfZ2xvYmFsX2RhdGEiLCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZSIsImV4biIsImZvcmNlIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsX2dlbiIsImFyZ3MiLCJhcmdzTGVuIiwiZyIsIm5hcmdzIiwiQXJyYXkiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfaGFzaF9taXhfc3RyaW5nIiwiY2FtbF9oYXNoX21peF9ieXRlc19hcnIiLCJjYW1sX21sX2J5dGVzX2NvbnRlbnQiLCJjYW1sX2hhc2hfbWl4X2J5dGVzIiwiY2FtbF9oYXNoX21peF9maW5hbCIsImNhbWxfaGFzaCIsImNvdW50IiwibGltaXQiLCJzZWVkIiwib2JqIiwicXVldWUiLCJyZCIsIndyIiwiaGgiLCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdCIsInN0eWxlIiwiZXhwX3NpZ24iLCJzaWduX3N0ciIsImNzdCIsInhfc3RyIiwiaWR4IiwiY2FtbF9pbnQ2NF9pc196ZXJvIiwiY2FtbF9pbnQ2NF9vZl9pbnQzMiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2ludDY0X2lzX25lZ2F0aXZlIiwiY2FtbF9pbnQ2NF9uZWciLCJjYW1sX2ludDY0X2Zvcm1hdCIsIndiYXNlIiwiY3Z0YmwiLCJjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UiLCJiYXNlIiwiY2FtbF9wYXJzZV9kaWdpdCIsImNhbWxfaW50X29mX3N0cmluZyIsInRocmVzaG9sZCIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfanNfbWV0aF9jYWxsIiwiY2FtbF9qc19uZXciLCJGIiwiY2FtbF9qc19vYmplY3QiLCJjYW1sX2pzX3RvX2FycmF5IiwiY2FtbF9jYWxsYmFjayIsImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QiLCJhcml0eSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIiLCJvcmlnaW4iLCJldmVudCIsInplcm9fcG9zIiwibG9jZm10Iiwib2NhbWxfbGV4X3RhYmxlcyIsInRwX2xvYyIsInRwX2xvYyQwIiwidHBfbG9jJDEiLCJ0cF9sb2MkMiIsInRwX2xvYyQzIiwidHBfbG9jJDQiLCJ0cF9sb2MkNSIsInRwX2xvYyQ2IiwidHBfbG9jJDciLCJ0cF9sb2MkOCIsInRwX2xvYyQ5IiwidHBfbG9jJDEwIiwicGF0aCQwIiwibmFtZSQyIiwidHBfbG9jJDExIiwidHBfbG9jJDEyIiwicGF0aCQyIiwicGF0aCQzIiwibmFtZSQzIiwicGF0aCQ2IiwibmFtZSQ0IiwibmFtZSQ1IiwibmFtZSQ2IiwibmFtZSQ3IiwibmFtZSQ4IiwiaW5jbHVkZV9pdGVtX3R5cGVzIiwiaW5pdGlhbF9yZXBvcnQiLCJlcmFzZV9yZWwiLCJyZXN0IiwicmVzdCQwIiwicmVzdCQxIiwicmVzdCQyIiwicmVzdCQzIiwicmVzdCQ0IiwicmVzdCQ1IiwicmVzdCQ2IiwicmVzdCQ3IiwidHkiLCJyZXN0JDgiLCJ0eTEiLCJyZXN0JDkiLCJyZXN0JDEwIiwicmVzdCQxMSIsInJlc3QkMTIiLCJyZXN0JDEzIiwiY29uY2F0X2ZtdHR5IiwiZm10dHkxIiwiZm10dHkyIiwidHkyIiwiY29uY2F0X2ZtdCIsImZtdDEiLCJmbXQyIiwicGFkIiwicGFkJDAiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2IiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImN1ciIsImZhaWx3aXRoIiwiaW52YWxpZF9hcmciLCJhYnMiLCJtYXhfaW50IiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzeW1ib2wiLCJsMSIsImwyIiwidGwiLCJoZCIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsInBlcm0iLCJvcGVuX291dCIsImZsdXNoX2FsbCIsIml0ZXIiLCJvdXRwdXRfc3RyaW5nIiwib2MiLCJvdXRwdXRfc3Vic3RyaW5nIiwiY2xvc2Vfb3V0Iiwib3Blbl9pbl9nZW4iLCJvcGVuX2luIiwiaWMiLCJwcmVycl9lbmRsaW5lIiwiZXhpdF9mdW5jdGlvbiIsImZfeWV0X3RvX3J1biIsIm9sZF9leGl0IiwiZl95ZXRfdG9fcnVuJDAiLCJvbGRfZXhpdCQwIiwibmV3X2V4aXQiLCJzdWNjZXNzIiwiZG9fYXRfZXhpdCIsImlzX2Jsb2NrIiwicmFpc2VfdW5kZWZpbmVkIiwiZm9yY2VfbGF6eV9ibG9jayIsImJsayIsImNsb3N1cmUiLCJlJDAiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsIm1hcCIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsInJldl9hcHBlbmQiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF90YWlscmVjX2F1eCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJpbml0X2F1eCIsInJtYXBfZiIsImFjY3UkMCIsImFjY3UiLCJsJDAiLCJsJDEiLCJhY2N1JDEiLCJtaW4kMCIsIm1heCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwiY21wIiwibWF4c29uIiwiaTMxIiwidHJpY2tsZWRvd24iLCJ0cmlja2xlIiwiYnViYmxlZG93biIsImJ1YmJsZSIsInRyaWNrbGV1cCIsImZhdGhlciIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJlbGVtZW50c19hdXgiLCJlbGVtZW50cyIsImZpbmRfbGFzdF9vcHRfYXV4IiwidjAkMCIsImZpbmRfbGFzdF9vcHQiLCJjbGVhciIsInB1c2giLCJwb3Bfb3B0IiwidG9wX29wdCIsIml0ZXIkMSIsImNyZWF0ZSQwIiwiY2xlYXIkMCIsImNlbGwiLCJtYXRjaCIsInBlZWtfb3B0IiwidGFrZSIsIm5leHQiLCJ0YWtlX29wdCIsImZyb20iLCJjcmVhdGUkMSIsIm4kMCIsIm4kMSIsInN1YiQxIiwibGVuZ3RoJDAiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfc3Vic3RyaW5nIiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N0cmluZyIsImRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwib3ZlcmhlYWQiLCJtaW5fbGVuIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJmb3JtYXR0aW5nX2xpdCIsInN0ciQwIiwiYnByaW50X2ZtdHR5IiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwiZm10dHkkNCIsImZtdHR5JDUiLCJmbXR0eSQ2IiwiZm10dHkkNyIsImZtdHR5JDgiLCJmbXR0eSQ5Iiwic3ViX2ZtdHR5IiwiZm10dHkkMTAiLCJzdWJfZm10dHkkMCIsImZtdHR5JDExIiwiZm10dHkkMTIiLCJmbXR0eSQxMyIsImZtdHR5JDE0IiwiZm10dHkkMTUiLCJzeW1tIiwiZm10dHlfcmVsX2RldCIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwidHJhbnMiLCJqZCIsImRqIiwiZ2EiLCJhZyIsImRlJDkiLCJlZCQ5IiwiYWYkOSIsImZhJDkiLCJkZSQxMCIsImVkJDEwIiwiYWYkMTAiLCJmYSQxMCIsImRlJDExIiwiZWQkMTEiLCJhZiQxMSIsImZhJDExIiwiZGUkMTIiLCJlZCQxMiIsImFmJDEyIiwiZmEkMTIiLCJkZSQxMyIsImVkJDEzIiwiYWYkMTMiLCJmYSQxMyIsInJlc3QxIiwicmVzdDIiLCJyZXN0MSQwIiwicmVzdDIkMCIsInJlc3QxJDEiLCJyZXN0MiQxIiwicmVzdDEkMiIsInJlc3QyJDIiLCJyZXN0MSQzIiwicmVzdDIkMyIsInJlc3QxJDQiLCJyZXN0MiQ0IiwicmVzdDEkNSIsInJlc3QyJDUiLCJyZXN0MSQ2IiwicmVzdDIkNiIsInJlc3QxJDciLCJ0eTEkMCIsInJlc3QyJDciLCJ0eTIkMCIsInJlc3QxJDgiLCJ0eTEyIiwidHkxMSIsInJlc3QyJDgiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJyZXN0MSQ5IiwicmVzdDIkOSIsInJlc3QxJDEwIiwicmVzdDIkMTAiLCJyZXN0MSQxMSIsInJlc3QyJDExIiwicmVzdDEkMTIiLCJyZXN0MiQxMiIsInJlc3QxJDEzIiwicmVzdDIkMTMiLCJ0eXBlX3BhZGRpbmciLCJwYWR0eSIsInBhZHR5JDAiLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2Zvcm1hdCIsInR5cGVfZm9ybWF0X2dlbiIsImZtdCQwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdCQxIiwiZm10X3Jlc3QkMSIsImZtdHR5X3Jlc3QkMSIsImZtdCQyIiwiZm10X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMiIsImZtdCQzIiwiZm10X3Jlc3QkMyIsImZtdHR5X3Jlc3QkMyIsImZtdCQ0IiwiZm10X3Jlc3QkNCIsImZtdHR5X3Jlc3QkNCIsImZtdCQ1IiwiZm10X3Jlc3QkNSIsImZtdHR5X3Jlc3QkNSIsInByZWMkNCIsImZtdCQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInBhZCQ5IiwicGFkJDEwIiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicGFkJDExIiwicGFkJDEyIiwiZm10dHlfcmVzdCQ3IiwicHJlYyQ4IiwiZm10JDgiLCJmbXRfcmVzdCQ4IiwicGFkJDEzIiwicGFkJDE0IiwiZm10dHlfcmVzdCQ4IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXQkMTEiLCJmbXRfcmVzdCQxMSIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwicGFkX29wdCIsImZtdCQxMyIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHkxIiwiZm10X3Jlc3QkMTMiLCJzdWJfZm10dHkkMSIsInBhZF9vcHQkMCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdCQxNSIsImZtdHR5X3Jlc3QkMTIiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJ0eXBlX2Zvcm1hdHRpbmdfZ2VuIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwidHlwZV9pZ25vcmVkX3BhcmFtIiwiZm10MCIsImZtdHR5MCIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QkMCIsInN1Yl9mbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDciLCJzdWJfZm10dHlfcmVzdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkOSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJzdWJfZm10dHlfcmVzdCQxMiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwic3ViX2ZtdHR5X3Jlc3QkMTQiLCJzdWIyX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTUiLCJzdWIyX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxNiIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE4Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJzdWJfZm10dHlfcmVzdCQyMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJzdWJfZm10dHlfcmVzdCQyMyIsInN1Yl9mbXR0eV9yZXN0JDI0Iiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJzdWJfZm10dHlfcmVzdCQyNiIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgiLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfaWNvbnYiLCJmb3JtYXRfb2ZfaWNvbnZMIiwiZm9ybWF0X29mX2ljb252bCIsImZvcm1hdF9vZl9pY29udm4iLCJmb3JtYXRfb2ZfZmNvbnYiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImxlZnQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4IiwiYWRkX2RvdF9pZl9uZWVkZWQiLCJpc192YWxpZCIsImNhbWxfc3BlY2lhbF92YWwiLCJmb3JtYXRfY2FtbF9jaGFyIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9wcmludGYkMCIsImskMCIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiIsIm1ha2VfcGFkZGluZyIsIm1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIiwibWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiIsImFjYyQyIiwiYWNjJDMiLCJhY2MkNCIsImskMSIsImthY2MiLCJrJDIiLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwicCQwIiwicCQxIiwiYXJpdHkkMCIsIm1ha2VfY3VzdG9tIiwib3V0cHV0X2FjYyIsInAkMyIsInAkNCIsInAkNSIsInAkMiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsImokMCIsImokMSIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJrZnByaW50ZiIsImZwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsImZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwicHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsIm91dGNoYW4iLCJiYWNrdHJhY2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwicmF3X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsImVtcHR5X2JhY2t0cmFjZSIsInRyeV9nZXRfcmF3X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiQwIiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0IiwiY29tYmluZSIsImV4dHJhY3QiLCJzZWVkJDAiLCJtYWtlJDIiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkMCIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsIm9uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJ4JDAiLCJ4JDEiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJpbnNlcnRfYWxsX2J1Y2tldHMiLCJpbmRleGZ1biIsImlucGxhY2UiLCJvZGF0YSIsIm5kYXRhIiwibnNpemUiLCJuZGF0YV90YWlsIiwiaW5zZXJ0X2J1Y2tldCIsImNlbGwkMCIsImNlbGwkMSIsIm5pZHgiLCJyZXNpemUkMCIsIm9zaXplIiwia2V5X2luZGV4IiwicmVtb3ZlX2J1Y2tldCIsImZpbmRfcmVjIiwiZDEiLCJuZXh0MSIsImQyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJmaW5kIiwidGFpbCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMSIsImJveF90eXBlJDAiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiYWR2YW5jZV9sZWZ0IiwicGVuZGluZ19jb3VudCIsInNpemUkMCIsImVucXVldWVfYWR2YW5jZSIsInRvayIsImVucXVldWVfc3RyaW5nX2FzIiwiZW5xdWV1ZV9zdHJpbmciLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJxdWV1ZV9lbGVtIiwic2V0X3NpemUiLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiZWxlbSIsInBwX29wZW5fYm94X2dlbiIsImJyX3R5IiwicHBfb3Blbl9zeXNfYm94IiwicHBfY2xvc2VfYm94IiwicHBfb3Blbl9zdGFnIiwicHBfY2xvc2Vfc3RhZyIsInBwX2Nsb3NlX3RhZyIsInBwX3Jpbml0IiwiY2xlYXJfdGFnX3N0YWNrIiwicHBfZmx1c2hfcXVldWUiLCJwcF9wcmludF9hc19zaXplIiwicHBfcHJpbnRfYXMiLCJpc2l6ZSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfcHJpbnRfbmV3bGluZSIsInBwX3ByaW50X2ZsdXNoIiwicHBfZm9yY2VfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfY3V0IiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsIm1ha2VfZm9ybWF0dGVyIiwib3V0cHV0IiwiZmx1c2giLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsInBwX3ByaW50X2xpc3QiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJvcHQkMSIsImNvbXB1dGVfdGFnIiwidGFnX2FjYyIsIm91dHB1dF9mb3JtYXR0aW5nX2xpdCIsIm91dHB1dF9hY2MkMCIsImJ0eSIsImMkMCIsImYkMCIsInAkNiIsInAkNyIsImtmcHJpbnRmJDAiLCJmcHJpbnRmJDAiLCJrYXNwcmludGYiLCJhc3ByaW50ZiIsImZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMiLCJyZWdpc3Rlcl9leGNlcHRpb24iLCJ0b19qdiIsImtleXMiLCJib3VuZCIsImxvd2VyIiwidXBwZXIiLCJsb3dlcl9vcGVuIiwic3RoJDAiLCJ1cHBlcl9vcGVuIiwib2xkX3ZlcnNpb24iLCJuZXdfdmVyc2lvbiIsInVwZ3JhZGVfbmVlZGVkIiwiZXJyb3IkMCIsIm9mX2p2IiwiZXJyb3IkMSIsIm9uX3N1Y2Nlc3MiLCJldiIsIm9uX2Vycm9yIiwiZnV0JDAiLCJzZXQiLCJyZXN1bHRfZnV0IiwidG9fc3RyaW5nJDEiLCJ0b19qdiQwIiwiZ2V0IiwianYiLCJnZXRfYWxsIiwiZ2V0X2FsbF9rZXlzIiwicXVlcnkiLCJxdWVyeSQwIiwicHJpbWFyeV9rZXkiLCJhZHZhbmNlIiwiY29udGludWUkMCIsImtleSQwIiwicHJpbWFyeV9rZXkkMCIsImFkdmFuY2UkMCIsImNvbnRpbnVlJDEiLCJkZWxldGUkMCIsInVwZGF0ZSIsIm9wZW5fY3Vyc29yIiwiZGlyZWN0aW9uIiwiZGlyZWN0aW9uJDAiLCJkJDAiLCJjcmVhdGVfaW5kZXgiLCJJIiwia2V5X3BhdGgiLCJzdHJpbmdfb2ZfbW9kZSIsIm9iamVjdF9zdG9yZSIsIlMiLCJjcmVhdGVfb2JqZWN0X3N0b3JlIiwiYXV0b19pbmNyZW1lbnQiLCJvcHRzIiwib3B0cyQwIiwib3B0aW9ucyIsImRlbGV0ZV9vYmplY3Rfc3RvcmUiLCJ0cmFuc2FjdGlvbiIsInN0b3JlcyIsIm1vZGUkMCIsImp2X29mX3N0b3JlIiwib2JqZWN0X3N0b3JlX25hbWVzIiwib25fdXBncmFkZV9uZWVkZWQiLCJyZXEiLCJvcGVuIiwidmVyc2lvbiIsImdldF9mYWN0b3J5IiwiZ2xvYmFsJDAiLCJhdXgiLCJhJDAiLCJpJDIiLCJlcXVhbCQwIiwicmVjdXJzZSIsInN5bWJvbCQ2IiwiaXNfbm9uZSQwIiwiaXRlciQyIiwidmFsdWUkMCIsImdldF9leG5fb3IiLCJzeW1ib2wkNyIsIm1hcF9lcnIiLCJnZXRfZXhuIiwiZmxhdHRlbl9sIiwic3ltYm9sJDgiLCJrbXBfcGF0dGVybl9sZW5ndGgiLCJnZXQkMiIsImRpciIsImttcF9jb21waWxlIiwiZmFpbHVyZSIsImttcF9jb21waWxlJDAiLCJrbXBfZmluZCIsInBhdHRlcm4iLCJwYXRfbGVuIiwiZXhwZWN0ZWQiLCJmYWlsX29mZnNldCIsImNvbXBpbGUiLCJzdWIiLCJmaW5kJDAiLCJwYXR0ZXJuJDAiLCJwcmUiLCJjaGVjayIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwiY3MiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInYxIiwidjIiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwiZm9ybWF0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDIiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwicGFpciIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwibm9kZSIsInYkMSIsInRwbCIsImpvcHQiLCJ2JDAiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMCIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckMyIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDEiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDAiLCJqc3RyIiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ5b2pzb25fb2ZfYm9vbCIsInlvanNvbl9vZl9zdHJpbmciLCJ5b2pzb25fb2ZfaW50IiwieW9qc29uX29mX29wdGlvbiIsInlvanNvbl9vZl9hIiwieW9qc29uX29mX2xpc3QiLCJsc3QiLCJyZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzIiwib2ZfeW9qc29uX2Vycm9yIiwid2hhdCIsInlvanNvbiIsImJvb2xfb2ZfeW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkOSIsImpzdHJfb2ZfbWV0aG9kIiwib3JkZXJfb2ZfeW9qc29uIiwieW9qc29uX29mX29yZGVyIiwic29ydF9vZl95b2pzb24iLCJ5b2pzb25fb2Zfc29ydCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsInByaW1hcnlfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZHMiLCJibmQiLCJibmRzJDAiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwiZmllbGRfb2ZfeW9qc29uIiwieW9qc29uX29mX2ZpZWxkIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsIm5hbWVfZmllbGQiLCJzb3J0X25hbWVfZmllbGQiLCJpZF9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsImlkX3ZhbHVlIiwibmFtZV92YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9zZXJ2ZXJfaWQiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X2lkIiwidl9zb3J0X25hbWUiLCJ2X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQxIiwiYXJnJDAiLCJibmRzJDIiLCJhcmckMSIsImJuZHMkMyIsImFyZyQyIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsInYkMiIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInBhcmFtc19vZl95b2pzb24iLCJpZHNfZmllbGQiLCJ1c2VyX2lkX2ZpZWxkIiwiZmllbGRzX2ZpZWxkIiwiaW5jbHVkZV9pdGVtX3R5cGVzX2ZpZWxkIiwic3RhcnRfaW5kZXhfZmllbGQiLCJsaW1pdF9maWVsZCIsInNvcnRfb3JkZXJfZmllbGQiLCJzb3J0X2J5X2ZpZWxkIiwicmVjdXJzaXZlX2ZpZWxkIiwiZW5hYmxlX3VzZXJfZGF0YV9maWVsZCIsImVuYWJsZV9pbWFnZXNfZmllbGQiLCJmdmFsdWUkOSIsImZ2YWx1ZSQxMCIsImlkc192YWx1ZSIsInN0YXJ0X2luZGV4X3ZhbHVlIiwibGltaXRfdmFsdWUiLCJzb3J0X29yZGVyX3ZhbHVlIiwiZW5hYmxlX2ltYWdlc192YWx1ZSIsImVuYWJsZV91c2VyX2RhdGFfdmFsdWUiLCJyZWN1cnNpdmVfdmFsdWUiLCJzb3J0X2J5X3ZhbHVlIiwiaW5jbHVkZV9pdGVtX3R5cGVzX3ZhbHVlIiwiZmllbGRzX3ZhbHVlIiwidXNlcl9pZF92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X2VuYWJsZV9pbWFnZXMiLCJ2X2VuYWJsZV91c2VyX2RhdGEiLCJ2X3JlY3Vyc2l2ZSIsInZfc29ydF9ieSIsInZfc29ydF9vcmRlciIsInZfbGltaXQiLCJ2X3N0YXJ0X2luZGV4Iiwidl9pbmNsdWRlX2l0ZW1fdHlwZXMiLCJ2X2ZpZWxkcyIsInZfdXNlcl9pZCIsInZfaWRzIiwiYXJnJDkiLCJibmRzJDEwIiwiYXJnJDEwIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwiaXRlbXNfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfdmFsdWUiLCJpdGVtc192YWx1ZSIsInlvanNvbl9vZl9yZXNwb25zZSIsInZfdG90YWxfcmVjb3JkX2NvdW50Iiwidl9pdGVtcyIsIm1ldGhvZCIsImVuZHBvaW50IiwicGFyYW1zX29mX3lvanNvbiQwIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X2ZpZWxkIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyQwIiwidl9pbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQiLCJyZXNwb25zZV9vZl95b2pzb24kMCIsInlvanNvbl9vZl9yZXNwb25zZSQwIiwiZW5kcG9pbnQkMCIsInBwIiwidmlydHVhbF9mb2xkZXJfb2ZfeW9qc29uIiwibG9jYXRpb25zX2ZpZWxkIiwiaXRlbV9pZF9maWVsZCIsIml0ZW1faWRfdmFsdWUiLCJsb2NhdGlvbnNfdmFsdWUiLCJ5b2pzb25fb2ZfdmlydHVhbF9mb2xkZXIiLCJ2X2l0ZW1faWQiLCJ2X2xvY2F0aW9ucyIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwiYmFzZV91cmkiLCJiYXNlX3BhdGhfc2VnbWVudHMiLCJlbmRwb2ludF9wYXRoX3NlZ21lbnRzIiwicGF0aF9zZWdtZW50cyQwIiwidXJpIiwidXJpJDAiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJib2R5IiwidXJsJDAiLCJwYXJhbXMkMCIsInVyaV93aXRoX3BhcmFtcyIsInVybCQxIiwiaW5pdCQwIiwibWV0aG9kJDAiLCJnZXRfdG9rZW4iLCJ0YWdfb2YiLCJmdXR1cmVzIiwibGlzdGVuZXJzIiwid29ya2VyIiwib25fbWVzc2FnZSIsIm1lc3NhZ2UiLCJ1dWlkIiwiZGlzcGF0Y2hfZXZlbnQiLCJhcHBseSIsInRfdG9fanYiLCJlbmNvZGVyIiwianZfdG9fdCIsImRlY29kZXIiLCJ0X29mX3lvanNvbiQwIiwiaXRlbV9maWVsZCIsIml0ZW1fdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidG9fanYkMSIsIm9mX2p2JDAiLCJ0b19qdiQyIiwib2ZfanYkMSIsImdldF9rZXkiLCJzb3J0c19vZl95b2pzb24iLCJkYXRlX2FkZGVkX2ZpZWxkIiwidmlld3NfZmllbGQiLCJ2aWV3c192YWx1ZSIsImRhdGVfYWRkZWRfdmFsdWUiLCJ5b2pzb25fb2Zfc29ydHMiLCJ2X3ZpZXdzIiwidl9kYXRlX2FkZGVkIiwidF9vZl95b2pzb24kMSIsInNvcnRzX2ZpZWxkIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQxIiwidl9zb3J0cyIsInRvX2p2JDMiLCJ2aWV3cyIsInNvcnRfbmFtZSIsImlkJDAiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQyIiwicGF0aCQxIiwidG9fanYkNCIsIm9mX2p2JDMiLCJ0b19qdiQ1Iiwib2ZfanYkNCIsInRvX2p2JDYiLCJvZl9qdiQ1IiwidHlwZSIsInBhdGgkNCIsInRvX2p2JDciLCJvZl9qdiQ2IiwiY29sbGVjdGlvbl90eXBlIiwicGF0aCQ1IiwidG9fanYkOCIsIm9mX2p2JDciLCJnZXRfa2V5JDAiLCJ0b19qdiQ5Iiwib2ZfanYkOCIsInRvX2p2JDEwIiwib2ZfanYkOSIsImdldF9rZXkkMSIsImNodW5rX3NpemUiLCJmZXRjaF90b3RhbF9pdGVtX2NvdW50Iiwic291cmNlIiwiZ2V0X2RiX2luZm9zIiwiaWRiIiwic2V0X2luZm9zIiwiaW5mb3MiLCJ0cmFuc2FjdGlvbiQwIiwic3RvcmUiLCJsYXN0X2tleSIsImN1cnNvciIsIml0ZW0iLCJpc19kYl9jb25zaXN0ZW50IiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJkYl9zeW5jX2luZm9zIiwiY2hlY2tfc3RhdHVzIiwiZGJfaW5mb3MiLCJ0b3RhbF9pdGVtX2NvdW50IiwiZmlyc3RfdW5mZXRjaGVkX2tleSIsIml0ZW0kMCIsInVwZGF0ZV92aWV3cyIsInNfaXRlbXMiLCJkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmkiLCJwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4iLCJwYXJlbnRfaWQiLCJwaWQiLCJwYXRoc19vZl9wYXJlbnRzIiwicGFyZW50cyIsInBhdGhzIiwidmlld3Nfb2ZfcGF0aCIsInZmb2xkZXJzIiwibG9jYXRpb25zIiwidmlld19pZCIsInN5bmMiLCJyZXBvcnQiLCJtYWtlX3BsYWNlaG9sZGVycyIsImxhc3QiLCJmZXRjaF9taXNzaW5nX2l0ZW1zIiwiZmV0Y2hfcXVldWUiLCJlbnF1ZXVlIiwic3RhcnRfaW5kZXgiLCJ0b2RvIiwic3RhcnRfaW5kZXgkMCIsInRvZG8kMCIsInRvZG8kMSIsInN0YXJ0X2luZGV4JDEiLCJ0b3RhbF9xdWVyaWVzIiwicnVuX3F1ZXVlIiwidGhyZWFkcyIsInRha2VfbiIsImVsdCIsIml0ZW1zIiwiaWRiX3B1dCIsInNfbGlzdCIsImluZGV4JDAiLCJyZXFzIiwiZmlyc3RfbWlzc2luZ19rZXkiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSQwIiwiZmlyc3RfdW5mZXRjaGVkX2tleSQwIiwiY2hlY2tfYW5kX3N5bmMiLCJpbml0aWFsIiwicmVwb3J0JDAiLCJzeW5jX3Byb2dyZXNzIiwib25fdXBncmFkZV9uZWVkZWQkMCIsIm5ld192ZXJzaW9uJDAiLCJvbGRfdmVyc2lvbiQwIiwiZGIiLCJ2aXJ0dWFsX2ZvbGRlcnMiLCJpbmRleF9kYXRlX2FkZGVkIiwid2l0aF9pZGIiLCJkYnIiLCJtYXBfZXJyb3IiLCJhc19mdXQiLCJmdXRfb2ZfYXJyYXkiLCJmdXQiLCJwcm9taXNlIiwiYXJyIiwiYWxsJDAiLCJ0b19hcnJheSQwIiwiY2hlY2tfZGIiLCJzb3VyY2UkMCIsInNlcnZlcl9pZCIsInNldF9pZGIiLCJyZWFkX29ubHlfc3RvcmUiLCJ2aWV3X21lbW8iLCJsYXN0X3ZpZXciLCJnZXRfdmlld19rZXlzIiwiZmlsdGVycyIsInNvcnQkMCIsInNyY192aWV3cyIsImhhc2gkMCIsInN1YiQwIiwia2V5cyQwIiwic25iIiwic25hIiwiYWxsX2tleXMiLCJzcmNfdmlld3MkMCIsIm9uX3F1ZXJ5IiwiaXRlbXMkMCIsInNlcnZlcl9pZCQwIiwicmVxdWVzdCIsIml0ZW1fY291bnQiLCJpbmRleGVzIiwib3JkZXIiLCJpbmRleCQxIiwicmVzdWx0cyJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9jb21wbGlhbnRfbGV4eGVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N0b3Jlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3luYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NDaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J5dGVzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3F1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYWxsYmFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9pbmRleGVkX2RiLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDT3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSZXN1bHQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU2V0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1N0cmluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9sZXh4ZXJfdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvZXJyb3JfaW5mby5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9qc29uX2Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3BhcnNlcl90b29scy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcHJldHR5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Byb2Nlc3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvdG9rZW5fdXRpbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcmVhZGVyX3N0cmluZ19maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9maWxlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3dyaXRlcl9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQveW9qc29uLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9zdGQvc3RkLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIvcHB4X3lvanNvbl9jb252X2xpYi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGF0YV9zb3VyY2UvamVsbHlmaW4ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3dvcmtlcl9hcGkvd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvdmlldy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGJfd29ya2VyX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvZGIubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2RiX3dvcmtlci9kYl93b3JrZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7QSxDOztHOzs7UTtTOzs7RztJO0k7STtHO0U7Ozs7R0FxREEsU0FBU0EsZ0JBQWdCQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJQztJQUN2QyxHQUFJRCxNQUFNRjtLQUFJLElBQ0QsSUFBRkksT0FBT0EsS0FBS0QsS0FBS0MsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7O0tBQy9DLElBQ00sSUFBRkEsSUFBSUQsS0FBS0MsUUFBUUEsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7SUFFdEQ7R0FDRjtHQ1lBLFNBQVNDLHlCQUEwQkMsR0FBR0MsR0FBR0o7SUFDakMsSUFBRkssSUFBSUM7SUFDUixHQUFJRixVQUFVSixlQUFlQSxPQUFPRyxVQUFVLE9BQU9FLFFBQVNFLE1BQU1KO0lBQzlELElBQUZLO0lBQ0osVUFBV1IsS0FBS0ksV0FBVUo7S0FDeEJRLEtBQUtILFFBQVNFLE1BQU1KLFFBQVFDLEdBQUVBLElBQUlLLFNBQVNUO0lBQzdDLE9BQU9RO0dBQ1Q7R0FxWEEsU0FBU0UsNEJBQTZCRjtJQUVwQyxJQUFJTCxRQUFRUSxXQUFXSCxNQUNuQkksSUFBSUosS0FBS0ssSUFBSUQsVUFBVVI7SUFDM0IsTUFBT0EsSUFBSVMsR0FBR1QsS0FBS0QsRUFBRUMsS0FBS1EsYUFBYVI7SUFDdkMsSUFBS1Ms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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Rzs7Ozs7Rzs7Ozs7Rzs7Ozs7Rzs7Ozs7Rzs7Ozs7Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lxQjVPSUc7O0lDdEhBQzs7Ozs7Ozs7Ozs7Ozs7OztJQ1dBQzs7Ozs7Ozs7Ozs7OztJQ3hCRkM7SUFFQUM7SUFnRUFDO0lBS0FDO0lBd0NBQztJQTJFQUM7SUFzQkFDO0lBZ0JBQztJQWNBQztJQUtBQztJQWVBQzs7SUNuUEFDO0lBT01DO0lBR0ZDO0lBU0pDO0lBR0FDO0lBZ0NNQztJQVFBQztJQW9DRkM7SUF1QkVDO0lBR0ZDO0lBYUlDO0lBUUFDO0lBUUFDO0lBUUFDO0lDckpOQztJQTJFQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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OEI7R0N3STlCO0dEM0lFbU07R0MrSXFCLGUsVTtHLEksd0I7MkIsTyxjOztJO0ksTztHOztJO0k7Ozs7SSxPO0c7eUIsTyxzQixjO21DLE8seUI7RztHLEksZTt1Qiw0Qjs0QixpQzs7STtJO0c7O0ksNEI7Rzs7SSxZOztJLE87O0c7O0ksWTs7STtJOzt3QixNLE87eUIsYyxPOztJLFk7O0k7O3dCLFk7MkIsVSxPOztJLFk7O0k7O3dCLDhCO3dCLG1COztJO0ksK0IsTyx1QjtHOztJLHdCLG9CLG9COzs7O00sUTtNOzs7OztJO0c7O0k7SSw2QixPLHVCO0c7Ozs7O29COztNLFU7Ozs7OztJO0c7O0k7SSxXOztJO0k7Rzs7STtJLE8seUIsVTtHO0c7OztLLE87NkIsTyxPLGUsTyxPO0k7SSxtQjtHO3VCLE8sbUI7eUIsTyxPLHNDOztJLE87YTthO0c7cUIsTyxpQjt1Qjt1QjttQixnQjt5QixrQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7Rzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7Rzs7SSxJLGdDO0k7Syx3QztJO0k7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzt5QixvQjs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE9wQjlJckJocUI7RztHOzhCLDBCOztJO0ksVTtJO0k7RztHO0c7RztHO0c7c0IsTyxrQjs7SSxJLFE7Ozs7O0s7O0k7RztHO0c7RztJO0k7STs7SSxXOztJO0c7RztvQixzQjs7MkIsTyxvQjtJO0s7TTtNO007Szs7Ozs7O0s7O0c7OzJCLHNCLHFCO0k7SyxJLGtCO0s7SztLOzs7Ozs7Szs7RztHO3VCLE8sYTtzQixrQjs7STtJO0k7Rzt5QixPLGE7RztHLCtCO2dDLGtDLFM7Rzs7STs7O29COztNO007Ozs7O0ksTztHO3FCLDhDO3VCLDhDO3NCLDhDO0c7RztHO0c7RztHO0c7MEI7O0ksbUMsZTtHO0c7O0k7SSxTO0k7O0s7Szs7SSxvQjtJO0c7Ozs7Ozs7Ozs7Ozs7OztJO0ksa0Q7STtJO0ks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b2xEO01BQUEzakQsTUFMRWdqRCwwQkFLRnprRDtNQUFBc2xELGdCQUFBN2pEO01BQUE4akQsYUFBQUQsS0FERkQ7O1NBQ0VFLFNBREZGO0lBQUEsc0JBQ0VFO0dBRStDO0dBRWpELFNBQUFDLGVBQUE1QztJQUFBLFVBQUFBLHFDQUFBQTtnQkFBQUE7Z0JBQUEsTzBCNUNFVSx1QjFCNENGN25DLFVBQUFtbkM7Ozs7Ozs7Ozs7MEIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7Ozs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7OzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzs7Ozs7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7Ozs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7MkIwQi9ERVEsYTFCK0RGM25DLFVBQUFtbkM7OzJCMEIvREVRLGExQitERjNuQyxVQUFBbW5DOzsyQjBCL0RFUSxhMUIrREYzbkMsVUFBQW1uQzs7Ozs7T0FBQSxPMEJoREVTLHdCMUJnREY1bkMsVUFBQW1uQzs7O0lBQUEsTzBCeENFVyxnQjFCd0NGOW5DLFVBQUFtbkM7R0FzQ21CO1lBdENuQjZDO0lBQUE7O09BQ0U7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7O09BQ0E7ZUFDQTs7R0FDaUI7R0FFbkIsU0FBQUMsZ0JBQUE5QztJQUFBLFVBQUFBLHFDQUFBQTtnQkFBQUE7Z0JBQUEsTzBCcEZFVSx1QjFCb0ZGNW5DLFVBQUFrbkM7Ozs7Ozs7Ozs7MEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7Ozs7OzJCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7Ozs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7Ozs7Ozs7OzsyQjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7Ozs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7Ozs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7Ozs7Ozs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7Ozs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7OzRCMEJ2R0VRLGExQnVHRjFuQyxVQUFBa25DOzs0QjBCdkdFUSxhMUJ1R0YxbkMsVUFBQWtuQzs7NEIwQnZHRVEsYTFCdUdGMW5DLFVBQUFrbkM7Ozs7OztPQUFBLE8wQnhGRVMsd0IxQndGRjNuQyxVQUFBa25DOzs7SUFBQSxPMEJoRkVXLGdCMUJnRkY3bkMsVUFBQWtuQztHQThEbUI7WUE5RG5CK0M7SUFBQTs7OztRQWdDRTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTs7UUFDQTtnQkFDQTs7OztPQTVEQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTtlQUNBOztHQStCaUI7WUFNZkMsbUJBQW1CdG5EO0lBQ2IsSUFBSk8sZ0JBRGlCUDtJQUVMLE9BOUdsQmtuRCxrREE2R00zbUQ7R0FDaUM7WUFFbkNnbkQsbUJBQW1CQztJQUNmLFlBakhSTCxlQWdIdUJLOzs7K0JBQ2lCak4sZ0JBQVUsT0FBVkE7O0lBQXNCLE1BQUE7R0FBWTtZQUUxRWtOLFlBQUFuRDtJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0VvRDtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUlBQztNQUNBQztNQUNBQztNQUNBQztNQWJGNUI7TUFBQUM7TUFBQXRpQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBbW1COztXQUFBb2M7V0FBQUM7MENBQUFBOzs7Ozs7Z0JBQUFBO2lCQUFBQTtrQkFBQUE7bUJBQUFBO21Cd0RwTEVkLFN4RGdNQXNDO2lCQVpGM0Isb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7aUJBWUUsSUFBQUksU0FuQkVXLG1CQU9KYjtpQkFZRXlCLG9CQUFBdkI7Ozt1QndEaE1BZixTeERzTEErQjtnQkFGRnBCLG9CQUFBRyxZd0RwTEVkLFN4RG9MRlc7O2dCQUVFLElBQUE2QixXdUQ5SEE1RCxpQnZENEhGaUM7Z0JBRUVrQix5QkFBQVM7O3NCd0R0TEF4QyxTeEQ4TEFvQztlQVZGekIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7ZUFVRSxJQUFBOEIsV3VEdElBN0QsaUJ2RDRIRmlDO2VBVUV1Qix5QkFBQUs7O3FCd0Q5TEF6QyxTeER3TEFpQztjQUpGdEIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7Y0FJRSxJQUFBK0IsV3VEaElBOUQsaUJ2RDRIRmlDO2NBSUVvQixvQkFBQVM7O29Cd0R4TEExQyxTeEQwTEFtQzthQU5GeEIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7aUJBTUVnQyxXdUR2RUE3RCxpQkEzREFGLGtCdkQ0SEZpQzthQU1Fc0IseUJBQUFROzttQkFORjdCO2VBQUFBO2dCQUFBQTtpQkFBQUE7a0JBQUFBO2tCd0RwTEVkLFN4RHFMQThCO2dCQURGbkIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7Z0JBQ0UsSUFBQWlDLFd1RDdIQWhFLGlCdkQ0SEZpQztnQkFDRWlCLG9CQUFBYzs7O3NCd0RyTEE1QyxTeEQrTEFxQztlQVhGMUIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7ZUFXRSxJQUFBa0MsV0FuSUZyQyw0QkF3SEFLO2VBV0V3QixpQ0FBQVE7O3FCd0QvTEE3QyxTeER1TEFnQztjQUhGckIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7Y0FHRSxJQUFBbUMsV3VEL0hBbEUsaUJ2RDRIRmlDO2NBR0VtQixrQkFBQWM7O29Cd0R2TEE5QyxTeERpTUF1QzthQWJGNUIsb0JBQUFHLFl3RHBMRWQsU3hEb0xGVzs7aUJBYUVvQyxXdUQ5RUFqRSxpQkEzREFGLGtCdkQ0SEZpQzthQWFFMEIsK0JBQUFROzttQndEak1BL0MsU3hEeUxBa0M7WUFMRnZCLG9CQUFBRyxZd0RwTEVkLFN4RG9MRlc7O1lBS0UsSUFBQXFDLFd1RGpJQXBFLGlCdkQ0SEZpQztZQUtFcUIsd0JBQUFjOzs7O29CQUxGdmU7O1FBZ0JpRDtLQWhCakRubUIsS0FBQW1pQztRd0RwTEVULFN4RG9MRlc7TUFBQSxPMEIvSUVsQix3QjFCK0lGaG9DLFV3RHBMRXVvQyxTeERvTEZXLGFBQUFqQztRd0RwTEVzQixTeERvTEZZO01BQUEsTzBCM0lFbEIsb0IxQjJJRmpvQyxVd0RwTEV1b0MsU3hEb0xGWSxRQUFBbEM7S0FDRTtNQUFBLFF3RHJMQXNCLFN4RHFMQThCO01BQ0FtQixrQndEdExBakQsU3hEc0xBK0I7TUFDQSxVd0R2TEEvQixTeER1TEFnQztNQUNBa0IsYXdEeExBbEQsU3hEd0xBaUM7TUFDQWtCLGlCd0R6TEFuRCxTeER5TEFrQztNQUNBa0Isa0J3RDFMQXBELFN4RDBMQW1DO01BSUEsVXdEOUxBbkMsU3hEOExBb0M7TUFDQSxVd0QvTEFwQyxTeEQrTEFxQztNQUNBLFV3RGhNQXJDLFN4RGdNQXNDO01BQ0FlLHdCd0RqTUFyRCxTeERpTUF1Qzs7O09BREFlO09BREFDO09BREFDO09BUEFDO09BRkFDO01BREYsR0FhRUw7V0FiRnZuRCxJQWFFdW5ELDBCQWJGNUssTUFBQTM4Qzs7V0FBQTI4QztNQUFBO2NBQ0VpTDtjQUNBVDtjQUNBUTtjQUNBUDtjQUNBQztjQUNBQztjQUlBSTtjQUNBRDtjQUNBRDtjQVpGN0s7O0tBQUE7TUFBQSxxQndEcExFdUgsU3hEZ01Bc0M7TUFaRjtzQndEcExFdEMsU3hEK0xBcUM7TUFYRixxQndEcExFckMsU3hEOExBb0M7TUFWRixxQndEcExFcEMsU3hEdUxBZ0M7S0FIRixPMEJqSUVuQztjMUJpSUZwb0M7Y0FBQWluQzs0QndEcExFc0IsU3hEcUxBOEI7O0lBREYsTzBCekhFL0IseUIxQnlIRnRvQyxVQUFBaW5DO0dBZ0JpRDtZQWhCakRpRjtJQUFBO0tBYW9CQztLQURsQkM7S0FEQUM7S0FEQUM7S0FKQUM7S0FEQUM7S0FEQUM7S0FEQUM7S0FEQUM7S0FEQUM7S0FERmxEO2FBYW9CeUM7U0FBQXZDLFNBYnBCRjs7O01BYW9CbUQ7dUIsT3VENUxsQm5HLGlCQVhBRjtVdkR1TWtCMkY7TUFBQVcsa0JBQUFEO01BQUFqRCxhQUFBa0QsT0FicEJwRDs7S0FZRTVqRCxNQWZFb2tELG1CQWVGa0M7S0FBQVcsdUJBQUFqbkQsTUFDa0I4akQ7S0FGbEJvRCxRQW5JRnhELDRCQW1JRTZDO0tBQUFZLHVCQUFBRCxRQUNBRDtLQUZBRyxRdURwTUExRyxpQnZEb01BOEY7S0FBQWEsdUJBQUFELFFBQ0FEO09BTEFWOztNQUFBbG9ELElBQUFrb0Q7TUFBQWEsUXVEckxBMUcsaUJBWEFGLGtCdkRnTUFuaUQ7TUFBQXNsRCxnQkFBQXlEO01BQUFDLGFBQUExRCxLQUlBd0Q7O1NBSkFFLFNBSUFGO09BTEFYOztNQUFBeEwsTUFBQXdMO01BQUFjLFF1RC9MQTlHLGlCdkQrTEF4RjtNQUFBdU0sa0JBQUFEO01BQUFFLGFBQUFELE9BQ0FGOztTQURBRyxTQUNBSDtPQUZBWjs7TUFBQTVMLE1BQUE0TDtNQUFBZ0IsUXVEOUxBakgsaUJ2RDhMQTNGO01BQUE2TSxrQkFBQUQ7TUFBQUUsYUFBQUQsT0FDQUY7O1NBREFHLFNBQ0FIOztLQUZBSSxRdUQ3TEFwSCxpQnZENkxBa0c7S0FBQW1CLHVCQUFBRCxRQUNBRDtPQUZBaEI7O01BQUFtQixNQUFBbkI7TUFBQW9CLFF1RDVMQXZILGlCdkQ0TEFzSDtNQUFBRSxrQkFBQUQ7TUFBQUUsYUFBQUQsT0FDQUg7O1NBREFJLFNBQ0FKOztLQUZBSyxRdUQzTEExSCxpQnZEMkxBb0c7S0FBQXVCLHVCQUFBRCxRQUNBRDtJQUZGLHNCQUNFRTtHQWUrQztZQU1qREMsaUJBQUFuSDtJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0VvSDtNQUNBM0Q7TUFDQTREO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BQ0FDO01BWkY3RjtNQUFBQztNQUFBdGlDOztTQUFBO1NBQUE7d0JBQUE7O1dBQUFtbUI7O1dBQUFvYztXQUFBQzswQ0FBQUE7Ozs7Ozs7aUJBQUFBO2tCQUFBQTttQkFBQUE7b0JBQUFBO3FCQUFBQTtxQndEMU1FZCxTeEQ2TUErRjttQkFIRnBGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O21CQUdFLElBQUFJLFN1RHJKQW5DLGlCdkRrSkZpQzttQkFHRWtGLHVCQUFBaEY7Ozt5QndEN01BZixTeERnTkFrRztrQkFORnZGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O2tCQU1FLElBQUE2QixXdURuSUEzRCxjdkQ2SEZnQztrQkFNRXFGLDJCQUFBMUQ7O3dCd0RoTkF4QyxTeERrTkFvRztpQkFSRnpGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O2lCQVFFLElBQUE4QixXQXhORnZDLGdCQWdOQVc7aUJBUUV1RiwwQkFBQTNEOzt1QndEbE5BekMsU3hEbU5BcUc7Z0JBVEYxRixvQkFBQUcsWXdEMU1FZCxTeEQwTUZXOztvQkFTRStCLFd1RHZFQTFELGV2RGhKRm9CLGdCQThNQVM7Z0JBU0V3Rix1QkFBQTNEOztzQndEbk5BMUMsU3hEb05Bc0c7ZUFWRjNGLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O2VBVUUsSUFBQWdDLFd1RGxLQWhFLGV2RHdKRmtDO2VBVUV5Rix5QkFBQTNEOztxQndEcE5BM0MsU3hENE1BbUM7Y0FGRnhCLG9CQUFBRyxZd0QxTUVkLFN4RDBNRlc7O2NBRUUsSUFBQWlDLFd1RHBKQWhFLGlCdkRrSkZpQztjQUVFc0IseUJBQUFTOztvQkFGRjlCO2dCQUFBQTtpQkFBQUE7a0JBQUFBO21CQUFBQTtvQkFBQUE7b0J3RDFNRWQsU3hEaU5BbUc7a0JBUEZ4RixvQkFBQUcsWXdEMU1FZCxTeEQwTUZXOztrQkFPRSxJQUFBa0MsV3VEcElBaEUsY3ZENkhGZ0M7a0JBT0VzRixxQkFBQXREOzs7d0J3RGpOQTdDLFN4RCtNQWlHO2lCQUxGdEYsb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7cUJBS0VtQyxXdURuRUE5RCxldkQzRUZzQyxnQkF5SUFUO2lCQUtFb0Ysa0NBQUFuRDs7dUJ3RC9NQTlDLFN4RDJNQThGO2dCQURGbkYsb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7b0JBQ0VvQyxXdUQvREEvRCxlQXBGQUosa0J2RGtKRmlDO2dCQUNFaUYsbUJBQUEvQzs7c0J3RDNNQS9DLFN4RDhNQWdHO2VBSkZyRixvQkFBQUcsWXdEMU1FZCxTeEQwTUZXOzttQkFJRXFDLFd1RGxFQWhFLGV2RG5DRndDLGlCQWlHQVg7ZUFJRW1GLHNCQUFBaEQ7O3FCd0Q5TUFoRCxTeERxTkF1RztjQVhGNUYsb0JBQUFHLFl3RDFNRWQsU3hEME1GVzs7Y0FXRSxJQUFBOEYsV3VEbktBOUgsZXZEd0pGa0M7Y0FXRTBGLGdDQUFBRTs7b0J3RHJOQXpHLFN4RHNOQXdHO2FBWkY3RixvQkFBQUcsWXdEMU1FZCxTeEQwTUZXOzthQVlFLElBQUErRixZdURwS0EvSCxldkR3SkZrQzthQVlFMkYsNkJBQUFFOzs7O1dBWkYsR3dEMU1FMUcsU0R3Q0F6QjtZdkRrS0ZxQyxlQUFBRSxZd0QxTUVkLFN4RDBNRlk7O29CQUFBbmM7O1FBY21CO0tBZG5Cbm1CLEtBQUFtaUM7UXdEMU1FVCxTeEQwTUZXO01BQUEsTzBCcktFbEIsd0IxQnFLRi9uQyxVd0QxTUVzb0MsU3hEME1GVyxhQUFBakM7UXdEMU1Fc0IsU3hEME1GWTtNQUFBLE8wQmpLRWxCLG9CMUJpS0Zob0MsVXdEMU1Fc29DLFN4RDBNRlksUUFBQWxDO0tBQ0U7TUFBQWlJLFl3RDNNQTNHLFN4RDJNQThGO01BQ0ExQyxrQndENU1BcEQsU3hENE1BbUM7TUFDQSxRd0Q3TUFuQyxTeEQ2TUErRjtNQUNBLFV3RDlNQS9GLFN4RDhNQWdHO01BQ0EsVXdEL01BaEcsU3hEK01BaUc7TUFDQVcsb0J3RGhOQTVHLFN4RGdOQWtHO01BQ0FXLGN3RGpOQTdHLFN4RGlOQW1HO01BQ0FXLG1Cd0RsTkE5RyxTeERrTkFvRztNQUNBLFV3RG5OQXBHLFN4RG1OQXFHO01BQ0EsVXdEcE5BckcsU3hEb05Bc0c7TUFDQSxVd0RyTkF0RyxTeERxTkF1RztNQUNBLFV3RHROQXZHLFN4RHNOQXdHOzs7O09BQUFPO09BREFDO09BREFDO09BREFDO09BSkFDO09BREFDO09BREFDO1NBRkFWLGVBREY3cUQsSUFDRTZxRCxjQURGbE8sTUFBQTM4QyxZQUFBMjhDO01BQUE7Y0FBQUE7Y0FFRTJLO2NBQ0FpRTtjQUNBRDtjQUNBRDtjQUNBUDtjQUNBQztjQUNBQztjQUNBSTtjQUNBRDtjQUNBRDtjQUNBRDs7S0FaRjtNQUFBLHFCd0QxTUUvRyxTeERzTkF3RztNQVpGO3NCd0QxTUV4RyxTeERxTkF1RztNQVhGLHFCd0QxTUV2RyxTeERvTkFzRztNQVZGLHFCd0QxTUV0RyxTeERtTkFxRztNQVRGO3NCd0QxTUVyRyxTeEQrTUFpRztNQUxGLHFCd0QxTUVqRyxTeEQ4TUFnRztLQUpGLE8wQnZKRW5HO2MxQnVKRm5vQztjQUFBZ25DOzRCd0QxTUVzQixTeEQ2TUErRjs7SUFIRixPMEIvSUVoRyx5QjFCK0lGcm9DLFVBQUFnbkM7R0FjbUI7WUFkbkI0STtJQUFBO0tBWUVDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFDO0tBREFoRTtLQURNaUU7S0FXTjFxRCxNdUQ3TkF5Z0QsZXZENk5BdUo7S0FBQXBHLHFCQUFBNWpEO0tBREFrbkQsUXVENU5BekcsZXZENE5Bd0o7S0FBQW5HLHVCQUFBb0QsUUFDQXREO0tBRkF3RCxRdUQzTkEzRyxldkQyTkF5SjtLQUFBakQsdUJBQUFHLFFBQ0F0RDtLQUZBd0QsUXVEL0xBeEcsZXZEeEJGZ0MsZ0JBdU5FcUg7S0FBQWhELHVCQUFBRyxRQUNBTDtPQUZBbUQ7O01BQUE3ckQsSUFBQTZyRDtNQUFBNUMsUUF4TkY1RSxnQkF3TkVya0Q7TUFBQXNsRCxnQkFBQTJEO01BQUFILGFBQUF4RCxLQUNBc0Q7O1NBREFFLFNBQ0FGO09BRkFrRDs7TUFBQW5QLE1BQUFtUDtNQUFBMUMsUXVEcE5BaEgsY3ZEb05BekY7TUFBQXVNLGtCQUFBRTtNQUFBSixhQUFBRSxPQUNBSjs7U0FEQUUsU0FDQUY7T0FGQWlEOztNQUFBdlAsTUFBQXVQO01BQUF4QyxRdURuTkFuSCxjdkRtTkE1RjtNQUFBNk0sa0JBQUFFO01BQUFKLGFBQUFFLE9BQ0FMOztTQURBRyxTQUNBSDs7S0FGQVUsUXVEM0xBbkgsZXZENkNGa0QsZ0JBOElFdUc7S0FBQTFDLHVCQUFBSSxRQUNBUDtLQUZBVSxRdUQxTEF0SCxldkRxRkZvRCxpQkFxR0VzRztLQUFBekMsdUJBQUFLLFFBQ0FQO0tBRkFkLFF1RG5OQXJHLGlCdkRtTkErSjtLQUFBdEMsdUJBQUFwQixRQUNBZ0I7T0FGQXRCOztNQUFBdUIsTUFBQXZCO01BQUFrRSxRdURsTkFqSyxpQnZEa05Bc0g7TUFBQUUsa0JBQUF5QztNQUFBdEMsYUFBQUgsT0FDQUM7O1NBREFFLFNBQ0FGO2FBRk11QztTQUFBRSxVQUNOdkM7OztNQURNd0M7dUIsT3VEdkxOL0osZUExQkFKLDBCdkRpTk1nSztNQUFBMUQsa0JBQUE2RDtNQUFBRCxjQUFBNUQsT0FDTnFCO0lBRkYsc0JBQ1F1QztHQWFXO1lBRW5CRSxtQkFBQTNKO0lBQUEsVUFBQUEscUNBQUFBO0tBQ0U7TUFERitCLGdCQUFBL0I7TUFDRTRKO01BQ0FDO01BQ0FyQztNQUhGdkY7TUFBQUM7TUFBQXRpQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBbW1COztXQUFBb2M7V0FBQUM7YUFBQUE7Y0FBQUE7ZUFBQUE7Z0J3RDFORWQsU3hENE5BdUk7Y0FGRjVILG9CQUFBRyxZd0QxTkVkLFN4RDBORlc7O2NBRUUsSUFBQUksU3VEL0lBbEMsY3ZENklGZ0M7Y0FFRTBILGtDQUFBeEg7OzttQndENU5BZixTeEQ2TkFrRztZQUhGdkYsb0JBQUFHLFl3RDFORWQsU3hEME5GVzs7WUFHRSxJQUFBNkIsV3VEaEpBM0QsY3ZENklGZ0M7WUFHRXFGLDJCQUFBMUQ7O2tCd0Q3TkF4QyxTeEQyTkFzSTtXQURGM0gsb0JBQUFHLFl3RDFORWQsU3hEME5GVzs7ZUFDRThCLFd1RC9FQXpELGV2RHdDRjZDLGFBc0NBaEI7V0FDRXlILHFCQUFBN0Y7O29CQURGaGU7O1FBS2lEO0tBTGpEbm1CLEtBQUFtaUM7UXdEMU5FVCxTeEQwTkZXO01BQUEsTzBCckxFbEIsd0IxQnFMRjluQyxVd0QxTkVxb0MsU3hEME5GVyxhQUFBakM7UXdEMU5Fc0IsU3hEME5GWTtNQUFBLE8wQmpMRWxCLG9CMUJpTEYvbkMsVXdEMU5FcW9DLFN4RDBORlksUUFBQWxDO0tBQ0U7TUFBQSxRd0QzTkFzQixTeEQyTkFzSTtNQUNBLFV3RDVOQXRJLFN4RDROQXVJO01BQ0EsVXdEN05BdkksU3hENk5Ba0c7OztPQUFBVTtPQURBNEI7T0FEQUM7TUFERixXQUNFQSxhQUNBRCwwQkFDQTVCOztLQUhGO01BQUEscUJ3RDFORTVHLFN4RDZOQWtHO01BSEY7c0J3RDFORWxHLFN4RDROQXVJO0tBRkYsTzBCdktFMUk7YzFCdUtGbG9DO2NBQUErbUM7NEJ3RDFORXNCLFN4RDJOQXNJOztJQURGLE8wQi9KRXZJLHlCMUIrSkZwb0MsVUFBQSttQztHQUtpRDtZQUxqRGdLO0lBQUE7S0FHRWI7S0FEQWM7S0FEQUM7S0FFQXJyRCxNdURoT0EyZ0QsY3ZEZ09BMko7S0FBQTFHLHFCQUFBNWpEO0tBREFrbkQsUXVEL05BdkcsY3ZEK05BeUs7S0FBQXRILHVCQUFBb0QsUUFDQXREO0tBRkF3RCxRdUR2TUF0RyxldkRnS0ZzRixhQXVDRWlGO0tBQUFwRSx1QkFBQUcsUUFDQXREO0lBRkYsc0JBQ0VtRDtHQUkrQztPQUU3Q3FFO1lBQ0FDLGdCQUFhLFlBQVc7R0FNNUIsU0FBQUMsbUJBQUFySztJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0VzSztNQURGckk7TUFBQUM7TUFBQXRpQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBbW1COztXQUFBb2M7V0FBQUM7YUFBQUE7V0FBQSxHd0R4T0VkLFNEd0NBekI7WXZEZ01GcUMsZUFBQUUsWXdEeE9FZCxTeER3T0ZZOztrQndEeE9FWixTeER5T0FnSjtXQURGckksb0JBQUFHLFl3RHhPRWQsU3hEd09GVzs7V0FDRSxJQUFBSSxTdUR2TEFwQyxldkRzTEZrQztXQUNFbUksd0NBQUFqSTs7b0JBREZ0Yzs7UUFHbUI7S0FIbkJubUIsS0FBQW1pQztRd0R4T0VULFN4RHdPRlc7TUFBQSxPMEJuTUVsQix3QjFCbU1GN25DLFV3RHhPRW9vQyxTeER3T0ZXLGFBQUFqQztRd0R4T0VzQixTeER3T0ZZO01BQUEsTzBCL0xFbEIsb0IxQitMRjluQyxVd0R4T0Vvb0MsU3hEd09GWSxRQUFBbEM7S0FDRSxZd0R6T0FzQixTeER5T0FnSjs7TUFERixPMEJyTEVuSjtlMUJxTEZqb0M7ZUFBQThtQzs7O3VCd0R4T0VzQixTeER5T0FnSjs7O1NBQUFDO0tBREYsV0FDRUE7O0lBREYsTzBCN0tFbEoseUIxQjZLRm5vQyxVQUFBOG1DO0dBR21CO1lBSG5Cd0s7SUFBQTtLQUNFQztLQUFBNXJELE11RGhQQXlnRCxldkRnUEFtTDtLQUFBaEkscUJBQUE1akQ7SUFERixzQkFDRTRqRDtHQUVpQjtZQUVuQmlJLHFCQUFBMUs7SUFBQSxVQUFBQSxxQ0FBQUE7S0FDRTtNQURGK0IsZ0JBQUEvQjtNQUNFNEo7TUFDQUM7TUFDQXJDO01BSEZ2RjtNQUFBQztNQUFBdGlDOztTQUFBO1NBQUE7d0JBQUE7O1dBQUFtbUI7O1dBQUFvYztXQUFBQzthQUFBQTtjQUFBQTtlQUFBQTtnQndEN09FZCxTeEQrT0F1STtjQUZGNUgsb0JBQUFHLFl3RDdPRWQsU3hENk9GVzs7Y0FFRSxJQUFBSSxTdURsS0FsQyxjdkRnS0ZnQztjQUVFMEgsa0NBQUF4SDs7O21Cd0QvT0FmLFN4RGdQQWtHO1lBSEZ2RixvQkFBQUcsWXdEN09FZCxTeEQ2T0ZXOztZQUdFLElBQUE2QixXdURuS0EzRCxjdkRnS0ZnQztZQUdFcUYsMkJBQUExRDs7a0J3RGhQQXhDLFN4RDhPQXNJO1dBREYzSCxvQkFBQUcsWXdEN09FZCxTeEQ2T0ZXOztlQUNFOEIsV3VEbEdBekQsZXZEd0NGNkMsYUF5REFoQjtXQUNFeUgscUJBQUE3Rjs7b0JBREZoZTs7UUFLaUQ7S0FMakRubUIsS0FBQW1pQztRd0Q3T0VULFN4RDZPRlc7TUFBQSxPMEJ4TUVsQix3QjFCd01GNW5DLFV3RDdPRW1vQyxTeEQ2T0ZXLGFBQUFqQztRd0Q3T0VzQixTeEQ2T0ZZO01BQUEsTzBCcE1FbEIsb0IxQm9NRjduQyxVd0Q3T0Vtb0MsU3hENk9GWSxRQUFBbEM7S0FDRTtNQUFBLFF3RDlPQXNCLFN4RDhPQXNJO01BQ0EsVXdEL09BdEksU3hEK09BdUk7TUFDQSxVd0RoUEF2SSxTeERnUEFrRzs7O09BQUFVO09BREE0QjtPQURBQztNQURGLFdBQ0VBLGFBQ0FELDBCQUNBNUI7O0tBSEY7TUFBQSxxQndEN09FNUcsU3hEZ1BBa0c7TUFIRjtzQndEN09FbEcsU3hEK09BdUk7S0FGRixPMEIxTEUxSTtjMUIwTEZob0M7Y0FBQTZtQzs0QndEN09Fc0IsU3hEOE9Bc0k7O0lBREYsTzBCbExFdkkseUIxQmtMRmxvQyxVQUFBNm1DO0dBS2lEO1lBTGpEMks7SUFBQTtLQUdFeEI7S0FEQWM7S0FEQUM7S0FFQXJyRCxNdURuUEEyZ0QsY3ZEbVBBMko7S0FBQTFHLHFCQUFBNWpEO0tBREFrbkQsUXVEbFBBdkcsY3ZEa1BBeUs7S0FBQXRILHVCQUFBb0QsUUFDQXREO0tBRkF3RCxRdUQxTkF0RyxldkRnS0ZzRixhQTBERWlGO0tBQUFwRSx1QkFBQUcsUUFDQXREO0lBRkYsc0JBQ0VtRDtHQUkrQztZQUc3QzhFLFdBQVNDLElBQUsscUJBQUxBLGNBQXFDO0dBT2xELFNDaklBQyx5QkRpSUE5SztJQUFBLFVBQUFBLHFDQUFBQTtLQUNFO01BREYrQixnQkFBQS9CO01BQ0VvRDtNQUNBMkg7TUFDQUM7TUFIRi9JO01BQUFDO01BQUF0aUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQW1tQjs7V0FBQW9jO1dBQUFDO2FBQUFBO2NBQUFBO2VBQUFBO2dCd0Q1UEVkLFN4RDZQQThCO2NBREZuQixvQkFBQUcsWXdENVBFZCxTeEQ0UEZXOztjQUNFLElBQUFJLFN1RHJNQW5DLGlCdkRvTUZpQztjQUNFaUIsb0JBQUFmOzs7bUJ3RDdQQWYsU3hEOFBBeUo7WUFGRjlJLG9CQUFBRyxZd0Q1UEVkLFN4RDRQRlc7O2dCQUVFNkIsV3VEbEhBeEQsZUFwRkFKLGtCdkRvTUZpQztZQUVFNEkseUJBQUFqSDs7a0J3RDlQQXhDLFN4RCtQQTBKO1dBSEYvSSxvQkFBQUcsWXdENVBFZCxTeEQ0UEZXOztXQUdFLElBQUE4QixXdUR2TUE3RCxpQnZEb01GaUM7V0FHRTZJLHVCQUFBakg7O29CQUhGaGU7O1FBS2lEO0tBTGpEbm1CLEtBQUFtaUM7UXdENVBFVCxTeEQ0UEZXO01BQUEsTzBCdk5FbEIsd0IxQnVORjNuQyxVd0Q1UEVrb0MsU3hENFBGVyxhQUFBakM7UXdENVBFc0IsU3hENFBGWTtNQUFBLE8wQm5ORWxCLG9CMUJtTkY1bkMsVXdENVBFa29DLFN4RDRQRlksUUFBQWxDO0tBQ0U7TUFBQSxRd0Q3UEFzQixTeEQ2UEE4QjtNQUNBLFV3RDlQQTlCLFN4RDhQQXlKO01BQ0EsVXdEL1BBekosU3hEK1BBMEo7OztPQUFBQztPQURBQztPQURBbEc7TUFERixXQUNFQSxZQUNBa0csaUJBQ0FEOztLQUhGO01BQUEscUJ3RDVQRTNKLFN4RCtQQTBKO01BSEYscUJ3RDVQRTFKLFN4RDhQQXlKO0tBRkYsTzBCek1FNUo7YzFCeU1GL25DO2NBQUE0bUM7NEJ3RDVQRXNCLFN4RDZQQThCOztJQURGLE8wQmpNRS9CLHlCMUJpTUZqb0MsVUFBQTRtQztHQUtpRDtZQ3RJakRtTDtJRGlJQTtLQUdFQztLQURBQztLQURBMUY7S0FFQTltRCxNdURyUUEwZ0QsaUJ2RHFRQTZMO0tBQUEzSSxxQkFBQTVqRDtLQURBa25ELFF1RDFPQXBHLGVBMUJBSixrQnZEb1FBOEw7S0FBQTFJLHVCQUFBb0QsUUFDQXREO0tBRkF3RCxRdURuUUExRyxpQnZEbVFBb0c7S0FBQUcsdUJBQUFHLFFBQ0F0RDtJQUZGLHNCQUNFbUQ7R0FJK0M7R0E0QmhDLElBQWZ3RjtZQUNBQyxpQkFBaUJ0dkQsR0FEakJxdkQsc0JBQ2lCcnZELFdBQTBCO1lBRTNDdXZELGNBQWV6bkI7SUFDakIsR0FEaUJBO1NBRW9CN21DLElBRnBCNm1DLFVBQ2IwbkIsVUFDc0MsVzBCMVN4QzF0QixlMUIwU21DN2dDOztTQURqQ3V1RDtJQUdlLElBQWZDLGlCVy9SRnZxQyxNWHdSQW1xQztJQVFGLE9BQUEsVzBCN1NFdnRCLGUxQjRTRTJ0QixnQkFIQUQ7R0FPZ0I7WUFFbEJFLFVBQXVCQyxVQUFVN25CLE9BQU84bkIsU0FDaENDO0ksZ0JBR21CbnFCLFFBQWFvcUI7S0FDMUM7TUFDSUMsa0JBQWlCLHdCQU5JSjtNQU9yQksscUJZM1NGM3FDLHFCWjBTRTBxQztNQUVBRTs7eUI7VUFBeUMsV0FQbkNKLE1BR2dDQztNQUt0Q0k7UUFDQyxXQUhERjtXQUNBQzt1QkFEQUQsd0JBQ0FDO01BS0FFLHlCQVBBSixVQUdBRztNQUtBRSxRWWxURi9xQyxPWmlURThxQztNQUVBRSxrQkF6QkZkLGNBVWlDem5CO01BZ0IvQndvQjs7VUFoQnNDVjs7Ozs7O2FBcUJQLHdCQU4vQlM7O01BU0FuQyxTQTNVRjVJLGVBb1RRdUs7UUFBQUE7TUFtQ0Y7T0FERVU7O1dBQ0Y7YXFEdk1KblAscUJyRHVNSSxXQW5DRXlPLE1BR21CbnFCO09BbUNtQixnQkF6QjVDMHFCO09BV01JO09BQU4vNUM7O2VBVU04NUM7OztlQW5CTkQ7OztlQVFBcEM7Ozs7Ozs7O01BS0k7T0FERXVDOztXWWhVUnByQzs7ZVppVU07aUJxRGhNSis3QixxQnJEZ01JLFdBNUJFeU8sTUFHbUJucUI7T0E0Qm5CZ3JCLG9DQWxCTk4sT0FjTUs7T0FIQUUsa0JBT0FEO09BUE5FOzZCQVRBTixzQkFRQXBDO09BQ01zQyxRQUFBRztPQUFObDZDLE9BQUFtNkM7S0FrQko7Z0NBbEJJbjZDLE9BQU0rNUM7dUJBaUJMaHBEO2VBQ0w7NkJBREtBO2lDQUNBd3lDO3lCQUNROzBCQUFUK0o7NEJxRHJUQTVDLHVCckRxVGlDLHdCQURoQ25IO3lCQUVMLElBQUksV0FBQSxXQTVDTTZWLE1BMkNOOUwsU0FDQTsrQkFDQzkrQjs4QkFBQWpqQix3QkFBQWlqQjswQkFDSCxrQkFKRyswQjswQkFLSCxRQUZHaDRDOzBCQUdILE1BQUEsNEJBSEdBOzt3QkFHSTtjQUFBLEdBQUE7O09BdkdMNnVEO1l5RHpQRkMsVUFBVTd2RCxHQUFJLE9BQUpBLFFBQXlEO1lBVW5FZ3dDLE1BQU1od0M7SUFDUixJQUFJNm1DLFFBWEZncEIsVUFVTTd2RCxJQUVKMHVELFdBRkkxdUQsTUFHd0IsV0FGNUI2bUM7SUFFNEI7SyxPekRrUzlCNG5CLFV5RG5TRUM7R0FDaUM7WUNqQm5Db0IsT0FFRWgrQztJQUFKLE9qRGtCbUI2UixTaURsQmY3UixXQUMyQixhQUQzQkEsWUFBQUE7R0FDaUU7OztLQXFCbEI7TUFBN0NpK0M7TUFDQUM7TUFDQUMscUJBQXlDO2NBaUJ6Q0MsV0FBVzdnQjtNcEJ5TmIrRDtRZ0J6UEE0TyxlSWdDYTNTO2lCQUtSOGdCO1NBR0wsU0FIS0E7VUFPTzttQkFQUEE7V0FNWWpxRDtXQUFOa3FEO1dBQ0h4eEQsU0EvQk5teEQsU0E4QlNLO1VBRVAsT0FoQ0ZMLFNBOEJTSztVQUVQLE9BQUEsV0FESXh4RCxHQURTc0g7O3VCQU5aaXFELFlBSU9qd0QsZ0JBQUhhO3VCQUNzRG5DLEdBQUssT0FBaEUsV0FBMkRBLEdBRG5Ec0IsR0FDMkQ7U0FBbkUsc0I7MkJBNUJGOHZELFdBekJKRixPQW9EVy91RDtRQUtDO01BVFY7S0FTVTs7S0FHVixnQiw2QkFqQkVtdkQsb0JBakJBRDtLQUhOOzthQTZDSUksZUFBeUJ0dkQsR0FBY2IsR0FFekMsZUo5REU2aEQsa0JJNER5QmhoRCxHQUFjYixNQUVvQzs7O2NBT3pFZ3dELFdBQVc3Z0I7TXBCdUxiK0Q7UWdCelBBNE8sZUlrRWEzUzs7U0FRYixJQUhjbnBDLGlCQUFOa3FEO1NBS1I7a0JBRGMsbUJBSkFscUQ7MkJBSVRtRzttQkFDTSxJQUFQbkcsT0ovRUo2N0MsVUk4RUsxMUM7bUJBR0YsZUpqRkgwMUMsa0JJMEVRcU8sTUFLSmxxRDtrQkFFdUQ7UUFBQTtNQVAzRDtLQU8yRDtLQUVyRCxtQkFkSmdxRDtLQUppQzs7SUEvRGIseUJBMER0Qkc7Ozs7eUM7O1lDeERBQyxNQUFNdHdELEdBQUc0RixNQUFLakg7SUFDaEIsVUFEUXFCLDRCQUFBQSxLQUFHNEYsZ0JBQUtqSCxRQUFBQTtRQUlQRCxJQUpEc0I7SUFJOEIsd0JBQTdCdEIsR0FKT0MsT0FBQUE7R0FJMkI7WTFEUDNDNHhELFFBQVFDLFNBQVF4d0Q7SUFDbEIsT3FDNkVFa3pDOztlckM3RUY7aUJvRHNJSWlOLHFCcER0SUosV0FEVXFRLFNBQVF4d0Q7R0FFRDtZQUVmeXdELFFBQVFDLFNBQVFseUQ7SUFDUCxJQUFQdTZDLGNBRGN2NkM7SUFFbEI7WUFBRztjQUZPa3lELFNvRDZCTnhRLHVCcEQzQkEsd0JBREFuSDtHQUMwRDtHQUc5RCxTQUFBNFgsY0FBQTdOO0lBQUEsVUFBQUEscUNBQUFBO0tBQVc7TUFBWCtCLGdCQUFBL0I7TUFBV3NEO01BQVV3SztNQUFyQjdMO01BQUFDO01BQUF0aUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQW1tQjs7V0FBQW9jO1dBQUFDO2FBQUFBO2NBQUFBO1lBQUEsR3VEVEVkLFNEd0NBekI7YXREL0JGcUMsZUFBQUUsWXVEVEVkLFN2RFNGWTs7bUJ1RFRFWixTdkRTbUJ3TTtZQUFyQjdMLG9CQUFBRyxZdURURWQsU3ZEU0ZXOztnQkFBcUJJLFNzRDBHbkJqQyxpQkEzREFGLGtCdEQvQ0ZpQztZQUFxQjJMLG9CQUFBekw7O2tCdURUbkJmLFN2RFNTZ0M7V0FBWHJCLG9CQUFBRyxZdURURWQsU3ZEU0ZXOztXQUFXLElBQUE2QixXc0RvRVQzRCxjdERwRUZnQztXQUFXbUIsa0JBQUFROztvQkFBWC9kOztRQUErRDtLQUEvRG5tQixLQUFBbWlDO1F1RFRFVCxTdkRTRlc7TUFBQSxPeUI0QkVsQix3QnpCNUJGMW5DLFd1RFRFaW9DLFN2RFNGVyxhQUFBakM7UXVEVEVzQixTdkRTRlk7TUFBQSxPeUJnQ0VsQixvQnpCaENGM25DLFd1RFRFaW9DLFN2RFNGWSxRQUFBbEM7S0FBVyxJQUFBLFF1RFRUc0IsU3ZEU1NnQyxXQUFVLFV1RFRuQmhDLFN2RFNtQndNOztVQUFBQyx5QkFBVmhKO01BQVgsV0FBV0EsVUFBVWdKOztLQUFyQix5QnVEVEV6TSxTdkRTbUJ3TTtLQUFyQixPeUIwQ0UzTTtjekIxQ0Y5bkM7Y0FBQTJtQzs0QnVEVEVzQixTdkRTU2dDOztJQUFYLE95QmtERWpDLHlCekJsREZob0MsV0FBQTJtQztHQUErRDtZQUEvRGdPO0lBQUE7S0FBcUJDO0tBQVZ4STtLQUFVNW1ELE1zREpuQjRnRCxpQkFYQUYsa0J0RGVtQjBPO0tBQUF4TCxxQkFBQTVqRDtLQUFWa25ELFFzRFpUdkcsY3REWVNpRztLQUFBOUMsdUJBQUFvRCxRQUFVdEQ7SUFBckIsc0JBQVdFO0dBQW9EO1lBS3pEdUwsUUFBTWpzRCxHQUFJLE9BQUpBLEVBQWU7WUFDckJrc0QsUUFBTXp5RCxHQUFJLE9BQUpBLEVBQWU7WUFLdkIweUQsUUFBTWx4RCxHQUFJLE9BcEJadXdELFFBU0ZPLGVBV1U5d0QsR0FBeUI7WUFDL0JteEQsUUFBTTN5RCxHQUFJLE9xQ3lEWjAwQyxRckMxRUF1ZCxRQUtGRSxlQVlVbnlELElBQTJDO1lBQ2pENHlELFFBQVFweEQsR0FBSSxPQUFKQSxLQUFRO0dBTXBCLFNBQUFxeEQsZ0JBQUF2TztJQUFBLFVBQUFBLHFDQUFBQTtLQUFlO01BQWYrQixnQkFBQS9CO01BQWV3TztNQUFrQkM7TUFBcUJwTDtNQUF0RHBCO01BQUFDO01BQUF0aUM7O1NBQUE7U0FBQTt3QkFBQTs7V0FBQW1tQjs7V0FBQW9jO1dBQUFDO2FBQUFBO2NBQUFBO2VBQUFBO2FBQUEsR3VENUJFZCxTRHdDQXpCO2N0RFpGcUMsZUFBQUUsWXVENUJFZCxTdkQ0QkZZOztvQnVENUJFWixTdkQ0QitCbU47YUFBakN4TSxvQkFBQUcsWXVENUJFZCxTdkQ0QkZXOztpQkFBaUNJLFNzRGdIL0IvQixlQXBGQUosa0J0RDVCRmlDO2FBQWlDc00scUJBQUFwTTs7bUJ1RDVCL0JmLFN2RDRCb0QrQjtZQUF0RHBCLG9CQUFBRyxZdUQ1QkVkLFN2RDRCRlc7O1lBQXNELElBQUE2QixXc0Q0QnBENUQsaUJ0RDVCRmlDO1lBQXNEa0IseUJBQUFTOztrQnVENUJwRHhDLFN2RDRCYWtOO1dBQWZ2TSxvQkFBQUcsWXVENUJFZCxTdkQ0QkZXOztXQUFlLElBQUE4QixXc0RpRGI1RCxjdERqREZnQztXQUFlcU0sMEJBQUF6Szs7b0JBQWZoZTs7UUFDbUI7S0FEbkJubUIsS0FBQW1pQztRdUQ1QkVULFN2RDRCRlc7TUFBQSxPeUJTRWxCLHdCekJURnZuQyxXdUQ1QkU4bkMsU3ZENEJGVyxhQUFBakM7UXVENUJFc0IsU3ZENEJGWTtNQUFBLE95QmFFbEIsb0J6QmJGeG5DLFd1RDVCRThuQyxTdkQ0QkZZLFFBQUFsQztLQUFlO01BQUEsUXVENUJic0IsU3ZENEJha047TUFBa0IsVXVENUIvQmxOLFN2RDRCK0JtTjtNQUFxQixVdUQ1QnBEbk4sU3ZENEJvRCtCOzs7T0FBQWtCO09BQXJCbUs7T0FBbEJDO01BQWYsV0FBZUEsa0JBQWtCRCxhQUFxQm5LOztLQUF0RDtNQUFBLHFCdUQ1QkVqRCxTdkQ0Qm9EK0I7TUFBdEQscUJ1RDVCRS9CLFN2RDRCK0JtTjtLQUFqQyxPeUJ1QkV0TjtjekJ2QkYzbkM7Y0FBQXdtQzs0QnVENUJFc0IsU3ZENEJha047O0lBQWYsT3lCK0JFbk4seUJ6Qi9CRjduQyxXQUFBd21DO0dBQ21CO1lBRG5CNE87SUFBQTtLQUFzRGxKO0tBQXJCbUo7S0FBbEJDO0tBQXVDandELE1zRGxDcEQwZ0QsaUJ0RGtDb0RtRztLQUFBakQscUJBQUE1akQ7S0FBckJrbkQsUXNEUi9CcEcsZUExQkFKLGtCdERrQytCc1A7S0FBQWxNLHVCQUFBb0QsUUFBcUJ0RDtLQUF2Q3dELFFzRC9CYnpHLGN0RCtCYXNQO0tBQUFoSix1QkFBQUcsUUFBa0J0RDtJQUFqQyxzQkFBZW1EO0dBQ0k7WUFFbkJpSixjQUFBL087SUFBQSxVQUFBQSxxQ0FBQUE7S0FBVztNQUFYK0IsZ0JBQUEvQjtNQUFXZ1A7TUFBZWxCO01BQTFCN0w7TUFBQUM7TUFBQXRpQzs7U0FBQTtTQUFBO3dCQUFBOztXQUFBbW1COztXQUFBb2M7V0FBQUM7YUFBQUE7Y0FBQUE7WUFBQSxHdUQvQkVkLFNEd0NBekI7YXREVEZxQyxlQUFBRSxZdUQvQkVkLFN2RCtCRlk7O21CdUQvQkVaLFN2RCtCUzBOO1lBQVgvTSxvQkFBQUcsWXVEL0JFZCxTdkQrQkZXOztZQUFXLElBQUFJLFNBSFhrTSxnQkFHQXBNO1lBQVc2TSxxQkFBQTNNOztrQnVEL0JUZixTdkQrQndCd007V0FBMUI3TCxvQkFBQUcsWXVEL0JFZCxTdkQrQkZXOztXQUEwQixJQUFBNkIsV0RxSjFCWCxZQ3JKQWhCO1dBQTBCMkwsb0JBQUFoSzs7b0JBQTFCL2Q7O1FBQTZEO0tBQTdEbm1CLEtBQUFtaUM7UXVEL0JFVCxTdkQrQkZXO01BQUEsT3lCTUVsQix3QnpCTkZ0bkMsV3VEL0JFNm5DLFN2RCtCRlcsYUFBQWpDO1F1RC9CRXNCLFN2RCtCRlk7TUFBQSxPeUJVRWxCLG9CekJWRnZuQyxXdUQvQkU2bkMsU3ZEK0JGWSxRQUFBbEM7S0FBVyxJQUFBLFF1RC9CVHNCLFN2RCtCUzBOLGNBQWUsVXVEL0J4QjFOLFN2RCtCd0J3TTs7VUFBQUMseUJBQWZrQjtNQUFYLFdBQVdBLGFBQWVsQjs7S0FBMUIseUJ1RC9CRXpNLFN2RCtCd0J3TTtLQUExQixPeUJvQkUzTTtjekJwQkYxbkM7Y0FBQXVtQzs0QnVEL0JFc0IsU3ZEK0JTME47O0lBQVgsT3lCNEJFM04seUJ6QjVCRjVuQyxXQUFBdW1DO0dBQTZEO1lBQTdEa1A7SUFBQTtLQUEwQmpCO0tBQWZrQjtLQUFldHdELE1EcUoxQm9tRCxZQ3JKMEJnSjtLQUFBeEwscUJBQUE1akQ7S0FBZmtuRCxRQUhYNkksZ0JBR1dPO0tBQUF4TSx1QkFBQW9ELFFBQWV0RDtJQUExQixzQkFBV0U7R0FBa0Q7WUFPdkR5TTtJQUNPO0tBRGdCQztLQUFYQztLQUFKajdDO0tBQ05rN0MsWUFETWw3QztLQUVObTdDLG1CQUZVRjtLQUdWRywwQkFIcUJKO0lBSXpCLE9BQUEsdUJBSElFLE1BQ0FDLGFBQ0FDOztZQUdGQyxRQUFNaDBEO0lBQ1IsSUFBTSxRQUFBLGlCQURFQTs7S0FPRCxNQUFBO0lBSk07S0FEUjJZO0tBQUlpN0M7S0FBV0Q7S0FDWkUsWUFESGw3QztLQUVHbTdDLG1CQUZDRjtLQUdERywwQkFIWUo7SUFJaEIsV0FISUUsTUFDQUMsYUFDQUM7R0FFVztHQUlqQixJQUZBRTtZQVFBQyxRQUFNM3RELEdBQUksT0FBSkEsRUFBZTtZQUNyQjR0RCxRQUFNbjBELEdBQUksT0FBSkEsRUFBZTtZQU9yQm8wRCxRQUFNN3RELEdBQUksWUFBSkEsR0FBa0I7WUFDeEI4dEQsUUFBTXIwRCxHQUFJLFlBQUpBLEdBQWtCO1lBUXhCczBELFFBQU0vdEQ7SUFBSyxNQUFBO0dBQVk7WUFFdkJndUQsUUFBTXYwRDtJQUNSLElBQVUsUUFBQSxpQkFERkE7O0tBSUQsTUFBQTtJQUR1QyxJQUR6Q3cwRCxpQkFBT2Isa0JBQ2tDLHVCQURsQ0E7SUFDUixnQkFEQ2E7R0FFYztHQUVWLElBQVBDO1lBTUFDLFFBQU1sekQ7SUFBSyxNQUFBO0dBQVk7WUFFdkJtekQsUUFBTTMwRDtJQUNSLElBQVUsUUFBQSxpQkFERkE7O0tBT0QsTUFBQTtJQUZXO0tBSGI0MEQ7S0FBaUJoQjtLQUdKLFlBSElBO0lBQ2xCLGdCQURDZ0I7R0FLYztHQUduQixJQURFQztZQUtGQyxRQUFNdHpELEdBQUksT0E1R1p1d0QsUUErQkZ5QixlQTZFVWh5RCxHQUF5QjtZQUMvQnV6RCxRQUFNLzBELEdBQUksT3FDL0JaMDBDLFFyQzFFQXVkLFFBMkJGb0IsZUE4RVVyekQsSUFBMkM7WUFFakRnMUQsVUFBUXh6RCxHQUNWLFdBRFVBLFNBQUFBLFNBQUFBLFNBS1Q7WUFZR3l6RCxRQUFNMXVELEdBQUksWUFBSkEsR0FBa0I7WUFDeEIydUQsUUFBTWwxRCxHQUFJLFlBQUpBLEdBQWtCO1lBSzFCbTFELFNBQU0zekQsR0FBSSxPQXRJWnV3RCxRQTJIRnRDLDBCQVdVanVELEdBQXlCO1lBQy9CNHpELFFBQU1wMUQsR0FBSSxPcUN6RFowMEMsUXJDMUVBdWQsUUF1SEY3QywwQkFZVXB2RCxJQUEyQztZQUNqRHExRCxVQUFRN3pELEdBQUksT0FBSkEsS0FBNkI7Ozs7Z0JBeEhuQ29jLFFBRkE0MEMsU0FDQUMsVUFJRjUwQyxRQUNBNjBDLFNBQ0FDLFNBQ0FDOzs7O2FBK0JFcUIsUUFmQVAsU0FNQU07U0ErREY5MUM7U0FDQTQyQztTQUNBQztTQUVBQzs7OzthQW1CRTcyQyxRQUZBODJDLFNBQ0FDO1NBSUY5MkM7U0FDQSsyQztTQUNBQztTQUNBQztJQVlEO2NBL0ZHcEIsUUFmQVAsU0FNQU0sVUErREY5MUMsUUFDQTQyQyxTQUNBQyxTQUVBQztJQWtDRCxXQUNLMzJDOzZCOzs7cUIsOEJBbkZGTCxRQUZBazJDLFNBQ0FDO0lBOEZIO2NBdkdHRixRQWZBUCxTQU1BTSxVQStERjkxQyxRQUNBNDJDLFNBQ0FDLFNBRUFDO0lBMENELFdBQ0sxMkM7NkI7OztxQiw4QkFwRUZtMkMsUUFSQUgsU0FFQUM7SUFvRkg7Y0EvR0dOLFFBZkFQLFNBTUFNLFVBK0RGOTFDLFFBQ0E0MkMsU0FDQUMsU0FFQUM7SUFrREQsV0FDS3oyQzs2Qjs7O3FCLDhCQTNGRk4sUUFGQW0yQyxTQUNBQztJQXNHSDtjQXZIR0osUUFmQVAsU0FNQU0sVUErREY5MUMsUUFDQTQyQyxTQUNBQyxTQUVBQztJQTBERCxXQUNLeDJDOzZCOzs7cUIsOEJBbkVGcTJDLFFBWEFILFNBRUFDO0lDMUVKVztZQUdBQyx1QkFBdUJDO0lBTW5COzs7OztRQU5tQkE7O1FBRnZCLzJDOzs7Ozs7OztJQXlCRjthQXBCRTtldURyQkEreUIsTXZEa0J1QmdrQjs7O2tCRm1MekJ0STtrQkFBQXpCO2tCQWdCQTZDO2tCQUFBTDtrQkFPSVE7a0JBQ0FDOzs7c0JFek1DM21ELEtBcUJMLE9BckJLQSxPQXFCaUI7R0FBQTtZQU9wQjB0RCxhQUFhQztJQUNmO0tBQXVCO0tBQVpDO0tBQVBDO0tBQ0FDO08rQmdQQTFpQjtnQzs7Uy9CbFBXdWlCO0tBR1hJO08rQnVOQW5qQjs2QjtTL0J4TkFrakI7S0FFQXBpQixrREFEQXFpQjtLQUVBQztJK0J4QkFubEI7c0IvQjBCK0J6cUM7T0FDdkIsWStCL0JSMEgsTy9COEIrQjFIO21CQUVULE9BUmZ3dkQsY0FJUEk7V0FLU0M7T0FDQSxHa0N4RFg1aEIsVWxDa0RFMmhCO1FBQUFBLG9EQUtTQztPQUdHLG9EQUhIQTs7WUFJSUM7V0FBQUEsU0FDTyxPQWRiTixjQUlQSSxpQkFTYUU7O09BRUEsZ0RBTkpEO01BTXlDO01BWmxEdmlCO0lBR0YsT0FORW1pQjtHQWlCQztZQUVITSx3QkFBNEJDLHNCQUFxQkM7SUFDcEMsSUFBWEwsV2tDeUJGemhCLFFsQzFCaUQ4aEI7SUFFaEQsZ0JBRENMLFVBRDBCSTtHQU94QjtZQXdDSkUsYUFBY2IsUUFBT0U7SUFDdkI7YUFwRUVELGFBbUVxQkM7c0JBRWxCWTtjQUNMO3VCQXBHRWYsdUJBaUdjQztnQ0FJWGU7d0JBRUwsSUFBSUosdUJBRkNJO3dCQUdFOzRCQXRETEwsaUJBK0NjVixRQU1aVyxzQkFKQ0c7eUJBTUg7b0NBTkdBOzs2QkE2QmlCM2tELGdCQVprQnNrRCxPQWpCbkNLO3lCQWlCK0MsWUFZOUIza0QsS0F6QmxCd2tEOzZCQWFvQ0Y7K0JBSUd0OUMsS0FKSHM5QyxZQUc5Qk8sc0JBQ2lDNzlDOzsrQkFEakM2OUM7MEJBSUY7a0NBS2M3a0Q7a0NBVFo2a0Q7a0NBaEJOTDs7NkJBeUJvQ00sU0E3Qm5DSDt5QkE2QitDLFlBQTlCM2tELEtBekJsQndrRDsrQkF5Qm9DTSxRQU9oQixjQWhDcEJOOzhCQTZCV3RDLE9BSnlCNEM7MEJBR1osZ0JBQ2I1QyxNQUpPbGlEOzt3Q0FJUGtpRCxjQTdCWHNDOzs7a0NBSkNHO3lCQVlHLGlCQVJKSDt3QkFpQ0s7dUJBQVk7YUFBQTtHQUFBO1lBRW5CTyxhQUFhbEIsUUFBT0U7SUFNbEIsZUFOV0Y7SUFRZjthQUxFO2V1RC9KQWhrQixNdkQ0SmFna0I7OztrQkZ1RWYxRztrQkFBQUg7a0JBS0FNO2tCQUFBRDtrQkFPSW9DO2tCQUNBbEM7OztzQkVsRkN5RTtjQU1MO3lCQUErQnNDO2lCQUMzQjtrQkFDSUo7b0IrQjRISjFpQjs7MEM7OEM7O3NCL0J0SWtCdWlCO2tCQWFkaUI7b0IrQmlHSmhrQjswQztzQi9CcEdJa2pCO2tCQUlBakMsWWtDNUVOdGYsUWxDc0U2QjJoQixTQUFBQTtpQkFPM0I7d0NBRElyQyxZQU51QnFDLFVBS3ZCVTtpQkFFSjtnQkFDUztnQkFkUmhEO2NBTUwsT0FOS0E7YUFlQTtHQUFBO1lBRUhpRCwrQkFBa0NwQixRQUFRN0I7YUFFeENrRDtLQUtJO01BTDBCbCtDO01BSzFCLGtCQUwwQkEsS0FGRTY4QztLQXVCbEM7Y0FuQkU7Z0J1RG5MRmhrQixNdkQrS2tDZ2tCOzs7bUJGc0JwQ3RJO21CQUFBekI7bUJBZ0JBNkM7bUJBQUFMO21CQU9JUTttQkFDQUM7Ozt1QkUzQ0czbUQ7ZUFvQkw7aUNBQ1VpcEM7eUJBQUwsSUFBVzhsQjt5QkFDWixHQURZQTtzQ0FBQUE7OytCQUdDQzsyQkFBUSx5QkFBUkEsS0FIUC9sQjs7O3lCQUVnQixPQUZoQkE7d0JBR3NDOzt3QkF4QjNDanBDO2NBd0IyQzs7SUFFbEQsU0FBSWl2RCxpQkFBaUJDO0tBQ25CO2FBOUJrQ3pCO01Ba0M1Qjs7NEJBTGF5Qjs7Ozs7Ozs7Ozs7O0tBcUJuQjtjQW5CRTtnQnVEOU1GemxCLE12RCtLa0Nna0I7OzttQkZzQnBDdEk7bUJBQUF6QjttQkFnQkE2QzttQkFBQUw7bUJBT0lRO21CQUNBQzs7O3VCRWhCRzNtRDtlQW9CTDs7eUJBQTZCLElBQWdCMkYsaUJBQVRpTDt5QkFDaEMsT2tDaEVGdzdCLGtCbENnRWtCem1DLE1BQVEsV0FEUWlMLElBQ2hCakwsTUFBa0IsR0FET0E7d0JBQ0E7d0JBckJ4QzNGO2NBcUJ3QztJQUFBO0lBVy9DOzs7MEJBUCtCVjtrQkFBTCxJQUFRc1IsS0FBSHRSO2tCQUd6QjsyQkF4REZ3dkQsNEJBcUQyQnh2RDtvQ0FFcEI0dkQ7NEJBQ0w7cUNBN0JGRCxpQkE0Qk9DOzhDQUNBQyxPQUNMLFdBSjRCditDLElBR3ZCdStDLE9BQ007MkJBQUE7aUJBQUM7aUJBM0QwQnZEO3NCQXNEdkM5bEQsUUFRTCxPb0N6REU4bUMsVXBDaURHOW1DLFFBUWtCO0dBQUE7WUFFckJzcEQsY0FBZUMsVUFBbUQxcEQ7SUFHcEU7O2NBQTRCLElBQWUycEQsc0JBQVRDO2NBQzNCOzt5QkFBeUIsSUFBUzFoQjt5QkFBUSxnQkFBUkEsS0FKMkJsb0M7d0JBSUs7d0JBRDlCMnBEOzRCQUFUQzs7YUFHcEI7YUFOR0Y7R0FNSDtZQUVaRyxLQUFPcnVDO0ksR0FBQUE7U0FBU0MsTUFBVEQsUUFBQXN1QyxTQUFTcnVDOztTQUFUcXVDLHlCQUFrQixPQUFFO29CQUErQjlCO2NBRXhEK0Isa0JBQWtCdHRCLE9BQU11dEI7TUFFMUI7T0FBSTdCO1MrQnVDRjFpQjtrQzs7Vy9CM0N3RHVpQjtPQU90REk7UytCWUZuakI7K0I7Vy9CZkVrakI7U0FGc0I2QixRQUFOdnRCO1dBTXBCaHFDLElBTm9CZ3FDOztRQU9SLHdDQURaaHFDLFVBREkyMUQ7UUFFUSxXQURaMzFEO1dBTjBCdTNELFNBTTFCdjNEO1FBQUFBOzs7O0tBRUk7Y0FFRnczRCxvQkFBb0J4dEIsT0FBTXV0QjtNQUM1QjtlQXhHQWhCLHFCQTJGMERoQjt3QkFjckQvQjtnQkFDTDt5QkF2RkFpRCx1Q0FzRktqRDtrQ0FDQXlEOzBCQUNMLG1CQUpzQmp0QixxQkFBTXV0QjswQkFLVjsyQkFBZEUsY21CL1BKM3NDOzJCbkJnUUlwaUIsU0FOd0I2dUQsT0FBTnZ0QjttQ0FPZDB0QixRQUFTQyxhQUFZQzsyQkFDM0IsSUFEZUMsZ0JBQUFGLGFBQVlHLFNBQUFGOzJCQUMzQjs0QkFBRyxvQkFEd0JFOzRCQUN4QixXQUFBOzRCQUNXOzZCQUFSN2tELFlBRnFCNmtELFFBM1A3QjNDOzZCQThQUTdoQjs7Ozs7O2dDQTdQUmgxQjtvQ0EwUGlCdTVDO29DQUVUNWtEOzs7Ozs7NEJtQnhQUm1FLEluQnlQUWs4QixLQUxKbWtCOzs2QkFFeUJNLFNBQUFELFNBRXJCN2tEOzZCQUZTK2tELGdCQUFBSCxnQkFFVDVrRDs0QkFGUzRrRCxnQkFBQUc7NEJBQVlGLFNBQUFDOzswQkFzQmlDOzBCQXRCdERMLFFBUGMxdEIsT0FNbEJ0aEM7MEJBMEJnQixJQUFoQnV2RCxnQm1CdE1KdDJELE9uQjJLSTgxRDttQ0E0QklTLFVBQVludkMsS0FBYS9pQjsyQkFDL0IsR0FEa0IraUI7Z0NBQVVDLE1BQVZELFFBQUFvdkMsVUFBVW52Qzs7Z0NBQVZtdkM7MkJBQ1gsY0FEV0E7NEJBQ2xCLE1BQUE7O29DQUNRQyxPQUFPaHlDLEtBQUlwbEI7NEJBQ2pCLElBRGFxbEIsUUFBQUQsS0FBSW9GLE1BQUF4cUI7NEJBQ2pCOzZCQUFHLFlBRGN3cUIsU0FDSCxPTS9QbEJ0RixJTjhQaUJHOzZCQUdMLFltQjNPWmdGLFNuQnNPaUNybEI7eUNBTWpCLE9NbFFoQmtnQixJTjhQaUJHOzZCQUtHOzhCQUFQZ3lDOzhCQUxRNXNDLE1BQUFEOzhCQUFKbEYsWUFLSit4QyxLQUxJaHlDOzZCQUFBQSxRQUFBQzs2QkFBSWtGLE1BQUFDOzsyQkFLMEI7b0NBRXpDeHJCLEVBQUVxekM7NEJBQ0o7cUNBQ0U7dUN1RC9TTmpDOzs7MEN6RHFNRjBiOzBDQUFBekI7MENBZ0JBNkM7MENBQUFMOzBDQU9JUTswQ0FDQUM7dUNFZ0ZNamI7OztzQ0FJSixJQUhPcWtCLHdCQUF1Qlc7c0NBSTVCO3dDQTNEQ2pCLGdCQTRDSFksZW1CdE1KdDJELE9uQjJLSTgxRDsrQ0E4Q0ljLFFBQVNaLGFBQVlXO3VDQUN2Qjt3Q0FDSTVDOzBDK0J0QlIxaUI7O2dFO29FOzs0Qy9CM0N3RHVpQjt3Q0FvRWhEaUQ7MEMrQmpEUmhtQjtnRTs0Qy9COENRa2pCO3dDQUlBYzswQytCbERSaGtCO2dFOzRDL0I4Q1FrakI7dUNBS0o7eURBQXlCcnhELE9BQU15eEQ7aURBQVg7a0RBQTJCdm9ELE9BQWhCdW9EO2tEQUFHdDlDLEtBQUhzOUM7a0RBQ3ZCMkMsVUFSR2QsY0FPY3R6RDtrREFFakJvWixTa0NqT2QwMkIsUWxDK05xRDVtQztrREFHdkNpbUQsUUFqRmR3RCxjQXVCS0MsVUF5RFN4NUM7a0RBRUFnMkMsWWtDbk9kdGYsUWxDK05xQzJoQixTQUFBQTtpREFLcEI7NkRBSkgyQyxhQUQwQmpnRCxTQUY5QmdnRDtpREFTRTs7MkRBTkVDLFNBRUFqRixPQUNBQyxZQUp1QnFDOzttREFEM0JVO2lEQVFFO2dEQUVZO2dEQWhCSzhCO3NDQWdCTDtzQ0FFcEIsT0FsQklDLFFBUkdaLGFBQXVCVztxQ0EwQko7MkJBQUE7MkJBRWpCLElBQVBJLE9BcENJTixVQUZVRDsyQkF5Q2xCO3VEQWhDSWw0RCxHQTZCQXk0RDs2Q0FFQ0E7cUNBQ0wsZ0JBREtBLGdCQXhDQ1IsYUFBeUJseUQ7b0NBeUNzQjswQkFBQTswQkFFdkQsT0EzQ1FreUQsYUE1QkpUO3lCQXVFaUI7ZUFBQTtLQUFBO0tBRXZCO01BQUE7OztRQUNzRHpCO1FBQXJCSztRQUFuQnNDO09BekZWckIsa0JBeUZVcUIsbUJBQXdDM0M7T0FFbEQsT0FqRkF3QixvQkErRTZCbkIscUJBQXFCTDs7VUFJZjRDLG1DQUFyQkM7TUFDZCxPQXBGQXJCO2VBbUZjcUIsdUJBQXFCRCx3QkFHdkIsRUFBQTs7WUFFZEUsZUFBZ0J6QixRQUFRaEMsUUFBT0U7SUFDakM7YUF6T0VXLGFBd093QmIsUUFBT0U7c0JBRTVCbHhCO2NBQ0w7ZUFBSTAwQixjQURDMTBCLFFBbFFIOWxCO2VBb1FFeTZDO2lCa0M3TEFobEI7NEJsQytMS3FqQjtvQkFDZ0MsV0FEaENBLFFBSEwwQjtvQkFLRSxnQkFBSUU7cUJBQWlCLE9BQU8sV0FGekI1QixZQUhMMEIsWUFLTUUsZ0JBQXNEO21CQUFBO21CQVI5QzVCO2NBWWxCO3VCQURVLFdBL0dSRCxLQXdHRTRCLFVBSnNCM0QsUUFBT0UsTUFFNUJseEI7O3dCQVVMLE9rQ3hSRTZQOzBDbEN5UkttakIsUUFBVSxPQUFBLFdBQVZBLGNBQTJELEdBYmhEQTt1QkFjVjthQUFBO0dBQUE7RzBEdFhPO0lBQUE7Ozs7OztZQ2ViNkIsb0JBQWtCOTJELEdBQUU0RDtJQUN0QixJQUNpQm16RCxnQjVCR1gvb0IsWTRCTGNodUMsSUFFaEJnM0QsZ0I1QkVFanBCLFk0QkpjL3RDO0lBTXBCLG1CQUpJZzNELDZCQUFhRDtJQVFSLElBQUxFLEs1QmFBM3JELE80QnZCa0IxSCxJQVdsQml0QyxTNUIyUkFHLG1CNEI1UkFpbUI7SUFFSjtJQUNBLHNCLE81QmdSSXRtQixvQjRCblJBc21CLGFBQ0FwbUI7SUFJRjtLQURFaU07TzVCbVFBeE07NkI7ZTRCdlFBMm1CO0tBT0FmO081QmdRQTVsQix1QztlNEJ2UUEybUI7S0FVQUM7TzVCNlBBNW1COzZCO2U0QnZRQTJtQjtLQWFBRTtPQUNGOzs7OzJCOzs7U0FQRWpCO0lBU0k7Ozs7d0I7OztNQVRKQTtJQVVJOzs7O3dCOzs7TUFWSkE7SUFXSTs7aUM7TUFYSkE7SUFhRjs7OztlQWhCRXBaO21CQUdBb1osV0FNQWlCLHNCQUhBRDtHQVVtRTtZQUVyRUUsU0FBVWhtQixTQUFTcnFDLE1BQUtsSjthQUV0Qml2QyxJQUFFd0IsSUFBSStvQixLQUNDLElBQUxKLEs1QlpGM3JELE80QldNK3JELE1BRVIsT0FBQSxXQUp3Qng1RCxHQUdwQm81RCxJQUNBO0lBRU4sZ0IsTzVCWEk1b0IsVzRCT0F2QjtzQixPNUIyUUFtRSxrQjRCN1NGNmxCO3dCLE81QitURTNsQixLNEIvUmlCcHFDLE1BQVRxcUMsaUI1QjBTVkM7STRCcFNGO0dBR2tDO0dDdkQzQjtZQUVMaW1CLFVBQVV6NUQ7SUFDWjthQURZQTtzQkFFUEE7Y0FDTCxPeEIwREVxMEMsaUJ3QjFEa0JwRCxJQUFNLGtCQUFOQSxJQUFZLEdBRDNCanhDO2FBQzhCO0dBQUE7WUFFakMwNUQsT0FBTzN6RCxHQUFJLE9BTFgwekQsVTdCaURFOW9CLE02QjVDSzVxQyxJQUFrQztZQUV6QzR6RCxhQUFjdGdEO0lBQ2hCLFNBQUl1Z0QsSUFBSTlzRCxHQUFJLGFBQUpBLEdBQTJCO0lBQ25DLFNBQUkrc0QsUUFBUzc1RCxHQUFJLE9BQUpBLFdBQTRCO0lBQy9CLElBQU44NUQsZUFEQUQsU0FGWXhnRCxLQUlaMGdELFlBREFEO0lBRUosU0FBSUUsV0FBU3g1RDtLQUFJLHVDLGVBQUpBO0lBQWdEO0lBQ3pDLE9BTGhCbzVELFNBR0FHLE9BQ0FDO0dBQzRDOzthQUc1Q0MsU0FBUzNFLEtBQUlGO0tBQ2YsSUFBZThFLFdBREE5RSxXQUNYK0UsWUFEVy9FO0tBRWYsU0FBSWdDLE9BQU9oekI7TUFDVCw2QkFGRSsxQixXQUNPLzFCO0tBQytDO0tBRTFELE81RGdWQXkwQixtQjREblZJekIsU0FEVzhDLFVBREo1RTtJQUsrQjtJQUd2QixJQUFBLHFCQUFWOEUsb0JBRFA5RTtJQUdBLGdCLE9Ea0JGaUU7Z0JDbEIrQ2pFLEtBRnRDOEUsWUFFc0M5RSxPQUN0QyxTQUFtQjthQUkxQitFO0tBQ0Y7Y0FURS9FO3VCQVVHQTtlQUNMOztrQjdCMFFFdmlCOzJDOztvQjZCM1FHdWlCO2VBQ0wsTzdCa1BFL2lCOzRDOztjNkJqUDJDO0lBQUE7SUFPM0MsSUFKRStuQiw2QkFNQUM7YUFQRkMsY0FRRTlFO0tBQUo7TUFBK0MrRTtNQUFOQztNQUFYQztNQUd4QkMsa0JBSHdCRCxXQUFXRCxRQUFNRDtLQUkxQyxHdkR2Q0w1bUIsUXVEa0NJMG1CLGlCQUlFSyxtQkFKRkw7bUJBT0s1cUI7TUF3Qkw7O1VBOUIyQzhxQixhQUFBQTtZQWdDOUJwbEIsTUFoQzhCb2xCO1FBZ0NmLGdCQUFmcGxCO1NBQ0c7VUFBTndsQiwwQkFER3hsQjtVQUVQOzs7ZUFBcUI7Z0JBQU9tZTtnQkFDcEJFLGdDQURvQkY7Z0JBRXBCeGUsVXRCdUZoQkksUXNCdkY4QyxXcENwRmhEblQsZW9DaUZjNDRCO2VBSUEsZ0J0QmtHWnZsQixVc0JuR2dCTixTQURBMGU7Y0FFcUM7Y0EvQjlDL2pCO1VBd0JEbXJCOzs7O1dBQUFBLFNBeEJDbnJCOztNQWtDTCxHQXhDcUMrcUI7T0EyQy9COztVQUNPLElBRWlDSyxlQURBQztVQUVqQyxpQkFGaUNBLEtBQ0FEO1NBQ1Y7U0FqQmhDRDtNQS9CSlAsbUJBSUVLLFFBMkJFRTtNQXFCSixPQXJCSUE7S0FxQkE7U0E1Q0UsSUFBQSxlQWROUixlQU8wQkssV0FBV0Q7Ozs7TUFVbkI7T0FBUjdxQjtPQUNBQztPQUNBc0IsUTdCbkRaeEIsTTZCaURZQyxPQUNBQztPQUtBajhCO1NBQU07Ozs2Qjs7O1dBaEJoQjZoRDtPQVNJOztXQWpEUmdFLDRDQW9EY3RvQixRQUlBdjlCO29CQVBEb25EO1lBVUwsR0FuQnNCTjs7Y0FzQmJPLGNBdEJhUDtjQW1CbEJockI7OzttQkFLTyxJQUFPNGpCO21CQUNSO3FDQUEwQmp5RCxHQUFLLFlBQUxBLEdBSDNCNDVELGFBRzBELEdBRGpEM0g7a0JBQ21EO2tCQWhCaEUwSDs7aUJBVUR0ckIsT0FWQ3NyQjtZQWtCTCxNQWxDSlgsZUFPMEJLLFdBQVdELFNBbUI3Qi9xQjtZQVFKLE9BUklBO1dBU0E7OztLQUVSO0lBcUJJO2FBRU53ckIsU0FBbUJwMUQ7S0FDckIsT0FEcUJBOztZQUdGNUYsSUFIRTRGLE05RGlNckIwcEQsaUI4RDlMbUJ0dkQsSUFFZjs7WUFDVUssSUFOT3VGO1FBUWpCO2lCQW5GRnV2RDswQkFrRk9BO2tCQUNMOzJCQTFGRjJFLFNBeUZPM0UsS3REdEZUL3hDLEdzRHFGYy9pQjtvQ0FHTG1IOzRCQUNMLE94Qi9DSjBzQyxpQndCK0N3QnBELElBQU0sa0JBQU5BLElBQVksR0FEM0J0cEM7MkJBQ2dDO2lCQUFBOztRQUdyQztpQkFoRkYweUQ7MEJBK0VPM0U7a0JBQ0w7MkJBMUdKZ0UsaUNBeUdTaEU7b0NBQ0FyaUI7NEJBQ0wsOEJBQWtCdHpDLEdBQUssT0FBTEEsS0FBMkIsR0FEeENzekM7MkJBQzhEO2lCQUFBOztRQTRCbkU7aUJBN0dGZ25COzBCQTRHTzNFO2tCQUNMO21CQUFJOEM7cUJBQVk7Ozt5Qzs7O3VCQURYOUM7bUJBRUQ3bEI7bUJBQ0FDO21CQUNBc0IsUTdCeklOeEIsTTZCdUlNQyxPQUNBQztrQkFNSjsyQkEvSUo0cEI7a0VBMElRdG9CLFFBSEFvbkI7b0NBT0M3b0I7NEJBQ0w7OztrREFFd0N4cEMsR0FBSyxPQWpKakR1ekQsYUFpSjRDdnpELEdBWG5DdXZELFFBV2dFO2lEQUhoRS9sQjs4Q0FFQTBvQjtvREFNZ0I3M0Q7dUNBQ1o7K0QsTzFCM0NiMnpDLDBCMEIwQ3lCM3pDO3NDQUMyQztzQ0FGOUQ7dUNBREU0NkQ7d0QsT3hCbUdOaG5COzJDQTlERkcsVXdCekNTOGpCO3NDQVNMLE9BTEkrQztxQ0FLQzsyQkFBQTtpQkFBQTs7WUE3Q2NqQixZQWZGcDBEO1FBaUJqQjtpQkFwRkZzMEQ7MEJBbUZPM0U7a0JBQ0w7bUJBQUk4QztxQkFBWTs7O3lDOzs7dUJBRFg5QzttQkFFRDdsQjttQkFDQUM7bUJBQ0FzQixRN0JoSE54QixNNkI4R01DLE9BQ0FDO2tCQU1KOzJCQXRISjRwQjtrRUFpSFF0b0IsUUFIQW9uQjtvQ0FPQzdvQjs0QkFDTDs7O2tEQUV3Q3hwQyxHQUFLLE9BeEhqRHV6RCxhQXdINEN2ekQsR0FYbkN1dkQsUUFXZ0U7aURBSGhFL2xCOzhDQUVBMG9COzt1Q0FPc0I7NENBQ1h4QyxpQkFBNEJ3RixjQUE1QnhGO3dDQUNBLFlBRDRCd0YsYUFuQnpCbEIsWUFxQk4sV0FGR3RFOzt1Q0FHWTtzQ0FBSztzQ0FKMUIsb0I7c0NBRkw7dUNBREV1Rjt3RCxPeEI0SE5obkI7MkNBOURGRyxVd0JsRVM4akI7c0NBYUwsT0FUSStDO3FDQVNDOzJCQUFBO2lCQUFBOztRQXVCTSxJQURERSxVQTdET3YxRCxNQThEYnlyRCxPUjlJUmpPO1FRZ0pJO2lCQW5JRjhXOzBCQWtJTzNFO2tCQUNMOzJCQTdIRjhFLGNBNEhPOUUsT0FGSzRGO29DQUdMM3JCOzRCQUNMLElBQUk0ckIsYUFEQzVyQjs0QkFFTCxXQUpJNmhCLE1BRE04SixZQUlOQzsyQkFDbUQ7aUJBQUE7O1lBQ3ZDQyxVQW5FQ3oxRCxNQW1FUjAxRCxRQW5FUTExRCxNQW1FZGtCLE9BbkVjbEI7UUF1RWpCO2lCQTFJRnMwRDswQkF5SU8zRTtrQkFDTDsyQkFwSUY4RSxjQW1JTzlFLE9BSEZ6dUQ7b0NBSUUwb0M7NEJBQ0w7cUNBbktKZ3FCOztrREFxS2dDdjFEOzBDQUN0QjsyQ0FHSTs0Q0FGRW8wRCxVQUZnQnAwRCxRQVB6QjZDOzRDQVVTeTBELFVIdktkaEssTUc2SlcrSixPQUFOeDBELFNBU1N1eEQ7NENBS0FqbkQsdUJBVlBvK0IsTUFNTytyQixhQUFBQTs0Q0FNSjs7Z0Q3QnBJVi9xQixZNkJrSWNwL0IsS0FYUG1rRDt5REFhUWpvRDtpREFDTCxTQURLQTtzREFHR3lELE1BSEh6RDtrREFJRCxvQkFOQThELFNBS0lMO2tEQUNKOzs2REFKQ3pEOzZEQUVRO3FEQUtGbk07aURBQU0sV0FBTkE7Z0RBQVk7MkNBUHZCOztzREFRUTt5Q0FBZTt5Q0F4QmZrNkQ7OENBTVhHLFNBcUJMLFdBckJLQSxTQXFCSzsyQkFBQTtpQkFBQTs7SUFBQTtJQWpMQyxtQkFtRmJSOzs4QkFpR2U7R3pEeVdqQnIyQzs7RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gQXJyYXlcblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zdWIgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9zdWIgKGEsIGksIGxlbikge1xuICB2YXIgYTIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBhMlswXT0wO1xuICBmb3IodmFyIGkyID0gMSwgaTE9IGkrMTsgaTIgPD0gbGVuOyBpMisrLGkxKysgKXtcbiAgICBhMltpMl09YVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2FwcGVuZCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgdmFyIGwxID0gYTEubGVuZ3RoLCBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMStsMi0xXG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gMDtcbiAgdmFyIGkgPSAxLGogPSAxO1xuICBmb3IoO2k8bDE7aSsrKSBhW2ldPWExW2ldO1xuICBmb3IoO2k8bDtpKyssaisrKSBhW2ldPWEyW2pdO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X2dldCAoYXJyYXksIGluZGV4KSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5W2luZGV4KzFdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpe1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIGFycmF5W29mcytpKzFdID0gdjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KHMubCk7XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkobCk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZihsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJ5dGVzLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9hcnJheSAoYSkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoYSwwLGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGEpIHtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vQWxpYXM6IGNhbWxfZmlsbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgaWYgKChpMiA9PSAwKSAmJlxuICAgICAgKGxlbiA+PSBzMi5sIHx8IChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsZW4gPj0gczIuYy5sZW5ndGgpKSkge1xuICAgIHMyLmMgPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIGlmIChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBpMiA9PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSB7XG4gICAgaWYgKHMyLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMyKTtcbiAgICB2YXIgYzEgPSBzMS5jLCBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT0gNCAvKiBBUlJBWSAqLykge1xuICAgICAgaWYgKGkyIDw9IGkxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4gKGxlbiwgYzEubGVuZ3RoIC0gaTEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGMyIFtpMiArIGldID0gYzEuY2hhckNvZGVBdChpMSArIGkpO1xuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLGIsYyxkLGUpIHtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykgeyByZXR1cm4gcy5sIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChhLGIpIHsgcmV0dXJuIGEgKyBiIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBNbEJ5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoczEsczIpe1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoczEudCxzMS5jK3MyLmMsczEubCtzMi5sKVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gcy5jaGFyQ29kZUF0KGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gcy5sZW5ndGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPy0xOihzMSA+IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8PSBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhbiBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMuYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNhbWxfanNieXRlc19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSB7XG4gIGlmKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIHM7XG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICBpZiAoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKVxuICBlbHNlIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfdXRmOF9vZl91dGYxNihzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIG5ldyBNbEJ5dGVzKDAscyxzLmxlbmd0aCk7IH1cblxuXG4vLyBUaGUgc2VjdGlvbiBiZWxvdyBzaG91bGQgYmUgdXNlZCB3aGVuIHVzZS1qcy1zdHJpbmc9ZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocyxpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocyxpLGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19jb21wYXJlXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19jb21wYXJlKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB7IHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKXtcbiAgcmV0dXJuIHMudG9VdGYxNigpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiAocyBpbnN0YW5jZW9mIE1sQnl0ZXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfY29udGVudChzKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmM7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcy5jXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3QocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9pc19tbF9ieXRlcyhzKTtcbn1cblxuLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZGVwcmVjYXRlZFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbmV3X3N0cmluZyAocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19mcm9tX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3RvX2pzX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdG9fc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9ieXRlcyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHgpIH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N5c19leGl0IChjb2RlKSB7XG4gIGlmKGdsb2JhbFRoaXMucXVpdCkgZ2xvYmFsVGhpcy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQpXG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb24sIGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgY2FtbF9jYWxsYmFjayhoYW5kbGVyLCBbZXJyLGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZihhdF9leGl0KSBjYW1sX2NhbGxiYWNrKGF0X2V4aXQsIFswXSk7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiBcIiArIG1zZyk7XG4gICAgICBpZihlcnIuanNfZXJyb3IpIHRocm93IGVyci5qc19lcnJvcjtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZXRfc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLHYpe1xuICBpZighZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYpXG4gICAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYgPSB7fVxuICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuZnVuY3Rpb24ganNvb19zeXNfZ2V0ZW52KG4pIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIC8vbm9kZWpzIGVudlxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuZW52XG4gICAgICYmIHByb2Nlc3MuZW52W25dICE9IHVuZGVmaW5lZClcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbl07XG4gIGlmKGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52XG4gICAgICYmIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dKVxuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xuICBpZihyID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9ub3RfZm91bmQgKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSl7XG4gIHJldHVybiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKChmdW5jdGlvbiAoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICB2YXIgbWFpbiA9IFwiYS5vdXRcIjtcbiAgdmFyIGFyZ3MgPSBbXVxuXG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5hcmd2XG4gICAgICYmIHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3ZcbiAgICAvL25vZGVqc1xuICAgIG1haW4gPSBhcmd2WzFdO1xuICAgIGFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICB9XG5cbiAgdmFyIHAgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhtYWluKTtcbiAgdmFyIGFyZ3MyID0gWzAsIHBdO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICBhcmdzMi5wdXNoKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFyZ3NbaV0pKTtcbiAgcmV0dXJuIGFyZ3MyO1xufSkoKSlcblxuLy9Qcm92aWRlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxudmFyIGNhbWxfZXhlY3V0YWJsZV9uYW1lID0gY2FtbF9hcmd2WzFdXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2IChhKSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YgKGEpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKXtcbiAgY2FtbF9hcmd2ID0gYXJnO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuZnVuY3Rpb24gY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lKGEpe1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWVcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICB2YXIgY21kID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoY21kKTtcbiAgaWYgKHR5cGVvZiByZXF1aXJlICE9IFwidW5kZWZpbmVkXCIpe1xuICAgIHZhciBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICAgIGlmKGNoaWxkX3Byb2Nlc3MgJiYgY2hpbGRfcHJvY2Vzcy5leGVjU3luYylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoY21kLHtzdGRpbzogJ2luaGVyaXQnfSk7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gIH1cbiAgZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWUgbXV0YWJsZVxudmFyIGNhbWxfaW5pdGlhbF90aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSAoKSB7XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oYikge1xuICByZXR1cm4gY2FtbF9zeXNfdGltZSgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yYW5kb21fc2VlZCBtdXRhYmxlXG4vL1RoZSBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYW4gYXJyYXkgc2luY2UgT0NhbWwgNC4wLi4uXG5mdW5jdGlvbiBjYW1sX3N5c19yYW5kb21fc2VlZCAoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICAgdmFyIGEgPSBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IEludDMyQXJyYXkoNCkpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgICB2YXIgYSA9IG5ldyBJbnQzMkFycmF5KGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS5idWZmZXIpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH1cbiAgfVxuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiBvc190eXBlID09IFwiVW5peFwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJXaW4zMlwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIkN5Z3dpblwiID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbnZhciBvc190eXBlID0gKGdsb2JhbFRoaXMucHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSA/IFwiQ3lnd2luXCIgOiBcIlVuaXhcIjtcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG9zX3R5cGUpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xudmFyIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyAoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQgKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3J1bnRpbWVfd2FybmluZ3M7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfZW5hYmxlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9lbmFibGVkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lKF9jaGFubmVsKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJTcGFjZXRpbWUgcHJvZmlsaW5nIG9ubHkgd29ya3MgZm9yIG5hdGl2ZSBjb2RlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5pc0ZpbGUocm9vdC5yZXN0KTtcbn1cbi8vQWx3YXlzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIGlmKHByb2Nlc3MgJiYgcHJvY2Vzcy5vbikge1xuICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gKGVyciwgb3JpZ2luKSB7XG4gICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0ICgyKTtcbiAgICB9KVxuICB9XG4gIGVsc2UgaWYoZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKXtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgaWYoZXZlbnQuZXJyb3Ipe1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbnZhciBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IEZMQUcoXCJ3aXRoLWpzLWVycm9yXCIpO1xuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihcIk9DQU1MUlVOUEFSQU1cIilcbiAgaWYociAhPT0gdW5kZWZpbmVkKXtcbiAgICB2YXIgbCA9IHIuc3BsaXQoXCIsXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKGxbaV0gPT0gXCJiXCIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSAxOyBicmVhayB9XG4gICAgICBlbHNlIGlmIChsW2ldLnN0YXJ0c1dpdGgoXCJiPVwiKSkge1xuICAgICAgICBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9ICsobFtpXS5zbGljZSgyKSl9XG4gICAgICBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkgKClcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYmFja3RyYWNlX3N0YXR1c1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoX3VuaXQpIHsgcmV0dXJuIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlIChiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gYjsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciBnID0gZi5hcHBseShudWxsLGFyZ3Muc2xpY2UoMCxuKSk7XG4gICAgaWYodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGc7XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZyxhcmdzLnNsaWNlKG4pKTtcbiAgfVxuICBlbHNlIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIG5hcmdzW2FyZ3MubGVuZ3RoK2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKSB7XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbiAtIDFdO1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIG4pO1xuICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gayhnKTtcbiAgICAgIHZhciBhcmdzID0gcmVzdC5zbGljZSgpO1xuICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdID0gaztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3MpOyB9O1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NMZW4tLTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSwgeil7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDJdID0gejtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIGV4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrIClcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQgKyAxO1xuICAgIHJldHVybiBrKGcpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnVpbGRfc3ltYm9scyhzeW1iKSB7XG4gIHZhciByID0ge307XG4gIGlmKHN5bWIpIHtcbiAgICBmb3IodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKyl7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IHN5bWJbaV1bMl1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX2NhbGxiYWNrLCBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChuLCB2LCBuYW1lX29wdCkge1xuICBpZiAobmFtZV9vcHQpIHtcbiAgICB2YXIgbmFtZSA9IG5hbWVfb3B0O1xuICAgIGlmKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jLCBbbmFtZV0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpIHtcbiAgICAgIGlmKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpXG4gICAgICB9XG4gICAgICB2YXIgbmlkID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV1cbiAgICAgIGlmKG5pZCA+PSAwKVxuICAgICAgICBuID0gbmlkXG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfcmVnaXN0ZXJfZ2xvYmFsOiBjYW5ub3QgbG9jYXRlIFwiICsgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbWxfZ2xvYmFsX2RhdGFbbiArIDFdID0gdjtcbiAgaWYobmFtZV9vcHQpIGNhbWxfZ2xvYmFsX2RhdGFbbmFtZV9vcHRdID0gdjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfZ2xvYmFsX2RhdGEgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9nZXRfZ2xvYmFsX2RhdGEgKCkgeyByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3ByaW50YWJsZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2lzX3ByaW50YWJsZShjKSB7IHJldHVybiArKGMgPiAzMSAmJiBjIDwgMTI3KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX3ByaW50X3N0YXRzXG5mdW5jdGlvbiBjYW1sX21heWJlX3ByaW50X3N0YXRzKHVuaXQpIHsgcmV0dXJuIDAgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgbGlicmFyeVxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEpzbGliXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfcHVyZV9leHByIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3B1cmVfZXhwciAoZikgeyByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfanNfc2V0KG8sZix2KSB7IG9bZl09djtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0IChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0KG8sZikgeyByZXR1cm4gb1tmXTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobyxmKSB7IGRlbGV0ZSBvW2ZdOyByZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19pbnN0YW5jZW9mIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2luc3RhbmNlb2YobyxjKSB7IHJldHVybiAobyBpbnN0YW5jZW9mIGMpID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc190eXBlb2YgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190eXBlb2YobykgeyByZXR1cm4gdHlwZW9mIG87IH1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZShyZXMpIHtcbiAgdmFyIGMgPSAxO1xuICB3aGlsZShyZXMgJiYgcmVzLmpvb190cmFtcCl7XG4gICAgcmVzID0gcmVzLmpvb190cmFtcC5hcHBseShudWxsLCByZXMuam9vX2FyZ3MpO1xuICAgIGMrKztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZixhcmdzKSB7XG4gIHJldHVybiB7am9vX3RyYW1wOmYsam9vX2FyZ3M6YXJnc307XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19kZXB0aFxuLy9JZjogZWZmZWN0c1xudmFyIGNhbWxfc3RhY2tfZGVwdGggPSAwO1xuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfY2hlY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aFxuZnVuY3Rpb24gY2FtbF9zdGFja19jaGVja19kZXB0aCgpIHtcbiAgICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGgsIGNhbWxfY2FsbF9nZW4sIGNhbWxfZXhuX3N0YWNrLCBjYW1sX2ZpYmVyX3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9mcmVzaF9vb19pZCwgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF9jYWxsYmFjayhmLGFyZ3MpIHtcbiAgZnVuY3Rpb24gdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXIoZWZmLGssbXMpIHtcbiAgICAvLyBSZXN1bWVzIHRoZSBjb250aW51YXRpb24gayBieSByYWlzaW5nIGV4Y2VwdGlvbiBVbmhhbmRsZWQuXG4gICAgY2FtbF9yZXN1bWVfc3RhY2soa1sxXSxtcyk7XG4gICAgdmFyIGV4biA9IGNhbWxfbmFtZWRfdmFsdWUoXCJFZmZlY3QuVW5oYW5kbGVkXCIpO1xuICAgIGlmKGV4bikgY2FtbF9yYWlzZV93aXRoX2FyZyhleG4sIGVmZik7XG4gICAgZWxzZSB7XG4gICAgICBleG4gPSBbMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJFZmZlY3QuVW5oYW5kbGVkXCIpLCBjYW1sX2ZyZXNoX29vX2lkKDApXTtcbiAgICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoZXhuKTtcbiAgICB9XG4gIH1cbiAgdmFyIHNhdmVkX3N0YWNrX2RlcHRoID0gY2FtbF9zdGFja19kZXB0aDtcbiAgdmFyIHNhdmVkX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrO1xuICB2YXIgc2F2ZWRfZmliZXJfc3RhY2sgPSBjYW1sX2ZpYmVyX3N0YWNrO1xuICB0cnkge1xuICAgIGNhbWxfZXhuX3N0YWNrID0gMDtcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID1cbiAgICAgIHtoOlswLCAwLCAwLCB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcl0sIHI6e2s6MCwgeDowLCBlOjB9fTtcbiAgICB2YXIgcmVzID0ge2pvb190cmFtcDogZixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBhcmdzLmNvbmNhdChmdW5jdGlvbiAoeCl7cmV0dXJuIHg7fSl9O1xuICAgIGRvIHtcbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGNhbWxfY2FsbF9nZW4ocmVzLmpvb190cmFtcCwgcmVzLmpvb19hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogSGFuZGxlIGV4Y2VwdGlvbiBjb21pbmcgZnJvbSBKYXZhU2NyaXB0IG9yIGZyb20gdGhlIHJ1bnRpbWUuICovXG4gICAgICAgIGlmICghY2FtbF9leG5fc3RhY2spIHRocm93IGU7XG4gICAgICAgIHZhciBoYW5kbGVyID0gY2FtbF9leG5fc3RhY2tbMV07XG4gICAgICAgIGNhbWxfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2tbMl07XG4gICAgICAgIHJlcyA9IHtqb29fdHJhbXA6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlKHJlcyAmJiByZXMuam9vX2FyZ3MpXG4gIH0gZmluYWxseSB7XG4gICAgY2FtbF9zdGFja19kZXB0aCA9IHNhdmVkX3N0YWNrX2RlcHRoO1xuICAgIGNhbWxfZXhuX3N0YWNrID0gc2F2ZWRfZXhuX3N0YWNrO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPSBzYXZlZF9maWJlcl9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2pzXG5mdW5jdGlvbiBjYW1sX2lzX2pzKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc19lZmZlY3RzKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcImVmZmVjdHNcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAobXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsY2FtbF9uYW1lZF92YWx1ZVxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmIChGTEFHKFwiZXhjd3JhcFwiKSkge1xuICAgIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gICAgdmFyIGV4bjtcbiAgICAvL1N0YWNrX292ZXJmbG93OiBjaHJvbWUsIHNhZmFyaVxuICAgIGlmKGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL21heGltdW0gY2FsbCBzdGFjay9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9TdGFja19vdmVyZmxvdzogZmlyZWZveFxuICAgIGVsc2UgaWYoZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvdG9vIG11Y2ggcmVjdXJzaW9uL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gICAgZWxzZSBpZihlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvciAmJiBjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSlcbiAgICAgIGV4biA9IFswLGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLGVdO1xuICAgIGVsc2VcbiAgICAgIC8vZmFsbGJhY2s6IHdyYXBwZWQgaW4gRmFpbHVyZVxuICAgICAgZXhuID0gWzAsY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcilcbiAgICAgIGV4bi5qc19lcnJvciA9IGU7XG4gICAgcmV0dXJuIGV4bjtcbiAgfSBlbHNlXG4gICAgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICBpZihjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4blxufVxuXG4vLyBFeHBlcmltZW50YWxcbi8vUHJvdmlkZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIC8vbmV2ZXIgcmVyYWlzZSBmb3IgY29uc3RhbnQgZXhuXG4gIGlmKCFleG4uanNfZXJyb3IgfHwgZm9yY2UgfHwgZXhuWzBdID09IDI0OCkgZXhuLmpzX2Vycm9yID0gbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmKGV4bi5qc19lcnJvcikgeyByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07IH1cbiAgcmV0dXJuIDA7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7IHJldHVybiAhIXg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Jvb2woeCkgeyByZXR1cm4gK3g7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21faW50MzJcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19pbnQzMiBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc190b19pbnQzMih4KSB7IHJldHVybiB4fDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYXJyYXkoYSkge1xuICByZXR1cm4gYS5zbGljZSgxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYXJyYXkoYSkge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYlswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8bGVuO2krKykgYltpKzFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKXtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGk9YS5sZW5ndGggLSAxOyBpPj0wOyBpLS0pe1xuICAgIHZhciBlID0gYVtpXTtcbiAgICBsID0gWzAsZSxsXTtcbiAgfVxuICByZXR1cm4gbFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3RfdG9fanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3RfdG9fanNfYXJyYXkobCl7XG4gIHZhciBhID0gW107XG4gIGZvcig7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmKCF4Lm1hdGNoKC9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKFxcLlthLXpBLVpfJF1bYS16QS1aXyQwLTldKikqJC8pKXtcbiAgICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc192YXI6IFxcXCJcIiArIHggKyBcIlxcXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLlwiKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICByZXR1cm4gZXZhbCh4KTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfY2FsbCAoY29uc3QsIG11dGFibGUsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfY2FsbChmLCBvLCBhcmdzKSB7IHJldHVybiBmLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuX2NhbGwgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2Z1bl9jYWxsKGYsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBmKCk7XG4gIGNhc2UgMjogcmV0dXJuIGYgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBmIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIHJldHVybiBmLmFwcGx5KG51bGwsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX21ldGhfY2FsbCAobXV0YWJsZSwgY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX21ldGhfY2FsbChvLCBmLCBhcmdzKSB7XG4gIHJldHVybiBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGYpXS5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19uZXcgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX25ldyhjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDA6IHJldHVybiBuZXcgYztcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGMgKGFbMF0pO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGEpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmKGxlbiA+IDApe1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIC0gMTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuICgoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpKSAtIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcgKHMpIHtyZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9wdXJlX2pzX2V4cHIgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcHVyZV9qc19leHByIChzKXtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50ICh0YWcpIHsgdGhyb3cgdGFnOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGFyZykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZywgYXJnXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyAodGFnLCBhcmdzKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnXS5jb25jYXQoYXJncykpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKHRhZywgbXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhtc2cpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYWlsd2l0aCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZhaWx3aXRoIChtc2cpIHtcbiAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSlcbiAgICBjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmU9WzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRmFpbHVyZVwiKSwtM107XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBtc2cpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuSW52YWxpZF9hcmd1bWVudCwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5FbmRfb2ZfZmlsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5Ob3RfZm91bmQpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgZmxvYXQzMmFbMF0gPSB4O1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoZmxvYXQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGludDMyYVswXSB8IDA7XG59XG5cbi8vRlAgbGl0ZXJhbHMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGhleGFkZWNpbWFsXG4vL25vdGF0aW9uIDB4PG1hbnRpc3NhIGluIGhleD5wPGV4cG9uZW50PiBmcm9tIElTTyBDOTkuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1oZXhmbG9hdC9ibG9iL21hc3Rlci9oZXhmbG9hdC5qc1xuLy9Qcm92aWRlczogY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0ICh4LCBwcmVjLCBzdHlsZSkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nICgoeCA+IDApP1wiaW5maW5pdHlcIjpcIi1pbmZpbml0eVwiKTtcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzE6KHg+PTApPzA6MTtcbiAgaWYoc2lnbikgeCA9IC14O1xuICB2YXIgZXhwID0gMDtcbiAgaWYgKHggPT0gMCkgeyB9XG4gIGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSAgeyB4ICo9IDI7IGV4cC0tIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoeCA+PSAyKSB7IHggLz0gMjsgZXhwKysgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyAnJyA6ICcrJztcbiAgdmFyIHNpZ25fc3RyID0gJyc7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9ICctJ1xuICBlbHNlIHtcbiAgICBzd2l0Y2goc3R5bGUpe1xuICAgIGNhc2UgNDMgLyogJysnICovOiBzaWduX3N0ciA9ICcrJzsgYnJlYWs7XG4gICAgY2FzZSAzMiAvKiAnICcgKi86IHNpZ25fc3RyID0gJyAnOyBicmVhaztcbiAgICBkZWZhdWx0OiBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLHByZWMgKiA0KTtcbiAgICB4ID0gTWF0aC5yb3VuZCh4ICogY3N0KSAvIGNzdDtcbiAgfVxuICB2YXIgeF9zdHIgPSB4LnRvU3RyaW5nKDE2KTtcbiAgaWYocHJlYyA+PSAwKXtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZignLicpO1xuICAgIGlmKGlkeDwwKSB7XG4gICAgICB4X3N0ciArPSAnLicgKyBjYW1sX3N0cl9yZXBlYXQocHJlYywgJzAnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgc2l6ZSA9IGlkeCsxK3ByZWM7XG4gICAgICBpZih4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgJzAnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeF9zdHIgPSB4X3N0ci5zdWJzdHIoMCxzaXplKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzaWduX3N0ciArICcweCcgKyB4X3N0ciArICdwJyArIGV4cF9zaWduICsgZXhwLnRvU3RyaW5nKDEwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIHZhciBleHAgPSAoaGkgJiAweDdmZmYpID4+IDQ7XG4gIGlmIChleHAgPT0gMjA0Nykge1xuICAgIGlmICgobG98bWl8KGhpJjB4ZikpID09IDApXG4gICAgICByZXR1cm4gKGhpICYgMHg4MDAwKT8oLUluZmluaXR5KTpJbmZpbml0eTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwtMjQpO1xuICB2YXIgcmVzID0gKGxvKmsrbWkpKmsrKGhpJjB4Zik7XG4gIGlmIChleHAgPiAwKSB7XG4gICAgcmVzICs9IDE2O1xuICAgIHJlcyAqPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgfSBlbHNlXG4gICAgcmVzICo9IE1hdGgucG93KDIsLTEwMjYpO1xuICBpZiAoaGkgJiAweDgwMDApIHJlcyA9IC0gcmVzO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCAoeCx5KSB7XG4gIGlmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gTmFOO1xuICBpZih4PT15KSByZXR1cm4geTtcbiAgaWYoeD09MCl7XG4gICAgaWYoeSA8IDApXG4gICAgICByZXR1cm4gLU1hdGgucG93KDIsIC0xMDc0KVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBNYXRoLnBvdygyLCAtMTA3NClcbiAgfVxuICB2YXIgYml0cyA9IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh4KTtcbiAgdmFyIG9uZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoMSk7XG4gIGlmICgoeDx5KSA9PSAoeD4wKSlcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9hZGQoYml0cywgb25lKVxuICBlbHNlXG4gICAgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSlcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhiaXRzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF90cnVuY19mbG9hdFxuZnVuY3Rpb24gY2FtbF90cnVuY19mbG9hdCh4KXtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoeCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheShpbnQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGZsb2F0MzJhWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NsYXNzaWZ5X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NsYXNzaWZ5X2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9IDApIHJldHVybiAxO1xuICAgIHJldHVybiAyO1xuICB9XG4gIHJldHVybiBpc05hTih4KT80OjM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgdmFyIG5lZyA9ICgxL3gpIDwgMDtcbiAgICB4ID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yICh4KTtcbiAgICB2YXIgZiA9IHggLSBpO1xuICAgIGlmIChuZWcpIHsgaSA9IC1pOyBmID0gLWY7IH1cbiAgICByZXR1cm4gWzAsIGYsIGldO1xuICB9XG4gIGlmIChpc05hTiAoeCkpIHJldHVybiBbMCwgTmFOLCBOYU5dO1xuICByZXR1cm4gWzAsIDEveCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0ICh4LGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7ICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfZnJleHBfZmxvYXQgKHgpIHtcbiAgaWYgKCh4ID09IDApIHx8ICFpc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLSB4O1xuICB2YXIgZXhwID0gTWF0aC5tYXgoLTEwMjMsIGpzb29fZmxvb3JfbG9nMih4KSArIDEpO1xuICB4ICo9IE1hdGgucG93KDIsLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLSB4O1xuICByZXR1cm4gWzAsIHgsIGV4cF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbG9hdF9jb21wYXJlICh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSByZXR1cm4gMDtcbiAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gIGlmICh4ID4geSkgcmV0dXJuIDE7XG4gIGlmICh4ID09PSB4KSByZXR1cm4gMTtcbiAgaWYgKHkgPT09IHkpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29weXNpZ25fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29weXNpZ25fZmxvYXQgKHgsIHkpIHtcbiAgaWYgKHkgPT0gMCkgeSA9IDEgLyB5O1xuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHJldHVybiAoeSA8IDApPygteCk6eDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zaWduYml0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PSAwKSB4ID0gMSAvIHg7XG4gIHJldHVybiAoeCA8IDApPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5leHBtMSh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5wb3coMiwgeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMXBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMXBfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cxcCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cyKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0ICh4LCB5KSB7IHJldHVybiBNYXRoLmh5cG90KHgsIHkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmxvZzEwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFjb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5zaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFzaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC50YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmF0YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0ICh4KSB7XG4gIGlmICh4ID49IDApIHtcbiAgICB2YXIgeSA9IE1hdGguZmxvb3IoeCk7XG4gICAgcmV0dXJuICh4IC0geSA+PSAwLjUpPyh5ICsgMSk6eVxuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiAoeSAtIHggPj0gMC41KT8oeSAtIDEpOnlcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jYnJ0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NicnRfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY2JydCh4KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9lcmZfZmxvYXQoeCkge1xuICB2YXIgYTEgPSAwLjI1NDgyOTU5MjtcbiAgdmFyIGEyID0gLTAuMjg0NDk2NzM2O1xuICB2YXIgYTMgPSAxLjQyMTQxMzc0MTtcbiAgdmFyIGE0ID0gLTEuNDUzMTUyMDI3O1xuICB2YXIgYTUgPSAxLjA2MTQwNTQyOTtcbiAgdmFyIHAgPSAwLjMyNzU5MTE7XG5cbiAgdmFyIHNpZ24gPSAxO1xuICBpZiAoeCA8IDApIHtcbiAgICBzaWduID0gLTE7XG4gIH1cbiAgeCA9IE1hdGguYWJzKHgpO1xuICB2YXIgdCA9IDEuMCAvICgxLjAgKyBwICogeCk7XG4gIHZhciB5ID0gMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZtYV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbWFfZmxvYXQoeCwgeSwgeikge1xuICB2YXIgU1BMSVQgPSBNYXRoLnBvdygyLCAyNykgKyAxO1xuICB2YXIgTUlOX1ZBTFVFID0gTWF0aC5wb3coMiwgLTEwMjIpO1xuICB2YXIgRVBTSUxPTiA9IE1hdGgucG93KDIsIC01Mik7XG4gIHZhciBDID0gNDE2O1xuICB2YXIgQSA9IE1hdGgucG93KDIsICtDKTtcbiAgdmFyIEIgPSBNYXRoLnBvdygyLCAtQyk7XG5cbiAgZnVuY3Rpb24gbXVsdGlwbHkgKGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSAoKGFoaSAqIGJoaSAtIHApICsgYWhpICogYmxvICsgYWxvICogYmhpKSArIGFsbyAqIGJsbztcbiAgICByZXR1cm4ge1xuICAgICAgcDogcCxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHZhciBzID0gYSArIGI7XG4gICAgdmFyIHYgPSBzIC0gYTtcbiAgICB2YXIgZSA9IChhIC0gKHMgLSB2KSkgKyAoYiAtIHYpO1xuICAgIHJldHVybiB7XG4gICAgICBzOiBzLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRqdXN0ICh4LCB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgJiYgeSAhPT0gMCAmJiBTUExJVCAqIHggLSAoU1BMSVQgKiB4IC0geCkgPT09IHggPyB4ICogKDEgKyAoeCA8IDAgPyAtMSA6ICsxKSAqICh5IDwgMCA/IC0xIDogKzEpICogRVBTSUxPTikgOiB4O1xuICB9O1xuXG4gIGlmICh4ID09PSAwIHx8IHggIT09IHggfHwgeCA9PT0gKzEgLyAwIHx8IHggPT09IC0xIC8gMCB8fFxuICAgICAgeSA9PT0gMCB8fCB5ICE9PSB5IHx8IHkgPT09ICsxIC8gMCB8fCB5ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICh6ICE9PSB6IHx8IHogPT09ICsxIC8gMCB8fCB6ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciBzY2FsZSA9IDE7XG4gIHdoaWxlIChNYXRoLmFicyh4KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHggKj0gQjtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB5ICo9IEI7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAxIC8gMCkge1xuICAgIHJldHVybiB4ICogeSAqIHNjYWxlO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh4KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHggKj0gQTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB5ICo9IEE7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgeHMgPSB4O1xuICB2YXIgeXMgPSB5O1xuICB2YXIgenMgPSB6IC8gc2NhbGU7XG5cbiAgaWYgKE1hdGguYWJzKHpzKSA+IE1hdGguYWJzKHhzICogeXMpICogNCAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OIC8gNCAqIEVQU0lMT04gLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZmxvYXQgKGZtdCwgeCkge1xuICBmdW5jdGlvbiB0b0ZpeGVkKHgsZHApIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPCAxLjApIHtcbiAgICAgIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZSA9IHBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdCgnKycpWzFdKTtcbiAgICAgIGlmIChlID4gMjApIHtcbiAgICAgICAgZSAtPSAyMDtcbiAgICAgICAgeCAvPSBNYXRoLnBvdygxMCxlKTtcbiAgICAgICAgeCArPSAobmV3IEFycmF5KGUrMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgaWYoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyAnLicgKyAobmV3IEFycmF5KGRwKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApXG4gICAgfVxuICB9XG4gIHZhciBzLCBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSAoZi5wcmVjIDwgMCk/NjpmLnByZWM7XG4gIGlmICh4IDwgMCB8fCAoeCA9PSAwICYmIDEveCA9PSAtSW5maW5pdHkpKSB7IGYuc2lnbiA9IC0xOyB4ID0gLXg7IH1cbiAgaWYgKGlzTmFOKHgpKSB7IHMgPSBcIm5hblwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlIGlmICghaXNGaW5pdGUoeCkpIHsgcyA9IFwiaW5mXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgIGNhc2UgJ2UnOlxuICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAvLyBleHBvbmVudCBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0c1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aDtcbiAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZic6XG4gICAgICBzID0gdG9GaXhlZCh4LCBwcmVjKTsgYnJlYWs7XG4gICAgY2FzZSAnZyc6XG4gICAgICBwcmVjID0gcHJlYz9wcmVjOjE7XG4gICAgICBzID0geC50b0V4cG9uZW50aWFsKHByZWMgLSAxKTtcbiAgICAgIHZhciBqID0gcy5pbmRleE9mKCdlJyk7XG4gICAgICB2YXIgZXhwID0gK3Muc2xpY2UoaiArIDEpO1xuICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgIHZhciBpID0gaiAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSkgKyBzLnNsaWNlKGopO1xuICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHAgPSBwcmVjO1xuICAgICAgICBpZiAoZXhwIDwgMCkgeyBwIC09IGV4cCArIDE7IHMgPSB4LnRvRml4ZWQocCk7IH1cbiAgICAgICAgZWxzZSB3aGlsZSAocyA9IHgudG9GaXhlZChwKSwgcy5sZW5ndGggPiBwcmVjICsgMSkgcC0tO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHJlcztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocylcbiAgcmVzID0gK3M7XG4gIGlmICgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSByZXR1cm4gcmVzO1xuICBzID0gcy5yZXBsYWNlKC9fL2csXCJcIik7XG4gIHJlcyA9ICtzO1xuICBpZiAoKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHx8IC9eWystXT9uYW4kL2kudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgdmFyIG0gPSAvXiAqKFsrLV0/KTB4KFswLTlhLWZdKylcXC4/KFswLTlhLWZdKikocChbKy1dP1swLTldKykpPy9pLmV4ZWMocyk7XG4gIC8vICAgICAgICAgIDEgICAgICAgIDIgICAgICAgICAgICAgMyAgICAgICAgICAgNVxuICBpZihtKXtcbiAgICB2YXIgbTMgPSBtWzNdLnJlcGxhY2UoLzArJC8sJycpO1xuICAgIHZhciBtYW50aXNzYSA9IHBhcnNlSW50KG1bMV0gKyBtWzJdICsgbTMsIDE2KTtcbiAgICB2YXIgZXhwb25lbnQgPSAobVs1XXwwKSAtIDQqbTMubGVuZ3RoO1xuICAgIHJlcyA9IG1hbnRpc3NhICogTWF0aC5wb3coMiwgZXhwb25lbnQpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIEluZmluaXR5O1xuICBpZigvXi1pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gLUluZmluaXR5O1xuICBjYW1sX2ZhaWx3aXRoKFwiZmxvYXRfb2Zfc3RyaW5nXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15ICh4LCB5KSB7XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIHZhciBpID0geS5sZW5ndGg7IHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmICh4KSB7IHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfYmxvY2sgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfYmxvY2sgKHgpIHsgcmV0dXJuICsoeCBpbnN0YW5jZW9mIEFycmF5KTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyAoeCkge1xuICBpZiAoKHggaW5zdGFuY2VvZiBBcnJheSkgJiYgeFswXSA9PSAoeFswXSA+Pj4gMCkpXG4gICAgcmV0dXJuIHhbMF1cbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoKHggaW5zdGFuY2VvZiBGdW5jdGlvbikgfHwgdHlwZW9mIHggPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAyNDdcbiAgZWxzZSBpZiAoeCAmJiB4LmNhbWxfY3VzdG9tKVxuICAgIHJldHVybiAyNTVcbiAgZWxzZVxuICAgIHJldHVybiAxMDAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF90YWcgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3RhZyAoeCwgdGFnKSB7IHhbMF0gPSB0YWc7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX29ial9ibG9jayBjb25zdCAoY29uc3QsY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9ibG9jayAodGFnLCBzaXplKSB7XG4gIHZhciBvID0gbmV3IEFycmF5KHNpemUrMSk7XG4gIG9bMF09dGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzaXplOyBpKyspIG9baV0gPSAwO1xuICByZXR1cm4gbztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfd2l0aF90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3dpdGhfdGFnKHRhZyx4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IodmFyIGkgPSAxOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LGksb2xkLG4pe1xuICBpZih4W2krMV0gPT0gb2xkKSB7XG4gICAgeFtpKzFdID0gbjtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19zaGFyZWRcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZCh4KXtcbiAgcmV0dXJuIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgKHYpIHsgcmV0dXJuIFsyNTAsIHZdOyB9XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbnZhciBjYW1sX21ldGhvZF9jYWNoZSA9IFtdO1xuZnVuY3Rpb24gY2FtbF9nZXRfcHVibGljX21ldGhvZCAob2JqLCB0YWcsIGNhY2hlaWQpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgb2ZzID0gY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF07XG4gIGlmIChvZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgbm90IHNwYXJzZVxuICAgIGZvciAodmFyIGkgPSBjYW1sX21ldGhvZF9jYWNoZS5sZW5ndGg7IGkgPCBjYWNoZWlkOyBpKyspXG4gICAgICBjYW1sX21ldGhvZF9jYWNoZVtpXSA9IDA7XG4gIH0gZWxzZSBpZiAobWV0aHNbb2ZzXSA9PT0gdGFnKSB7XG4gICAgcmV0dXJuIG1ldGhzW29mcyAtIDFdO1xuICB9XG4gIHZhciBsaSA9IDMsIGhpID0gbWV0aHNbMV0gKiAyICsgMSwgbWk7XG4gIHdoaWxlIChsaSA8IGhpKSB7XG4gICAgbWkgPSAoKGxpK2hpKSA+PiAxKSB8IDE7XG4gICAgaWYgKHRhZyA8IG1ldGhzW21pKzFdKSBoaSA9IG1pLTI7XG4gICAgZWxzZSBsaSA9IG1pO1xuICB9XG4gIGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdID0gbGkgKyAxO1xuICAvKiByZXR1cm4gMCBpZiB0YWcgaXMgbm90IHRoZXJlICovXG4gIHJldHVybiAodGFnID09IG1ldGhzW2xpKzFdID8gbWV0aHNbbGldIDogMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb29fbGFzdF9pZFxudmFyIGNhbWxfb29fbGFzdF9pZCA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X29vX2lkXG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfc2V0X29vX2lkIChiKSB7XG4gIGJbMl09Y2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobyxpKSB7IHJldHVybiBvW2krMV0gfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkKG8saSx2KSB7IHJldHVybiBvW2krMV0gPSB2IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXG5mdW5jdGlvbiBjYW1sX29ial9yZWFjaGFibGVfd29yZHMobykgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KHYsb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX29ial91cGRhdGVfdGFnKGIsbyxuKSB7XG4gICAgaWYoYlswXT09bykgeyBiWzBdID0gbjsgcmV0dXJuIDEgfVxuICAgIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nKG8pIHtcbiAgaWYgKChvIGluc3RhbmNlb2YgQXJyYXkpICYmIG9bMF0gPT0gKG9bMF0gPj4+IDApICYmXG4gICAgICBjYW1sX29ial91cGRhdGVfdGFnKG8sIDI0NiwgMjQ0KSkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuICBmdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmQobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI1MCk7XG4gIHJldHVybiAwOyAvLyB1bml0XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenlcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNDYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3JlYWRfcmVzdWx0XG4vL1JlcXVpcmVzOiBjYW1sX29ial90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiAoY2FtbF9vYmpfdGFnKG8pID09IDI1MCk/b1sxXTpvO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA8IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuICh0ID09IDI0NSkgPyAxIDogMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mZnNldFxudmFyIGNhbWxfaW50NjRfb2Zmc2V0ID0gTWF0aC5wb3coMiwgLTI0KTtcblxuLy9Qcm92aWRlczogTWxJbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIE1sSW50NjQgKGxvLG1pLGhpKSB7XG4gIHRoaXMubG8gPSBsbyAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IGhpICYgMHhmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBcIl9qXCJcbk1sSW50NjQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvLHRoaXMubWksdGhpcy5oaSk7XG59XG5cbk1sSW50NjQucHJvdG90eXBlLnVjb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMuaGkgPCB4LmhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGhpID0gdGhpcy5oaSA8PCAxNjtcbiAgdmFyIHhoaSA9IHguaGkgPDwgMTY7XG4gIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gIGlmIChoaSA8IHhoaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbG8gPSAtIHRoaXMubG87XG4gIHZhciBtaSA9IC0gdGhpcy5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IC0gdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKyB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgKyB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgLSB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSAtIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICogeC5sbztcbiAgdmFyIG1pID0gKChsbyAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5taSAqIHgubG8gKyB0aGlzLmxvICogeC5taTtcbiAgdmFyIGhpID0gKChtaSAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5oaSAqIHgubG8gKyB0aGlzLm1pICogeC5taSArIHRoaXMubG8gKiB4LmhpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5sb3x0aGlzLm1pfHRoaXMuaGkpID09IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmhpIDw8IDE2KSA8IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvfHgubG8sIHRoaXMubWl8eC5taSwgdGhpcy5oaXx4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvXngubG8sIHRoaXMubWleeC5taSwgdGhpcy5oaV54LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X2xlZnQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNCkge1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5sbyA8PCBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5oaSA8PCBzKSB8ICh0aGlzLm1pID4+ICgyNCAtIHMpKSk7XG4gIH1cbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvIDw8IChzIC0gMjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KDAsIDAsIHRoaXMubG8gPDwgKHMgLSA0OCkpXG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodF91bnNpZ25lZCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gcykpO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiAocyAtIDI0KSksXG4gICAgICAwKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmhpID4+IChzIC0gNDgpLCAwLCAwKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKGggPDwgKDI0IC0gcykpLFxuICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYpO1xuICB2YXIgc2lnbiA9ICh0aGlzLmhpIDw8IDE2KSA+PiAzMTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMjQpID4+IDE2LFxuICAgICAgc2lnbiAmIDB4ZmZmZik7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMzIpLCBzaWduLCBzaWduKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzbDEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGkgPSAodGhpcy5oaSA8PCAxKSB8ICh0aGlzLm1pID4+IDIzKTtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5sbyA9ICh0aGlzLmxvIDw8IDEpICYgMHhmZmZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc3IxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvID0gKCh0aGlzLmxvID4+PiAxKSB8ICh0aGlzLm1pIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSB0aGlzLmhpID4+PiAxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudWRpdm1vZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBvZmZzZXQgPSAwO1xuICB2YXIgbW9kdWx1cyA9IHRoaXMuY29weSgpO1xuICB2YXIgZGl2aXNvciA9IHguY29weSgpO1xuICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLDAsMCk7XG4gIHdoaWxlIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID4gMCkge1xuICAgIG9mZnNldCsrO1xuICAgIGRpdmlzb3IubHNsMSgpO1xuICB9XG4gIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgIG9mZnNldCAtLTtcbiAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgaWYgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPj0gMCkge1xuICAgICAgcXVvdGllbnQubG8gKys7XG4gICAgICBtb2R1bHVzID0gbW9kdWx1cy5zdWIoZGl2aXNvcik7XG4gICAgfVxuICAgIGRpdmlzb3IubHNyMSgpO1xuICB9XG4gIHJldHVybiB7IHF1b3RpZW50IDogcXVvdGllbnQsIG1vZHVsdXMgOiBtb2R1bHVzIH07XG59XG5NbEludDY0LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgcSA9IHEubmVnKCk7XG4gIHJldHVybiBxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciByID0geC51ZGl2bW9kKHkpLm1vZHVsdXM7XG4gIGlmIChzaWduICYgMHg4MDAwKSByID0gci5uZWcoKTtcbiAgcmV0dXJuIHI7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAodGhpcy5taSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0Zsb2F0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkpICsgdGhpcy5sbztcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbdGhpcy5oaSA+PiA4LFxuICAgICAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgPj4gMTYsXG4gICAgICAgICAgKHRoaXMubWkgPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gPj4gMTYsXG4gICAgICAgICAgKHRoaXMubG8gPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gJiAweGZmXTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxvMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaGkzMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5taSA+Pj4gOCkgJiAweGZmZmYpIHwgKHRoaXMuaGkgPDwgMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VsdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bHQoeCx5KSB7IHJldHVybiB4LnVjb21wYXJlKHkpIDwgMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LHksIHRvdGFsKSB7IHJldHVybiB4LmNvbXBhcmUoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X25lZyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9uZWcgKHgpIHsgcmV0dXJuIHgubmVnKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FkZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hZGQgKHgsIHkpIHsgcmV0dXJuIHguYWRkKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViICh4LCB5KSB7IHJldHVybiB4LnN1Yih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbXVsIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tdWwoeCx5KSB7IHJldHVybiB4Lm11bCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfemVybyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc196ZXJvKHgpIHsgcmV0dXJuICt4LmlzWmVybygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkgeyByZXR1cm4gK3guaXNOZWcoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQgKHgsIHkpIHsgcmV0dXJuIHguYW5kKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IgKHgsIHkpIHsgcmV0dXJuIHgub3IoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yICh4LCB5KSB7IHJldHVybiB4Lnhvcih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfbGVmdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X2xlZnQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZGl2IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2RpdiAoeCwgeSkgeyByZXR1cm4geC5kaXYoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21vZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tb2QgKHgsIHkpIHsgcmV0dXJuIHgubW9kKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9pbnQzMiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoeCAmIDB4ZmZmZmZmLCAoeCA+PiAyNCkgJiAweGZmZmZmZiwgKHggPj4gMzEpICYgMHhmZmZmKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2ludDMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2ludDMyICh4KSB7IHJldHVybiB4LnRvSW50KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2Zsb2F0ICh4KSB7IHJldHVybiB4LnRvRmxvYXQgKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoeCkge1xuICBpZiAoeCA8IDApIHggPSBNYXRoLmNlaWwoeCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICB4ICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQgKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQgKGZtdCwgeCkge1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSkge1xuICAgIGYuc2lnbiA9IC0xOyB4ID0gY2FtbF9pbnQ2NF9uZWcoeCk7XG4gIH1cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIHZhciB3YmFzZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZi5iYXNlKTtcbiAgdmFyIGN2dGJsID0gXCIwMTIzNDU2Nzg5YWJjZGVmXCI7XG4gIGRvIHtcbiAgICB2YXIgcCA9IHgudWRpdm1vZCh3YmFzZSk7XG4gICAgeCA9IHAucXVvdGllbnQ7XG4gICAgYnVmZmVyID0gY3Z0YmwuY2hhckF0KGNhbWxfaW50NjRfdG9faW50MzIocC5tb2R1bHVzKSkgKyBidWZmZXI7XG4gIH0gd2hpbGUgKCEgY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBidWZmZXIubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgYnVmZmVyID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9XG4gICAgICBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmZmLCAweGZmZmYpLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgZm9yICg7Oykge1xuICAgIGkrKztcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgICBkID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgICByZXMgPSBjYW1sX2ludDY0X2FkZChjYW1sX2ludDY0X211bChiYXNlNjQsIHJlcyksIGQpO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBhZGRpdGlvbiAoYmFzZSAqIHJlcykgKyBkICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHJlcywgZCkpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChiYXNlID09IDEwICYmIGNhbWxfaW50NjRfdWx0KG5ldyBNbEludDY0KDAsIDAsIDB4ODAwMCksIHJlcykpXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChzaWduIDwgMCkgcmVzID0gY2FtbF9pbnQ2NF9uZWcocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSlcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2xvMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbG8zMih2KXsgcmV0dXJuIHYubG8zMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oaTMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hpMzIodil7IHJldHVybiB2LmhpMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoYVs3XSA8PCAwIHwgKGFbNl0gPDwgOCkgfCAoYVs1XSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzRdIDw8IDAgfCAoYVszXSA8PCA4KSB8IChhWzJdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbMV0gPDwgMCB8IChhWzBdIDw8IDgpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkgeyByZXR1cm4geC50b0FycmF5KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hhc2ggY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGFzaCh2KXtcbiAgcmV0dXJuICh2LmxvMzIoKSkgXiAodi5oaTMyKCkpXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCl7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSA3OiBjYXNlIDEwOiBjYXNlIDExOiByZXR1cm4gMjtcbiAgZGVmYXVsdDogcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKXtcbiAgdmFyIHZpZXc7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAwOiAgdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTogIHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gSW50OEFycmF5OyBicmVhaztcbiAgY2FzZSAzOiAgdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDQ6ICB2aWV3ID0gSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBVaW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNjogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA3OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgOTogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMDogdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDEyOiB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIH1cbiAgaWYgKCF2aWV3KSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHZhciBkYXRhID0gbmV3IHZpZXcoc2l6ZSAqIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA8IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyYXlcIlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246ID49IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIlxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSwgY2FtbF9pbnQ2NF9oaTMyLCBjYW1sX2ludDY0X2xvMzJcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5IChraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuXG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gY2FtbF9iYV9jdXN0b21fbmFtZTtcblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIG9mcyA9IDA7XG4gIGlmKHR5cGVvZiBhcmcgPT09IFwibnVtYmVyXCIpIGFyZyA9IFthcmddO1xuICBpZiAoISAoYXJnIGluc3RhbmNlb2YgQXJyYXkpKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJiaWdhcnJheS5qczogaW52YWxpZCBvZmZzZXRcIik7XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGFyZy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZ2V0L3NldDogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICBpZih0aGlzLmxheW91dCA9PSAwIC8qIGNfbGF5b3V0ICovKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pXG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgYXJnW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMSB8fCBhcmdbaV0gPiB0aGlzLmRpbXNbaV0pe1xuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICB9XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIChhcmdbaV0gLSAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9mcztcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBsID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGwsaCk7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGkgPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBbMjU0LCByLCBpXTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gdGhpcy5kYXRhW29mc11cbiAgfVxufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gdlsxXTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB2YXIgYiA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBpZihhID09IGIpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gYSA6IGI7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIGltID0gdlsxXTtcbiAgICB2YXIgcmUgPSB2WzJdO1xuICAgIGlmKGltID09IHJlKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGltKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBpbSA6IHJlO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICBicmVhaztcbiAgfVxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIsIHRvdGFsKSB7XG4gIGlmICh0aGlzLmxheW91dCAhPSBiLmxheW91dCB8fCB0aGlzLmtpbmQgIT0gYi5raW5kKSB7XG4gICAgdmFyIGsxID0gdGhpcy5raW5kIHwgKHRoaXMubGF5b3V0IDw8IDgpO1xuICAgIHZhciBrMiA9ICAgIGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICByZXR1cm4gazIgLSBrMTtcbiAgfVxuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBiLmRpbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmICh0aGlzLmRpbXNbaV0gIT0gYi5kaW1zW2ldKVxuICAgICAgcmV0dXJuICh0aGlzLmRpbXNbaV0gPCBiLmRpbXNbaV0pID8gLTEgOiAxO1xuICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgY2FzZSAxMDpcbiAgY2FzZSAxMTpcbiAgICAvLyBGbG9hdHNcbiAgICB2YXIgeCwgeTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgeCA9IHRoaXMuZGF0YVtpXTtcbiAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICBpZiAoeCA8IHkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh4ID4geSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoeCAhPSB5KSB7XG4gICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgIGlmICh4ID09IHgpIHJldHVybiAxO1xuICAgICAgICBpZiAoeSA9PSB5KSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrPTIpIHtcbiAgICAgIC8vIENoZWNrIGhpZ2hlc3QgYml0cyBmaXJzdFxuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdIDwgYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA+IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA8IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPiAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDI6XG4gIGNhc2UgMzpcbiAgY2FzZSA0OlxuICBjYXNlIDU6XG4gIGNhc2UgNjpcbiAgY2FzZSA4OlxuICBjYXNlIDk6XG4gIGNhc2UgMTI6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPiBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSAgID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUgPSBuZXcgTWxfQmlnYXJyYXkoKVxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgaWYodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIil7XG4gICAgaWYoKGFyZyBpbnN0YW5jZW9mIEFycmF5KSAmJiBhcmcubGVuZ3RoID09IDEpXG4gICAgICBhcmcgPSBhcmdbMF07XG4gICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gIH1cbiAgaWYgKGFyZyA8IDAgfHwgYXJnID49IHRoaXMuZGltc1swXSlcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcmc7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gIHJldHVybiAwXG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgdGhpcy5kYXRhLmZpbGwodik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9iYV9jb21wYXJlKGEsYix0b3RhbCl7XG4gIHJldHVybiBhLmNvbXBhcmUoYix0b3RhbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSl7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKTtcbiAgaWYoY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSAqIHNpemVfcGVyX2VsZW1lbnQgIT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmKGxheW91dCA9PSAwICYmIC8vIGNfbGF5b3V0XG4gICAgIGRpbXMubGVuZ3RoID09IDEgJiYgLy8gQXJyYXkxXG4gICAgIHNpemVfcGVyX2VsZW1lbnQgPT0gMSkgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcblxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZShraW5kLCBsYXlvdXQsIGRpbXNfbWwpIHtcbiAgdmFyIGRpbXMgPSBjYW1sX2pzX2Zyb21fYXJyYXkoZGltc19tbCk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIGNhbWxfYmFfZ2V0X3NpemUoZGltcykpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY2hhbmdlX2xheW91dFxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2NoYW5nZV9sYXlvdXQoYmEsIGxheW91dCkge1xuICBpZihiYS5sYXlvdXQgPT0gbGF5b3V0KSByZXR1cm4gYmE7XG4gIHZhciBuZXdfZGltcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbYmEuZGltcy5sZW5ndGggLSBpIC0gMV07XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgbGF5b3V0LCBuZXdfZGltcywgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kKGJhKSB7XG4gIHJldHVybiBiYS5raW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2xheW91dFxuZnVuY3Rpb24gY2FtbF9iYV9sYXlvdXQoYmEpIHtcbiAgcmV0dXJuIGJhLmxheW91dDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9udW1fZGltc1xuZnVuY3Rpb24gY2FtbF9iYV9udW1fZGltcyhiYSkge1xuICByZXR1cm4gYmEuZGltcy5sZW5ndGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZGltKGJhLCBpKSB7XG4gIGlmIChpIDwgMCB8fCBpID49IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMgKyAxKTtcbiAgcmV0dXJuIChiMSB8IChiMiA8PCA4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MzIoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHJldHVybiAoIChiMSA8PCAwKSAgfFxuICAgICAgICAgICAoYjIgPDwgOCkgIHxcbiAgICAgICAgICAgKGIzIDw8IDE2KSB8XG4gICAgICAgICAgIChiNCA8PCAyNCkgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQ2NChiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgdmFyIGI1ID0gYmEuZ2V0KG9mcys0KTtcbiAgdmFyIGI2ID0gYmEuZ2V0KG9mcys1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcys2KTtcbiAgdmFyIGI4ID0gYmEuZ2V0KG9mcys3KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW2I4LGI3LGI2LGI1LGI0LGIzLGIyLGIxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzEoYmEsIGkwKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KGkwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzIoYmEsIGkwLCBpMSkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxLGkyXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0X2dlbmVyaWMoYmEsIGksIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMrMywgKHYgPj4+IDI0KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQ2NChiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBiYS5zZXQob2ZzK2ksIHZbNy1pXSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMihiYSwgaTAsIGkxLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMyhiYSwgaTAsIGkxLCBpMiwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZmlsbFxuZnVuY3Rpb24gY2FtbF9iYV9maWxsKGJhLCB2KSB7XG4gIGJhLmZpbGwodik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9ibGl0KHNyYywgZHN0KSB7XG4gIGlmIChkc3QuZGltcy5sZW5ndGggIT0gc3JjLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkc3QuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoZHN0LmRpbXNbaV0gIT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IChiYS5kaW1zLmxlbmd0aCAtIDEpOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCAob2ZzICsgbGVuKSA+IGJhLmRpbXNbY2hhbmdlZF9kaW1dKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zdWI6IGJhZCBzdWItYXJyYXlcIik7XG4gIH1cbiAgdmFyIG5ld19kaW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAwO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZShudW1faW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyArIGldID0gdmluZFtpXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMTtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UoMCwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyk7XG4gIH1cbiAgb2ZzID0gYmEub2Zmc2V0KGluZGV4KTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKHN1Yl9kaW1zKTtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIHNpemVfcGVyX2VsZW1lbnQsIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgc3ViX2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9yZXNoYXBlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG5mdW5jdGlvbiBjYW1sX2JhX3Jlc2hhcGUoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG5ld19kaW0gPSBbXTtcbiAgdmFyIG51bV9kaW1zID0gdmluZC5sZW5ndGg7XG5cbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPSBzaXplKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IHNpemUgbWlzbWF0Y2hcIik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF90b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX3NlcmlhbGl6ZSh3cml0ZXIsIGJhLCBzeikge1xuICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXMubGVuZ3RoKTtcbiAgd3JpdGVyLndyaXRlKDMyLCAoYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpKTtcbiAgaWYoYmEuY2FtbF9jdXN0b20gPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYoYmEuZGltc1tpXSA8IDB4ZmZmZilcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHdyaXRlci53cml0ZSgzMixiYS5kaW1zW2ldKVxuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoOCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB3cml0ZXIud3JpdGUoOCwwKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhiYS5nZXQoaSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgaiA9IGJhLmdldChpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMV0pKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsxXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMl0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogNDtcbiAgc3pbMV0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGVzZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlcywgY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKXtcbiAgdmFyIG51bV9kaW1zID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogd3JvbmcgbnVtYmVyIG9mIGJpZ2FycmF5IGRpbWVuc2lvbnNcIik7XG4gIHZhciB0YWcgPSByZWFkZXIucmVhZDMycygpO1xuICB2YXIga2luZCA9IHRhZyAmIDB4ZmZcbiAgdmFyIGxheW91dCA9ICh0YWcgPj4gOCkgJiAxO1xuICB2YXIgZGltcyA9IFtdXG4gIGlmKG5hbWUgPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICAgIHZhciBzaXplX2RpbSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICBpZihzaXplX2RpbSA9PSAweGZmZmYpe1xuICAgICAgICB2YXIgc2l6ZV9kaW1faGkgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICB2YXIgc2l6ZV9kaW1fbG8gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICBpZihzaXplX2RpbV9oaSAhPSAwKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogYmlnYXJyYXkgZGltZW5zaW9uIG92ZXJmbG93IGluIDMyYml0XCIpO1xuICAgICAgICBzaXplX2RpbSA9IHNpemVfZGltX2xvO1xuICAgICAgfVxuICAgICAgZGltcy5wdXNoKHNpemVfZGltKTtcbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIGRpbXMucHVzaChyZWFkZXIucmVhZDMydSgpKTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGRpbXMpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKTtcbiAgdmFyIGJhID0gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDhzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgdmFyIHNpeHR5ID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIGlmKHNpeHR5KSBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNhbm5vdCByZWFkIGJpZ2FycmF5IHdpdGggNjQtYml0IE9DYW1sIGludHNcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogLy8gKGludDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICBiYS5zZXQoaSxpbnQ2NCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrXG4gIH1cbiAgc3pbMF0gPSAoNCArIG51bV9kaW1zKSAqIDQ7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9EZXByZWNhdGVkXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIGpzdHlwLCBraW5kLCBsYXlvdXQsIGRpbXMpe1xuICBpZihkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09IDIpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfY3JlYXRlX2Zyb206IHVzZSByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlXCIpO1xuICB9XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaGFzaCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfaGFzaChiYSl7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyA0IDw9IGJhLmRhdGEubGVuZ3RoOyBpKz00KXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDgpIHwgKGJhLmRhdGFbaSsyXSA8PCAxNikgfCAoYmEuZGF0YVtpKzNdIDw8IDI0KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICB3ID0gMDtcbiAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgIGNhc2UgMzogdyAgPSBiYS5kYXRhW2krMl0gPDwgMTY7ICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAyOiB3IHw9IGJhLmRhdGFbaSsxXSA8PCA4OyAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDE6IHcgfD0gYmEuZGF0YVtpKzBdO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgMiA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9Mil7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCAxNik7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgaWYgKChudW1fZWx0cyAmIDEpICE9IDApXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgbnVtX2VsdHMgKj0gMlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9iYV90b190eXBlZF9hcnJheShiYSl7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZDtcbiAgaWYgICAgICAodGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkga2luZCA9IDE7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50OEFycmF5KSBraW5kID0gMjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MTZBcnJheSkga2luZCA9IDQ7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXk6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHJldHVybiBraW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAgIC8qIE5lZWRlZCB0byBhdm9pZCB1bnNpZ25lZCBzZXR0ZXJzIG92ZXJmbG93aW5nXG4gICAgICAgICB0aGUgcmFuZ2Ugb2YgT0NhbWwgW2ludDMyXSB2YWx1ZXMuICovXG4gICAgICB0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ID9cbiAgICAgIG5ldyBJbnQzMkFycmF5KHRhLmJ1ZmZlciAsdGEuYnl0ZU9mZnNldCwgdGEubGVuZ3RoKSA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9pbnQgY29uc3QgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nLCBjYW1sX3N0cl9yZXBlYXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2ludChmbXQsIGkpIHtcbiAgaWYgKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KSA9PSBcIiVkXCIpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIraSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7IGlmIChmLnNpZ25lZGNvbnYpIHsgZi5zaWduID0gLTE7IGkgPSAtaTsgfSBlbHNlIGkgPj4+PSAwOyB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIHMubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgcyA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpIHtcbiAgdmFyIGkgPSAwLCBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyksIGJhc2UgPSAxMCwgc2lnbiA9IDE7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSkpIHtcbiAgICBjYXNlIDQ1OiBpKys7IHNpZ24gPSAtMTsgYnJlYWs7XG4gICAgY2FzZSA0MzogaSsrOyBzaWduID0gMTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChpICsgMSA8IGxlbiAmJiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpID09IDQ4KVxuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMSkpIHtcbiAgICBjYXNlIDEyMDogY2FzZSA4ODogYmFzZSA9IDE2OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTExOiBjYXNlIDc5OiBiYXNlID0gIDg7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAgOTg6IGNhc2UgNjY6IGJhc2UgPSAgMjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExNzogY2FzZSA4NTogaSArPSAyOyBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSAgcmV0dXJuIGMgLSA0ODtcbiAgaWYgKGMgPj0gNjUgJiYgYyA8PSA5MCkgIHJldHVybiBjIC0gNTU7XG4gIGlmIChjID49IDk3ICYmIGMgPD0gMTIyKSByZXR1cm4gYyAtIDg3O1xuICByZXR1cm4gLTE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9wYXJzZV9kaWdpdCwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9pbnRfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSAoaSA8IGxlbik/Y2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTowO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gZDtcbiAgZm9yIChpKys7aTxsZW47aSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIHJlcyA9IGJhc2UgKiByZXMgKyBkO1xuICAgIGlmIChyZXMgPiB0aHJlc2hvbGQpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGxlbikgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIC8vIEZvciBiYXNlIGRpZmZlcmVudCBmcm9tIDEwLCB3ZSBleHBlY3QgYW4gdW5zaWduZWQgcmVwcmVzZW50YXRpb24sXG4gIC8vIGhlbmNlIGFueSB2YWx1ZSBvZiAncmVzJyAobGVzcyB0aGFuICd0aHJlc2hvbGQnKSBpcyBhY2NlcHRhYmxlLlxuICAvLyBCdXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZSByZXN1bHQgYmFjayB0byBhIHNpZ25lZCBpbnRlZ2VyLlxuICByZXMgPSBzaWduICogcmVzO1xuICBpZiAoKGJhc2UgPT0gMTApICYmICgocmVzIHwgMCkgIT0gcmVzKSlcbiAgICAvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gZXhwZWN0ZWQsIGFsbG93IC0yXihuYml0cy0xKSB0byAyXihuYml0cy0xKSAtIDEgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbXVsIGNvbnN0XG5mdW5jdGlvbiBjYW1sX211bChhLGIpe1xuICByZXR1cm4gTWF0aC5pbXVsKGEsYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX2Rpdih4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuICh4L3kpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX21vZCh4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuIHgleTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ic3dhcDE2XG5mdW5jdGlvbiBjYW1sX2Jzd2FwMTYoeCkge1xuICByZXR1cm4gKCgoKHggJiAweDAwRkYpIDw8IDgpIHxcbiAgICAgICAgICAgKCh4ICYgMHhGRjAwKSA+PiA4KSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoKCh4ICYgMHgwMDAwMDBGRikgPDwgMjQpIHxcbiAgICAgICAgICAoKHggJiAweDAwMDBGRjAwKSA8PCA4KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMEZGMDAwMCkgPj4+IDgpIHxcbiAgICAgICAgICAoKHggJiAweEZGMDAwMDAwKSA+Pj4gMjQpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYnN3YXBcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYnN3YXAoeCkge1xuICB2YXIgeSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoeCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFt5WzddLCB5WzZdLCB5WzVdLCB5WzRdLCB5WzNdLCB5WzJdLCB5WzFdLCB5WzBdXSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEhhc2h0YmxcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfdW5pdl9wYXJhbSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vVmVyc2lvbjogPCA0LjEyXG5mdW5jdGlvbiBjYW1sX2hhc2hfdW5pdl9wYXJhbSAoY291bnQsIGxpbWl0LCBvYmopIHtcbiAgdmFyIGhhc2hfYWNjdSA9IDA7XG4gIGZ1bmN0aW9uIGhhc2hfYXV4IChvYmopIHtcbiAgICBsaW1pdCAtLTtcbiAgICBpZiAoY291bnQgPCAwIHx8IGxpbWl0IDwgMCkgcmV0dXJuO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSAmJiBvYmpbMF0gPT09IChvYmpbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAob2JqWzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmpbMl0pIHwgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBsaW1pdCsrOyBoYXNoX2F1eChvYmopOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBvYmpbMF0pIHwgMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IG9iai5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSBoYXNoX2F1eCAob2JqW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMob2JqKSkge1xuICAgICAgY291bnQgLS07XG4gICAgICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudChvYmopO1xuICAgICAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZm9yICh2YXIgYiA9IGNvbnRlbnQsIGwgPSBiLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgICB9IGVsc2UgeyAvKiBBUlJBWSAqL1xuICAgICAgICBmb3IgKHZhciBhID0gY29udGVudCwgbCA9IGEubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBhW2ldKSB8IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhvYmopKSB7XG4gICAgICB2YXIganNieXRlcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob2JqKTtcbiAgICAgIGZvciAodmFyIGIgPSBqc2J5dGVzLCBsID0ganNieXRlcy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAodmFyIGIgPSBvYmosIGwgPSBvYmoubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IChvYmp8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGNvdW50IC0tO1xuICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09ICtvYmopIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBjb3VudC0tO1xuICAgICAgdmFyIHAgPSBjYW1sX2ludDY0X3RvX2J5dGVzIChjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKG9iaikpO1xuICAgICAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgaS0tKSBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBwW2ldKSB8IDA7XG4gICAgfSBlbHNlIGlmKG9iaiAmJiBvYmouY2FtbF9jdXN0b20pIHtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGggPSBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKG9iaikgfCAwO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBoKSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGhhc2hfYXV4IChvYmopO1xuICByZXR1cm4gaGFzaF9hY2N1ICYgMHgzRkZGRkZGRjtcbn1cblxuLy9mdW5jdGlvbiBST1RMMzIoeCxuKSB7IHJldHVybiAoKHggPDwgbikgfCAoeCA+Pj4gKDMyLW4pKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQoaCxkKSB7XG4gIGQgPSBjYW1sX211bChkLCAweGNjOWUyZDUxfDApO1xuICBkID0gKChkIDw8IDE1KSB8IChkID4+PiAoMzItMTUpKSk7IC8vIFJPVEwzMihkLCAxNSk7XG4gIGQgPSBjYW1sX211bChkLCAweDFiODczNTkzKTtcbiAgaCBePSBkO1xuICBoID0gKChoIDw8IDEzKSB8IChoID4+PiAoMzItMTMpKSk7ICAgLy9ST1RMMzIoaCwgMTMpO1xuICByZXR1cm4gKCgoaCArIChoIDw8IDIpKXwwKSArICgweGU2NTQ2YjY0fDApKXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9maW5hbChoKSB7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIGggPSBjYW1sX211bCAoaCwgMHg4NWViY2E2YnwwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsIChoLCAweGMyYjJhZTM1fDApO1xuICBoIF49IGggPj4+IDE2O1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2hhc2hfbWl4X2ludDY0XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0IChoLCB2MCkge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9pbnQ2NChoLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHYwKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9sbzMyLCBjYW1sX2ludDY0X2hpMzJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50NjQgKGgsIHYpIHtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfbG8zMih2KSk7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2hpMzIodikpO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzLmNoYXJDb2RlQXQoaSlcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDgpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNilcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gcy5jaGFyQ29kZUF0KGkrMikgPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzLmNoYXJDb2RlQXQoaSsxKSA8PCA4O1xuICBjYXNlIDE6XG4gICAgdyB8PSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gc1tpXVxuICAgICAgfCAoc1tpKzFdIDw8IDgpXG4gICAgICB8IChzW2krMl0gPDwgMTYpXG4gICAgICB8IChzW2krM10gPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzW2krMl0gPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzW2krMV0gPDwgODtcbiAgY2FzZSAxOiB3IHw9IHNbaV07XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsIHYpIHtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQodik7XG4gIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY29udGVudClcbiAgZWxzZSAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQsIGNhbWxfaGFzaF9taXhfc3RyaW5nLCBjYW1sX2hhc2hfbWl4X2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2hhc2ggKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07IHJkID0gMDsgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2ICYmIHYuY2FtbF9jdXN0b20pe1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoaCA9IGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKHYpO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQgKGgsIGhoKTtcbiAgICAgICAgbnVtIC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgIG51bS0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIHF1ZXVlWy0tcmRdID0gdlsxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpIHtcbiAgICAgICAgICAvKiBBbGwgY29udGludWF0aW9ucyBoYXNoIHRvIHRoZSBzYW1lIHZhbHVlLFxuICAgICAgICAgICAgIHNpbmNlIHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZGlzdGluZ3Vpc2ggdGhlbS4gKi9cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnID0gKCh2Lmxlbmd0aCAtIDEpIDw8IDEwKSB8IHZbMF07XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHdyID49IHN6KSBicmVhaztcbiAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9ieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHYgPT09ICh2fDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdit2KzEpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsdik7XG4gICAgICBudW0tLTtcbiAgICB9XG4gIH1cbiAgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9maW5hbCwgY2FtbF9oYXNoX21peF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdil7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KTtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIFVJbnQ4QXJyYXlSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gczsgdGhpcy5pID0gaTsgfVxuVUludDhBcnJheVJlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV1cbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0ID4+IDE2KSB8IHNbaSArIDFdO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgICAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM10pID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkodGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBNbFN0cmluZ1JlYWRlciAocywgaSkgeyB0aGlzLnMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpOyB0aGlzLmkgPSBpOyB9XG5NbFN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCA+PiAxNikgfCBzLmNoYXJDb2RlQXQoaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5zLnN1YnN0cmluZyhpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBiW2pdID0gcy5jaGFyQ29kZUF0KGkgKyBqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gYjtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoaSk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLmRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICB9XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoY2FtbF9pbnQ2NF9vZl9ieXRlcyAoYSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKHMsIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAoY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocyksIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gIHNpemVbMF0gPSA4O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyAodCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tYXJzaGFsKHdyaXRlciwgdiwgc2l6ZXMpIHtcbiAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzICh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSAoOCwgYltpXSk7XG4gIHNpemVzWzBdID0gODsgc2l6ZXNbMV0gPSA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX3VubWFyc2hhbFxuZnVuY3Rpb24gY2FtbF9pbnQzMl91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1ICgpKSB7XG4gIGNhc2UgMTpcbiAgICBzaXplWzBdID0gNDtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gIGNhc2UgMjpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IG5hdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvbyBsYXJnZVwiKTtcbiAgZGVmYXVsdDogY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG5hdGl2ZSBpbnRlZ2VyXCIpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF91bm1hcnNoYWwsIGNhbWxfaW50NjRfbWFyc2hhbCwgY2FtbF9pbnQ2NF9jb21wYXJlLCBjYW1sX2ludDY0X2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsLCBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfYmFfc2VyaWFsaXplLCBjYW1sX2JhX2Rlc2VyaWFsaXplLCBjYW1sX2JhX2NvbXBhcmUsIGNhbWxfYmFfaGFzaFxudmFyIGNhbWxfY3VzdG9tX29wcyA9XG4gICAge1wiX2pcIjoge1xuICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDY0X3VubWFyc2hhbCxcbiAgICAgIHNlcmlhbGl6ZSAgOiBjYW1sX2ludDY0X21hcnNoYWwsXG4gICAgICBmaXhlZF9sZW5ndGggOiA4LFxuICAgICAgY29tcGFyZSA6IGNhbWxfaW50NjRfY29tcGFyZSxcbiAgICAgIGhhc2ggOiBjYW1sX2ludDY0X2hhc2hcbiAgICB9LFxuICAgICBcIl9pXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50MzJfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX25cIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycmF5XCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnJheVwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9LFxuICAgICBcIl9iaWdhcnIwMlwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyMDJcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfVxuICAgIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcykge1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUgKClcbiAgc3dpdGNoKG1hZ2ljKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDA7XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IGRhdGFfbGVuO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBjb21wcmVzc2VkID0gMTtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gYSAzMi1iaXQgcGxhdGZvcm1cIik7XG4gICAgYnJlYWtcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogYmFkIG9iamVjdFwiKTtcbiAgICBicmVhaztcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjIChyZWFkZXIpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmKGNvbXByZXNzZWQpIHtcbiAgICBpZihjYW1sX2RlY29tcHJlc3NfaW5wdXQpIHtcbiAgICAgIHZhciBkYXRhID0gcmVhZGVyLnJlYWR1aW50OGFycmF5KGRhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBuZXcgVWludDhBcnJheSh1bmNvbXByZXNzZWRfZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IGNhbWxfZGVjb21wcmVzc19pbnB1dChkYXRhLCByZXMpO1xuICAgICAgdmFyIHJlYWRlciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKHJlcywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29tcHJlc3NlZCBvYmplY3QsIGNhbm5vdCBkZWNvbXByZXNzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcmVzID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgc2l6ZSA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciB2ID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIGQgPSB2Lmxlbmd0aDtcbiAgICBpZiAoZCA8IHNpemUpIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgdltkXSA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBvZnMhPVwibnVtYmVyXCIpIG9mc1swXSA9IHJlYWRlci5pO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA+PSA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDE2XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHN3aXRjaChyLnJlYWQzMnUoKSl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGRhdGFfbGVuID0gci5yZWFkMzJ1KCk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgICBicmVha1xuICB9XG4gIHJldHVybiBoZWFkZXJfbGVuIC0gY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplICsgZGF0YV9sZW47XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzLk1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qIHBvbHlmaWxsICh1c2luZyBsaW5lYXIgc2VhcmNoKSAqL1xuICAgIGZ1bmN0aW9uIE5haXZlTG9va3VwKG9ianMpIHsgdGhpcy5vYmpzID0gb2JqczsgfVxuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbih2KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5vYmpzW2ldID09PSB2KSByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9O1xuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgaGVyZS4gW01sT2JqZWN0VGFibGUuc3RvcmVdIHdpbGwgcHVzaCB0byBbdGhpcy5vYmpzXSBkaXJlY3RseS5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgTmFpdmVMb29rdXAodGhpcy5vYmpzKTtcbiAgICB9O1xuICB9KCk7XG59XG5lbHNlIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IGdsb2JhbFRoaXMuTWFwKCk7XG4gIH07XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnN0b3JlID0gZnVuY3Rpb24odikge1xuICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gIHRoaXMub2Jqcy5wdXNoKHYpO1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5yZWNhbGwgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICByZXR1cm4gKGkgPT09IHVuZGVmaW5lZClcbiAgICA/IHVuZGVmaW5lZCA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAgIC8qIGluZGV4IGlzIHJlbGF0aXZlICovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IGZ1bmN0aW9uICgpe1xuICBmdW5jdGlvbiBXcml0ZXIgKCkgeyB0aGlzLmNodW5rID0gW107IH1cbiAgV3JpdGVyLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua19pZHg6MjAsIGJsb2NrX2xlbjowLCBvYmpfY291bnRlcjowLCBzaXplXzMyOjAsIHNpemVfNjQ6MCxcbiAgICB3cml0ZTpmdW5jdGlvbiAoc2l6ZSwgdmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2F0OmZ1bmN0aW9uIChwb3MsIHNpemUsIHZhbHVlKSB7XG4gICAgICB2YXIgcG9zID0gcG9zO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2NvZGU6ZnVuY3Rpb24gKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX3NoYXJlZDpmdW5jdGlvbiAob2Zmc2V0KSB7XG4gICAgICBpZiAob2Zmc2V0IDwgKDEgPDwgOCkpIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgKDEgPDwgMTYpKSB0aGlzLndyaXRlX2NvZGUoMTYsIDB4MDUgLypjc3QuQ09ERV9TSEFSRUQxNiovLCBvZmZzZXQpO1xuICAgICAgZWxzZSB0aGlzLndyaXRlX2NvZGUoMzIsIDB4MDYgLypjc3QuQ09ERV9TSEFSRUQzMiovLCBvZmZzZXQpO1xuICAgIH0sXG4gICAgcG9zOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2h1bmtfaWR4IH0sXG4gICAgZmluYWxpemU6ZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSB0aGlzLmNodW5rX2lkeCAtIDIwO1xuICAgICAgdGhpcy5jaHVua19pZHggPSAwO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIDB4ODQ5NUE2QkUpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLm9ial9jb3VudGVyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfMzIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gKGZsYWdzLmluZGV4T2YoMCAvKk1hcnNoYWwuTm9fc2hhcmluZyovKSAhPT0gLTEpLFxuICAgICAgICBjbG9zdXJlcyA9ICAoZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTEpO1xuICAgIC8qIE1hcnNoYWwuQ29tcGF0XzMyIGlzIHJlZHVuZGFudCBzaW5jZSBpbnRlZ2VycyBhcmUgMzItYml0IGFueXdheSAqL1xuXG4gICAgaWYgKGNsb3N1cmVzKVxuICAgICAgY29uc29sZS53YXJuKFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlciAoKTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgaW50ZXJuX29ial90YWJsZSA9IG5vX3NoYXJpbmcgPyBudWxsIDogbmV3IE1sT2JqZWN0VGFibGUoKTtcblxuICAgIGZ1bmN0aW9uIG1lbW8odikge1xuICAgICAgaWYgKG5vX3NoYXJpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBleGlzdGluZ19vZmZzZXQgPSBpbnRlcm5fb2JqX3RhYmxlLnJlY2FsbCh2KTtcbiAgICAgIGlmIChleGlzdGluZ19vZmZzZXQpIHsgd3JpdGVyLndyaXRlX3NoYXJlZChleGlzdGluZ19vZmZzZXQpOyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IGludGVybl9vYmpfdGFibGUuc3RvcmUodik7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWMgKHYpIHtcbiAgICAgIGlmICh2LmNhbWxfY3VzdG9tKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBuYW1lID0gdi5jYW1sX2N1c3RvbTtcbiAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tuYW1lXTtcbiAgICAgICAgdmFyIHN6XzMyXzY0ID0gWzAsMF07XG4gICAgICAgIGlmKCFvcHMuc2VyaWFsaXplKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEN1c3RvbSlcIik7XG4gICAgICAgIGlmKG9wcy5maXhlZF9sZW5ndGggPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIGhlYWRlcl9wb3MgPSB3cml0ZXIucG9zICgpO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MsIDMyLCBzel8zMl82NFswXSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA0LCAzMiwgMCk7IC8vIHplcm9cbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDgsIDMyLCBzel8zMl82NFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE5IC8qY3N0LkNPREVfQ1VTVE9NX0ZJWEVEKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSB3cml0ZXIucG9zKCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPSB3cml0ZXIucG9zKCkgLSBvbGRfcG9zKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgICAgaWYgKHZbMF0gPT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLyArIHZbMF0gKyAoKHYubGVuZ3RoIC0gMSk8PDQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDA4IC8qY3N0LkNPREVfQkxPQ0szMiovLCAoKHYubGVuZ3RoLTEpIDw8IDEwKSB8IHZbMF0pO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2ggKHYsIDEpO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICAgIGlmKCEoY2FtbF9pc19tbF9ieXRlcyhjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpKSkpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodiAhPSAodnwwKSl7XG4gICAgICAgICAgdmFyIHR5cGVfb2ZfdiA9IHR5cGVvZiB2O1xuICAgICAgICAgIGlmKHR5cGVfb2ZfdiAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gSWYgYSBmbG9hdCBoYXBwZW5zIHRvIGJlIGFuIGludGVnZXIgaXQgaXMgc2VyaWFsaXplZCBhcyBhbiBpbnRlZ2VyXG4gICAgICAgICAgLy8gKEpzX29mX29jYW1sIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHR5cGUgb2YgYW4gaW50ZWdlciBudW1iZXIgaXNcbiAgICAgICAgICAvLyBmbG9hdCBvciBpbnRlZ2VyLikgVGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgY3Jhc2hlcyB3aGVuXG4gICAgICAgICAgLy8gdW5tYXJzaGFsbGluZyB1c2luZyB0aGUgc3RhbmRhcmQgcnVudGltZS5cbiAgICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0ID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodikpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgwQyAvKmNzdC5DT0RFX0RPVUJMRV9MSVRUTEUqLyk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaTw4OyBpKyspe3dyaXRlci53cml0ZSg4LHRbNyAtIGldKX1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzXG4gICAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPj0gMCAmJiB2IDwgMHg0MCkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMFg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8gKyB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodiA+PSAtKDEgPDwgNykgJiYgdiA8ICgxIDw8IDcpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwMCAvKmNzdC5DT0RFX0lOVDgqLywgdik7XG4gICAgICAgICAgZWxzZSBpZiAodiA+PSAtKDEgPDwgMTUpICYmIHYgPCAoMSA8PCAxNSkpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDAyIC8qY3N0LkNPREVfSU5UMzIqLywgdik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZXh0ZXJuX3JlYyAodik7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBpID0gc3RhY2sucG9wICgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AgKCk7XG4gICAgICBpZiAoaSArIDEgPCB2Lmxlbmd0aCkgc3RhY2sucHVzaCAodiwgaSArIDEpO1xuICAgICAgZXh0ZXJuX3JlYyAodltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB3cml0ZXIuY2h1bms7XG4gIH1cbn0gKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9ibGl0X2J5dGVzXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIgKHMsIG9mcywgbGVuLCB2LCBmbGFncykge1xuICB2YXIgdCA9IGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGggKFwiTWFyc2hhbC50b19idWZmZXI6IGJ1ZmZlciBvdmVyZmxvd1wiKTtcbiAgY2FtbF9ibGl0X2J5dGVzKHQsIDAsIHMsIG9mcywgdC5sZW5ndGgpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSl7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpIHJldHVybiAyNTI7IC8vIHN0cmluZ190YWdcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoYSkpIHJldHVybiAxMjUyOyAvLyBvY2FtbCBzdHJpbmcgKGlmIGRpZmZlcmVudCBmcm9tIGJ5dGVzKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgQXJyYXkgJiYgYVswXSA9PT0gKGFbMF0+Pj4wKSAmJiBhWzBdIDw9IDI1NSkge1xuICAgIC8vIExvb2sgbGlrZSBhbiBvY2FtbCBibG9ja1xuICAgIHZhciB0YWcgPSBhWzBdIHwgMDtcbiAgICAvLyBpZ25vcmUgZG91YmxlX2FycmF5X3RhZyBiZWNhdXNlIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IHNldFxuICAgIC8vIHRoaXMgdGFnIHdoZW4gd2UgY3JlYXRlIGFuIGFycmF5IG9mIGZsb2F0LlxuICAgIHJldHVybiAodGFnID09IDI1NCk/MDp0YWdcbiAgfVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBOdW1iZXIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChhICYmIGEuY2FtbF9jdXN0b20pIHJldHVybiAxMjU1OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAoYSAmJiBhLmNvbXBhcmUpIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN5bWJvbFwiKSByZXR1cm4gMTI1MTtcbiAgcmV0dXJuIDEwMDE7IC8vb3V0X29mX2hlYXBfdGFnXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSl7XG4gIHJldHVybiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20obnVtLCBjdXN0b20sIHN3YXAsIHRvdGFsKSB7XG4gIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGN1c3RvbSk7XG4gIGlmKGNvbXApIHtcbiAgICB2YXIgeCA9IChzd2FwID4gMCk/Y29tcChjdXN0b20sbnVtLHRvdGFsKTpjb21wKG51bSxjdXN0b20sdG90YWwpO1xuICAgIGlmKHRvdGFsICYmIHggIT0geCkgcmV0dXJuIHN3YXA7IC8vIHRvdGFsICYmIG5hblxuICAgIGlmKCt4ICE9ICt4KSByZXR1cm4gK3g7IC8vIG5hblxuICAgIGlmKCh4IHwgMCkgIT0gMCkgcmV0dXJuICh4IHwgMCk7IC8vICFuYW5cbiAgfVxuICByZXR1cm4gc3dhcFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsIChjb25zdCwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnRfY29tcGFyZSwgY2FtbF9zdHJpbmdfY29tcGFyZSwgY2FtbF9ieXRlc19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSwgY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0b3RhbCkge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKCEodG90YWwgJiYgYSA9PT0gYikpIHtcbiAgICAgIHZhciB0YWdfYSA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGEpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2EgPT0gMjUwKSB7IGEgPSBhWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2IgPT0gMjUwKSB7IGIgPSBiWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIC8vIHRhZ3MgYXJlIGRpZmZlcmVudFxuICAgICAgaWYodGFnX2EgIT09IHRhZ19iKSB7XG4gICAgICAgIGlmKHRhZ19hID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYiA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGEsIGIsIC0xLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmKHRhZ19iID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYSA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGIsIGEsIDEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRhZ19hIDwgdGFnX2IpPy0xOjE7XG4gICAgICB9XG4gICAgICBzd2l0Y2godGFnX2Epe1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICBjYXNlIDI0NzogLy8gQ2xvc3VyZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNDg6IC8vIE9iamVjdFxuICAgICAgICB2YXIgeCA9IGNhbWxfaW50X2NvbXBhcmUoYVsyXSwgYlsyXSk7XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEZvcndhcmRfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MTogLy9BYnN0cmFjdFxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTI6IC8vIE9DYW1sIGJ5dGVzXG4gICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYik7XG4gICAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfYXJyYXlfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjU1OiAvLyBDdXN0b21fdGFnXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgQ3VzdG9tX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjQ3OiAvLyBGdW5jdGlvblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NTogLy8gQ3VzdG9tXG4gICAgICAgIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpO1xuICAgICAgICBpZihjb21wICE9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShiKSl7XG4gICAgICAgICAgcmV0dXJuIChhLmNhbWxfY3VzdG9tPGIuY2FtbF9jdXN0b20pPy0xOjE7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIWNvbXApXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIHZhciB4ID0gY29tcChhLGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NjogLy8gY29tcGFyZSBmdW5jdGlvblxuICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KSB7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgYSA9ICthO1xuICAgICAgICBiID0gK2I7XG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDE6IC8vIFRoZSByZXN0XG4gICAgICAgIC8vIEhlcmUgd2UgY2FuIGJlIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDIuIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDMuIEphdmFTY3JpcHQgb2JqZWN0IHRoYW4gY2Fubm90IGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vICgzKSB3aWxsIHJhaXNlIGEgW1R5cGVFcnJvcl1cbiAgICAgICAgLy8gKDIpIHdpbGwgY29lcmNlIHRvIHByaW1pdGl2ZSB0eXBlcyB1c2luZyBbdmFsdWVPZl0gb3IgW3RvU3RyaW5nXVxuICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgLy8gLSBpZiBhIGFuZCBiIGFyZSBzdHJpbmdzLCBhcHBseSBsZXhpY29ncmFwaGljIGNvbXBhcmlzb25cbiAgICAgICAgLy8gLSBpZiBhIG9yIGIgYXJlIG5vdCBzdHJpbmdzLCBjb252ZXJ0IGEgYW5kIGIgdG8gbnVtYmVyXG4gICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRXhjZXB0aW9uOiBgIT1gIHdpbGwgbm90IGNvZXJjZS9jb252ZXJ0IGlmIGJvdGggYSBhbmQgYiBhcmUgb2JqZWN0c1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUxOiAvLyBKYXZhU2NyaXB0IFN5bWJvbCwgbm8gb3JkZXJpbmcuXG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyOiAvLyBvY2FtbCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGIpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTIwOiAvLyBqYXZhc2NyaXB0IHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0NjogLy8gTGF6eV90YWdcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlcbiAgICAgIGRlZmF1bHQ6IC8vIEJsb2NrIHdpdGggb3RoZXIgdGFnXG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0YWdfYSkpIHtcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gKGEubGVuZ3RoIDwgYi5sZW5ndGgpPy0xOjE7XG4gICAgICAgIGlmIChhLmxlbmd0aCA+IDEpIHN0YWNrLnB1c2goYSwgYiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHJldHVybiAwO1xuICAgIHZhciBpID0gc3RhY2sucG9wKCk7XG4gICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoaSArIDEgPCBhLmxlbmd0aCkgc3RhY2sucHVzaChhLCBiLCBpICsgMSk7XG4gICAgYSA9IGFbaV07XG4gICAgYiA9IGJbaV07XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlIChhLCBiKSB7IHJldHVybiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0cnVlKTsgfVxuLy9Qcm92aWRlczogY2FtbF9pbnRfY29tcGFyZSBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2ludF9jb21wYXJlIChhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuICgtMSk7IGlmIChhID09IGIpIHJldHVybiAwOyByZXR1cm4gMTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9lcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgIT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcmVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcmVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVydGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3NlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPD0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc3RoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzdGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPCAwKTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBGb3JtYXRcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9mb3JtYXRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9mb3JtYXQgKGZtdCkge1xuICBmbXQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCk7XG4gIHZhciBsZW4gPSBmbXQubGVuZ3RoO1xuICBpZiAobGVuID4gMzEpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImZvcm1hdF9pbnQ6IGZvcm1hdCB0b28gbG9uZ1wiKTtcbiAgdmFyIGYgPVxuICAgICAgeyBqdXN0aWZ5OicrJywgc2lnbnN0eWxlOictJywgZmlsbGVyOicgJywgYWx0ZXJuYXRlOmZhbHNlLFxuICAgICAgICBiYXNlOjAsIHNpZ25lZGNvbnY6ZmFsc2UsIHdpZHRoOjAsIHVwcGVyY2FzZTpmYWxzZSxcbiAgICAgICAgc2lnbjoxLCBwcmVjOi0xLCBjb252OidmJyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgIGNhc2UgJy0nOlxuICAgICAgZi5qdXN0aWZ5ID0gJy0nOyBicmVhaztcbiAgICBjYXNlICcrJzogY2FzZSAnICc6XG4gICAgICBmLnNpZ25zdHlsZSA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJzAnOlxuICAgICAgZi5maWxsZXIgPSAnMCc7IGJyZWFrO1xuICAgIGNhc2UgJyMnOlxuICAgICAgZi5hbHRlcm5hdGUgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6XG4gICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6XG4gICAgICBmLndpZHRoID0gMDtcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnLic6XG4gICAgICBmLnByZWMgPSAwO1xuICAgICAgaSsrO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgIGNhc2UgJ2QnOiBjYXNlICdpJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAndSc6XG4gICAgICBmLmJhc2UgPSAxMDsgYnJlYWs7XG4gICAgY2FzZSAneCc6XG4gICAgICBmLmJhc2UgPSAxNjsgYnJlYWs7XG4gICAgY2FzZSAnWCc6XG4gICAgICBmLmJhc2UgPSAxNjsgZi51cHBlcmNhc2UgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICdvJzpcbiAgICAgIGYuYmFzZSA9IDg7IGJyZWFrO1xuICAgIGNhc2UgJ2UnOiBjYXNlICdmJzogY2FzZSAnZyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLmNvbnYgPSBjOyBicmVhaztcbiAgICBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi51cHBlcmNhc2UgPSB0cnVlO1xuICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSAoKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHJhd2J1ZmZlcikge1xuICBpZiAoZi51cHBlcmNhc2UpIHJhd2J1ZmZlciA9IHJhd2J1ZmZlci50b1VwcGVyQ2FzZSgpO1xuICB2YXIgbGVuID0gcmF3YnVmZmVyLmxlbmd0aDtcbiAgLyogQWRqdXN0IGxlbiB0byByZWZsZWN0IGFkZGl0aW9uYWwgY2hhcnMgKHNpZ24sIGV0YykgKi9cbiAgaWYgKGYuc2lnbmVkY29udiAmJiAoZi5zaWduIDwgMCB8fCBmLnNpZ25zdHlsZSAhPSAnLScpKSBsZW4rKztcbiAgaWYgKGYuYWx0ZXJuYXRlKSB7XG4gICAgaWYgKGYuYmFzZSA9PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09IDE2KSBsZW4gKz0gMjtcbiAgfVxuICAvKiBEbyB0aGUgZm9ybWF0dGluZyAqL1xuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJyAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9ICctJztcbiAgICBlbHNlIGlmIChmLnNpZ25zdHlsZSAhPSAnLScpIGJ1ZmZlciArPSBmLnNpZ25zdHlsZTtcbiAgfVxuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDgpIGJ1ZmZlciArPSAnMCc7XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZT9cIjBYXCI6XCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKVxufVxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIGZhbHNlXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2Uocm9vdCkge1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMubWtkaXJTeW5jKHRoaXMubm0obmFtZSkse21vZGU6bW9kZX0pO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ybWRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnJlYWRkaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0RpcmVjdG9yeSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYiA9IHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gICAgdGhpcy5mcy51bmxpbmtTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiBiO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmLCByYWlzZV91bml4KSB7XG4gIHZhciBjb25zdHMgPSByZXF1aXJlKCdjb25zdGFudHMnKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvcih2YXIga2V5IGluIGYpe1xuICAgIHN3aXRjaChrZXkpe1xuICAgIGNhc2UgXCJyZG9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fUkRPTkxZOyBicmVhaztcbiAgICBjYXNlIFwid3Jvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1dST05MWTsgYnJlYWs7XG4gICAgY2FzZSBcImFwcGVuZFwiICA6XG4gICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZIHwgY29uc3RzLk9fQVBQRU5EO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNyZWF0ZVwiICAgOiByZXMgfD0gY29uc3RzLk9fQ1JFQVQ7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0cnVuY2F0ZVwiIDogcmVzIHw9IGNvbnN0cy5PX1RSVU5DOyAgICBicmVhaztcbiAgICBjYXNlIFwiZXhjbFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19FWENMOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJpbmFyeVwiICAgOiByZXMgfD0gY29uc3RzLk9fQklOQVJZOyAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0ZXh0XCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX1RFWFQ7ICAgICBicmVhaztcbiAgICBjYXNlIFwibm9uYmxvY2tcIiA6IHJlcyB8PSBjb25zdHMuT19OT05CTE9DSzsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMpO1xuICAgIHZhciBpc0NoYXJhY3RlckRldmljZSA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzQ2hhcmFjdGVyRGV2aWNlKCk7XG4gICAgZi5pc0NoYXJhY3RlckRldmljZSA9IGlzQ2hhcmFjdGVyRGV2aWNlO1xuICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMub3BlbmRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmFpc2Vfbm9kZWpzX2Vycm9yID0gZnVuY3Rpb24oZXJyLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZShcIlVuaXguVW5peF9lcnJvclwiKTtcbiAgaWYgKHJhaXNlX3VuaXggJiYgdW5peF9lcnJvcikge1xuICAgIHZhciBhcmdzID0gbWFrZV91bml4X2Vycl9hcmdzKGVyci5jb2RlLCBlcnIuc3lzY2FsbCwgZXJyLnBhdGgsIGVyci5lcnJubyk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXRzX2Zyb21fanMgPSBmdW5jdGlvbihqc19zdGF0cykge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vLFxuICAgIGZpbGVfa2luZCxcbiAgICBqc19zdGF0cy5tb2RlLFxuICAgIGpzX3N0YXRzLm5saW5rLFxuICAgIGpzX3N0YXRzLnVpZCxcbiAgICBqc19zdGF0cy5naWQsXG4gICAganNfc3RhdHMucmRldixcbiAgICBqc19zdGF0cy5zaXplLFxuICAgIGpzX3N0YXRzLmF0aW1lTXMsXG4gICAganNfc3RhdHMubXRpbWVNcyxcbiAgICBqc19zdGF0cy5jdGltZU1zXG4gICk7XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVEZXZpY2VcblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2UoKSB7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZkKGZkLCBmbGFncyl7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLmZkID0gZmQ7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sTm9kZUZkLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbE5vZGVGZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVGZDtcblxuTWxOb2RlRmQucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCxsZW58MCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxhLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgICByZXR1cm4gcmVhZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVGZCgpe1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vUmVxdWlyZXM6IE1sTm9kZUZkXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIGlmKGZsYWdzLm5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgdmFyIGZkMiA9IGZzLm9wZW5TeW5jKGZsYWdzLm5hbWUsIFwicnNcIik7XG4gICAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkMiwgZmxhZ3MpO1xuICAgIH0gY2F0Y2goZSkgeyAgfVxuICB9XG4gIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGZsYWdzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpe1xuICByZXR1cm4gKG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIikgPyAobmFtZSArIFwiL1wiKSA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCcvJyk7XG5lbHNlXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gIFwiL3N0YXRpY1wiO1xuY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2goY2FtbF9jdXJyZW50X2Rpcik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3Jvb3Rcbi8vUmVxdWlyZXM6IHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfZ2V0X3Jvb3QocGF0aCl7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCJ9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9IGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHwgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuXG4vL1Byb3ZpZGVzOiBNbEZpbGVcbmZ1bmN0aW9uIE1sRmlsZSgpeyAgfVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHJldHVybiBbXCJcIiwgcGF0aC5zdWJzdHJpbmcoMSldO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdpbjMyKHBhdGgpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iM2ZjYzI0NWZiMjU1Mzk5MDllZjFkNWVhYTAxZGJmOTJlMTY4NjMzL2xpYi9wYXRoLmpzI0w1NlxuICAgIHZhciBzcGxpdERldmljZVJlID0gL14oW2EtekEtWl06fFtcXFxcL117Mn1bXlxcXFwvXStbXFxcXC9dK1teXFxcXC9dKyk/KFtcXFxcL10pPyhbXFxzXFxTXSo/KSQvO1xuICAgIHZhciByZXN1bHQgPSBzcGxpdERldmljZVJlLmV4ZWMocGF0aCk7XG4gICAgdmFyIGRldmljZSA9IHJlc3VsdFsxXSB8fCAnJztcbiAgICB2YXIgaXNVbmMgPSBCb29sZWFuKGRldmljZSAmJiBkZXZpY2UuY2hhckF0KDEpICE9PSAnOicpO1xuXG4gICAgLy8gVU5DIHBhdGhzIGFyZSBhbHdheXMgYWJzb2x1dGVcbiAgICBpZiAoQm9vbGVhbihyZXN1bHRbMl0gfHwgaXNVbmMpKSB7XG4gICAgICB2YXIgcm9vdCA9IChyZXN1bHRbMV0gfHwgJycpO1xuICAgICAgdmFyIHNlcCA9IChyZXN1bHRbMl0gfHwgJycpO1xuICAgICAgcmV0dXJuIFtyb290LCBwYXRoLnN1YnN0cmluZyhyb290Lmxlbmd0aCArIHNlcC5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4zMiA6IHBvc2l4O1xuICB9XG4gIGVsc2UgcmV0dXJuIHBvc2l4XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoIChuYW1lKSB7XG4gIG5hbWU9Y2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmKCAhcGF0aF9pc19hYnNvbHV0ZShuYW1lKSApXG4gICAgbmFtZSA9IGNhbWxfY3VycmVudF9kaXIgKyBuYW1lO1xuICB2YXIgY29tcDAgPSBwYXRoX2lzX2Fic29sdXRlKG5hbWUpO1xuICB2YXIgY29tcCA9IGNvbXAwWzFdLnNwbGl0KFwiL1wiKTtcbiAgdmFyIG5jb21wID0gW11cbiAgZm9yKHZhciBpID0gMDsgaTxjb21wLmxlbmd0aDsgaSsrKXtcbiAgICBzd2l0Y2goY29tcFtpXSl7XG4gICAgY2FzZSBcIi4uXCI6IGlmKG5jb21wLmxlbmd0aD4xKSBuY29tcC5wb3AoKTsgYnJlYWs7XG4gICAgY2FzZSBcIi5cIjogYnJlYWs7XG4gICAgY2FzZSBcIlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gcGF0aC5qb2luKFwiL1wiKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpO1xuICB2YXIgcmVzO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZihuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09IDBcbiAgICAgICAmJiAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKSlcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gIH1cbiAgaWYoICFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGRpcikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfYV9kaXIobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmlsZV9leGlzdHNcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19maWxlX2V4aXN0cyAobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9hX2RpciwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLnJlYWRkaXIocm9vdC5yZXN0KTtcbiAgdmFyIGwgPSBuZXcgQXJyYXkoYS5sZW5ndGggKyAxKTtcbiAgbFswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKVxuICAgIGxbaSsxXSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYVtpXSk7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW1vdmVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgb2sgPSByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0KTtcbiAgaWYob2sgPT0gMCkgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiBhPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVuYW1lKG8sbil7XG4gIHZhciBvX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShvKTtcbiAgdmFyIG5fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG4pO1xuICBpZihvX3Jvb3QuZGV2aWNlICE9IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZighb19yb290LmRldmljZS5yZW5hbWUpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm8gaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfc3lzX21rZGlyKG5hbWUsIHBlcm0pe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QscGVybSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vdF9hX2RpclxuZnVuY3Rpb24gY2FtbF9zeXNfcm1kaXIobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndixhcmduKXtcbiAgcmV0dXJuIGNhbWxfYmFfbWFwX2ZpbGUoYXJndlswXSxhcmd2WzFdLGFyZ3ZbMl0sYXJndlszXSxhcmd2WzRdLGFyZ3ZbNV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlX2V4dGVyblxuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZV9leHRlcm4obmFtZSxjb250ZW50KXtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKVxuICAgIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZighZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCkgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICAgIGdsb2JhbFRoaXMuY2FtbF9mc190bXAucHVzaCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCAoKXtcbiAgdmFyIHRtcD1nbG9iYWxUaGlzLmNhbWxfZnNfdG1wXG4gIGlmKHRtcCl7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKyl7XG4gICAgICBqc29vX2NyZWF0ZV9maWxlKHRtcFtpXS5uYW1lLHRtcFtpXS5jb250ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlID0ganNvb19jcmVhdGVfZmlsZTtcbiAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKCEgcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LGNvbnRlbnQpO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9maWxlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgbmFtZSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk7XG4gIHZhciBjb250ZW50ID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjb250ZW50KTtcbiAgcmV0dXJuIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSwgY29udGVudCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWFkX2ZpbGVfY29udGVudCAobmFtZSkge1xuICB2YXIgbmFtZSA9ICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKT9jYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpOm5hbWU7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKDAsYnVmLDAsbGVuKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYnVmKVxuICB9XG4gIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF9nZXR0aW1lb2ZkYXlcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkge1xuICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF90aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nbXRpbWVcbi8vQWxpYXM6IHVuaXhfZ210aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ210aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0VVRDU2Vjb25kcygpLCBkLmdldFVUQ01pbnV0ZXMoKSwgZC5nZXRVVENIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXRlKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIGZhbHNlIHwgMCAvKiBmb3IgVVRDIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpcyBmYWxzZSAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXREYXRlKCksIGQuZ2V0TW9udGgoKSwgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWt0aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X21rdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X21rdGltZSh0bSl7XG4gIHZhciBkID0gKG5ldyBEYXRlKHRtWzZdKzE5MDAsdG1bNV0sdG1bNF0sdG1bM10sdG1bMl0sdG1bMV0pKS5nZXRUaW1lKCk7XG4gIHZhciB0ID0gTWF0aC5mbG9vcihkIC8gMTAwMCk7XG4gIHZhciB0bTIgPSBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhcnR1cCBjb25zdFxuLy9BbGlhczogd2luX3N0YXJ0dXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGFydHVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NsZWFudXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9jbGVhbnVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQgY29uc3Rcbi8vQWxpYXM6IHdpbl9oYW5kbGVfZmRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG4gICAgcmV0dXJuIHR0eS5pc2F0dHkoZmlsZURlc2NyaXB0b3IpPzE6MDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBtYWtlX3VuaXhfZXJyX2FyZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgdW5peF9lcnJvciA9IFtcbiAgLyogPT09VW5peC5lcnJvcj09PVxuICAgKlxuICAgKiBUaGlzIGFycmF5IGlzIGluIG9yZGVyIG9mIHRoZSB2YXJpYW50IGluIE9DYW1sXG4gICAqL1xuICBcIkUyQklHXCIsIFwiRUFDQ0VTXCIsIFwiRUFHQUlOXCIsIFwiRUJBREZcIiwgXCJFQlVTWVwiLCBcIkVDSElMRFwiLCBcIkVERUFETEtcIiwgXCJFRE9NXCIsXG4gIFwiRUVYSVNUXCIsIFwiRUZBVUxUXCIsIFwiRUZCSUdcIiwgXCJFSU5UUlwiLCBcIkVJTlZBTFwiLCBcIkVJT1wiLCBcIkVJU0RJUlwiLCBcIkVNRklMRVwiLFxuICBcIkVNTElOS1wiLCBcIkVOQU1FVE9PTE9OR1wiLCBcIkVORklMRVwiLCBcIkVOT0RFVlwiLCBcIkVOT0VOVFwiLCBcIkVOT0VYRUNcIiwgXCJFTk9MQ0tcIixcbiAgXCJFTk9NRU1cIiwgXCJFTk9TUENcIiwgXCJFTk9TWVNcIiwgXCJFTk9URElSXCIsIFwiRU5PVEVNUFRZXCIsIFwiRU5PVFRZXCIsIFwiRU5YSU9cIixcbiAgXCJFUEVSTVwiLCBcIkVQSVBFXCIsIFwiRVJBTkdFXCIsIFwiRVJPRlNcIiwgXCJFU1BJUEVcIiwgXCJFU1JDSFwiLCBcIkVYREVWXCIsIFwiRVdPVUxEQkxPQ0tcIixcbiAgXCJFSU5QUk9HUkVTU1wiLCBcIkVBTFJFQURZXCIsIFwiRU5PVFNPQ0tcIiwgXCJFREVTVEFERFJSRVFcIiwgXCJFTVNHU0laRVwiLFxuICBcIkVQUk9UT1RZUEVcIiwgXCJFTk9QUk9UT09QVFwiLCBcIkVQUk9UT05PU1VQUE9SVFwiLCBcIkVTT0NLVE5PU1VQUE9SVFwiLFxuICBcIkVPUE5PVFNVUFBcIiwgXCJFUEZOT1NVUFBPUlRcIiwgXCJFQUZOT1NVUFBPUlRcIiwgXCJFQUREUklOVVNFXCIsIFwiRUFERFJOT1RBVkFJTFwiLFxuICBcIkVORVRET1dOXCIsIFwiRU5FVFVOUkVBQ0hcIiwgXCJFTkVUUkVTRVRcIiwgXCJFQ09OTkFCT1JURURcIiwgXCJFQ09OTlJFU0VUXCIsIFwiRU5PQlVGU1wiLFxuICBcIkVJU0NPTk5cIiwgXCJFTk9UQ09OTlwiLCBcIkVTSFVURE9XTlwiLCBcIkVUT09NQU5ZUkVGU1wiLCBcIkVUSU1FRE9VVFwiLCBcIkVDT05OUkVGVVNFRFwiLFxuICBcIkVIT1NURE9XTlwiLCBcIkVIT1NUVU5SRUFDSFwiLCBcIkVMT09QXCIsIFwiRU9WRVJGTE9XXCJcbl07XG5mdW5jdGlvbiBtYWtlX3VuaXhfZXJyX2FyZ3MoY29kZSwgc3lzY2FsbCwgcGF0aCwgZXJybm8pIHtcbiAgdmFyIHZhcmlhbnQgPSB1bml4X2Vycm9yLmluZGV4T2YoY29kZSk7XG4gIGlmICh2YXJpYW50IDwgMCkge1xuICAgIC8vIERlZmF1bHQgaWYgdW5kZWZpbmVkXG4gICAgaWYgKGVycm5vID09IG51bGwpIHtcbiAgICAgIGVycm5vID0gLTk5OTlcbiAgICB9XG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgdmFyaWFudHMsIGZhbGxiYWNrIHRvIEVVTktOT1dORVJSKGludClcbiAgICB2YXJpYW50ID0gQkxPQ0soMCwgZXJybm8pO1xuICB9XG4gIHZhciBhcmdzID0gW1xuICAgIHZhcmlhbnQsXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoc3lzY2FsbCB8fCBcIlwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoIHx8IFwiXCIpXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9zdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X3N0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9sc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5sc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbHN0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubHN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9sc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfbHN0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ta2RpclxuZnVuY3Rpb24gY2FtbF91bml4X21rZGlyKG5hbWUsIHBlcm0pIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ta2Rpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbWtkaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LCBwZXJtLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JtZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcm1kaXIobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJtZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ybWRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ybWRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zeW1saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBzcmNfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHNyYyk7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmKHNyY19yb290LmRldmljZSAhPSBkc3Rfcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBjYW5ub3Qgc3ltbGluayBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtc1wiKTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2Uuc3ltbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBzcmNfcm9vdC5kZXZpY2Uuc3ltbGluayh0b19kaXIsIHNyY19yb290LnJlc3QsIGRzdF9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQodW5pdCkge1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCl7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0cHd1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHB3dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0cHd1aWQodW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsodW5pdCkge1xuICByZXR1cm4gZnNfbm9kZV9zdXBwb3J0ZWQoKT8xOjBcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlciA6IGRpcl9oYW5kbGUsIHBhdGg6IHBhdGggfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfcmVhZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSkge1xuICB2YXIgZW50cnk7XG4gIHRyeSB7XG4gICAgICBlbnRyeSA9IGRpcl9oYW5kbGUucG9pbnRlci5yZWFkU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJyZWFkZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGVudHJ5Lm5hbWUpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICAgIGRpcl9oYW5kbGUucG9pbnRlci5jbG9zZVN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3Jld2luZGRpclxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyLCBjYW1sX3VuaXhfb3BlbmRpclxuLy9BbGlhczogdW5peF9yZXdpbmRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZXdpbmRkaXIoZGlyX2hhbmRsZSkge1xuICBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG4gIHZhciBuZXdfZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKGRpcl9oYW5kbGUucGF0aCk7XG4gIGRpcl9oYW5kbGUucG9pbnRlciA9IG5ld19kaXJfaGFuZGxlLnBvaW50ZXI7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGZpcnN0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9vcGVuZGlyLCBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRmaXJzdFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRmaXJzdChwYXRoKSB7XG4gIC8vIFRoZSBXaW5kb3dzIGNvZGUgYWRkcyB0aGlzIGdsb2IgdG8gdGhlIHBhdGgsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0XG4gIHZhciBwYXRoX2pzID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocGF0aCk7XG4gIHBhdGhfanMgPSBwYXRoX2pzLnJlcGxhY2UoLyhefFtcXFxcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgY29uc3Rcbi8vQWxpYXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgKCkge3JldHVybiAwO31cblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBNbEZha2VEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIE1sRmFrZUZkLCBjYW1sX2NyZWF0ZV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9hcnJheSwgY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzXG5mdW5jdGlvbiBNbEZha2VEZXZpY2UgKHJvb3QsIGYpIHtcbiAgdGhpcy5jb250ZW50PXt9O1xuICB0aGlzLnJvb3QgPSByb290O1xuICB0aGlzLmxvb2t1cEZ1biA9IGY7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jcmVhdGVfZGlyX2lmX25lZWRlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIHJlcyA9IFwiXCI7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICBpZih0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgdGhpcy5jb250ZW50W3Jlc10gPSBTeW1ib2woXCJkaXJlY3RvcnlcIik7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuc2xhc2ggPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpP25hbWU6KG5hbWUgKyBcIi9cIik7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYoIXRoaXMuY29udGVudFtuYW1lXSAmJiB0aGlzLmxvb2t1cEZ1bikge1xuICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucm9vdCksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSkpO1xuICAgIGlmKHJlcyAhPT0gMCkge1xuICAgICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICAgIHRoaXMuY29udGVudFtuYW1lXT1uZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICB9XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0pIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFRVhJU1RcIiwgXCJta2RpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBGaWxlIGV4aXN0c1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICBwYXJlbnQgPSAocGFyZW50ICYmIHBhcmVudFsxXSkgfHwgJyc7XG4gIGlmKCF0aGlzLmV4aXN0cyhwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQodGhpcy5zbGFzaChuYW1lKSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIGlmKG4ubWF0Y2gocikpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RFTVBUWVwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIjogRGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICB9XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIHZhciBzZWVuID0ge31cbiAgdmFyIGEgPSBbXTtcbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIHZhciBtID0gbi5tYXRjaChyKTtcbiAgICBpZihtICYmICFzZWVuW21bMV1dKSB7c2VlblttWzFdXSA9IHRydWU7IGEucHVzaChtWzFdKX1cbiAgfVxuICByZXR1cm4gYTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuXG4gIHZhciBhID0gdGhpcy5yZWFkZGlyKG5hbWUpO1xuICB2YXIgYyA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHJldHVybiB7IHJlYWRTeW5jIDogKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYykge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGkgPT0gYS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBlbnRyeSA9IGFbaV07XG4gICAgaSsrO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5IH1cbiAgfSlcbiAgICAsIGNsb3NlU3luYzogKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGMgPSB0cnVlO1xuICAgICAgYSA9IFtdO1xuICAgIH0pXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICBpZihuYW1lID09IFwiXCIpICByZXR1cm4gdHJ1ZTtcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVfc2xhc2hdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlZ2lzdGVyPSBmdW5jdGlvbiAobmFtZSxjb250ZW50KXtcbiAgdmFyIGZpbGU7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lXSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgaWYoY2FtbF9pc19tbF9ieXRlcyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gIGlmKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2FycmF5KGNvbnRlbnQpKTtcbiAgZWxzZSBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50LnRvU3RyaW5nKSB7XG4gICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoY29udGVudC50b1N0cmluZygpKSk7XG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgfVxuICBpZihmaWxlKXtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IGZpbGU7XG4gIH1cbiAgZWxzZSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiByZWdpc3RlcmluZyBmaWxlIHdpdGggaW52YWxpZCBjb250ZW50IHR5cGVcIik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VEZXZpY2VcblxuLy9Qcm92aWRlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogTWxGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuTWxGYWtlRmlsZS5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB2YXIgb2xkID0gdGhpcy5kYXRhO1xuICB0aGlzLmRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgbGVuKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgdmFyIG9sZF9kYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMuZGF0YSA9IG5ld19zdHI7XG4gICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICB9XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgdGhpcy5kYXRhLCBvZmZzZXQsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIGxlbiA9IGNsZW4gLSBvZmZzZXQ7XG4gIH1cbiAgaWYobGVuKSB7XG4gICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gICAgY2FtbF9ibGl0X2J5dGVzKHRoaXMuZGF0YSwgb2Zmc2V0LCBkYXRhLCAwLCBsZW4pO1xuICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgfVxuICByZXR1cm4gbGVuXG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmRfb3V0KGZkLGZsYWdzKSB7XG4gIE1sRmFrZUZpbGUuY2FsbCh0aGlzLCBjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gIHRoaXMubG9nID0gKGZ1bmN0aW9uIChzKSB7IHJldHVybiAwIH0pO1xuICBpZihmZCA9PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZztcbiAgZWxzZSBpZihmZCA9PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nXG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7IHJldHVybiAwIH1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMubG9nKSB7XG4gICAgaWYobGVuID4gMFxuICAgICAgICYmIHBvcyA+PSAwXG4gICAgICAgJiYgcG9zK2xlbiA8PSBidWYubGVuZ3RoXG4gICAgICAgJiYgYnVmW3BvcytsZW4tMV0gPT0gMTApXG4gICAgICBsZW4gLS07XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgdmFyIHNyYyA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgdGhpcy5sb2coc3JjLnRvVXRmMTYoKSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgaXMgd3JpdGUgb25seVwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG9nID0gdW5kZWZpbmVkO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmQobmFtZSwgZmlsZSxmbGFncykge1xuICB0aGlzLmZpbGUgPSBmaWxlO1xuICB0aGlzLm5hbWUgPSBuYW1lO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5cbk1sRmFrZUZkLnByb3RvdHlwZS5lcnJfY2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5hbWUgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLmxlbmd0aCAoKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLndyaXRlKG9mZnNldCxidWYscG9zLGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLnJlYWQob2Zmc2V0LCBidWYsIHBvcywgbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maWxlID0gdW5kZWZpbmVkO1xufVxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAqL1xuLyogIGVuIEF1dG9tYXRpcXVlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCAgICAqL1xuLyogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aXRoICAgICAqL1xuLyogIHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIC4uL0xJQ0VOU0UuICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKiAkSWQ6IGxleGluZy5jIDYwNDUgMjAwNC0wMS0wMSAxNjo0Mjo0M1ogZG9saWdleiAkICovXG5cbi8qIFRoZSB0YWJsZS1kcml2ZW4gYXV0b21hdG9uIGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXguICovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2xleF9hcnJheShzKSB7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpO1xuICB2YXIgbCA9IHMubGVuZ3RoIC8gMjtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgIGFbaV0gPSAocy5jaGFyQ29kZUF0KDIgKiBpKSB8IChzLmNoYXJDb2RlQXQoMiAqIGkgKyAxKSA8PCA4KSkgPDwgMTYgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHJldHVybiAtYmFzZS0xO1xuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX21lbShzLCBpLCBtZW0sIGN1cnJfcG9zKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm47XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuIDtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV9jb2RlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrX2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrX2NvZGVdKTtcbiAgICB0YmwubGV4X2NoZWNrX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrX2NvZGVdKTtcbiAgICB0YmwubGV4X3RyYW5zX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zX2NvZGVdKTtcbiAgICB0YmwubGV4X2RlZmF1bHRfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbCkgdGJsLmxleF9jb2RlID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh0YmxbbGV4X2NvZGVdKTtcblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFzZV9jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICByZXR1cm4gLWJhc2UtMTtcbiAgICB9XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFja3Rya19jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZSA7XG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBJZiBzb21lIHRyYW5zaXRpb24sIGdldCBhbmQgcGVyZm9ybSBtZW1vcnkgbW92ZXMgKi9cbiAgICAgIHZhciBiYXNlX2NvZGUgPSB0YmwubGV4X2Jhc2VfY29kZVtwc3RhdGVdLCBwY19vZmY7XG4gICAgICBpZiAodGJsLmxleF9jaGVja19jb2RlW2Jhc2VfY29kZSArIGNdID09IHBzdGF0ZSlcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF90cmFuc19jb2RlW2Jhc2VfY29kZSArIGNdO1xuICAgICAgZWxzZVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X2RlZmF1bHRfY29kZVtwc3RhdGVdO1xuICAgICAgaWYgKHBjX29mZiA+IDApXG4gICAgICAgIGNhbWxfbGV4X3J1bl9tZW1cbiAgICAgICh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsdG9yZWFkKXtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNDA5Nik7XG4gIGlmKHRvcmVhZCA8IDApe1xuICAgIHdoaWxlKHRydWUpe1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCxidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgYnJlYWs7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUodG9yZWFkID4gMCkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCwgKHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkKSk7XG4gICAgICBpZihyZWFkID09IDApIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgICAgdG9yZWFkIC09IHJlYWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLG9mcyxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVRyYW5zZm9ybVxudmFyIGNhbWxfTUQ1VHJhbnNmb3JtID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkICh4LCB5KSB7IHJldHVybiAoeCArIHkpIHwgMDsgfVxuICBmdW5jdGlvbiB4eChxLGEsYix4LHMsdCkge1xuICAgIGEgPSBhZGQoYWRkKGEsIHEpLCBhZGQoeCwgdCkpO1xuICAgIHJldHVybiBhZGQoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBmZihhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBoaChhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpOyB9XG4gIGZ1bmN0aW9uIGlpKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLCBiID0gd1sxXSwgYyA9IHdbMl0sIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDcsIDB4RDc2QUE0NzgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDFdLCAxMiwgMHhFOEM3Qjc1Nik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE3LCAweDI0MjA3MERCKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyAzXSwgMjIsIDB4QzFCRENFRUUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA3LCAweEY1N0MwRkFGKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA1XSwgMTIsIDB4NDc4N0M2MkEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNywgMHhBODMwNDYxMyk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgN10sIDIyLCAweEZENDY5NTAxKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNywgMHg2OTgwOThEOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOV0sIDEyLCAweDhCNDRGN0FGKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTcsIDB4RkZGRjVCQjEpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTFdLCAyMiwgMHg4OTVDRDdCRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDcsIDB4NkI5MDExMjIpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbMTNdLCAxMiwgMHhGRDk4NzE5Myk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE3LCAweEE2Nzk0MzhFKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzE1XSwgMjIsIDB4NDlCNDA4MjEpO1xuXG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDUsIDB4RjYxRTI1NjIpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDZdLCA5LCAweEMwNDBCMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1RTVBNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDBdLCAyMCwgMHhFOUI2QzdBQSk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDUsIDB4RDYyRjEwNUQpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTBdLCA5LCAweDAyNDQxNDUzKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTQsIDB4RDhBMUU2ODEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDRdLCAyMCwgMHhFN0QzRkJDOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDUsIDB4MjFFMUNERTYpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTRdLCA5LCAweEMzMzcwN0Q2KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTQsIDB4RjRENTBEODcpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDhdLCAyMCwgMHg0NTVBMTRFRCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4QTlFM0U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDJdLCA5LCAweEZDRUZBM0Y4KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTQsIDB4Njc2RjAyRDkpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMTJdLCAyMCwgMHg4RDJBNEM4QSk7XG5cbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNCwgMHhGRkZBMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOF0sIDExLCAweDg3NzFGNjgxKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTYsIDB4NkQ5RDYxMjIpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTRdLCAyMywgMHhGREU1MzgwQyk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDQsIDB4QTRCRUVBNDQpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDRdLCAxMSwgMHg0QkRFQ0ZBOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE2LCAweEY2QkI0QjYwKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzEwXSwgMjMsIDB4QkVCRkJDNzApO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA0LCAweDI4OUI3RUM2KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyAwXSwgMTEsIDB4RUFBMTI3RkEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNiwgMHhENEVGMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNl0sIDIzLCAweDA0ODgxRDA1KTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNCwgMHhEOUQ0RDAzOSk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMl0sIDExLCAweEU2REI5OUU1KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTYsIDB4MUZBMjdDRjgpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDJdLCAyMywgMHhDNEFDNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNiwgMHhGNDI5MjI0NCk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgN10sIDEwLCAweDQzMkFGRjk3KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTUsIDB4QUI5NDIzQTcpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDVdLCAyMSwgMHhGQzkzQTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1QjU5QzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDNdLCAxMCwgMHg4RjBDQ0M5Mik7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE1LCAweEZGRUZGNDdEKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyAxXSwgMjEsIDB4ODU4NDVERDEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA2LCAweDZGQTg3RTRGKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4RkUyQ0U2RTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNSwgMHhBMzAxNDMxNCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsxM10sIDIxLCAweDRFMDgxMUExKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNiwgMHhGNzUzN0U4Mik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMV0sIDEwLCAweEJEM0FGMjM1KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTUsIDB4MkFEN0QyQkIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDldLCAyMSwgMHhFQjg2RDM5MSk7XG5cbiAgICB3WzBdID0gYWRkKGEsIHdbMF0pO1xuICAgIHdbMV0gPSBhZGQoYiwgd1sxXSk7XG4gICAgd1syXSA9IGFkZChjLCB3WzJdKTtcbiAgICB3WzNdID0gYWRkKGQsIHdbM10pO1xuICB9fSkoKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtsZW46MCxcbiAgICAgICAgICB3Om5ldyBVaW50MzJBcnJheShbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3Nl0pLFxuICAgICAgICAgIGIzMjpiMzIsXG4gICAgICAgICAgYjg6Yjh9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVVcGRhdGUoY3R4LCBpbnB1dCwgaW5wdXRfbGVuKXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICB2YXIgaW5wdXRfcG9zID0gMDtcbiAgY3R4LmxlbiArPSBpbnB1dF9sZW47XG4gIGlmKGluX2J1Zil7XG4gICAgdmFyIG1pc3NpbmcgPSA2NCAtIGluX2J1ZjtcbiAgICBpZihpbnB1dF9sZW4gPCBtaXNzaW5nKSB7XG4gICAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsaW5wdXRfbGVuKSxpbl9idWYpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxtaXNzaW5nKSxpbl9idWYpO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gbWlzc2luZztcbiAgICBpbnB1dF9wb3MgKz0gbWlzc2luZztcbiAgfVxuICB3aGlsZShpbnB1dF9sZW4gPj0gNjQpe1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIDY0KSwgMCk7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSA2NDtcbiAgICBpbnB1dF9wb3MgKz0gNjQ7XG4gIH1cbiAgaWYoaW5wdXRfbGVuKVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIGN0eC5iOFtpbl9idWZdID0gMHg4MDtcbiAgaW5fYnVmICsrO1xuICBpZihpbl9idWYgPiA1Nikge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDY0OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH1cbiAgY3R4LmIzMlsxNF0gPSBjdHgubGVuIDw8IDM7XG4gIGN0eC5iMzJbMTVdID0gKGN0eC5sZW4gPj4gMjkpICYgMHgxRkZGRkZGRjtcbiAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXG4gICAgICB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweEZGO1xuICByZXR1cm4gdDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2J5dGVzKHMsIG9mcywgbGVuKSB7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpO1xuICBjYW1sX01ENVVwZGF0ZShjdHgsYS5zdWJhcnJheShvZnMsIG9mcyArIGxlbiksIGxlbik7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZSkgZmlsZS5jbG9zZSgpO1xuICBkZWxldGUgY2FtbF9zeXNfZmRzW2ZkXTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSxpZHgpIHtcbiAgaWYoaWR4ID09IHVuZGVmaW5lZCl7XG4gICAgaWR4ID0gY2FtbF9zeXNfZmRzLmxlbmd0aDtcbiAgfVxuICBjYW1sX3N5c19mZHNbaWR4XSA9IGZpbGU7XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbiAobmFtZSwgZmxhZ3MsIF9wZXJtcykge1xuICB2YXIgZiA9IHt9O1xuICB3aGlsZShmbGFncyl7XG4gICAgc3dpdGNoKGZsYWdzWzFdKXtcbiAgICBjYXNlIDA6IGYucmRvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDE6IGYud3Jvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDI6IGYuYXBwZW5kID0gMTticmVhaztcbiAgICBjYXNlIDM6IGYuY3JlYXRlID0gMTticmVhaztcbiAgICBjYXNlIDQ6IGYudHJ1bmNhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNTogZi5leGNsID0gMTsgYnJlYWs7XG4gICAgY2FzZSA2OiBmLmJpbmFyeSA9IDE7YnJlYWs7XG4gICAgY2FzZSA3OiBmLnRleHQgPSAxO2JyZWFrO1xuICAgIGNhc2UgODogZi5ub25ibG9jayA9IDE7YnJlYWs7XG4gICAgfVxuICAgIGZsYWdzPWZsYWdzWzJdO1xuICB9XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCxmKTtcbiAgcmV0dXJuIGNhbWxfc3lzX29wZW5faW50ZXJuYWwgKGZpbGUsIHVuZGVmaW5lZCk7XG59XG4oZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBuZXcgTWxGYWtlRmRfb3V0KGZkLCBmbGFncylcbiAgfVxuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMCx7cmRvbmx5OjEsYWx0bmFtZTpcIi9kZXYvc3RkaW5cIixpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDApO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMSx7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDEpO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMix7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDIpO1xufSkoKVxuXG5cbi8vIG9jYW1sIENoYW5uZWxzXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lKGNoYW5pZCwgbmFtZSkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5uYW1lID0gbmFtZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbHNcbnZhciBjYW1sX21sX2NoYW5uZWxzID0gbmV3IEFycmF5KCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0IChjYXB0dXJlZCwgaW50byl7XG4gIHZhciB0b19yZXN0b3JlID0gY2FtbF9tbF9jaGFubmVsX2dldChjYXB0dXJlZCk7XG4gIHZhciBuZXdfID0gY2FtbF9tbF9jaGFubmVsX2dldChpbnRvKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSBuZXdfOyAvLyBYWFhcbiAgcmV0dXJuIHRvX3Jlc3RvcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZSAoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpe1xuICBjYW1sX21sX2NoYW5uZWxzW2NhcHR1cmVkXSA9IHRvX3Jlc3RvcmU7IC8vIFhYWFxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX2dldChpZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tpZF07IC8vIFhYWFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGJ1ZmZlcmVkID0gKGZpbGUuZmxhZ3MuYnVmZmVyZWQgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIGJ1ZmZlcmVkOmJ1ZmZlcmVkXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiAoZmQpICB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcl9tYXg6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkgPSBtb2RlXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pc19iaW5hcnlfbW9kZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZihjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9zeXNfY2xvc2UoY2hhbi5mZCk7XG4gICAgY2hhbi5mZCA9IC0xO1xuICAgIGNoYW4uYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm91dHB1dCA9IChmdW5jdGlvbiAocykge2Yocyl9KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbChjaGFuaWQsZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZmlsbCAoY2hhbikge1xuICBpZihjaGFuLnJlZmlsbCAhPSBudWxsKXtcbiAgICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgICB2YXIgc3RyX2EgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhzdHIpO1xuICAgIGlmIChzdHJfYS5sZW5ndGggPT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKXtcbiAgICAgICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpO1xuICAgICAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgICAgIGNoYW4uYnVmZmVyID0gYjtcbiAgICAgIH1cbiAgICAgIGNoYW4uYnVmZmVyLnNldChzdHJfYSxjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgICAgY2hhbi5vZmZzZXQgKz0gc3RyX2EubGVuZ3RoO1xuICAgICAgY2hhbi5idWZmZXJfbWF4ICs9IHN0cl9hLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCBjaGFuLmJ1ZmZlcl9tYXgsIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2JpZ2FycmF5IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmxvY2sgKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYobCA8PSBhdmFpbCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBsO1xuICB9XG4gIGVsc2UgaWYoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGF2YWlsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBhdmFpbDtcbiAgICBuID0gYXZhaWw7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgIGlmKG4gPiBhdmFpbCkgbiA9IGF2YWlsO1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgZnVuY3Rpb24gYmxvY2soYnVmZmVyLCBvZmZzZXQsIG4pIHtcbiAgICB2YXIgciA9IDA7XG4gICAgd2hpbGUociA8IG4pe1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCtyXSA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICAgICAgY2hhbi5idWZmZXJfY3VycisrO1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB2YXIgciA9IGJsb2NrKGhlYWRlciwgMCwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgaWYociA9PSAwKVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgZWxzZSBpZiAociA8IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3RcIik7XG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChjYW1sX2J5dGVzX29mX2FycmF5KGhlYWRlciksIDApO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgYnVmLnNldChoZWFkZXIsMCk7XG4gIHZhciByID0gYmxvY2soYnVmLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUsIGxlbilcbiAgaWYociA8IGxlbilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3QgXCIgKyByICsgXCIgIFwiICsgbGVuKTtcbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcChjKSB7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlKGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgdmFyIHJlcyA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2NoYXIsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICByZXMgPSAocmVzIDw8IDgpICsgY2FtbF9tbF9pbnB1dF9jaGFyKGNoYW5pZCkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYocG9zID49IGNoYW4ub2Zmc2V0IC0gY2hhbi5idWZmZXJfbWF4XG4gICAgICYmIHBvcyA8PSBjaGFuLm9mZnNldFxuICAgICAmJiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5KSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQscG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbl82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3Bvc19pbihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCAtIChjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjYW1sX3Bvc19pbihjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIHAgPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBkbyB7XG4gICAgaWYocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPiAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyKSwwKTtcbiAgICAgICAgcCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICB9XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZfbWF4ID0gY2hhbi5idWZmZXJfbWF4O1xuICAgICAgY2FtbF9yZWZpbGwgKGNoYW4pO1xuICAgICAgaWYocHJldl9tYXggPT0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPSAxMCk7XG4gIHJldHVybiAocCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9mbHVzaFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXJfY3VyciA9PSAwKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5vdXRwdXQpIHtcbiAgICBjaGFuLm91dHB1dChjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgfVxuICBjaGFuLm9mZnNldCArPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X3RhXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBvdXRwdXQgdG8gYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiXG4gIH1cbiAgc3dpdGNoKGNoYW4uYnVmZmVyZWQpe1xuICBjYXNlIDA6IC8vIFVuYnVmZmVyZWRcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVha1xuICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICB2YXIgaWQgPSBidWZmZXIubGFzdEluZGV4T2YoMTApXG4gICAgaWYoaWQgPCAwKSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoMCwgaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGlkICsgMTtcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXksIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX291dChjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoY2FtbF9wb3Nfb3V0KGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lzX2J1ZmZlcmVkKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLmJ1ZmZlcmVkID8gMSA6IDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGNoYW5pZCx2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmKCF2KSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiAwXG59XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXggKilcblxudHlwZSBwb3NpdGlvbiA9IHtcbiAgcG9zX2ZuYW1lIDogc3RyaW5nO1xuICBwb3NfbG51bSA6IGludDtcbiAgcG9zX2JvbCA6IGludDtcbiAgcG9zX2NudW0gOiBpbnQ7XG59XG5cbmxldCBkdW1teV9wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMDtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gLTE7XG59XG5cbnR5cGUgbGV4YnVmID1cbiAgeyByZWZpbGxfYnVmZiA6IGxleGJ1ZiAtPiB1bml0O1xuICAgIG11dGFibGUgbGV4X2J1ZmZlciA6IGJ5dGVzO1xuICAgIG11dGFibGUgbGV4X2J1ZmZlcl9sZW4gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfYWJzX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9hY3Rpb24gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfZW9mX3JlYWNoZWQgOiBib29sO1xuICAgIG11dGFibGUgbGV4X21lbSA6IGludCBhcnJheTtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wIDogcG9zaXRpb247XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wIDogcG9zaXRpb247XG4gIH1cblxudHlwZSBsZXhfdGFibGVzID1cbiAgeyBsZXhfYmFzZTogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHQ6IHN0cmluZztcbiAgICBsZXhfdHJhbnM6IHN0cmluZztcbiAgICBsZXhfY2hlY2s6IHN0cmluZztcbiAgICBsZXhfYmFzZV9jb2RlIDogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHRfY29kZSA6IHN0cmluZztcbiAgICBsZXhfdHJhbnNfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY2hlY2tfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY29kZTogc3RyaW5nO31cblxuZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuZXh0ZXJuYWwgY19uZXdfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX25ld19sZXhfZW5naW5lXCJcblxubGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxuXG5sZXQgbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIEludC5taW4gKDIgKiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuID4gbmV3bGVuXG4gICAgICB0aGVuIGZhaWx3aXRoIFwiTGV4aW5nLmxleF9yZWZpbGw6IGNhbm5vdCBncm93IGJ1ZmZlclwiO1xuICAgICAgbGV0IG5ld2J1ZiA9IEJ5dGVzLmNyZWF0ZSBuZXdsZW4gaW5cbiAgICAgICgqIENvcHkgdGhlIHZhbGlkIGRhdGEgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbmV3YnVmIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3Bvcyk7XG4gICAgICBsZXhidWYubGV4X2J1ZmZlciA8LSBuZXdidWZcbiAgICBlbmQ7XG4gICAgKCogUmVhbGxvY2F0aW9uIG9yIG5vdCwgd2UgaGF2ZSBzaGlmdGVkIHRoZSBkYXRhIGxlZnQgYnlcbiAgICAgICBzdGFydF9wb3MgY2hhcmFjdGVyczsgdXBkYXRlIHRoZSBwb3NpdGlvbnMgKilcbiAgICBsZXQgcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleGJ1Zi5sZXhfYWJzX3BvcyArIHM7XG4gICAgbGV4YnVmLmxleF9jdXJyX3BvcyA8LSBsZXhidWYubGV4X2N1cnJfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSAwO1xuICAgIGxleGJ1Zi5sZXhfbGFzdF9wb3MgPC0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIHMgO1xuICAgIGxldCB0ID0gbGV4YnVmLmxleF9tZW0gaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQtMSBkb1xuICAgICAgbGV0IHYgPSB0LihpKSBpblxuICAgICAgaWYgdiA+PSAwIHRoZW5cbiAgICAgICAgdC4oaSkgPC0gdi1zXG4gICAgZG9uZVxuICBlbmQ7XG4gICgqIFRoZXJlIGlzIG5vdyBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gIEJ5dGVzLmJsaXQgYXV4X2J1ZmZlciAwIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiBuO1xuICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuICsgblxuXG5sZXQgemVyb19wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMTtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gMDtcbn1cblxubGV0IGZyb21fZnVuY3Rpb24gPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIGYgPVxuICB7IHJlZmlsbF9idWZmID0gbGV4X3JlZmlsbCBmIChCeXRlcy5jcmVhdGUgNTEyKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDEwMjQ7XG4gICAgbGV4X2J1ZmZlcl9sZW4gPSAwO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSBmYWxzZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IGZyb21fY2hhbm5lbCA/d2l0aF9wb3NpdGlvbnMgaWMgPVxuICBmcm9tX2Z1bmN0aW9uID93aXRoX3Bvc2l0aW9ucyAoZnVuIGJ1ZiBuIC0+IGlucHV0IGljIGJ1ZiAwIG4pXG5cbmxldCBmcm9tX3N0cmluZyA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgcyA9XG4gIHsgcmVmaWxsX2J1ZmYgPSAoZnVuIGxleGJ1ZiAtPiBsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWUpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5vZl9zdHJpbmcgczsgKCogaGF2ZSB0byBtYWtlIGEgY29weSBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnNhZmUtc3RyaW5nIG1vZGUgKilcbiAgICBsZXhfYnVmZmVyX2xlbiA9IFN0cmluZy5sZW5ndGggcztcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gdHJ1ZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IHNldF9wb3NpdGlvbiBsZXhidWYgcG9zaXRpb24gPVxuICBsZXhidWYubGV4X2N1cnJfcCAgPC0ge3Bvc2l0aW9uIHdpdGggcG9zX2ZuYW1lID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2ZuYW1lfTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIHBvc2l0aW9uLnBvc19jbnVtXG5cbmxldCBzZXRfZmlsZW5hbWUgbGV4YnVmIGZuYW1lID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgPC0ge2xleGJ1Zi5sZXhfY3Vycl9wIHdpdGggcG9zX2ZuYW1lID0gZm5hbWV9XG5cbmxldCB3aXRoX3Bvc2l0aW9ucyBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3NcblxubGV0IGxleGVtZSBsZXhidWYgPVxuICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3MgbGVuXG5cbmxldCBzdWJfbGV4ZW1lIGxleGJ1ZiBpMSBpMiA9XG4gIGxldCBsZW4gPSBpMi1pMSBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlblxuXG5sZXQgc3ViX2xleGVtZV9vcHQgbGV4YnVmIGkxIGkyID1cbiAgaWYgaTEgPj0gMCB0aGVuIGJlZ2luXG4gICAgbGV0IGxlbiA9IGkyLWkxIGluXG4gICAgU29tZSAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW4pXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgTm9uZVxuICBlbmRcblxubGV0IHN1Yl9sZXhlbWVfY2hhciBsZXhidWYgaSA9IEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXJfb3B0IGxleGJ1ZiBpID1cbiAgaWYgaSA+PSAwIHRoZW5cbiAgICBTb21lIChCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxuXG5sZXQgbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPVxuICBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgKGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgaSlcblxubGV0IGxleGVtZV9zdGFydCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3AucG9zX2NudW1cbmxldCBsZXhlbWVfZW5kIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19jbnVtXG5cbmxldCBsZXhlbWVfc3RhcnRfcCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3BcbmxldCBsZXhlbWVfZW5kX3AgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3BcblxubGV0IG5ld19saW5lIGxleGJ1ZiA9XG4gIGxldCBsY3AgPSBsZXhidWYubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsZXhidWYubGV4X2N1cnJfcCA8LVxuICAgICAgeyBsY3Agd2l0aFxuICAgICAgICBwb3NfbG51bSA9IGxjcC5wb3NfbG51bSArIDE7XG4gICAgICAgIHBvc19ib2wgPSBsY3AucG9zX2NudW07XG4gICAgICB9XG5cblxuXG4oKiBEaXNjYXJkIGRhdGEgbGVmdCBpbiBsZXhlciBidWZmZXIuICopXG5cbmxldCBmbHVzaF9pbnB1dCBsYiA9XG4gIGxiLmxleF9jdXJyX3BvcyA8LSAwO1xuICBsYi5sZXhfYWJzX3BvcyA8LSAwO1xuICBsZXQgbGNwID0gbGIubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsYi5sZXhfY3Vycl9wIDwtIHt6ZXJvX3BvcyB3aXRoIHBvc19mbmFtZSA9IGxjcC5wb3NfZm5hbWV9O1xuICBsYi5sZXhfYnVmZmVyX2xlbiA8LSAwO1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIjIDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBtb2R1bGUgTGV4aW5nID0gc3RydWN0XG4gICAgKCogT3ZlcnJpZGUgdGhlIExleGluZy5lbmdpbmUgdG8gYXZvaWQgY3JlYXRpbmcgYSBuZXcgcG9zaXRpb24gcmVjb3JkXG4gICAgICAgZWFjaCB0aW1lIGEgcnVsZSBpcyBtYXRjaGVkLiBSZWR1Y2VzIHRvdGFsIHBhcnNlIHRpbWUgYnkgYXJvdW5kIDMwJS5cbiAgICAgICBJZGVhIHN0b2xlbiBmcm9tIHlvanNvbiAqKVxuXG4gICAgaW5jbHVkZSBMZXhpbmdcblxuICAgIGV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcblxuICAgIGxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gICAgICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICAgICAgKCpcbiAgICAgIGlmIHJlc3VsdCA+PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgICAgIGVuZDtcbiAgICAgICopXG4gICAgICByZXN1bHRcbiAgZW5kXG4gIG9wZW4gVG9rZW5zXG5cblxuICBtb2R1bGUgdHlwZSBMZXggPSBzaWdcbiAgICB2YWwgcmVhZCA6IExleGluZy5sZXhidWYgLT4gVG9rZW5zLnRva2VuXG4gIGVuZFxuXG4gIG1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IExleCA9IHN0cnVjdFxuXG4jIDMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxubGV0IF9fb2NhbWxfbGV4X3RhYmxlcyA9IHtcbiAgTGV4aW5nLmxleF9iYXNlID1cbiAgIFwiXFwwMDBcXDAwMFxcMjI5XFwyNTVcXDAxN1xcMDAwXFwyMzJcXDI1NVxcMDAzXFwwMDBcXDIzNFxcMjU1XFwxMjZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMTEzXFwwMDBcXDAwMFxcMDAwXFwwMDFcXDAwMFxcMDAxXFwwMDBcXDAwMlxcMDAwXFwxMjNcXDAwMFxcMjQzXFwyNTVcXDI0NFxcMjU1XFxcbiAgICBcXDI0NVxcMjU1XFwyNDZcXDI1NVxcMjQ3XFwyNTVcXDI0OFxcMjU1XFwyNDlcXDI1NVxcMjUwXFwyNTVcXDI1MVxcMjU1XFwyNTJcXDI1NVxcXG4gICAgXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAzXFwwMDBcXDI1NFxcMjU1XFwwMDNcXDAwMFxcMDAxXFwwMDBcXDAxMVxcMDAwXFwyNTNcXDI1NVxcMjM5XFwyNTVcXDAwM1xcMDAwXFxcbiAgICBcXDAxMFxcMDAwXFwwMTFcXDAwMFxcMDA1XFwwMDBcXDI0MlxcMjU1XFwwMjBcXDAwMFxcMDE5XFwwMDBcXDA0OFxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNjdcXDAwMFxcMDYzXFwwMDBcXDA3NVxcMDAwXFwwODRcXDAwMFxcMjQxXFwyNTVcXDA4NVxcMDAwXFwwODNcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA3NVxcMDAwXFwwNzFcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwOTNcXDAwMFxcMjQwXFwyNTVcXDA5NVxcMDAwXFxcbiAgICBcXDA5M1xcMDAwXFwwODlcXDAwMFxcMDk1XFwwMDBcXDA4NVxcMDAwXFwwODFcXDAwMFxcMDAxXFwwMDBcXDAzMlxcMDAwXFwxNTVcXDAwMFxcXG4gICAgXFwxODZcXDAwMFxcMjA5XFwwMDBcXDIxOVxcMDAwXFwyMjlcXDAwMFxcMjQwXFwwMDBcXDI1MFxcMDAwXFwwMThcXDAwMVxcMDY2XFwwMDFcXFxuICAgIFxcMjM2XFwyNTVcXDIzNVxcMjU1XFwwOTRcXDAwMVxcMTE3XFwwMDFcXDE1NVxcMDAxXFwxNzhcXDAwMVxcMDUzXFwwMDBcXDIzMVxcMjU1XFxcbiAgICBcXDA4OFxcMDAxXFwyNTJcXDI1NVxcMjUzXFwyNTVcXDI1NFxcMjU1XFwwMTRcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9iYWNrdHJrID1cbiAgIFwiXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMDIyXFwwMDBcXDI1NVxcMjU1XFwwMjZcXDAwMFxcMDE3XFwwMDBcXFxuICAgIFxcMDE3XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMThcXDAwMFxcMjU1XFwyNTVcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI1XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDNcXDAwMFxcMjU1XFwyNTVcIjtcbiAgTGV4aW5nLmxleF9kZWZhdWx0ID1cbiAgIFwiXFwwMDFcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg2XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA4OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF90cmFucyA9XG4gICBcIlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDAzXFwwMDBcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMTlcXDAwMFxcMDE4XFwwMDBcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDE1XFwwMDBcXDAxM1xcMDAwXFwwNzFcXDAwMFxcMDAyXFwwMDBcXFxuICAgIFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDE0XFwwMDBcXDA4N1xcMDAwXFwwMTdcXDAwMFxcMDkzXFwwMDBcXDAxNlxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwwODZcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAxMVxcMDAwXFwwNTlcXDAwMFxcMDc3XFwwMDBcXDAwMFxcMDAwXFwwNzdcXDAwMFxcMDA5XFwwMDBcXDAzOFxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDAwMFxcMDAwXFwwMjFcXDAwMFxcMDAwXFwwMDBcXDAyMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA2OVxcMDAwXFwwMzRcXDAwMFxcMDMwXFwwMDBcXDA1MFxcMDAwXFwwNzBcXDAwMFxcMDI1XFwwMDBcXDAyOVxcMDAwXFxcbiAgICBcXDAzM1xcMDAwXFwwMTJcXDAwMFxcMDYwXFwwMDBcXDA0M1xcMDAwXFwwMzFcXDAwMFxcMDM2XFwwMDBcXDAyNFxcMDAwXFwwNTNcXDAwMFxcXG4gICAgXFwwNTFcXDAwMFxcMDM4XFwwMDBcXDAyN1xcMDAwXFwwMzJcXDAwMFxcMDI2XFwwMDBcXDAyOFxcMDAwXFwwMzVcXDAwMFxcMDM3XFwwMDBcXFxuICAgIFxcMDQ0XFwwMDBcXDA0MlxcMDAwXFwwNDVcXDAwMFxcMDIzXFwwMDBcXDA0NlxcMDAwXFwwMjJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA0N1xcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwODBcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA3XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXDA3MFxcMDAwXFwwNDlcXDAwMFxcXG4gICAgXFwwNDNcXDAwMFxcMDM4XFwwMDBcXDA1MlxcMDAwXFwwNTRcXDAwMFxcMDU1XFwwMDBcXDA1NlxcMDAwXFwwNTdcXDAwMFxcMDU4XFwwMDBcXFxuICAgIFxcMDUyXFwwMDBcXDA2M1xcMDAwXFwwNjFcXDAwMFxcMDYyXFwwMDBcXDA0MFxcMDAwXFwwNjRcXDAwMFxcMDY1XFwwMDBcXDA2NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjhcXDAwMFxcMDYyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwNzBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNDFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDM5XFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzVcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwMDVcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc5XFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA5MVxcMDAwXFwwMDBcXDAwMFxcMDgxXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwOTJcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc4XFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDkwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXCI7XG4gIExleGluZy5sZXhfY2hlY2sgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDA0XFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDA0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDg2XFwwMDBcXFxuICAgIFxcMDAyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDdcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwNjlcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXFxuICAgIFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDlcXDAwMFxcMDI0XFwwMDBcXDAyNVxcMDAwXFwwMzlcXDAwMFxcMDA3XFwwMDBcXDAwMFxcMDAwXFwwMjhcXDAwMFxcXG4gICAgXFwwMzJcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwNDJcXDAwMFxcMDMwXFwwMDBcXDAzNVxcMDAwXFwwMDBcXDAwMFxcMDExXFwwMDBcXFxuICAgIFxcMDEyXFwwMDBcXDAzNFxcMDAwXFwwMjZcXDAwMFxcMDMxXFwwMDBcXDAwMFxcMDAwXFwwMjdcXDAwMFxcMDI0XFwwMDBcXDAzNlxcMDAwXFxcbiAgICBcXDA0MFxcMDAwXFwwNDFcXDAwMFxcMDQ0XFwwMDBcXDAwMFxcMDAwXFwwNDVcXDAwMFxcMDAwXFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwNDZcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFxcbiAgICBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcXG4gICAgXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDA0N1xcMDAwXFwwMDhcXDAwMFxcMDQ4XFwwMDBcXFxuICAgIFxcMDQ5XFwwMDBcXDA1MFxcMDAwXFwwNTFcXDAwMFxcMDUzXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFxcbiAgICBcXDA1OFxcMDAwXFwwNTlcXDAwMFxcMDYwXFwwMDBcXDA2MVxcMDAwXFwwMTNcXDAwMFxcMDYzXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcXG4gICAgXFwwNjZcXDAwMFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXFxuICAgIFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwyNTVcXDI1NVxcMDA4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDEzXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAxM1xcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDczXFwwMDBcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXFxuICAgIFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXFxuICAgIFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3OFxcMDAwXFwwODZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDA2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDg4XFwwMDBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwwNzhcXDAwMFxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA3OVxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgyXFwwMDBcXFxuICAgIFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwwODNcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcXG4gICAgXFwwODRcXDAwMFxcMDg0XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2Jhc2VfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmtfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHRfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X3RyYW5zX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jaGVja19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfY29kZSA9XG4gICBcIlwiO1xufVxuXG5sZXQgcmVjIHJlYWQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiAwXG5hbmQgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyA1NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBCT09MIHRydWUgKVxuIyAyNzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDU5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgZmFsc2UgKVxuIyAyNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDYxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE5VTEwgKVxuIyAyODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9TIClcbiMgMjg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNCAtPlxuIyA2NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBPRSApXG4jIDI5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDUgLT5cbiMgNjcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQVMgKVxuIyAyOTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA2IC0+XG4jIDY5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEFFIClcbiMgMzAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNyAtPlxuIyA3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVFMgdGhlbiBUU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMwOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDggLT5cbiMgNzYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3R1cGxlIFRFIHRoZW4gVEVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA5IC0+XG4jIDgxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZTIHRoZW4gVlNcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMjUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMCAtPlxuIyA4NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdmFyaWFudCBWRSB0aGVuIFZFXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzMzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTEgLT5cbiMgOTEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ09NTUEgKVxuIyAzMzggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMiAtPlxuIyA5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT0xPTiApXG4jIDM0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEzIC0+XG4jIDk1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBORUdJTkZJTklUWSApXG4jIDM0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE0IC0+XG4jIDk3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE1IC0+XG4jIDk5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBJTkZJTklUWSApXG4jIDM1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE2IC0+XG4jIDEwMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgTkFOIClcbiMgMzYzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTcgLT5cbiMgMTAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBMZXh4ZXJfdXRpbHMuc3RyaW5nMm51bSAoTGV4aW5nLmxleGVtZSBsZXhidWYpIHdpdGhcbiAgICAgIHwgSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2ludGVnZXIgdG9rXG4gICAgICB8IExBUkdFSU5UIF8gYXMgdG9rIC0+IENvbXBsaWFuY2UubGV4X2xhcmdlaW50IHRva1xuICAgICAgfCB0b2sgLT4gdG9rXG4gICAgKVxuIyAzNzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxOCAtPlxuIyAxMTAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIChGTE9BVCAoZmxvYXRfb2Zfc3RyaW5nIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikpKSApXG4jIDM3OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE5IC0+XG4jIDExMiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgXCJcIiApXG4jIDM4MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIwIC0+XG5sZXRcbiMgMTEzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1xuIyAzODkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG49IExleGluZy5zdWJfbGV4ZW1lIGxleGJ1ZiAobGV4YnVmLkxleGluZy5sZXhfc3RhcnRfcG9zICsgMSkgKGxleGJ1Zi5MZXhpbmcubGV4X2N1cnJfcG9zICsgLTEpIGluXG4jIDExNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBTVFJJTkcgKExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgcykgKVxuIyAzOTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMSAtPlxuIyAxMTYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggRU9GIClcbiMgMzk4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjIgLT5cbiMgMTE4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIHJlYWQgbGV4YnVmIClcbiMgNDAzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjMgLT5cbiMgMTIwIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZCBsZXhidWY7IClcbiMgNDA4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjQgLT5cbiMgMTIyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBtYXRjaCBDb21wbGlhbmNlLmNvbW1lbnRfY2hlY2sgKCkgd2l0aFxuICAgICAgfCBPayAoKSAtPiByZWFkX2NvbW1lbnQgbGV4YnVmOyByZWFkIGxleGJ1ZlxuICAgICAgfCBFcnJvciBlcnIgLT4gIENPTVBMSUFOQ0VfRVJST1IgZXJyXG4gICAgKVxuIyA0MTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNSAtPlxuIyAxMjggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQyNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI2IC0+XG4jIDEzNCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIikgKVxuIyA0MzEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCBfX29jYW1sX2xleF9zdGF0ZSAtPiBsZXhidWYuTGV4aW5nLnJlZmlsbF9idWZmIGxleGJ1ZjtcbiAgICAgIF9fb2NhbWxfbGV4X3JlYWRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG5hbmQgcmVhZF9jb21tZW50IGxleGJ1ZiA9XG4gICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiA4OFxuYW5kIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlID1cbiAgbWF0Y2ggTGV4aW5nLmVuZ2luZSBfX29jYW1sX2xleF90YWJsZXMgX19vY2FtbF9sZXhfc3RhdGUgbGV4YnVmIHdpdGhcbiAgICAgIHwgMCAtPlxuIyAxMzkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggKCkgKVxuIyA0NDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxIC0+XG4jIDE0MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMudXBkYXRlX3BvcyBsZXhidWY7IHJlYWRfY29tbWVudCBsZXhidWYgKVxuIyA0NDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyIC0+XG4jIDE0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIFwidW5leHBlY3RlZCBFT0YgaW4gY29tbWVudFwiIClcbiMgNDUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMyAtPlxuIyAxNDUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ1OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGVcblxuOztcblxuIyAxNDcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuIFxuICBlbmRcblxuIyA0NjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG4iLCJtb2R1bGUgWW9qc29uID0gU3RkLllvanNvblxub3BlbiBCcnJcblxudHlwZSBtZXRob2QnID0gR2V0IHwgUG9zdFxuXG5sZXQganN0cl9vZl9tZXRob2QgPSBmdW5jdGlvbiBHZXQgLT4gSnN0ci52IFwiR0VUXCIgfCBQb3N0IC0+IEpzdHIudiBcIlBPU1RcIlxuXG5tb2R1bGUgVHlwZXMgPSBzdHJ1Y3RcbiAgdHlwZSBvcmRlciA9IEFzY2VuZGluZyB8IERlc2NlbmRpbmcgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgc29ydCA9XG4gICAgfCBBbGJ1bVxuICAgIHwgQWxidW1BcnRpc3RcbiAgICB8IEFydGlzdFxuICAgIHwgQnVkZ2V0XG4gICAgfCBDb21tdW5pdHlSYXRpbmdcbiAgICB8IENyaXRpY1JhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVQbGF5ZWRcbiAgICB8IFBsYXlDb3VudFxuICAgIHwgUHJlbWllcmVEYXRlXG4gICAgfCBQcm9kdWN0aW9uWWVhclxuICAgIHwgU29ydE5hbWVcbiAgICB8IFJhbmRvbVxuICAgIHwgUmV2ZW51ZVxuICAgIHwgUnVudGltZVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5lbmRcblxudHlwZSB1c2VyID0ge1xuICBuYW1lIDogc3RyaW5nOyBbQGtleSBcIk5hbWVcIl1cbiAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIHNlcnZlcl9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxufVxuW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG5tb2R1bGUgdHlwZSBRdWVyeSA9IHNpZ1xuICB0eXBlIHBhdGhfcGFyYW1zXG4gIHR5cGUgcGFyYW1zIFtAQGRlcml2aW5nIHlvanNvbl1cbiAgdHlwZSByZXNwb25zZSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdmFsIG1ldGhvZCcgOiBtZXRob2QnXG4gIHZhbCBlbmRwb2ludCA6IHBhdGhfcGFyYW1zIC0+IHN0cmluZyBsaXN0XG5lbmRcblxubW9kdWxlIEF1dGhlbnRpY2F0ZV9ieV9uYW1lID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7IHVzZXJuYW1lIDogc3RyaW5nOyBbQGtleSBcIlVzZXJuYW1lXCJdIHB3IDogc3RyaW5nIFtAa2V5IFwiUHdcIl0gfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICB1c2VyIDogdXNlcjsgW0BrZXkgXCJVc2VyXCJdXG4gICAgYWNjZXNzX3Rva2VuIDogc3RyaW5nOyBbQGtleSBcIkFjY2Vzc1Rva2VuXCJdXG4gICAgc2VydmVyX2lkIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlcklkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gUG9zdFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJVc2Vyc1wiOyBcIkF1dGhlbnRpY2F0ZUJ5TmFtZVwiIF1cbmVuZFxuXG5tb2R1bGUgSXRlbSA9IHN0cnVjdFxuICB0eXBlIGltYWdlX2JsdXJfaGFzaCA9IChzdHJpbmcgKiBzdHJpbmcpIGxpc3RcblxuICBsZXQgaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiB5ID1cbiAgICBsZXQgYXNzb2MgPSBZb2pzb24uU2FmZS5VdGlsLnRvX2Fzc29jIHkgaW5cbiAgICBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIHYpKSBhc3NvY1xuXG4gIGxldCB5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIGkgOiBZb2pzb24uU2FmZS50ID1cbiAgICBsZXQgYXNzb2MgPSBMaXN0Lm1hcCAoZnVuIChrZXksIHYpIC0+IChrZXksIGBTdHJpbmcgdikpIGkgaW5cbiAgICBgQXNzb2MgYXNzb2NcblxuICB0eXBlIGltYWdlX2JsdXJfaGFzaGVzID0ge1xuICAgIHByaW1hcnkgOiBpbWFnZV9ibHVyX2hhc2ggb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiUHJpbWFyeVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICB0eXBlIHR5cGVfID1cbiAgICB8IEFnZ3JlZ2F0ZUZvbGRlclxuICAgIHwgQXVkaW9cbiAgICB8IEF1ZGlvQm9va1xuICAgIHwgQmFzZVBsdWdpbkZvbGRlclxuICAgIHwgQm9va1xuICAgIHwgQm94U2V0XG4gICAgfCBDaGFubmVsXG4gICAgfCBDaGFubmVsRm9sZGVySXRlbVxuICAgIHwgQ29sbGVjdGlvbkZvbGRlclxuICAgIHwgRXBpc29kZVxuICAgIHwgRm9sZGVyXG4gICAgfCBHZW5yZVxuICAgIHwgTGl2ZVR2Q2hhbm5lbFxuICAgIHwgTGl2ZVR2UHJvZ3JhbVxuICAgIHwgTWFudWFsUGxheWxpc3RzRm9sZGVyXG4gICAgfCBNb3ZpZVxuICAgIHwgTXVzaWNBbGJ1bVxuICAgIHwgTXVzaWNBcnRpc3RcbiAgICB8IE11c2ljR2VucmVcbiAgICB8IE11c2ljVmlkZW9cbiAgICB8IFBlcnNvblxuICAgIHwgUGhvdG9cbiAgICB8IFBob3RvQWxidW1cbiAgICB8IFBsYXlsaXN0XG4gICAgfCBQbGF5bGlzdHNGb2xkZXJcbiAgICB8IFByb2dyYW1cbiAgICB8IFJlY29yZGluZ1xuICAgIHwgU2Vhc29uXG4gICAgfCBTZXJpZXNcbiAgICB8IFN0dWRpb1xuICAgIHwgVHJhaWxlclxuICAgIHwgVHZDaGFubmVsXG4gICAgfCBUdlByb2dyYW1cbiAgICB8IFVzZXJSb290Rm9sZGVyXG4gICAgfCBVc2VyVmlld1xuICAgIHwgVmlkZW9cbiAgICB8IFllYXJcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgZmllbGQgPVxuICAgIHwgQWlyVGltZVxuICAgIHwgQmFzaWNTeW5jSW5mb1xuICAgIHwgQ2FuRGVsZXRlXG4gICAgfCBDYW5Eb3dubG9hZFxuICAgIHwgQ2hhbm5lbEltYWdlXG4gICAgfCBDaGFubmVsSW5mb1xuICAgIHwgQ2hhcHRlcnNcbiAgICB8IENoaWxkQ291bnRcbiAgICB8IEN1bXVsYXRpdmVSdW5UaW1lVGlja3NcbiAgICB8IEN1c3RvbVJhdGluZ1xuICAgIHwgRGF0ZUNyZWF0ZWRcbiAgICB8IERhdGVMYXN0TWVkaWFBZGRlZFxuICAgIHwgRGF0ZUxhc3RSZWZyZXNoZWRcbiAgICB8IERhdGVMYXN0U2F2ZWRcbiAgICB8IERpc3BsYXlQcmVmZXJlbmNlc0lkXG4gICAgfCBFbmFibGVNZWRpYVNvdXJjZURpc3BsYXlcbiAgICB8IEV0YWdcbiAgICB8IEV4dGVybmFsRXRhZ1xuICAgIHwgRXh0ZXJuYWxTZXJpZXNJZFxuICAgIHwgRXh0ZXJuYWxVcmxzXG4gICAgfCBFeHRyYUlkc1xuICAgIHwgR2VucmVzXG4gICAgfCBIZWlnaHRcbiAgICB8IEhvbWVQYWdlVXJsXG4gICAgfCBJbmhlcml0ZWRQYXJlbnRhbFJhdGluZ1ZhbHVlXG4gICAgfCBJc0hEXG4gICAgfCBJdGVtQ291bnRzXG4gICAgfCBMb2NhbFRyYWlsZXJDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VDb3VudFxuICAgIHwgTWVkaWFTb3VyY2VzXG4gICAgfCBNZWRpYVN0cmVhbXNcbiAgICB8IE9yaWdpbmFsVGl0bGVcbiAgICB8IE92ZXJ2aWV3XG4gICAgfCBQYXJlbnRJZFxuICAgIHwgUGF0aFxuICAgIHwgUGVvcGxlXG4gICAgfCBQbGF5QWNjZXNzXG4gICAgfCBQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFByaW1hcnlJbWFnZUFzcGVjdFJhdGlvXG4gICAgfCBQcm9kdWN0aW9uTG9jYXRpb25zXG4gICAgfCBQcm92aWRlcklkc1xuICAgIHwgUmVjdXJzaXZlSXRlbUNvdW50XG4gICAgfCBSZWZyZXNoU3RhdGVcbiAgICB8IFJlbW90ZVRyYWlsZXJzXG4gICAgfCBTY3JlZW5zaG90SW1hZ2VUYWdzXG4gICAgfCBTZWFzb25Vc2VyRGF0YVxuICAgIHwgU2VyaWVzUHJlc2VudGF0aW9uVW5pcXVlS2V5XG4gICAgfCBTZXJpZXNQcmltYXJ5SW1hZ2VcbiAgICB8IFNlcmllc1N0dWRpb1xuICAgIHwgU2VydmljZU5hbWVcbiAgICB8IFNldHRpbmdzXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgU3BlY2lhbEVwaXNvZGVOdW1iZXJzXG4gICAgfCBTcGVjaWFsRmVhdHVyZUNvdW50XG4gICAgfCBTdHVkaW9zXG4gICAgfCBTeW5jSW5mb1xuICAgIHwgVGFnbGluZXNcbiAgICB8IFRhZ3NcbiAgICB8IFRoZW1lU29uZ0lkc1xuICAgIHwgVGhlbWVWaWRlb0lkc1xuICAgIHwgV2lkdGhcbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICgqIFRoZSBbVHlwZV0gZmllbGQgaXMgYWN0dWFsbHkgYSBqc29uIHN0cmluZyBidXQgd2Ugd2FudCB0byBzZWUgaXQgYXMgYVxuICAgICB2YXJpYW50ICh3aGljaCBpcyBhIGxpc3Qgb2Ygb25lIHN0cmluZykgKilcbiAgdHlwZSB0eXBlX3N0ciA9IHR5cGVfXG5cbiAgbGV0IHR5cGVfc3RyX29mX3lvanNvbiBqID1cbiAgICBsZXQgcyA9IFlvanNvbi5TYWZlLlV0aWwudG9fc3RyaW5nIGogaW5cbiAgICB0eXBlX19vZl95b2pzb24gKGBMaXN0IFsgYFN0cmluZyBzIF0pXG5cbiAgbGV0IHlvanNvbl9vZl90eXBlX3N0ciB0cyA9XG4gICAgbWF0Y2ggeW9qc29uX29mX3R5cGVfIHRzIHdpdGggYExpc3QgWyBqc29uIF0gLT4ganNvbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgdHlwZSB0ID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIHNvcnRfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJTb3J0TmFtZVwiXVxuICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgcGF0aCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQYXRoXCJdXG4gICAgYWxidW1faWQgOiBzdHJpbmcgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwiQWxidW1JZFwiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb24gb3B0aW9uO1xuICAgICAgICAoKiBbUGFyZW50SWRdIG1pZ2h0IGFic2VudCwgW251bGxdLCBvciBhIHN0cmluZyAqKVxuICAgICAgICBbQHlvanNvbi5vcHRpb25dXG4gICAgICAgIFtAa2V5IFwiUGFyZW50SWRcIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgICBpbWFnZV9ibHVyX2hhc2hlcyA6IGltYWdlX2JsdXJfaGFzaGVzOyBbQGtleSBcIkltYWdlQmx1ckhhc2hlc1wiXVxuICAgIHR5cGVfIDogdHlwZV9zdHI7IFtAa2V5IFwiVHlwZVwiXVxuICAgIGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZyBvcHRpb247XG4gICAgICAgIFtAZGVmYXVsdCBOb25lXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiQ29sbGVjdGlvblR5cGVcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG5cbiAgdHlwZSBwYXJhbXMgPSB7XG4gICAgaWRzIDogc3RyaW5nIGxpc3Q7IFtAZGVmYXVsdCBbXV0gW0B5b2pzb25fZHJvcF9kZWZhdWx0ICggPSApXSBbQGtleSBcImlkc1wiXVxuICAgIHBhcmVudF9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJwYXJlbnRJZFwiXVxuICAgIHVzZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwidXNlcklkXCJdXG4gICAgZmllbGRzIDogSXRlbS5maWVsZCBsaXN0O1xuICAgIGluY2x1ZGVfaXRlbV90eXBlcyA6IEl0ZW0udHlwZV8gbGlzdDsgW0BrZXkgXCJpbmNsdWRlSXRlbVR5cGVzXCJdXG4gICAgc3RhcnRfaW5kZXggOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dIFtAa2V5IFwic3RhcnRJbmRleFwiXVxuICAgIGxpbWl0IDogaW50IG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXVxuICAgIHNvcnRfb3JkZXIgOiBUeXBlcy5vcmRlciBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzb3J0T3JkZXJcIl1cbiAgICBzb3J0X2J5IDogVHlwZXMuc29ydCBsaXN0OyBbQGtleSBcInNvcnRCeVwiXVxuICAgIHJlY3Vyc2l2ZSA6IGJvb2w7XG4gICAgZW5hYmxlX3VzZXJfZGF0YSA6IGJvb2w7IFtAa2V5IFwiZW5hYmxlVXNlckRhdGFcIl1cbiAgICBlbmFibGVfaW1hZ2VzIDogYm9vbDsgW0BrZXkgXCJlbmFibGVJbWFnZXNcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkl0ZW1zXCIgXVxuZW5kXG5cbm1vZHVsZSBWaWV3cyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0geyB1c2VyX2lkIDogc3RyaW5nIH1cblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgOiBib29sOyBbQGtleSBcImluY2x1ZGVFeHRlcm5hbENvbnRlbnRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSByZXNwb25zZSA9IHtcbiAgICBpdGVtcyA6IEl0ZW0udCBsaXN0OyBbQGtleSBcIkl0ZW1zXCJdXG4gICAgdG90YWxfcmVjb3JkX2NvdW50IDogaW50OyBbQGtleSBcIlRvdGFsUmVjb3JkQ291bnRcIl1cbiAgICBzdGFydF9pbmRleCA6IGludDsgW0BrZXkgXCJTdGFydEluZGV4XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBwcCA9IFsgXCJVc2Vyc1wiOyBwcC51c2VyX2lkOyBcIlZpZXdzXCIgXVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcnMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHZpcnR1YWxfZm9sZGVyID0ge1xuICAgIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICAgIGxvY2F0aW9ucyA6IHN0cmluZyBsaXN0OyBbQGtleSBcIkxvY2F0aW9uc1wiXVxuICAgIGl0ZW1faWQgOiBzdHJpbmc7IFtAa2V5IFwiSXRlbUlkXCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgcmVzcG9uc2UgPSB2aXJ0dWFsX2ZvbGRlciBsaXN0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgbWV0aG9kJyA9IEdldFxuICBsZXQgZW5kcG9pbnQgXyA9IFsgXCJMaWJyYXJ5XCI7IFwiVmlydHVhbEZvbGRlcnNcIiBdXG5lbmRcblxubW9kdWxlIFN5c3RlbSA9IHN0cnVjdFxuICBtb2R1bGUgSW5mbyA9IHN0cnVjdFxuICAgIHR5cGUgcGF0aF9wYXJhbXMgPSB1bml0XG4gICAgdHlwZSBwYXJhbXMgPSB1bml0IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICAgIHR5cGUgcmVzcG9uc2UgPSB7XG4gICAgICBsb2NhbF9hZGRyZXNzIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiTG9jYWxBZHJlc3NcIl1cbiAgICAgIHNlcnZlcl9uYW1lIDogc3RyaW5nOyBbQGtleSBcIlNlcnZlck5hbWVcIl1cbiAgICAgIHByb2R1Y3RfbmFtZSA6IHN0cmluZyBvcHRpb247IFtAZGVmYXVsdCBOb25lXSBbQGtleSBcIlByb2R1Y3ROYW1lXCJdXG4gICAgICBvcGVyYXRpbmdfc3lzdGVtIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiT3BlcmF0aW5nU3lzdGVtXCJdXG4gICAgICBpZCA6IHN0cmluZzsgW0BrZXkgXCJJZFwiXVxuICAgIH1cbiAgICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgICBsZXQgbWV0aG9kJyA9IEdldFxuICAgIGxldCBlbmRwb2ludCBfID0gWyBcIlN5c3RlbVwiOyBcIkluZm9cIiBdXG4gIGVuZFxuZW5kXG5cbigqIEZvcndhcmQgZGVjbGFyYXRpb24gdG8gYmUgZmlsbGVkIGJ5IHRoZSBhcHAgKilcbmxldCBzZXNzaW9uX3V1aWQgPSByZWYgTm9uZVxubGV0IHNldF9zZXNzaW9uX3V1aWQgcyA9IHNlc3Npb25fdXVpZCA6PSBTb21lIHNcblxubGV0IGF1dGhvcml6YXRpb24gP3Rva2VuICgpID1cbiAgbGV0IHRva2VuID1cbiAgICBtYXRjaCB0b2tlbiB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgdCAtPiBQcmludGYuc3ByaW50ZiBcIiwgVG9rZW49JVNcIiB0XG4gIGluXG4gIGxldCBzZXNzaW9uX3V1aWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiAhc2Vzc2lvbl91dWlkIGluXG4gIFByaW50Zi5zcHJpbnRmXG4gICAgXCJNZWRpYUJyb3dzZXIgQ2xpZW50PVxcXCJPY2FtaXhcXFwiLCBEZXZpY2U9XFxcIkZpcmVmb3hcXFwiLCBEZXZpY2VJZD1cXFwiJXNcXFwiLCBcXFxuICAgICBWZXJzaW9uPVxcXCIwLjFcXFwiJXNcIlxuICAgIHNlc3Npb25fdXVpZCB0b2tlblxuXG5sZXQgcmVxdWVzdCAodHlwZSBwcCBwIHIpIH5iYXNlX3VybCA/dG9rZW4gP2hlYWRlcnNcbiAgICAobW9kdWxlIFEgOiBRdWVyeVxuICAgICAgd2l0aCB0eXBlIHBhdGhfcGFyYW1zID0gcHBcbiAgICAgICBhbmQgdHlwZSBwYXJhbXMgPSBwXG4gICAgICAgYW5kIHR5cGUgcmVzcG9uc2UgPSByKSAocGFyYW1zIDogcCkgKHBhdGhfcGFyYW1zIDogcHApIDogciBGdXQub3JfZXJyb3IgPVxuICBsZXQgb3BlbiBCcnJfaW8uRmV0Y2ggaW5cbiAgbGV0IGJhc2VfdXJpID0gVXJpLnYgKEpzdHIudiBiYXNlX3VybCkgaW5cbiAgbGV0IGJhc2VfcGF0aF9zZWdtZW50cyA9IFJlc3VsdC5nZXRfb2sgQEAgVXJpLnBhdGhfc2VnbWVudHMgYmFzZV91cmkgaW5cbiAgbGV0IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgPSBMaXN0Lm1hcCBKc3RyLnYgKFEuZW5kcG9pbnQgcGF0aF9wYXJhbXMpIGluXG4gIGxldCBwYXRoX3NlZ21lbnRzID1cbiAgICBpZiBiYXNlX3BhdGhfc2VnbWVudHMgPSBbIEpzdHIuZW1wdHkgXSB0aGVuIGVuZHBvaW50X3BhdGhfc2VnbWVudHNcbiAgICBlbHNlIExpc3QuY29uY2F0IFsgYmFzZV9wYXRoX3NlZ21lbnRzOyBlbmRwb2ludF9wYXRoX3NlZ21lbnRzIF1cbiAgaW5cbiAgbGV0IHVyaSA9IFVyaS53aXRoX3BhdGhfc2VnbWVudHMgYmFzZV91cmkgcGF0aF9zZWdtZW50cyBpblxuICBsZXQgdXJpID0gUmVzdWx0LmdldF9vayB1cmkgaW5cbiAgbGV0IGF1dGhvcml6YXRpb24gPSBhdXRob3JpemF0aW9uID90b2tlbiAoKSBpblxuICBsZXQgaGVhZGVycyA9XG4gICAgSGVhZGVycy5vZl9hc3NvYyA/aW5pdDpoZWFkZXJzXG4gICAgICBKc3RyLlxuICAgICAgICBbXG4gICAgICAgICAgKHYgXCJjb250ZW50LXR5cGVcIiwgdiBcInRleHQvanNvblwiKTtcbiAgICAgICAgICAodiBcIlgtRW1ieS1BdXRob3JpemF0aW9uXCIsIHYgYXV0aG9yaXphdGlvbik7XG4gICAgICAgIF1cbiAgaW5cbiAgbGV0IG1ldGhvZCcgPSBqc3RyX29mX21ldGhvZCBRLm1ldGhvZCcgaW5cbiAgbGV0IGluaXQsIHVybCA9XG4gICAgbWF0Y2ggUS5tZXRob2QnIHdpdGhcbiAgICB8IEdldCAtPlxuICAgICAgICBsZXQgcGFyYW1zID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBKc29uLmRlY29kZSB8PiBSZXN1bHQuZ2V0X29rIHw+IFVyaS5QYXJhbXMub2Zfb2JqXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cmlfd2l0aF9wYXJhbXMgPSBVcmkud2l0aF9xdWVyeV9wYXJhbXMgdXJpIHBhcmFtcyBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnICgpLCBVcmkudG9fanN0ciB1cmlfd2l0aF9wYXJhbXMpXG4gICAgfCBQb3N0IC0+XG4gICAgICAgIGxldCBib2R5ID1cbiAgICAgICAgICBwYXJhbXMgfD4gUS55b2pzb25fb2ZfcGFyYW1zIHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLnZcbiAgICAgICAgICB8PiBCb2R5Lm9mX2pzdHJcbiAgICAgICAgaW5cbiAgICAgICAgKFJlcXVlc3QuaW5pdCB+aGVhZGVycyB+bWV0aG9kJyB+Ym9keSAoKSwgVXJpLnRvX2pzdHIgdXJpKVxuICBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHJlcyA9IHJlcXVlc3QgQEAgUmVxdWVzdC52IH5pbml0IHVybCBpblxuICBsZXQrIGpzb24gPSBSZXNwb25zZS5hc19ib2R5IHJlcyB8PiBCb2R5LnRleHQgaW5cbiAgbGV0IHlvanNvbiA9IFlvanNvbi5TYWZlLmZyb21fc3RyaW5nIChKc3RyLnRvX3N0cmluZyBqc29uKSBpblxuICB0cnkgUS5yZXNwb25zZV9vZl95b2pzb24geW9qc29uXG4gIHdpdGggZSAtPlxuICAgIENvbnNvbGUubG9nIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGRlY29kaW5nIHJlc3BvbnNlOiBcIjsganNvbiBdO1xuICAgIENvbnNvbGUubG9nIFsgZSBdO1xuICAgIHJhaXNlIGVcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJfaW9cbm1vZHVsZSBBcGkgPSBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuKCogUHJvcG9zaXRpb246XG4gICAtIFVzZSBwcmltYXJ5IGtleSB0byBwcm92aWRlIGZpbHRlcmluZ1xuICAgLSBVc2UgaW5kZXgga2V5cyB0byBwcm92aWRlIHNvcnRzXG5cbiAgIEJpZyBwcmltYXJ5IGtleXMgZHJpdmUgdGhlIGNvc3Qgb2YgW2dldF9hbGxfa2V5c10gdXAuXG4gICBXZSBjb3VsZCBkZWxlZ2F0ZSBzb21lIGZpbHRlcmluZyB0byB0aGUgaW5kZXgga2V5cyBpZiBuZWNlc3NhcnkuXG5cbiAgICBXZSBjb3VsZCBhbHNvIHRyaWVkIHRvIHByZS1wcm9jZXNzIG9yIGNvbXByZXNzIHRoZSBrZXlzICopXG5cbmxldCB0X3RvX2p2IGVuY29kZXIgdCA9XG4gIGVuY29kZXIgdCB8PiBZb2pzb24uU2FmZS50b19zdHJpbmcgfD4gSnN0ci5vZl9zdHJpbmcgfD4gQnJyLkpzb24uZGVjb2RlXG4gIHw+IFJlc3VsdC5nZXRfZXhuXG5cbmxldCBqdl90b190IGRlY29kZXIgaiA9XG4gIGxldCBqc29uID0gQnJyLkpzb24uZW5jb2RlIGogaW5cbiAgT2sgKEpzdHIudG9fc3RyaW5nIGpzb24gfD4gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgfD4gZGVjb2RlcilcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zID0gc3RydWN0XG4gIHR5cGUgdCA9IHsgaWQgOiBpbnQ7IGl0ZW0gOiBzdHJpbmcgb3B0aW9uIH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaWRcIlxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LmlkXG5lbmRcblxubW9kdWxlIEl0ZW1zID0gc3RydWN0XG4gIG9wZW4gRGF0YV9zb3VyY2UuSmVsbHlmaW4uQXBpXG5cbiAgdHlwZSBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA6IGludDsgdmlld3MgOiBzdHJpbmcgbGlzdDsgc29ydF9uYW1lIDogc3RyaW5nIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdCA9IHsgc29ydHMgOiBzb3J0czsgaXRlbSA6IEl0ZW0udCB9IFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBsZXQgY29tcGFyZSB0IHQnID0gU3RyaW5nLmNvbXBhcmUgdC5zb3J0cy5zb3J0X25hbWUgdCcuc29ydHMuc29ydF9uYW1lXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgaWQgOiBzdHJpbmc7IHNvcnRfbmFtZSA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9ID1cbiAgICAgIGxldCBpZCA9IEp2Lm9mX3N0cmluZyBpZCBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2Lm9mX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgIGxldCB2aWV3cyA9IEp2Lm9mX2xpc3QgSnYub2Zfc3RyaW5nIHZpZXdzIGluXG4gICAgICBKdi5vZl9qdl9hcnJheSBbfCBpZDsgc29ydF9uYW1lOyB2aWV3cyB8XVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYudG9fanZfYXJyYXkgaiB3aXRoXG4gICAgICB8IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgbGV0IGlkID0gSnYudG9fc3RyaW5nIGlkIGluXG4gICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IEp2LnRvX3N0cmluZyBzb3J0X25hbWUgaW5cbiAgICAgICAgICBsZXQgdmlld3MgPSBKdi50b19saXN0IEp2LnRvX3N0cmluZyB2aWV3cyBpblxuICAgICAgICAgIHsgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfVxuICAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IHBhdGggPVxuICAgICAgSW5kZXhlZF9kYi5LZXlfcGF0aC4oXG4gICAgICAgIFMgW3wgSWQgXCJpdGVtLklkXCI7IElkIFwiaXRlbS5OYW1lXCI7IElkIFwic29ydHMudmlld3NcIiB8XSlcbiAgZW5kXG5cbiAgbW9kdWxlIEtleV9kYXRlX2FkZGVkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gaW50XG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX2ludCBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19pbnQgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcInNvcnRzLmRhdGVfYWRkZWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X2lkID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIml0ZW0uSWRcIlxuICBlbmRcblxuICBtb2R1bGUgS2V5X3ZpZXdfa2luZCA9IHN0cnVjdFxuICAgICgqIHRvZG86IHVzZSBhIGVudW0gZm9yIGtpbmRzICopXG4gICAgdHlwZSB0ID0geyB0eXBlJyA6IHN0cmluZzsgdmlld3MgOiBzdHJpbmcgbGlzdCB9XG5cbiAgICBsZXQgdG9fanYgX2sgPSBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBvZl9qdiBqID1cbiAgICAgIG1hdGNoIEp2Lih0b19qdl9hcnJheSBqKSB3aXRoXG4gICAgICB8IFt8IHR5cGUnOyB2aWV3cyB8XSAtPlxuICAgICAgICAgIHsgdHlwZScgPSBKdi50b19zdHJpbmcgdHlwZSc7IHZpZXdzID0gSnYuKHRvX2xpc3QgdG9fc3RyaW5nIHZpZXdzKSB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uVHlwZVwiOyBJZCBcInNvcnRzLnZpZXdzXCIgfF1cbiAgZW5kXG5cbiAgbW9kdWxlIEtleV90eXBlX25hbWUgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSB7IGNvbGxlY3Rpb25fdHlwZSA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nIH1cblxuICAgIGxldCB0b19qdiBfdCA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgY29sbGVjdGlvbl90eXBlOyBzb3J0X25hbWUgfF0gLT5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uX3R5cGUgPSBKdi50b19zdHJpbmcgY29sbGVjdGlvbl90eXBlO1xuICAgICAgICAgICAgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZTtcbiAgICAgICAgICB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLlMgW3wgSWQgXCJpdGVtLkNvbGxlY3Rpb25UeXBlXCI7IElkIFwic29ydHMuc29ydF9uYW1lXCIgfF1cbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcIml0ZW1zXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cblxuICBsZXQgZ2V0X2tleSB0ID1cbiAgICB7XG4gICAgICBLZXkuc29ydF9uYW1lID0gdC5zb3J0cy5zb3J0X25hbWU7XG4gICAgICBpZCA9IHQuaXRlbS5JdGVtLmlkO1xuICAgICAgdmlld3MgPSB0LnNvcnRzLnZpZXdzO1xuICAgIH1cbmVuZFxuXG5tb2R1bGUgVmlydHVhbF9mb2xkZXIgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbl9hcGlcblxuICAoKiB0b2RvOiBtdWx0aXNlcnZlcjogd2Ugc2hvdWxkIGFkZCBhIHNlcnZlcl9pZCBrZXkgKilcbiAgdHlwZSB0ID0gVmlydHVhbF9mb2xkZXJzLnZpcnR1YWxfZm9sZGVyIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0gc3RyaW5nXG5cbiAgICBsZXQgdG9fanYgayA9IEp2Lm9mX3N0cmluZyBrXG4gICAgbGV0IG9mX2p2IGogPSBKdi50b19zdHJpbmcgalxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5JZCBcIkl0ZW1JZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJ2aXJ0dWFsX2ZvbGRlcnNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuICBsZXQgZ2V0X2tleSB0ID0gdC5WaXJ0dWFsX2ZvbGRlcnMuaXRlbV9pZFxuZW5kXG5cbm1vZHVsZSBPcmRlcnJlZF9pdGVtc19zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKE9yZGVycmVkX2l0ZW1zKVxubW9kdWxlIEl0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoSXRlbXMpXG5tb2R1bGUgVmlydHVhbF9mb2xkZXJfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChWaXJ0dWFsX2ZvbGRlcilcblxubW9kdWxlIEl0ZW1zQnlEYXRlQWRkZWQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfZGF0ZV9hZGRlZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2RhdGVfYWRkZWQpXG5cbm1vZHVsZSBJdGVtc0J5Vmlld0FuZEtpbmQgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdmlld19hbmRfa2luZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3ZpZXdfa2luZClcblxubW9kdWxlIEl0ZW1zQnlJZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9pZFwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X2lkKVxuXG5tb2R1bGUgSXRlbXNCeVR5cGVBbmROYW1lID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X3R5cGVfYW5kX25hbWVcIlxuICAgIGVuZClcbiAgICAoSXRlbXMpXG4gICAgKEl0ZW1zLktleV90eXBlX25hbWUpXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyXG5vcGVuIEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgU291cmNlID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxub3BlbiBTb3VyY2UuQXBpXG5cbigqIEl0ZW1zIEhpZXJhcmNoeVxuXG4gICBVc2VyUm9vdEZvbGRlciAoXCJNZWRpYSBGb2xkZXJzXCIgXCJlOWQ1MDc1YTU1NWMxY2JjMzk0ZWVjNGNlZjI5NTI3NFwiKVxuICAgICAgICAgICAgICAgICAgKEdldHMgdGhlIHJvb3QgZm9sZGVyIGZyb20gYSB1c2VyJ3MgbGlicmFyeS4gKVxuICAgXiBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBBZ2dyZWdhdGVGb2xkZXIgKFwicm9vdFwiIFwiZjI3Y2FhMzdlNTE0MjIyNWNjZWRlZDQ4ZjY1NTM1MDJcIilcbiAgIF4gRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKVxuICAgXiBGb2xkZXIrIDwtIE11c2ljQXJ0aXN0IDwtIE11c2ljQWxidW0gPC0gQXVkaW9cblxuICAgSmVsbHlmaW4gY29uc2lkZXJzIHRoYXQgRm9sZGVyIChcIm1lZGlhXCIgXCI5MmZkZTcxZDBlYzU3N2I1MzFlN2IzNDI3YjIyM2JlZFwiKSA9PSBDb2xsZWN0aW9uRm9sZGVyIChcIk11c2ljTGliXCIgXCIxNTA4NDhjZDRmNDRiOWFlMzJlYzVhNzkzNGRlMzljZVwiKVxuXG4gICBUaGlzIGVxdWFsaXR5IGNhbiBiZSByZXRyaXZlZCBieSBxdWVyeWluZyB0aGUgXCJWaXJ0dWFsRm9sZGVyc1wiIGFuZCBsb29rIGF0XG4gICB0aGUgbG9jYXRpb25zJyBwYXRocy4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIG5vdCBhY2Nlc3NpYmxlIHRvIHVucHJpdmlsZWRnZWQgdXNlcnMuLi5cblxuICAgVG8gYWN0dWFsbHkga25vdyB3aGljaCBmb2xkZXJzIGFyZSBwYXJ0IG9mIGEgdXNlciB2aWV3IHdlIG5lZWQgdG8gcXVlcnkgdGhlXG4gICBpdGVtcyB0aGF0IGhhdmUgdGhpcyB2aWV3J3MgaWQgYXMgYSBbcGFyZW50SWRdLiBUaGUgYWN0dWFsIFtwYXJlbnRJZF0gb2ZcbiAgIHRoZXNlIGl0ZW1zIHdpbGwgYmUgZGlmZmVyZW50IGFuZCBhcmUgdGhlIGlkcyBhY3R1YWwgZm9sZGVycyB0aGF0XG4gICBjb25zdGl0dXRlIHRoaXMgdmlldy5cblxuICAgRm9yIHNpbXBsaWNpdHkgKD8pIHdlIGNvbnNpZGVyIHRoYXQgYW4gaXRlbSBpcyBwYXJ0IG9mIGEgdmlldyBpZiBpdHMgcGF0aCBpc1xuICAgcHJlZml4ZWQgYnkgb25lIG9mIHRoZSB2aWV3J3MgdmlydHVhbCBmb2xkZXIgbG9jYXRpb25zLlxuKilcblxubGV0IGNodW5rX3NpemUgPSA1MDBcbmxldCBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbIFNvdXJjZS5BcGkuSXRlbS5NdXNpY0FydGlzdDsgTXVzaWNBbGJ1bTsgQXVkaW8gXVxuXG5sZXQgZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHJlcyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAge1xuICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpKilcbiAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgIGZpZWxkcyA9IFtdO1xuICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgbGltaXQgPSBTb21lIDA7XG4gICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAoKVxuICBpblxuICByZXMudG90YWxfcmVjb3JkX2NvdW50XG5cbnR5cGUgZGJfaW5mb3MgPSB7XG4gIGxhc3Rfa2V5IDogaW50IG9wdGlvbjtcbiAgbGFzdF92YWx1ZSA6IFN0b3Jlcy5PcmRlcnJlZF9pdGVtcy50IG9wdGlvbjtcbn1cblxubGV0IGdldF9kYl9pbmZvcyBpZGIgPVxuICBsZXQgaW5mb3MsIHNldF9pbmZvcyA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgbGV0IHRyYW5zYWN0aW9uID0gRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWRvbmx5IGlkYiBpblxuICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgbGV0IHJlcSA9IE9JLm9wZW5fY3Vyc29yIH5kaXJlY3Rpb246UHJldiBzdG9yZSBpblxuICBsZXQgbGFzdF9rZXkgPSByZWYgTm9uZSBpblxuICBsZXQgXyA9XG4gICAgUmVxdWVzdC5vbl9zdWNjZXNzIHJlcSB+ZjooZnVuIF8gcSAtPlxuICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCBxIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHNldF9pbmZvcyB7IGxhc3Rfa2V5ID0gIWxhc3Rfa2V5OyBsYXN0X3ZhbHVlID0gTm9uZSB9XG4gICAgICAgIHwgU29tZSBjdXJzb3IgLT4gKFxuICAgICAgICAgICAgaWYgT3B0aW9uLmlzX25vbmUgIWxhc3Rfa2V5IHRoZW5cbiAgICAgICAgICAgICAgbGFzdF9rZXkgOj0gT0kuQ3Vyc29yX3dpdGhfdmFsdWUua2V5IGN1cnNvcjtcbiAgICAgICAgICAgIG1hdGNoIE9JLkN1cnNvcl93aXRoX3ZhbHVlLnZhbHVlIGN1cnNvciB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgKHsgaXRlbSA9IFNvbWUgXzsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgICAgc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBTb21lIGl0ZW0gfVxuICAgICAgICAgICAgfCBfIC0+IE9JLkN1cnNvcl93aXRoX3ZhbHVlLmNvbnRpbnVlIGN1cnNvcikpXG4gIGluXG4gIGluZm9zXG5cbmxldCBpc19kYl9jb25zaXN0ZW50IH5zb3VyY2U6XyB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfc3luY19pbmZvcyA9XG4gIGxldCBsYXN0X2tleSA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDooLTEpIGRiX3N5bmNfaW5mb3MubGFzdF9rZXkgaW5cbiAgaWYgbGFzdF9rZXkgPiBsYXN0X3NvdXJjZV9pdGVtX2tleSB0aGVuXG4gICAgKCogVGhlcmUgYXJlIGZld2VyIGl0ZW1zIGluIHRoZSBzb3VyY2UgdGhhbiBleHBlY3RlZCAqKVxuICAgIGZhbHNlXG4gIGVsc2VcbiAgICAoKiBUb2RvOiBjaGVjayB0aGF0IHRoZSBsYXN0IGtub3duIGl0ZW0gaXMgdGhlIHNhbWUgdGhhbiBpbiB0aGUgc291cmNlICopXG4gICAgdHJ1ZVxuXG50eXBlIHN0YXR1cyA9XG4gIHwgVW5rbm93blxuICB8IEluX3N5bmNcbiAgfCBJbmNvbnNpc3RlbnRcbiAgfCBOZXdfaXRlbXMgb2Yge1xuICAgICAgZmlyc3RfbWlzc2luZ19rZXkgOiBpbnQ7XG4gICAgICBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50O1xuICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgOiBpbnQ7XG4gICAgfVxuICB8IFBhcnRpYWxfZmV0Y2ggb2YgeyBmaXJzdF91bmZldGNoZWRfa2V5IDogaW50OyBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludCB9XG5cbnR5cGUgcHJvZ3Jlc3MgPSB7IHRvdGFsIDogaW50OyByZW1haW5pbmcgOiBpbnQgfVxudHlwZSByZXBvcnQgPSB7IHN0YXR1cyA6IHN0YXR1czsgc3luY19wcm9ncmVzcyA6IHByb2dyZXNzIG9wdGlvbiB9XG5cbmxldCBpbml0aWFsX3JlcG9ydCA9IHsgc3RhdHVzID0gVW5rbm93bjsgc3luY19wcm9ncmVzcyA9IE5vbmUgfVxuXG5sZXQgbG9nX3N0YXR1cyA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93biAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIHN0YXR1cyBpcyB1bmtub3duXCIgXVxuICB8IEluX3N5bmMgLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBpcyBzeW5jaHJvbml6ZWRcIiBdXG4gIHwgSW5jb25zaXN0ZW50IC0+IENvbnNvbGUud2FybiBbIFwiRGF0YWJhc2UgaXMgb3V0LW9mLXN5bmNcIiBdXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIk5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2UuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF9taXNzaW5nX2tleSArIDE7XG4gICAgICAgICAgXCJuZXcgaXRlbXNcIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgQ29uc29sZS5pbmZvXG4gICAgICAgIFtcbiAgICAgICAgICBcIlNvbWUgaXRlbXMgaGF2ZSBub3QgYmVlbiBmZXRjaGVkIHlldC5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X3VuZmV0Y2hlZF9rZXkgKyAxO1xuICAgICAgICAgIFwidW5mZXRjaGVkIGl0ZW1zXCI7XG4gICAgICAgIF1cblxubGV0IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KiBkYl9pbmZvcyA9IGdldF9kYl9pbmZvcyBpZGIgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB0b3RhbF9pdGVtX2NvdW50ID0gZmV0Y2hfdG90YWxfaXRlbV9jb3VudCBzb3VyY2UgaW5cbiAgKCogS2V5cyBzdGFydCBhdCAwLCBpdCdzIG5hdHVyYWwgdG8gY291bnQgaXRlbSBieSBzdGFydGluZyB3aXRoIDAgKilcbiAgbGV0IGxhc3Rfc291cmNlX2l0ZW1fa2V5ID0gdG90YWxfaXRlbV9jb3VudCAtIDEgaW5cbiAgaWYgbm90IChpc19kYl9jb25zaXN0ZW50IH5zb3VyY2Ugfmxhc3Rfc291cmNlX2l0ZW1fa2V5IGRiX2luZm9zKSB0aGVuXG4gICAgSW5jb25zaXN0ZW50XG4gIGVsc2VcbiAgICBtYXRjaCBkYl9pbmZvcyB3aXRoXG4gICAgfCB7IGxhc3Rfa2V5ID0gTm9uZTsgbGFzdF92YWx1ZSA9IE5vbmUgfSAtPlxuICAgICAgICAoKiBUaGUgZGIgaGFzIG5vdCB5ZXQgYmVlbiBwb3B1bGF0ZWQgd2l0aCBwbGFjZWhvbGRlcnMgKilcbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSAwO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPCBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT5cbiAgICAgICAgKCogTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZSBzaW5jZSB0aGUgbGFzdCBzeW5jICopXG4gICAgICAgIGxldCBmaXJzdF91bmZldGNoZWRfa2V5ID1cbiAgICAgICAgICBtYXRjaCBpdGVtIHdpdGggTm9uZSAtPiAwIHwgU29tZSB7IGlkOyBfIH0gLT4gaWQgKyAxXG4gICAgICAgIGluXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0ga2V5ICsgMTtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXk7XG4gICAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgICAgICB9XG4gICAgfCB7IGxhc3Rfa2V5ID0gU29tZSBrZXk7IGxhc3RfdmFsdWUgPSBpdGVtIH0gd2hlbiBrZXkgPSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICAgICAgLT4gKFxuICAgICAgICBtYXRjaCBpdGVtIHdpdGhcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSB3aGVuIGlkID0ga2V5IC0+IEluX3N5bmNcbiAgICAgICAgfCBTb21lIHsgaWQ7IF8gfSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSBpZCArIDE7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IDA7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0pXG4gICAgfCBfIC0+IEluY29uc2lzdGVudFxuXG5sZXQgdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHZpZXdzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuVmlld3MpXG4gICAgICB7IGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA9IGZhbHNlIH1cbiAgICAgIHsgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQgfVxuICBpblxuICBMaXN0Lml0ZXIgdmlld3MuaXRlbXMgfmY6KGZ1biAoaXRlbSA6IEl0ZW0udCkgLT5cbiAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgaW5cbiAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICBJLnB1dCB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gLTE7IHZpZXdzID0gW107IHNvcnRfbmFtZSB9OyBpdGVtIH0gc19pdGVtc1xuICAgICAgfD4gaWdub3JlKTtcbiAgdmlld3NcblxubGV0IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2UgKHZpZXdzIDogVmlld3MucmVzcG9uc2UpID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB7IEl0ZW0uaWQ7IF8gfSA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBTb21lIGlkO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5mb2xkX2xlZnQgfmluaXQ6U3RyaW5nLlNldC5lbXB0eSByZXMuaXRlbXNcbiAgICAgIH5mOihmdW4gc2V0IHsgSXRlbS5wYXJlbnRfaWQ7IF8gfSAtPlxuICAgICAgICBtYXRjaCBwYXJlbnRfaWQgd2l0aFxuICAgICAgICB8IE5vbmUgfCBTb21lIE5vbmUgLT4gc2V0XG4gICAgICAgIHwgU29tZSAoU29tZSBwaWQpIC0+IFN0cmluZy5TZXQuYWRkIHBpZCBzZXQpXG4gIGluXG4gIGxldCBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFN0cmluZy5TZXQudG9fbGlzdCBwYXJlbnRzO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXRoIF07XG4gICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXMgPSBbXTtcbiAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICAgIGxpbWl0ID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9ieSA9IFtdO1xuICAgICAgICAgICAgcmVjdXJzaXZlID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAoKVxuICAgIGluXG4gICAgTGlzdC5maWx0ZXJfbWFwIHJlcy5pdGVtcyB+ZjooZnVuIHsgSXRlbS5pZDsgcGF0aDsgXyB9IC0+XG4gICAgICAgIE9wdGlvbi5tYXAgKGZ1biBwYXRoIC0+IChpZCwgcGF0aCkpIHBhdGgpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgbGV0KyByZXN1bHQgPVxuICAgIExpc3QubWFwIHZpZXdzLml0ZW1zIH5mOihmdW4gKHsgSXRlbS5pZDsgXyB9IGFzIHZpZXcpIC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCogcGFyZW50cyA9IHBhcmVudF9pZHNfb2Zfdmlld19jaGlsZHJlbiB2aWV3IGluXG4gICAgICAgIGxldCsgcGF0aHMgPSBwYXRoc19vZl9wYXJlbnRzIHBhcmVudHMgaW5cbiAgICAgICAgKGlkLCBwYXRocykpXG4gICAgfD4gRnV0Lm9mX2xpc3RcbiAgaW5cbiAgUmVzdWx0LmZsYXR0ZW5fbCByZXN1bHRcblxubGV0IHZpZXdzX29mX3BhdGggKHZmb2xkZXJzIDogKHN0cmluZyAqIChzdHJpbmcgKiBzdHJpbmcpIGxpc3QpIGxpc3QpIHBhdGggPVxuICAoKiBXZSBsb29rIGF0IHRoZSBwcmVmaXggb2YgYSBwYXRoIHRvIGRldGVybWluZSB3aGljaCB2aXJ0dWFsX2ZvbGRlciAoYW5kIHRodXNcbiAgICAgdmlldykgaXQncyBhIHBhcnQgb2YuICopXG4gIExpc3QuZmlsdGVyX21hcCB2Zm9sZGVycyB+ZjooZnVuICh2aWV3X2lkLCBsb2NhdGlvbnMpIC0+XG4gICAgICBpZiBMaXN0LmV4aXN0cyBsb2NhdGlvbnMgfmY6KGZ1biAoXywgcHJlKSAtPiBTdHJpbmcucHJlZml4IH5wcmUgcGF0aCkgdGhlblxuICAgICAgICBTb21lIHZpZXdfaWRcbiAgICAgIGVsc2UgTm9uZSlcblxubGV0IHN5bmMgPyhyZXBvcnQgPSBmdW4gXyAtPiAoKSkgfihzb3VyY2UgOiBTb3VyY2UuY29ubmV4aW9uKSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3QgbGFzdCA9XG4gICAgKCogdG9kbzogZXJyb3IgaGFuZGxpbmcgKilcbiAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICBpblxuICAgIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgIGZvciBpID0gZmlyc3QgdG8gbGFzdCBkb1xuICAgICAgaWdub3JlIEBAIE9JLnB1dCB7IGlkID0gaTsgaXRlbSA9IE5vbmUgfSBzdG9yZVxuICAgIGRvbmVcbiAgaW5cbiAgbGV0IGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3QgbGFzdCA9XG4gICAgbGV0IG9wZW4gU291cmNlIGluXG4gICAgbGV0KiB2aWV3cyA9IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiIGluXG4gICAgbGV0KiB2Zm9sZGVycyA9IGRlZHVjZV92aXJ0dWFsX2ZvbGRlcnNfZnJvbV92aWV3cyBzb3VyY2Ugdmlld3MgaW5cbiAgICBsZXQgKCkgPSBDb25zb2xlLmluZm8gWyBcIkZldGNoaW5nIGl0ZW1zXCI7IGZpcnN0OyBcInRvXCI7IGxhc3Q7IFwiOlwiIF0gaW5cbiAgICBsZXQgZmV0Y2hfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgdG90YWwgPSBsYXN0IC0gZmlyc3QgKyAxIGluXG4gICAgbGV0IHJlYyBlbnF1ZXVlIH5zdGFydF9pbmRleCB0b2RvID1cbiAgICAgIGlmIHRvZG8gPiAwIHRoZW4gKFxuICAgICAgICBsZXQgbGltaXQgPSBtaW4gdG9kbyBjaHVua19zaXplIGluXG4gICAgICAgIGxldCByZXEgPVxuICAgICAgICAgIEFwaS5JdGVtcy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkgKilcbiAgICAgICAgICAgICAgaWRzID0gW107XG4gICAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgICBmaWVsZHMgPSBbIFBhcmVudElkOyBQYXRoIF07XG4gICAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcztcbiAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBTb21lIHN0YXJ0X2luZGV4O1xuICAgICAgICAgICAgICBsaW1pdCA9IFNvbWUgbGltaXQ7XG4gICAgICAgICAgICAgIHNvcnRfb3JkZXIgPSBTb21lIEFzY2VuZGluZztcbiAgICAgICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICAgICAgcmVjdXJzaXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgaW5cbiAgICAgICAgUXVldWUuYWRkIHJlcSBmZXRjaF9xdWV1ZTtcbiAgICAgICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6KHN0YXJ0X2luZGV4ICsgbGltaXQpICh0b2RvIC0gbGltaXQpKVxuICAgIGluXG4gICAgZW5xdWV1ZSB+c3RhcnRfaW5kZXg6Zmlyc3QgdG90YWw7XG4gICAgbGV0IHRvdGFsX3F1ZXJpZXMgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgaW5cbiAgICBsZXQgcmVjIHJ1bl9xdWV1ZSA/KHRocmVhZHMgPSAxKSBxID1cbiAgICAgIGFzc2VydCAodGhyZWFkcyA+IDApO1xuICAgICAgbGV0IHJlYyB0YWtlX24gYWNjIG4gPVxuICAgICAgICBpZiBuID0gMCB0aGVuIExpc3QucmV2IGFjY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgbWF0Y2ggUXVldWUudGFrZV9vcHQgcSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgICAgIHwgU29tZSBlbHQgLT4gdGFrZV9uIChlbHQgOjogYWNjKSAobiAtIDEpXG4gICAgICBpblxuICAgICAgbGV0IGYgcmVxID1cbiAgICAgICAgbGV0KyB7IEFwaS5JdGVtcy5zdGFydF9pbmRleDsgaXRlbXM7IF8gfSA9XG4gICAgICAgICAgcXVlcnkgc291cmNlIChtb2R1bGUgQXBpLkl0ZW1zKSByZXEgKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICByZXBvcnRcbiAgICAgICAgICBAQCBTb21lXG4gICAgICAgICAgICAgICB7IHRvdGFsID0gdG90YWxfcXVlcmllczsgcmVtYWluaW5nID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIH1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zID1cbiAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpOyAobW9kdWxlIEkpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHNfbGlzdCA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIGxldCBzX2l0ZW1zID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBMaXN0Lml0ZXJpIGl0ZW1zIH5mOihmdW4gaW5kZXggKHsgQXBpLkl0ZW0uaWQ7IHBhdGg7IF8gfSBhcyBpdGVtKSAtPlxuICAgICAgICAgICAgICBsZXQgaW5kZXggPSBzdGFydF9pbmRleCArIGluZGV4IGluXG4gICAgICAgICAgICAgIGxldCBwYXRoID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OlwiXCIgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgdmlld3MgPSB2aWV3c19vZl9wYXRoIHZmb2xkZXJzIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgICAgICAgICAgaWdub3JlIChPSS5wdXQgeyBpZCA9IGluZGV4OyBpdGVtID0gU29tZSBpZCB9IHNfbGlzdCk7XG4gICAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgICAgIChJLnB1dFxuICAgICAgICAgICAgICAgICAgIHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSBpbmRleDsgdmlld3M7IHNvcnRfbmFtZSB9OyBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICBzX2l0ZW1zKSlcbiAgICAgICAgaW5cbiAgICAgICAgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXNcbiAgICAgIGluXG4gICAgICBsZXQgcmVxcyA9IHRha2VfbiBbXSB0aHJlYWRzIGluXG4gICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICBsZXQqIHJlcXMgPSBGdXQub2ZfbGlzdCAoTGlzdC5tYXAgfmYgcmVxcykgaW5cbiAgICAgIGlmIExpc3QuaXNfZW1wdHkgcmVxcyB0aGVuIEZ1dC5vayAoKSBlbHNlIHJ1bl9xdWV1ZSBxXG4gICAgaW5cbiAgICBydW5fcXVldWUgZmV0Y2hfcXVldWVcbiAgaW5cbiAgZnVuY3Rpb25cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdF9taXNzaW5nX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleTtcbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBJbmNvbnNpc3RlbnQgLT4gRnV0Lm9rICgpXG4gIHwgXyAtPiBGdXQub2sgKClcblxubGV0IGNoZWNrX2FuZF9zeW5jID9yZXBvcnQgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQqIHN0YXR1cyA9IGNoZWNrX3N0YXR1cyB+c291cmNlIGlkYiBpblxuICBsZXQgaW5pdGlhbCA9IHsgaW5pdGlhbF9yZXBvcnQgd2l0aCBzdGF0dXMgfSBpblxuICBsZXQgcmVwb3J0JyA9XG4gICAgT3B0aW9uLm1hcFxuICAgICAgKGZ1biByZXBvcnQgLT5cbiAgICAgICAgbGV0ICgpID0gKCogU2VuZCBhIGZpcnN0IHJlcG9ydCAqKSByZXBvcnQgaW5pdGlhbCBpblxuICAgICAgICBmdW4gc3luY19wcm9ncmVzcyAtPiByZXBvcnQgeyBpbml0aWFsIHdpdGggc3luY19wcm9ncmVzcyB9KVxuICAgICAgcmVwb3J0XG4gIGluXG4gIGxldCsgKCkgPSBzeW5jID9yZXBvcnQ6cmVwb3J0JyB+c291cmNlIGlkYiBzdGF0dXMgaW5cbiAgT3B0aW9uLml0ZXJcbiAgICAoZnVuIHJlcG9ydCAtPiByZXBvcnQgeyBzdGF0dXMgPSBJbl9zeW5jOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9KVxuICAgIHJlcG9ydFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgVGhpcyBpcyBhIGxhZ2dlZC1GaWJvbmFjY2kgRig1NSwgMjQsICspIHdpdGggYSBtb2RpZmllZCBhZGRpdGlvblxuICAgZnVuY3Rpb24gdG8gZW5oYW5jZSB0aGUgbWl4aW5nIG9mIGJpdHMuXG4gICBJZiB3ZSB1c2Ugbm9ybWFsIGFkZGl0aW9uLCB0aGUgbG93LW9yZGVyIGJpdCBmYWlscyB0ZXN0cyAxIGFuZCA3XG4gICBvZiB0aGUgRGllaGFyZCB0ZXN0IHN1aXRlLCBhbmQgYml0cyAxIGFuZCAyIGFsc28gZmFpbCB0ZXN0IDcuXG4gICBJZiB3ZSB1c2UgbXVsdGlwbGljYXRpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcnNhZ2xpYSwgaXQgZG9lc24ndCBmYXJlXG4gICBtdWNoIGJldHRlci5cbiAgIEJ5IG1peGluZyB0aGUgYml0cyBvZiBvbmUgb2YgdGhlIG51bWJlcnMgYmVmb3JlIGFkZGl0aW9uIChYT1IgdGhlXG4gICA1IGhpZ2gtb3JkZXIgYml0cyBpbnRvIHRoZSBsb3ctb3JkZXIgYml0cyksIHdlIGdldCBhIGdlbmVyYXRvciB0aGF0XG4gICBwYXNzZXMgYWxsIHRoZSBEaWVoYXJkIHRlc3RzLlxuKilcblxuZXh0ZXJuYWwgcmFuZG9tX3NlZWQ6IHVuaXQgLT4gaW50IGFycmF5ID0gXCJjYW1sX3N5c19yYW5kb21fc2VlZFwiXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHsgc3QgOiBpbnQgYXJyYXk7IG11dGFibGUgaWR4IDogaW50IH1cblxuICBsZXQgbmV3X3N0YXRlICgpID0geyBzdCA9IEFycmF5Lm1ha2UgNTUgMDsgaWR4ID0gMCB9XG4gIGxldCBhc3NpZ24gc3QxIHN0MiA9XG4gICAgQXJyYXkuYmxpdCBzdDIuc3QgMCBzdDEuc3QgMCA1NTtcbiAgICBzdDEuaWR4IDwtIHN0Mi5pZHhcblxuXG4gIGxldCBmdWxsX2luaXQgcyBzZWVkID1cbiAgICBsZXQgY29tYmluZSBhY2N1IHggPSBEaWdlc3Quc3RyaW5nIChhY2N1IF4gSW50LnRvX3N0cmluZyB4KSBpblxuICAgIGxldCBleHRyYWN0IGQgPVxuICAgICAgQ2hhci5jb2RlIGQuWzBdICsgKENoYXIuY29kZSBkLlsxXSBsc2wgOCkgKyAoQ2hhci5jb2RlIGQuWzJdIGxzbCAxNilcbiAgICAgICsgKENoYXIuY29kZSBkLlszXSBsc2wgMjQpXG4gICAgaW5cbiAgICBsZXQgc2VlZCA9IGlmIEFycmF5Lmxlbmd0aCBzZWVkID0gMCB0aGVuIFt8IDAgfF0gZWxzZSBzZWVkIGluXG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggc2VlZCBpblxuICAgIGZvciBpID0gMCB0byA1NCBkb1xuICAgICAgcy5zdC4oaSkgPC0gaTtcbiAgICBkb25lO1xuICAgIGxldCBhY2N1ID0gcmVmIFwieFwiIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0ICsgSW50Lm1heCA1NSBsIGRvXG4gICAgICBsZXQgaiA9IGkgbW9kIDU1IGluXG4gICAgICBsZXQgayA9IGkgbW9kIGwgaW5cbiAgICAgIGFjY3UgOj0gY29tYmluZSAhYWNjdSBzZWVkLihrKTtcbiAgICAgIHMuc3QuKGopIDwtIChzLnN0LihqKSBseG9yIGV4dHJhY3QgIWFjY3UpIGxhbmQgMHgzRkZGRkZGRjsgICgqIFBSIzU1NzUgKilcbiAgICBkb25lO1xuICAgIHMuaWR4IDwtIDBcblxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBmdWxsX2luaXQgcmVzdWx0IHNlZWQ7XG4gICAgcmVzdWx0XG5cblxuICBsZXQgbWFrZV9zZWxmX2luaXQgKCkgPSBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgYXNzaWduIHJlc3VsdCBzO1xuICAgIHJlc3VsdFxuXG5cbiAgKCogUmV0dXJucyAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDEwNzM3NDE4MjQgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgcy5pZHggPC0gKHMuaWR4ICsgMSkgbW9kIDU1O1xuICAgIGxldCBjdXJ2YWwgPSBzLnN0LihzLmlkeCkgaW5cbiAgICBsZXQgbmV3dmFsID0gcy5zdC4oKHMuaWR4ICsgMjQpIG1vZCA1NSlcbiAgICAgICAgICAgICAgICAgKyAoY3VydmFsIGx4b3IgKChjdXJ2YWwgbHNyIDI1KSBsYW5kIDB4MUYpKSBpblxuICAgIGxldCBuZXd2YWwzMCA9IG5ld3ZhbCBsYW5kIDB4M0ZGRkZGRkYgaW4gICgqIFBSIzU1NzUgKilcbiAgICBzLnN0LihzLmlkeCkgPC0gbmV3dmFsMzA7XG4gICAgbmV3dmFsMzBcblxuXG4gIGxldCByZWMgaW50YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBiaXRzIHMgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IDB4M0ZGRkZGRkYgLSBuICsgMSB0aGVuIGludGF1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludGF1eCBzIGJvdW5kXG5cbiAgbGV0IHJlYyBpbnQ2M2F1eCBzIG4gPVxuICAgIGxldCBtYXhfaW50XzMyID0gKDEgbHNsIDMwKSArIDB4M0ZGRkZGRkYgaW4gKCogMHg3RkZGRkZGRiAqKVxuICAgIGxldCBiMSA9IGJpdHMgcyBpblxuICAgIGxldCBiMiA9IGJpdHMgcyBpblxuICAgIGxldCAociwgbWF4X2ludCkgPVxuICAgICAgaWYgbiA8PSBtYXhfaW50XzMyIHRoZW5cbiAgICAgICAgKCogMzEgcmFuZG9tIGJpdHMgb24gYm90aCA2NC1iaXQgT0NhbWwgYW5kIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAxNSBiaXRzIG9mIGIxIGFuZCAxNiBiaXRzIG9mIGIyLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoYjIgbGFuZCAweDNGRkZDMDAwKSBsc2wgMSkgbG9yIChiMSBsc3IgMTUpKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50XzMyKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgYjMgPSBiaXRzIHMgaW5cbiAgICAgICAgKCogNjIgcmFuZG9tIGJpdHMgb24gNjQtYml0IE9DYW1sOyB1bnJlYWNoYWJsZSBvbiBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMjAgYml0cyBvZiBiMSBhbmQgMjEgYml0cyBvZiBiMiBhbmQgYjMuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKCgoYjMgbGFuZCAweDNGRkZGRTAwKSBsc2wgMTIpIGxvciAoYjIgbHNyIDkpKSBsc2wgMjApXG4gICAgICAgICAgICBsb3IgKGIxIGxzciAxMClcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludClcbiAgICBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gbWF4X2ludCAtIG4gKyAxIHRoZW4gaW50NjNhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICBlbHNlIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB0aGVuXG4gICAgICBpbnQ2M2F1eCBzIGJvdW5kXG4gICAgZWxzZVxuICAgICAgaW50YXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQzMi5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQzMi5zaGlmdF9sZWZ0IChJbnQzMi5vZl9pbnQgKGJpdHMgcyBsYW5kIDEpKSAzMCBpblxuICAgIGxldCByID0gSW50MzIubG9nb3IgYjEgYjIgaW5cbiAgICBsZXQgdiA9IEludDMyLnJlbSByIG4gaW5cbiAgICBpZiBJbnQzMi5zdWIgciB2ID4gSW50MzIuYWRkIChJbnQzMi5zdWIgSW50MzIubWF4X2ludCBuKSAxbFxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50NjQub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMpKSAzMCBpblxuICAgIGxldCBiMyA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzIGxhbmQgNykpIDYwIGluXG4gICAgbGV0IHIgPSBJbnQ2NC5sb2dvciBiMSAoSW50NjQubG9nb3IgYjIgYjMpIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgaWYgSW50NjQuc3ViIHIgdiA+IEludDY0LmFkZCAoSW50NjQuc3ViIEludDY0Lm1heF9pbnQgbikgMUxcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG5cbiAgbGV0IG5hdGl2ZWludCA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgYm91bmQgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMiBzIChOYXRpdmVpbnQudG9faW50MzIgYm91bmQpKVxuICAgIGVsc2UgZnVuIHMgYm91bmQgLT4gSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NCBzIChJbnQ2NC5vZl9uYXRpdmVpbnQgYm91bmQpKVxuXG5cbiAgKCogUmV0dXJucyBhIGZsb2F0IDAgPD0geCA8PSAxIHdpdGggYXQgbW9zdCA2MCBiaXRzIG9mIHByZWNpc2lvbi4gKilcbiAgbGV0IHJhd2Zsb2F0IHMgPVxuICAgIGxldCBzY2FsZSA9IDEwNzM3NDE4MjQuMCAgKCogMl4zMCAqKVxuICAgIGFuZCByMSA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGFuZCByMiA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGluIChyMSAvLiBzY2FsZSArLiByMikgLy4gc2NhbGVcblxuXG4gIGxldCBmbG9hdCBzIGJvdW5kID0gcmF3ZmxvYXQgcyAqLiBib3VuZFxuXG4gIGxldCBib29sIHMgPSAoYml0cyBzIGxhbmQgMSA9IDApXG5cbiAgbGV0IGJpdHMzMiBzID1cbiAgICBsZXQgYjEgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBJbnQzMi4obG9nb3IgYjEgKHNoaWZ0X2xlZnQgYjIgMTYpKVxuXG4gIGxldCBiaXRzNjQgcyA9XG4gICAgbGV0IGIxID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMyA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDgpIGluICAoKiAyMiBiaXRzICopXG4gICAgSW50NjQuKGxvZ29yIGIxIChsb2dvciAoc2hpZnRfbGVmdCBiMiAyMSkgKHNoaWZ0X2xlZnQgYjMgNDIpKSlcblxuICBsZXQgbmF0aXZlYml0cyA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChiaXRzMzIgcylcbiAgICBlbHNlIGZ1biBzIC0+IEludDY0LnRvX25hdGl2ZWludCAoYml0czY0IHMpXG5cbmVuZFxuXG4oKiBUaGlzIGlzIHRoZSBzdGF0ZSB5b3UgZ2V0IHdpdGggW2luaXQgMjcxODI4MThdIGFuZCB0aGVuIGFwcGx5aW5nXG4gICB0aGUgXCJsYW5kIDB4M0ZGRkZGRkZcIiBmaWx0ZXIgdG8gdGhlbS4gIFNlZSAjNTU3NSwgIzU3OTMsICM1OTc3LiAqKVxubGV0IGRlZmF1bHQgPSB7XG4gIFN0YXRlLnN0ID0gW3xcbiAgICAgIDB4M2FlMjUyMmI7IDB4MWQ4ZDQ2MzQ7IDB4MTViNGZhZDA7IDB4MThiMTRhY2U7IDB4MTJmOGEzYzQ7IDB4M2IwODZjNDc7XG4gICAgICAweDE2ZDQ2N2Q2OyAweDEwMWQ5MWM3OyAweDMyMWRmMTc3OyAweDAxNzZjMTkzOyAweDFmZjcyYmYxOyAweDFlODg5MTA5O1xuICAgICAgMHgwYjQ2NGIxODsgMHgyYjg2Yjk3YzsgMHgwODkxZGE0ODsgMHgwMzEzNzQ2MzsgMHgwODVhYzVhMTsgMHgxNWQ2MWYyZjtcbiAgICAgIDB4M2JjZWQzNTk7IDB4MjljMWMxMzI7IDB4M2E4Njc2NmU7IDB4MzY2ZDhjODY7IDB4MWY1YjYyMjI7IDB4M2NlMWI1OWY7XG4gICAgICAweDJlYmY3OGUxOyAweDI3Y2QxYjg2OyAweDI1OGYzZGMzOyAweDM4OWE4MTk0OyAweDAyZTRjNDRjOyAweDE4YzQzZjdkO1xuICAgICAgMHgwZjZlNTM0ZjsgMHgxZTdkZjM1OTsgMHgwNTVkMGI3ZTsgMHgxMGU4NGU3ZTsgMHgxMjYxOThlNDsgMHgwZTc3MjJjYjtcbiAgICAgIDB4MWNiZWRlMjg7IDB4MzM5MWI5NjQ7IDB4M2Q0MGU5MmE7IDB4MGM1OTkzM2Q7IDB4MGI4Y2QwYjc7IDB4MjRlZmZmMWM7XG4gICAgICAweDI4MDNmZGFhOyAweDA4ZWJjNzJlOyAweDBmNTIyZTMyOyAweDA1Mzk4ZWRjOyAweDIxNDRhMDRjOyAweDBhZWYzY2JkO1xuICAgICAgMHgwMWFkNDcxOTsgMHgzNWI5M2NkNjsgMHgyYTU1OWQ0ZjsgMHgxZTZmZDc2ODsgMHgyNmUyN2YzNjsgMHgxODZmMThjMztcbiAgICAgIDB4MmZiZjk2N2E7XG4gICAgfF07XG4gIFN0YXRlLmlkeCA9IDA7XG59XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyBkZWZhdWx0XG5sZXQgaW50IGJvdW5kID0gU3RhdGUuaW50IGRlZmF1bHQgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIGRlZmF1bHQgYm91bmRcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDY0IGJvdW5kID0gU3RhdGUuaW50NjQgZGVmYXVsdCBib3VuZFxubGV0IGZsb2F0IHNjYWxlID0gU3RhdGUuZmxvYXQgZGVmYXVsdCBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIGRlZmF1bHRcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgZGVmYXVsdFxubGV0IGJpdHM2NCAoKSA9IFN0YXRlLmJpdHM2NCBkZWZhdWx0XG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuaW5jbHVkZSBJbnRcblxudHlwZSB0ID0gaW50XG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmxldCBhZGQgPSAoICsgKVxubGV0IHN1YiA9ICggLSApXG5sZXQgbXVsID0gKCAqIClcbmxldCBkaXYgPSAoIC8gKVxubGV0IHN1Y2MgPSBzdWNjXG5sZXQgcHJlZCA9IHByZWRcbmxldCBhYnMgPSBhYnNcbmxldCBtYXhfaW50ID0gbWF4X2ludFxubGV0IG1pbl9pbnQgPSBtaW5faW50XG5sZXQgZXF1YWwgKGEgOiBpbnQpIGIgPSBTdGRsaWIuKCA9ICkgYSBiXG5sZXQgY29tcGFyZSAoYSA6IGludCkgYiA9IGNvbXBhcmUgYSBiXG5cbigqIHVzZSBGTlY6XG4gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3dsZXIlRTIlODAlOTNOb2xsJUUyJTgwJTkzVm9faGFzaF9mdW5jdGlvbiAqKVxubGV0IGhhc2ggKG4gOiBpbnQpIDogaW50ID1cbiAgbGV0IG9mZnNldF9iYXNpcyA9IDB4Y2JmMjljZTQ4NDIyMjMyNUwgaW5cbiAgbGV0IHByaW1lID0gMHgxMDAwMDAwMDFiM0wgaW5cblxuICBsZXQgaCA9IHJlZiBvZmZzZXRfYmFzaXMgaW5cbiAgZm9yIGsgPSAwIHRvIDcgZG9cbiAgICAoaCA6PSBJbnQ2NC4obXVsICFoIHByaW1lKSk7XG4gICAgKCogaCA6PSBoIHhvciAoay10aCBieXRlIG9mIG4pICopXG4gICAgaCA6PSBJbnQ2NC4obG9neG9yICFoIChvZl9pbnQgKChuIGxzciAoayAqIDgpKSBsYW5kIDB4ZmYpKSlcbiAgZG9uZTtcbiAgKCogdHJ1bmNhdGUgYmFjayB0byBpbnQgYW5kIHJlbW92ZSBzaWduICopXG4gIEludDY0LnRvX2ludCAhaCBsYW5kIG1heF9pbnRcblxubGV0IHJhbmdlIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgdXAgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgdXAgKGkgKyAxKSBqIHlpZWxkXG4gICAgKVxuICBhbmQgZG93biBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICBkb3duIChpIC0gMSkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogeWllbGRcbiAgZWxzZVxuICAgIGRvd24gaSBqIHlpZWxkXG5cbmxldCByYW5nZScgaSBqIHlpZWxkID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKSB5aWVsZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpIHlpZWxkXG5cbmxldCBzaWduIGkgPSBjb21wYXJlIGkgMFxubGV0IG5lZyBpID0gLWlcblxubGV0IHBvdyBhIGIgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgMSAtPiBhY2NcbiAgICB8IG4gLT5cbiAgICAgIGlmIG4gbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjICogYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgaW5cbiAgbWF0Y2ggYiB3aXRoXG4gIHwgMCAtPlxuICAgIGlmIGEgPSAwIHRoZW5cbiAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiB1bmRlZmluZWQgdmFsdWUgMF4wXCIpXG4gICAgZWxzZVxuICAgICAgMVxuICB8IGIgd2hlbiBiIDwgMCAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiBjYW4ndCByYWlzZSBpbnQgdG8gbmVnYXRpdmUgcG93ZXJcIilcbiAgfCBiIC0+IGF1eCBhIGJcblxubW9kdWxlIEluZml4IDogc2lnXG4gIHZhbCAoID0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPj0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIC0tICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoIC0tXiApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCArICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAtICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCB+LSApIDogdCAtPiB0XG4gIHZhbCAoICogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC8gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoICoqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBtb2QgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxhbmQgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbHhvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsIGxub3QgOiB0IC0+IHRcbiAgdmFsICggbHNsICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGxzciApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBhc3IgKSA6IHQgLT4gaW50IC0+IHRcbmVuZCA9IHN0cnVjdFxuICBpbmNsdWRlIFN0ZGxpYlxuXG4gIGxldCAoIC0tICkgPSByYW5nZVxuICBsZXQgKCAtLV4gKSA9IHJhbmdlJ1xuICBsZXQgKCAqKiApID0gcG93XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG5sZXQgbWluIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWluXG5sZXQgbWF4IDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWF4XG5cbmxldCBmbG9vcl9kaXYgYSBuID1cbiAgaWYgYSA8IDAgJiYgbiA+PSAwIHRoZW5cbiAgICAoKGEgKyAxKSAvIG4pIC0gMVxuICBlbHNlIGlmIGEgPiAwICYmIG4gPCAwIHRoZW5cbiAgICAoKGEgLSAxKSAvIG4pIC0gMVxuICBlbHNlXG4gICAgYSAvIG5cblxubGV0IGJvb2xfbmVxIChhIDogYm9vbCkgYiA9IFN0ZGxpYi4oIDw+ICkgYSBiXG5cbmxldCByZW0gYSBuID1cbiAgbGV0IHkgPSBhIG1vZCBuIGluXG4gIGlmIGJvb2xfbmVxICh5IDwgMCkgKG4gPCAwKSAmJiB5IDw+IDAgdGhlblxuICAgIHkgKyBuXG4gIGVsc2VcbiAgICB5XG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBuIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsgcmFuZG9tIChqIC0gaSkgc3RcbmxldCBwcCBmbXQgPSBGb3JtYXQucHBfcHJpbnRfaW50IGZtdFxubGV0IG1vc3Rfc2lnbmlmaWNhbnRfYml0ID0gLTEgbHhvciAoLTEgbHNyIDEpXG5sZXQgdG9fc3RyaW5nID0gc3RyaW5nX29mX2ludFxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IG9mX3N0cmluZ19leG4gPSBTdGRsaWIuaW50X29mX3N0cmluZ1xubGV0IHRvX2Zsb2F0ID0gZmxvYXRfb2ZfaW50XG5sZXQgb2ZfZmxvYXQgPSBpbnRfb2ZfZmxvYXRcblxudHlwZSBvdXRwdXQgPSBjaGFyIC0+IHVuaXRcblxuKCogYWJzdHJhY3QgcHJpbnRlciAqKVxubGV0IHRvX2JpbmFyeV9nZW4gKG91dCA6IG91dHB1dCkgbiA9XG4gIGxldCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIChcbiAgICAgIG91dCAnLSc7XG4gICAgICAtblxuICAgICkgZWxzZVxuICAgICAgblxuICBpblxuICBvdXQgJzAnO1xuICBvdXQgJ2InO1xuICBsZXQgcmVjIGxvb3Agc3RhcnRlZCBiaXQgbiA9XG4gICAgaWYgYml0ID0gMCB0aGVuIChcbiAgICAgIGlmIG5vdCBzdGFydGVkIHRoZW4gb3V0ICcwJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYiA9IG4gbGFuZCBiaXQgaW5cbiAgICAgIGlmIGIgPSAwIHRoZW4gKFxuICAgICAgICBpZiBzdGFydGVkIHRoZW4gb3V0ICcwJztcbiAgICAgICAgbG9vcCBzdGFydGVkIChiaXQgbHNyIDEpIG5cbiAgICAgICkgZWxzZSAoXG4gICAgICAgIG91dCAnMSc7XG4gICAgICAgIGxvb3AgdHJ1ZSAoYml0IGxzciAxKSBuXG4gICAgICApXG4gICAgKVxuICBpblxuICBsb29wIGZhbHNlIG1vc3Rfc2lnbmlmaWNhbnRfYml0IG5cblxubGV0IHBwX2JpbmFyeSBvdXQgbiA9IHRvX2JpbmFyeV9nZW4gKEZvcm1hdC5wcF9wcmludF9jaGFyIG91dCkgblxuXG5sZXQgdG9fc3RyaW5nX2JpbmFyeSBuID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgdG9fYmluYXJ5X2dlbiAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbjtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyByYW5nZSBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICByYW5nZSAoaSArIHN0ZXApIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDSW50LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSB5aWVsZFxuXG4oKlxuICBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhbW1pbmdfd2VpZ2h0XG5cbiAgLy9UaGlzIHVzZXMgZmV3ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIHRoYW4gYW55IG90aGVyIGtub3duXG4gIC8vaW1wbGVtZW50YXRpb24gb24gbWFjaGluZXMgd2l0aCBzbG93IG11bHRpcGxpY2F0aW9uLlxuICAvL0l0IHVzZXMgMTcgYXJpdGhtZXRpYyBvcGVyYXRpb25zLlxuICBpbnQgcG9wY291bnRfMih1aW50NjRfdCB4KSB7XG4gICAgeCAtPSAoeCA+PiAxKSAmIG0xOyAgICAgICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDIgYml0cyBpbnRvIHRob3NlIDIgYml0c1xuICAgIHggPSAoeCAmIG0yKSArICgoeCA+PiAyKSAmIG0yKTsgLy9wdXQgY291bnQgb2YgZWFjaCA0IGJpdHMgaW50byB0aG9zZSA0IGJpdHNcbiAgICB4ID0gKHggKyAoeCA+PiA0KSkgJiBtNDsgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggOCBiaXRzIGludG8gdGhvc2UgOCBiaXRzXG4gICAgeCArPSB4ID4+ICA4OyAgLy9wdXQgY291bnQgb2YgZWFjaCAxNiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAxNjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMzIgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMzI7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDY0IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgcmV0dXJuIHggJiAweDdmO1xuICB9XG5cbiAgIG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1XG4gICBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM1xuICAgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZcbiopXG5sZXQgcG9wY291bnQgKGIgOiBpbnQpIDogaW50ID1cbiAgbGV0IG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1TCBpblxuICBsZXQgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNMIGluXG4gIGxldCBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZkwgaW5cbiAgbGV0IG9wZW4gSW50NjQgaW5cbiAgbGV0IGIgPSBvZl9pbnQgYiBpblxuICAoKiBpbnQtPmludDY0ICopXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZmZmZmZmZmZmZmZmZmZmTCBpblxuXG4gICgqIHJlbW92ZSBzaWduIGJpdCwgd2UgZGVhbCB3aXRoIHVpbnQ2NCBoZXJlICopXG4gIGxldCBiID0gc3ViIGIgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDEpIG0xKSBpblxuICBsZXQgYiA9IGFkZCAobG9nYW5kIGIgbTIpIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAyKSBtMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgKGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgNCkpIG00IGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA4KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMTYpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAzMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmTCBpblxuICB0b19pbnQgYlxuXG5sZXQgbG9nYW5kID0gKCBsYW5kIClcbmxldCBsb2dvciA9ICggbG9yIClcbmxldCBsb2d4b3IgPSAoIGx4b3IgKVxubGV0IGxvZ25vdCA9IGxub3RcbmxldCBzaGlmdF9sZWZ0ID0gKCBsc2wgKVxubGV0IHNoaWZ0X3JpZ2h0ID0gKCBhc3IgKVxubGV0IHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgPSAoIGxzciApXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNldF90YWcgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial9zZXRfdGFnXCJcbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIHRydW5jYXRlIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuZXh0ZXJuYWwgYWRkX29mZnNldCA6IHQgLT4gSW50MzIudCAtPiB0ID0gXCJjYW1sX29ial9hZGRfb2Zmc2V0XCJcbmV4dGVybmFsIHdpdGhfdGFnIDogaW50IC0+IHQgLT4gdCA9IFwiY2FtbF9vYmpfd2l0aF90YWdcIlxuXG5sZXQgZmlyc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDBcbmxldCBsYXN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAyNDVcblxubGV0IGxhenlfdGFnID0gMjQ2XG5sZXQgY2xvc3VyZV90YWcgPSAyNDdcbmxldCBvYmplY3RfdGFnID0gMjQ4XG5sZXQgaW5maXhfdGFnID0gMjQ5XG5sZXQgZm9yd2FyZF90YWcgPSAyNTBcblxubGV0IG5vX3NjYW5fdGFnID0gMjUxXG5cbmxldCBhYnN0cmFjdF90YWcgPSAyNTFcbmxldCBzdHJpbmdfdGFnID0gMjUyXG5sZXQgZG91YmxlX3RhZyA9IDI1M1xubGV0IGRvdWJsZV9hcnJheV90YWcgPSAyNTRcbmxldCBjdXN0b21fdGFnID0gMjU1XG5sZXQgZmluYWxfdGFnID0gY3VzdG9tX3RhZ1xuXG5cbmxldCBpbnRfdGFnID0gMTAwMFxubGV0IG91dF9vZl9oZWFwX3RhZyA9IDEwMDFcbmxldCB1bmFsaWduZWRfdGFnID0gMTAwMlxuXG5tb2R1bGUgQ2xvc3VyZSA9IHN0cnVjdFxuICB0eXBlIGluZm8gPSB7XG4gICAgYXJpdHk6IGludDtcbiAgICBzdGFydF9lbnY6IGludDtcbiAgfVxuXG4gIGxldCBpbmZvX29mX3JhdyAoaW5mbyA6IG5hdGl2ZWludCkgPVxuICAgIGxldCBvcGVuIE5hdGl2ZWludCBpblxuICAgIGxldCBhcml0eSA9XG4gICAgICAoKiBzaWduZWQ6IG5lZ2F0aXZlIGZvciB0dXBsZWQgZnVuY3Rpb25zICopXG4gICAgICBpZiBTeXMud29yZF9zaXplID0gNjQgdGhlblxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gNTYpXG4gICAgICBlbHNlXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyAyNClcbiAgICBpblxuICAgIGxldCBzdGFydF9lbnYgPVxuICAgICAgKCogc3RhcnRfZW52IGlzIHVuc2lnbmVkLCBidXQgd2Uga25vdyBpdCBjYW4gYWx3YXlzIGZpdCBhbiBPQ2FtbFxuICAgICAgICAgaW50ZWdlciBzbyB3ZSB1c2UgW3RvX2ludF0gaW5zdGVhZCBvZiBbdW5zaWduZWRfdG9faW50XS4gKilcbiAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHRfbG9naWNhbCAoc2hpZnRfbGVmdCBpbmZvIDgpIDkpIGluXG4gICAgeyBhcml0eTsgc3RhcnRfZW52IH1cblxuICAoKiBub3RlOiB3ZSBleHBlY3QgYSBjbG9zdXJlLCBub3QgYW4gaW5maXggcG9pbnRlciAqKVxuICBsZXQgaW5mbyAob2JqIDogdCkgPVxuICAgIGFzc2VydCAodGFnIG9iaiA9IGNsb3N1cmVfdGFnKTtcbiAgICBpbmZvX29mX3JhdyAocmF3X2ZpZWxkIG9iaiAxKVxuZW5kXG5cbm1vZHVsZSBFeHRlbnNpb25fY29uc3RydWN0b3IgPVxuc3RydWN0XG4gIHR5cGUgdCA9IGV4dGVuc2lvbl9jb25zdHJ1Y3RvclxuICBsZXQgb2ZfdmFsIHggPVxuICAgIGxldCB4ID0gcmVwciB4IGluXG4gICAgbGV0IHNsb3QgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHgpICYmICh0YWcgeCkgPD4gb2JqZWN0X3RhZyAmJiAoc2l6ZSB4KSA+PSAxIHRoZW4gZmllbGQgeCAwXG4gICAgICBlbHNlIHhcbiAgICBpblxuICAgIGxldCBuYW1lID1cbiAgICAgIGlmIChpc19ibG9jayBzbG90KSAmJiAodGFnIHNsb3QpID0gb2JqZWN0X3RhZyB0aGVuIGZpZWxkIHNsb3QgMFxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuICAgIGluXG4gICAgICBpZiAodGFnIG5hbWUpID0gc3RyaW5nX3RhZyB0aGVuIChvYmogc2xvdCA6IHQpXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gbmFtZSAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAwKSA6IHN0cmluZylcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBpZCAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAxKSA6IGludClcbmVuZFxuXG5sZXQgZXh0ZW5zaW9uX2NvbnN0cnVjdG9yID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm9mX3ZhbFxubGV0IGV4dGVuc2lvbl9uYW1lID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm5hbWVcbmxldCBleHRlbnNpb25faWQgPSBFeHRlbnNpb25fY29uc3RydWN0b3IuaWRcblxubW9kdWxlIEVwaGVtZXJvbiA9IHN0cnVjdFxuICB0eXBlIG9ial90ID0gdFxuXG4gIHR5cGUgdCAoKiogZXBoZW1lcm9uICopXG5cbiAgICgqKiBUbyBjaGFuZ2UgaW4gc3luYyB3aXRoIHdlYWsuaCAqKVxuICBsZXQgYWRkaXRpb25hbF92YWx1ZXMgPSAyXG4gIGxldCBtYXhfZXBoZV9sZW5ndGggPSBTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IHQgPSBcImNhbWxfZXBoZV9jcmVhdGVcIjs7XG4gIGxldCBjcmVhdGUgbCA9XG4gICAgaWYgbm90ICgwIDw9IGwgJiYgbCA8PSBtYXhfZXBoZV9sZW5ndGgpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5jcmVhdGVcIjtcbiAgICBjcmVhdGUgbFxuXG4gIGxldCBsZW5ndGggeCA9IHNpemUocmVwciB4KSAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgbGV0IHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBtc2cgPVxuICAgIGlmIG5vdCAoMCA8PSBvICYmIG8gPCBsZW5ndGggZSkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleVwiXG4gIGxldCBnZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5XCI7XG4gICAgZ2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBnZXRfa2V5X2NvcHk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlfY29weVwiXG4gIGxldCBnZXRfa2V5X2NvcHkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlfY29weVwiO1xuICAgIGdldF9rZXlfY29weSBlIG9cblxuICBleHRlcm5hbCBzZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2tleVwiXG4gIGxldCBzZXRfa2V5IGUgbyB4ID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnNldF9rZXlcIjtcbiAgICBzZXRfa2V5IGUgbyB4XG5cbiAgZXh0ZXJuYWwgdW5zZXRfa2V5OiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfa2V5XCJcbiAgbGV0IHVuc2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24udW5zZXRfa2V5XCI7XG4gICAgdW5zZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGNoZWNrX2tleTogdCAtPiBpbnQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2tleVwiXG4gIGxldCBjaGVja19rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmNoZWNrX2tleVwiO1xuICAgIGNoZWNrX2tleSBlIG9cblxuICBleHRlcm5hbCBibGl0X2tleSA6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgPSBcImNhbWxfZXBoZV9ibGl0X2tleVwiXG5cbiAgbGV0IGJsaXRfa2V5IGUxIG8xIGUyIG8yIGwgPVxuICAgIGlmIGwgPCAwIHx8IG8xIDwgMCB8fCBvMSA+IGxlbmd0aCBlMSAtIGxcbiAgICAgICB8fCBvMiA8IDAgfHwgbzIgPiBsZW5ndGggZTIgLSBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uYmxpdF9rZXlcIlxuICAgIGVsc2UgaWYgbCA8PiAwIHRoZW4gYmxpdF9rZXkgZTEgbzEgZTIgbzIgbFxuXG4gIGV4dGVybmFsIGdldF9kYXRhOiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhXCJcbiAgZXh0ZXJuYWwgZ2V0X2RhdGFfY29weTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XCJcbiAgZXh0ZXJuYWwgc2V0X2RhdGE6IHQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9kYXRhXCJcbiAgZXh0ZXJuYWwgdW5zZXRfZGF0YTogdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfZGF0YVwiXG4gIGV4dGVybmFsIGNoZWNrX2RhdGE6IHQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2RhdGFcIlxuICBleHRlcm5hbCBibGl0X2RhdGEgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX2JsaXRfZGF0YVwiXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBJbnRlcm5hbHMgb2YgZm9yY2luZyBsYXp5IHZhbHVlcy4gKilcblxudHlwZSAnYSB0ID0gJ2EgbGF6eV90XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWRcblxubGV0IHJhaXNlX3VuZGVmaW5lZCA9IE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgVW5kZWZpbmVkKVxuXG5leHRlcm5hbCBtYWtlX2ZvcndhcmQgOiBPYmoudCAtPiBPYmoudCAtPiB1bml0ID0gXCJjYW1sX29ial9tYWtlX2ZvcndhcmRcIlxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgICByZXN1bHRcbiAgd2l0aCBlIC0+XG4gICAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByYWlzZSBlXG5cblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgcmVzdWx0XG5cblxuKCogW2ZvcmNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzIGRlY2xhcmVkIGFzIGEgcHJpbWl0aXZlXG4gICB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHMgYXJndW1lbnQsIGV4Y2VwdCB3aGVuIGFmbFxuICAgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcblxubGV0IGZvcmNlIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdHMgdGFnIGNvdWxkIGhhdmVcbiAgICAgICBjaGFuZ2VkIGR1cmluZyBHQywgc28gdGhhdCBpbmZvcm1hdGlvbiBtdXN0IGJlIGZvcmdvdHRlbiAoc2VlIEdQUiM3MTNcbiAgICAgICBhbmQgaXNzdWUgIzczMDEpXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2xhenlfYmxvY2sgbHp2XG5cblxubGV0IGZvcmNlX3ZhbCAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV92YWxfbGF6eV9ibG9jayBsenZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uID0gTm9uZSB8IFNvbWUgb2YgJ2FcblxubGV0IG5vbmUgPSBOb25lXG5sZXQgc29tZSB2ID0gU29tZSB2XG5sZXQgdmFsdWUgbyB+ZGVmYXVsdCA9IG1hdGNoIG8gd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gZGVmYXVsdFxubGV0IGdldCA9IGZ1bmN0aW9uIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIm9wdGlvbiBpcyBOb25lXCJcbmxldCBiaW5kIG8gZiA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gZiB2XG5sZXQgam9pbiA9IGZ1bmN0aW9uIFNvbWUgbyAtPiBvIHwgTm9uZSAtPiBOb25lXG5sZXQgbWFwIGYgbyA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gU29tZSAoZiB2KVxubGV0IGZvbGQgfm5vbmUgfnNvbWUgPSBmdW5jdGlvbiBTb21lIHYgLT4gc29tZSB2IHwgTm9uZSAtPiBub25lXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gU29tZSB2IC0+IGYgdiB8IE5vbmUgLT4gKClcbmxldCBpc19ub25lID0gZnVuY3Rpb24gTm9uZSAtPiB0cnVlIHwgU29tZSBfIC0+IGZhbHNlXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uIE5vbmUgLT4gZmFsc2UgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgZXF1YWwgZXEgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGVxIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gdHJ1ZVxufCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGNtcCBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gY21wIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gMFxufCBOb25lLCBTb21lIF8gLT4gLTFcbnwgU29tZSBfLCBOb25lIC0+IDFcblxubGV0IHRvX3Jlc3VsdCB+bm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gRXJyb3Igbm9uZSB8IFNvbWUgdiAtPiBPayB2XG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE5vbmUgLT4gW10gfCBTb21lIHYgLT4gW3ZdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gTm9uZSAtPiBTZXEuZW1wdHkgfCBTb21lIHYgLT4gU2VxLnJldHVybiB2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgKCdhLCAnZSkgdCA9ICgnYSwgJ2UpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2VcblxubGV0IG9rIHYgPSBPayB2XG5sZXQgZXJyb3IgZSA9IEVycm9yIGVcbmxldCB2YWx1ZSByIH5kZWZhdWx0ID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gZGVmYXVsdFxubGV0IGdldF9vayA9IGZ1bmN0aW9uIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgRXJyb3IgX1wiXG5sZXQgZ2V0X2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBlIHwgT2sgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBPayBfXCJcbmxldCBiaW5kIHIgZiA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IGYgdiB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgam9pbiA9IGZ1bmN0aW9uIE9rIHIgLT4gciB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwIGYgPSBmdW5jdGlvbiBPayB2IC0+IE9rIChmIHYpIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXBfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gRXJyb3IgKGYgZSkgfCBPayBfIGFzIHYgLT4gdlxubGV0IGZvbGQgfm9rIH5lcnJvciA9IGZ1bmN0aW9uIE9rIHYgLT4gb2sgdiB8IEVycm9yIGUgLT4gZXJyb3IgZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyAtPiAoKVxubGV0IGl0ZXJfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZiBlIHwgT2sgXyAtPiAoKVxubGV0IGlzX29rID0gZnVuY3Rpb24gT2sgXyAtPiB0cnVlIHwgRXJyb3IgXyAtPiBmYWxzZVxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgXyAtPiB0cnVlIHwgT2sgXyAtPiBmYWxzZVxuXG5sZXQgZXF1YWwgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgXywgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBPayBfLCBFcnJvciBfIC0+IC0xXG58IEVycm9yIF8sIE9rIF8gLT4gMVxuXG5sZXQgdG9fb3B0aW9uID0gZnVuY3Rpb24gT2sgdiAtPiBTb21lIHYgfCBFcnJvciBfIC0+IE5vbmVcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gT2sgdiAtPiBbdl0gfCBFcnJvciBfIC0+IFtdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gT2sgdiAtPiBTZXEucmV0dXJuIHYgfCBFcnJvciBfIC0+IFNlcS5lbXB0eVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFV0aWxzIGFyb3VuZCBjaGFyfVxuXG4gICAgQHNpbmNlIDAuMTQgKilcblxuaW5jbHVkZSBDaGFyXG5cbmxldCBwcF9idWYgPSBCdWZmZXIuYWRkX2NoYXJcbmxldCBwcCA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgb2ZfaW50X2V4biA9IENoYXIuY2hyXG5sZXQgb2ZfaW50IGMgPSB0cnkgU29tZSAob2ZfaW50X2V4biBjKSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5sZXQgdG9faW50ID0gQ2hhci5jb2RlXG5sZXQgdG9fc3RyaW5nIGMgPSBTdHJpbmcubWFrZSAxIGNcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjIyJyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6J1xuICB8ICdcXDIyNCcgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU0JyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcbmxldCBtYWtlX2Zsb2F0ID0gY3JlYXRlX2Zsb2F0XG5cbm1vZHVsZSBGbG9hdGFycmF5ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBmbG9hdGFycmF5ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgbGVuZ3RoIDogZmxvYXRhcnJheSAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXRcbiAgICAgID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcbmVuZFxuXG5sZXQgaW5pdCBsIGYgPVxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZVxuICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdFwiXG4gICgqIFNlZSAjNjU3NS4gV2UgY291bGQgYWxzbyBjaGVjayBmb3IgbWF4aW11bSBhcnJheSBzaXplLCBidXQgdGhpcyBkZXBlbmRzXG4gICAgIG9uIHdoZXRoZXIgd2UgY3JlYXRlIGEgZmxvYXQgYXJyYXkgb3IgYSByZWd1bGFyIG9uZS4uLiAqKVxuICBlbHNlXG4gICBsZXQgcmVzID0gY3JlYXRlIGwgKGYgMCkgaW5cbiAgIGZvciBpID0gMSB0byBwcmVkIGwgZG9cbiAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgZG9uZTtcbiAgIHJlc1xuXG5sZXQgbWFrZV9tYXRyaXggc3ggc3kgaW5pdCA9XG4gIGxldCByZXMgPSBjcmVhdGUgc3ggW3x8XSBpblxuICBmb3IgeCA9IDAgdG8gcHJlZCBzeCBkb1xuICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICBkb25lO1xuICByZXNcblxubGV0IGNyZWF0ZV9tYXRyaXggPSBtYWtlX21hdHJpeFxuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwMiBmIGEgYiA9XG4gIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZSBiZWdpblxuICAgIGlmIGxhID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgKGYgKHVuc2FmZV9nZXQgYSAwKSAodW5zYWZlX2dldCBiIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuICBlbmRcblxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgbWFwaSBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZiAwICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgdG9fbGlzdCBhID1cbiAgbGV0IHJlYyB0b2xpc3QgaSByZXMgPVxuICAgIGlmIGkgPCAwIHRoZW4gcmVzIGVsc2UgdG9saXN0IChpIC0gMSkgKHVuc2FmZV9nZXQgYSBpIDo6IHJlcykgaW5cbiAgdG9saXN0IChsZW5ndGggYSAtIDEpIFtdXG5cbigqIENhbm5vdCB1c2UgTGlzdC5sZW5ndGggaGVyZSBiZWNhdXNlIHRoZSBMaXN0IG1vZHVsZSBkZXBlbmRzIG9uIEFycmF5LiAqKVxubGV0IHJlYyBsaXN0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2N1XG4gIHwgXzo6dCAtPiBsaXN0X2xlbmd0aCAoc3VjYyBhY2N1KSB0XG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBhID0gY3JlYXRlIChsaXN0X2xlbmd0aCAwIGwpIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaSsxKSB0bCBpblxuICAgICAgZmlsbCAxIHRsXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjYyBpbnB1dF9hcnJheSA9XG4gIGxldCBsZW4gPSBsZW5ndGggaW5wdXRfYXJyYXkgaW5cbiAgaWYgbGVuID0gMCB0aGVuIChhY2MsIFt8fF0pIGVsc2UgYmVnaW5cbiAgICBsZXQgYWNjLCBlbHQgPSBmIGFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSAwKSBpblxuICAgIGxldCBvdXRwdXRfYXJyYXkgPSBjcmVhdGUgbGVuIGVsdCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBhY2MnLCBlbHQgPSBmICFhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgaSkgaW5cbiAgICAgIGFjYyA6PSBhY2MnO1xuICAgICAgdW5zYWZlX3NldCBvdXRwdXRfYXJyYXkgaSBlbHQ7XG4gICAgZG9uZTtcbiAgICAhYWNjLCBvdXRwdXRfYXJyYXlcbiAgZW5kXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5mb3JfYWxsMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGV4aXN0czIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmV4aXN0czJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW0geCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbXEgeCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgeCA9PSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZpbmRfb3B0IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeFxuICAgICAgZWxzZSBsb29wIChzdWNjIGkpXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzcGxpdCB4ID1cbiAgaWYgeCA9IFt8fF0gdGhlbiBbfHxdLCBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYTAsIGIwID0gdW5zYWZlX2dldCB4IDAgaW5cbiAgICBsZXQgbiA9IGxlbmd0aCB4IGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbiBhMCBpblxuICAgIGxldCBiID0gY3JlYXRlIG4gYjAgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBhaSwgYmkgPSB1bnNhZmVfZ2V0IHggaSBpblxuICAgICAgdW5zYWZlX3NldCBhIGkgYWk7XG4gICAgICB1bnNhZmVfc2V0IGIgaSBiaVxuICAgIGRvbmU7XG4gICAgYSwgYlxuICBlbmRcblxubGV0IGNvbWJpbmUgYSBiID1cbiAgbGV0IG5hID0gbGVuZ3RoIGEgaW5cbiAgbGV0IG5iID0gbGVuZ3RoIGIgaW5cbiAgaWYgbmEgPD4gbmIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmNvbWJpbmVcIjtcbiAgaWYgbmEgPSAwIHRoZW4gW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHggPSBjcmVhdGUgbmEgKHVuc2FmZV9nZXQgYSAwLCB1bnNhZmVfZ2V0IGIgMCkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbmEgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHggaSAodW5zYWZlX2dldCBhIGksIHVuc2FmZV9nZXQgYiBpKVxuICAgIGRvbmU7XG4gICAgeFxuICBlbmRcblxuZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbmxldCBzb3J0IGNtcCBhID1cbiAgbGV0IG1heHNvbiBsIGkgPVxuICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgIXhcbiAgICBlbmQgZWxzZVxuICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICB0aGVuIGkzMSsxXG4gICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gIGluXG4gIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgYnViYmxlZG93biBsIGpcbiAgaW5cbiAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICBkb25lO1xuICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG5cbmxldCBjdXRvZmYgPSA1XG5sZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgIGVuZFxuICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICBpblxuICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICBkZWNyIGo7XG4gICAgICBkb25lO1xuICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgIGRvbmU7XG4gIGluXG4gIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICBsZXQgdCA9IG1ha2UgbDIgKGdldCBhIDApIGluXG4gICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gIGVuZFxuXG5cbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9yZXZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgbGVuID0gbGlzdF9sZW5ndGggMCBsIGluXG4gICAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgICBpblxuICAgICAgZmlsbCAobGVuLTIpIHRsXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICBvZl9yZXZfbGlzdCBsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwibW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICB0eXBlIHJlZGlyZWN0aW9uXG5cbiAgZXh0ZXJuYWwgcmVkaXJlY3RfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IGludG86b3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb25cbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XCJcblxuICBleHRlcm5hbCByZXN0b3JlX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvbiAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0cyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFzU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFzU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YXNTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHN0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBsZXQgcmFpc2VfIDogdCAtPiAnYSA9IEpzLmpzX2V4cHIgXCIoZnVuY3Rpb24gKGV4bikgeyB0aHJvdyBleG4gfSlcIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb250IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlcyBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIm9wZW4gQnJyXG5cbm1vZHVsZSBLZXlfcGF0aCA9IHN0cnVjdFxuICB0eXBlIHQgPSBJZCBvZiBzdHJpbmcgfCBTIG9mIHQgYXJyYXlcblxuICBsZXQgcmVjIHRvX2p2ID0gZnVuY3Rpb25cbiAgICB8IElkIHAgLT4gSnYub2Zfc3RyaW5nIHBcbiAgICB8IFMga2V5cyAtPiBKdi5vZl9hcnJheSB0b19qdiBrZXlzXG5lbmRcblxubW9kdWxlIEtleV9yYW5nZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBib3VuZCB+bG93ZXIgfnVwcGVyID8obG93ZXJfb3BlbiA9IGZhbHNlKSA/KHVwcGVyX29wZW4gPSBmYWxzZSkgKCkgPVxuICAgIGxldCBjID0gSnYuZ2V0IEp2Lmdsb2JhbCBcIklEQktleVJhbmdlXCIgaW5cbiAgICBKdi5jYWxsIGMgXCJib3VuZFwiXG4gICAgICBbfCBsb3dlcjsgdXBwZXI7IEp2Lm9mX2Jvb2wgbG93ZXJfb3BlbjsgSnYub2ZfYm9vbCB1cHBlcl9vcGVuIHxdXG5lbmRcblxubW9kdWxlIEV2ZW50cyA9IHN0cnVjdFxuICBtb2R1bGUgVmVyc2lvbl9jaGFuZ2UgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBsZXQgb2xkX3ZlcnNpb24gdCA9IEp2LnRvX2ludCBAQCBKdi5nZXQgdCBcIm9sZFZlcnNpb25cIlxuICAgIGxldCBuZXdfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwibmV3VmVyc2lvblwiXG4gIGVuZFxuXG4gIGxldCB1cGdyYWRlX25lZWRlZCA6IFZlcnNpb25fY2hhbmdlLnQgRXYudHlwZScgPVxuICAgIEV2LlR5cGUuY3JlYXRlIChKc3RyLnYgXCJ1cGdyYWRlbmVlZGVkXCIpXG5cbiAgbGV0IHN1Y2Nlc3MgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcInN1Y2Nlc3NcIilcbiAgbGV0IGVycm9yIDogRXYuVHlwZS52b2lkIEV2LnR5cGUnID0gRXYuVHlwZS52b2lkIChKc3RyLnYgXCJlcnJvclwiKVxuZW5kXG5cbm1vZHVsZSBSZXF1ZXN0ID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9IHsganYgOiBKdi50OyBvZl9qdiA6IEp2LnQgLT4gJ2EgfVxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgb2ZfanYgfmYgaiA9IHsganYgPSBvZl9qdiBqOyBvZl9qdiA9IGYgfVxuICBsZXQgZXJyb3IgdCA9IEp2LmdldCB0Lmp2IFwiZXJyb3JcIiB8PiBKdi50b19lcnJvclxuXG4gIGxldCByZXN1bHQgKHR5cGUgYSkgKHQgOiBhIHQpIDogYSA9XG4gICAgKCogdG9kbyB0aGlzIGlzIHdyb25nICopXG4gICAgSnYuZ2V0IHQuanYgXCJyZXN1bHRcIiB8PiB0Lm9mX2p2XG5cbiAgbGV0IG9uX3N1Y2Nlc3MgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5zdWNjZXNzIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgbGV0IG9uX2Vycm9yICh0eXBlIGEpIH4oZiA6IEV2LlR5cGUudm9pZCBFdi50IC0+IGEgdCAtPiB1bml0KSAodCA6IGEgdCkgPVxuICAgIGxldCBmIGV2ID0gZiBldiB0IGluXG4gICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdmVudHMuZXJyb3IgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgZnV0IHQgPVxuICAgIGxldCByZXN1bHRfZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPSBvbl9zdWNjZXNzIH5mOihmdW4gXyB0IC0+IHNldCAoT2sgKHJlc3VsdCB0KSkpIHQgaW5cbiAgICBsZXQgXyA9IG9uX2Vycm9yIH5mOihmdW4gXyB0IC0+IHNldCAoRXJyb3IgKGVycm9yIHQpKSkgdCBpblxuICAgIHJlc3VsdF9mdXRcbmVuZFxuXG5tb2R1bGUgdHlwZSBLZXkgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBhdGggOiBLZXlfcGF0aC50XG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZV9jb250ZW50X2ludGYgPSBzaWdcbiAgdHlwZSB0XG5cbiAgbW9kdWxlIEtleSA6IEtleVxuXG4gIHZhbCBuYW1lIDogc3RyaW5nXG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIGdldF9rZXkgOiB0IC0+IEtleS50XG5lbmRcblxubW9kdWxlIERpcmVjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBOZXh0IHwgTmV4dF91bmlxdWUgfCBQcmV2IHwgUHJldl91bmlxdWVcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IE5leHQgLT4gXCJuZXh0XCJcbiAgICB8IE5leHRfdW5pcXVlIC0+IFwibmV4dFVuaXF1ZVwiXG4gICAgfCBQcmV2IC0+IFwicHJldlwiXG4gICAgfCBQcmV2X3VuaXF1ZSAtPiBcInByZXZVbmlxdWVcIlxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJuZXh0XCIgLT4gTmV4dFxuICAgIHwgXCJuZXh0VW5pcXVlXCIgLT4gTmV4dF91bmlxdWVcbiAgICB8IFwicHJldlwiIC0+IFByZXZcbiAgICB8IFwicHJldlVuaXF1ZVwiIC0+IFByZXZfdW5pcXVlXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IHRvX2p2IGQgPSBKdi5vZl9zdHJpbmcgKHRvX3N0cmluZyBkKVxuICBsZXQgb2ZfanYgaiA9IG9mX3N0cmluZyAoSnYudG9fc3RyaW5nIGopXG5lbmRcblxubW9kdWxlIENvbnRlbnRfYWNjZXNzIChDb250ZW50IDogU3RvcmVfY29udGVudF9pbnRmKSAoS2V5IDogS2V5KSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGNvdW50ICgpIHQgPSBKdi5jYWxsIHQgXCJjb3VudFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjpKdi50b19pbnRcblxuICBsZXQgZ2V0IGtleSB0ID1cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiAoZnVuIGogLT4gQ29udGVudC5vZl9qdiBqKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldFwiIFt8IEtleS50b19qdiBrZXkgfF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsIHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxcIiBbfHxdIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgZ2V0X2FsbF9rZXlzID9xdWVyeSB0ID1cbiAgICBsZXQgYXJncyA9IG1hdGNoIHF1ZXJ5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBxdWVyeSAtPiBbfCBxdWVyeSB8XSBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQuS2V5Lm9mX2p2IGMpIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0QWxsS2V5c1wiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIG1vZHVsZSBDdXJzb3IgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGxldCBrZXkgdCA9IEp2LmdldCB0IFwia2V5XCIgfD4gSnYudG9fb3B0aW9uIEtleS5vZl9qdlxuICAgIGxldCBwcmltYXJ5X2tleSB0ID0gSnYuZ2V0IHQgXCJwcmltYXJ5S2V5XCIgfD4gSnYudG9fb3B0aW9uIENvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgICBsZXQgYWR2YW5jZSBjb3VudCB0ID1cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJhZHZhbmNlXCIgW3wgSnYub2ZfaW50IGNvdW50IHxdO1xuICAgICAgdFxuXG4gICAgbGV0IGNvbnRpbnVlID9rZXkgdCA9XG4gICAgICBsZXQgYXJncyA9XG4gICAgICAgIG1hdGNoIGtleSB3aXRoIE5vbmUgLT4gW3x8XSB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJjb250aW51ZVwiIGFyZ3NcbiAgZW5kXG5cbiAgbW9kdWxlIEN1cnNvcl93aXRoX3ZhbHVlID0gc3RydWN0XG4gICAgaW5jbHVkZSBDdXJzb3JcblxuICAgIGxldCB2YWx1ZSB0ID1cbiAgICAgIGxldCBvZl9qdiBqID0gQ29udGVudC5vZl9qdiBqIGluXG4gICAgICBsZXQgdiA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgSnYudG9fb3B0aW9uIG9mX2p2IHZcblxuICAgIGxldCBkZWxldGUgdCA9IEp2LmNhbGwgdCBcImRlbGV0ZVwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjooZnVuIF8gLT4gKCkpXG5cbiAgICBsZXQgdXBkYXRlIHYgdCA9XG4gICAgICBKdi5jYWxsIHQgXCJ1cGRhdGVcIiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcbiAgZW5kXG5cbiAgbGV0IG9wZW5fY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnQgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Jfd2l0aF92YWx1ZS5vZl9qdiBqdiBpblxuICAgIEp2LmNhbGwgdCBcIm9wZW5DdXJzb3JcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgb3Blbl9rZXlfY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnRcbiAgICAgID1cbiAgICBsZXQgZGlyZWN0aW9uID0gT3B0aW9uLm1hcCBEaXJlY3Rpb24udG9fanYgZGlyZWN0aW9uIGluXG4gICAgbGV0IGFyZ3MgPVxuICAgICAgKCogdG9kbzogcXVlcnkgISopXG4gICAgICBtYXRjaCAocXVlcnksIGRpcmVjdGlvbikgd2l0aFxuICAgICAgfCBTb21lIHEsIFNvbWUgZCAtPiBbfCBxOyBkIHxdXG4gICAgICB8IE5vbmUsIFNvbWUgZCAtPiBbfCBKdi5udWxsOyBkIHxdXG4gICAgICB8IFNvbWUgcSwgTm9uZSAtPiBbfCBxIHxdXG4gICAgICB8IE5vbmUsIE5vbmUgLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGYganYgPSBKdi50b19vcHRpb24gQ3Vyc29yLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbktleUN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gICgqIFtmb2xkX2tleV0gd2lsbCBmb2xkIG92ZXIgYWxsIGtleXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGN1cnNvci5cbiAgICAgTm90ZSB0aGF0IGl0IGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gW2dldF9hbGxfa2V5c10gdG8gYnVpbGQgYW4gYXJyYXlcbiAgICAgb2YgZXZlcnkga2V5cy4gSXQncyBtb3N0IHByb2JhYmx5IGR1ZSB0byBhIGNhY2hpbmctYmFzZWQgb3B0aW1pemF0aW9uXG4gICAgIG9mIHRoZSBbZ2V0X2FsbF9rZXlzXSByZXN1bHRzIChhdCBsZWFzdCBpbiBGaXJlZm94KS4gKilcbiAgbGV0IGZvbGRfa2V5cyB+aW5pdCB+ZiBjdXJzb3JfcmVxID1cbiAgICBsZXQgcmVzdWx0LCBzZXRfcmVzdWx0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBhY2MgPSByZWYgaW5pdCBpblxuICAgIGxldCBfID1cbiAgICAgIFJlcXVlc3Qub25fc3VjY2VzcyBjdXJzb3JfcmVxIH5mOihmdW4gX2V2IHIgLT5cbiAgICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCByIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gc2V0X3Jlc3VsdCAoT2sgIWFjYylcbiAgICAgICAgICB8IFNvbWUgY3Vyc29yIC0+XG4gICAgICAgICAgICAgICgqIFRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBvdXQgb2YgcmFuZ2UgYXQgdGhhdCBwb2ludCBzbyB0aGUga2V5c1xuICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSBhIHZhbHVlLiAqKVxuICAgICAgICAgICAgICBsZXQga2V5ID0gQ3Vyc29yLmtleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9rZXkgPSBDdXJzb3IucHJpbWFyeV9rZXkgY3Vyc29yIHw+IE9wdGlvbi5nZXQgaW5cbiAgICAgICAgICAgICAgYWNjIDo9IGYgIWFjYyBrZXkgcHJpbWFyeV9rZXk7XG4gICAgICAgICAgICAgIEN1cnNvci5jb250aW51ZSBjdXJzb3IpXG4gICAgICB8PiBSZXF1ZXN0Lm9uX2Vycm9yIH5mOihmdW4gX2V2IHJlcSAtPlxuICAgICAgICAgICAgIHNldF9yZXN1bHQgKEVycm9yIChSZXF1ZXN0LmVycm9yIHJlcSkpKVxuICAgIGluXG4gICAgcmVzdWx0XG5lbmRcblxubW9kdWxlIHR5cGUgU3RvcmUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG9mX2p2IDogSnYudCAtPiB0XG5cbiAgbW9kdWxlIENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGZcbmVuZFxuXG5tb2R1bGUgdHlwZSBJbmRleCA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIG5hbWUgOiBzdHJpbmdcblxuICBtb2R1bGUgS2V5IDogS2V5XG5lbmRcblxubW9kdWxlIE1ha2VfaW5kZXhcbiAgICAoUCA6IHNpZ1xuICAgICAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgICBlbmQpXG4gICAgKEMgOiBTdG9yZV9jb250ZW50X2ludGYpXG4gICAgKEsgOiBLZXkpID1cbnN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgbW9kdWxlIEtleSA9IEtcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKEspXG4gIGluY2x1ZGUgUFxuZW5kXG5cbm1vZHVsZSBNYWtlX29iamVjdF9zdG9yZSAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZikgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbnRlbnQgPSBDXG4gIGluY2x1ZGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQpIChDb250ZW50LktleSlcblxuICBsZXQgYWRkIHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwiYWRkXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgbGV0IGNyZWF0ZV9pbmRleCAodHlwZSB0JykgKG1vZHVsZSBJIDogSW5kZXggd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBJLktleS5wYXRoIGluXG4gICAgSnYuY2FsbCB0IFwiY3JlYXRlSW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lOyBrZXlfcGF0aCB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IGluZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcImluZGV4XCIgW3wgSnYub2Zfc3RyaW5nIEkubmFtZSB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IHB1dCB2ID8oa2V5IDogQ29udGVudC5LZXkudCBvcHRpb24pIHQgOiBDb250ZW50LktleS50IFJlcXVlc3QudCA9XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbWF0Y2gga2V5IHdpdGhcbiAgICAgIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC50b19qdiB2OyBDb250ZW50LktleS50b19qdiBrZXkgfF1cbiAgICAgIHwgTm9uZSAtPiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICBpblxuICAgIEp2LmNhbGwgdCBcInB1dFwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuZW5kXG5cbm1vZHVsZSBUcmFuc2FjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBtb2RlID0gUmVhZG9ubHkgfCBSZWFkd3JpdGUgfCBSZWFkd3JpdGVmbHVzaFxuXG4gIGxldCBzdHJpbmdfb2ZfbW9kZSA9IGZ1bmN0aW9uXG4gICAgfCBSZWFkb25seSAtPiBcInJlYWRvbmx5XCJcbiAgICB8IFJlYWR3cml0ZSAtPiBcInJlYWR3cml0ZVwiXG4gICAgfCBSZWFkd3JpdGVmbHVzaCAtPiBcInJlYWR3cml0ZWZsdXNoXCJcblxuICBsZXQgbW9kZV9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJyZWFkb25seVwiIC0+IFJlYWRvbmx5XG4gICAgfCBcInJlYWR3cml0ZVwiIC0+IFJlYWR3cml0ZVxuICAgIHwgXCJyZWFkd3JpdGVmbHVzaFwiIC0+IFJlYWR3cml0ZWZsdXNoXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IG9iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBKdi5jYWxsIHQgXCJvYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSB8XSB8PiBTLm9mX2p2XG5lbmRcblxubW9kdWxlIERhdGFiYXNlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY3JlYXRlX29iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JylcbiAgICAgID8oYXV0b19pbmNyZW1lbnQgPSBmYWxzZSkgKGRiIDogdCkgOiB0JyA9XG4gICAgbGV0IG9wdHMgPSBbIChcImF1dG9JbmNyZW1lbnRcIiwgSnYub2ZfYm9vbCBhdXRvX2luY3JlbWVudCkgXSBpblxuICAgICgqIFRPRE86IG1vdmUgYXV0b2luY3JlbWVudCB0byBzdG9yZV9jb250ZW50ICopXG4gICAgbGV0IGtleV9wYXRoID0gS2V5X3BhdGgudG9fanYgUy5Db250ZW50LktleS5wYXRoIGluXG4gICAgbGV0IG9wdHMgPSAoXCJrZXlQYXRoXCIsIGtleV9wYXRoKSA6OiBvcHRzIGluXG4gICAgbGV0IG9wdGlvbnMgPSBKdi5vYmogQEAgQXJyYXkub2ZfbGlzdCBvcHRzIGluXG4gICAgQ29uc29sZS5pbmZvIFsgXCJuZXcgb2JqZWN0IHN0b3JlIHdpdGggb3B0aW9uczpcIjsgb3B0aW9ucyBdO1xuICAgICgqIFRPRE86IGtleXBhdGggc2hvdWxkIGJlIG9wdGlvbm5hbCAqKVxuICAgIEp2LmNhbGwgZGIgXCJjcmVhdGVPYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZTsgb3B0aW9ucyB8XVxuICAgIHw+IFMub2ZfanZcblxuICBsZXQgZGVsZXRlX29iamVjdF9zdG9yZSB0IG5hbWUgPVxuICAgIEp2LmNhbGwgdCBcImRlbGV0ZU9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIG5hbWUgfF0gfD4gaWdub3JlXG5cbiAgbGV0IHRyYW5zYWN0aW9uIHN0b3JlcyA/KG1vZGUgPSBUcmFuc2FjdGlvbi5SZWFkb25seSkgdCA9XG4gICAgbGV0IG1vZGUgPSBUcmFuc2FjdGlvbi5zdHJpbmdfb2ZfbW9kZSBtb2RlIHw+IEp2Lm9mX3N0cmluZyBpblxuICAgIGxldCBqdl9vZl9zdG9yZSAobW9kdWxlIFMgOiBTdG9yZSkgPSBKdi5vZl9zdHJpbmcgUy5Db250ZW50Lm5hbWUgaW5cbiAgICBKdi5jYWxsIHQgXCJ0cmFuc2FjdGlvblwiIFt8IEp2Lm9mX2xpc3QganZfb2Zfc3RvcmUgc3RvcmVzOyBtb2RlIHxdXG4gICAgfD4gVHJhbnNhY3Rpb24ub2ZfanZcblxuICBsZXQgb2JqZWN0X3N0b3JlX25hbWVzIHQgPVxuICAgIEp2LmdldCB0IFwib2JqZWN0U3RvcmVOYW1lc1wiIHw+IEp2LnRvX2FycmF5IEp2LnRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBPcGVuX2RiX3JlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0YWJhc2UudCBSZXF1ZXN0LnRcblxuICBsZXQgb25fdXBncmFkZV9uZWVkZWQgfihmIDogRXZlbnRzLlZlcnNpb25fY2hhbmdlLnQgRXYudCAtPiB0IC0+IHVuaXQpICh0IDogdClcbiAgICAgIDogdCA9XG4gICAgbGV0IGYgZXYgPVxuICAgICAgbGV0IHJlcSA6IHQgPVxuICAgICAgICBFdi5jdXJyZW50X3RhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanZcbiAgICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuICAgICAgaW5cbiAgICAgIGYgZXYgcmVxXG4gICAgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy51cGdyYWRlX25lZWRlZCBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGV4dGVybmFsIGFzX3JlcXVlc3QgOiB0IC0+IERhdGFiYXNlLnQgUmVxdWVzdC50ID0gXCIlaWRlbnRpdHlcIlxuZW5kXG5cbm1vZHVsZSBGYWN0b3J5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBsZXQgb3Blbicgfm5hbWUgP3ZlcnNpb24gdCA6IE9wZW5fZGJfcmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCB2ZXJzaW9uIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFt8IG5hbWU7IHN0cmluZ19vZl9pbnQgdiB8XVxuICAgICAgfCBOb25lIC0+IFt8IG5hbWUgfF1cbiAgICBpblxuXG4gICAgSnYuY2FsbCB0IFwib3BlblwiIEBAIEFycmF5Lm1hcCBKdi5vZl9zdHJpbmcgYXJnc1xuICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6RGF0YWJhc2Uub2ZfanZcbmVuZFxuXG5sZXQgZ2V0X2ZhY3RvcnkgPyhnbG9iYWwgPSBKdi5nbG9iYWwpICgpIDogRmFjdG9yeS50ID0gSnYuZ2V0IGdsb2JhbCBcImluZGV4ZWREQlwiXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xubW9kdWxlIEZGQ2FjaGUgPSBGRkNhY2hlXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIFlvanNvbiA9IHN0cnVjdFxuICBpbmNsdWRlIEpzb254dC5Zb2pzb25cbmVuZFxuXG5tb2R1bGUgRW5jb2RpbmdzID0gc3RydWN0XG4gIGxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG4gIGxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxuICBsZXQgb2ZfanN0ciBqc3RyID1cbiAgICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gICAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG4gIGxldCBvZl9qdiBqdiA9IEp2LnRvX2pzdHIganYgfD4gb2ZfanN0clxuZW5kXG5cbmxldCByYW5kb21fc3RhdGUgPSBSYW5kb20uZ2V0X3N0YXRlICgpXG5sZXQgbmV3X3V1aWRfdjQgKCkgPSBVdWlkbS52NF9nZW4gcmFuZG9tX3N0YXRlICgpXG5cbigqKiBbdGVlIGYgeF0gYXBwbGllcyBbZl0gdG8gW3hdIGFuZCByZXR1cm5zIFt4XSAqKVxubGV0IHRlZSBmIHggPVxuICBsZXQgKCkgPSBmIHggaW5cbiAgeFxuIiwib3BlbiBTdGRMYWJlbHNcbm9wZW4gTW9yZUxhYmVsc1xub3BlbiEgWW9qc29uXG5cbnR5cGUgdCA9IFlvanNvbi5TYWZlLnRcblxubGV0IHlvanNvbl9vZl91bml0ICgpIDogdCA9IGBOdWxsXG5sZXQgeW9qc29uX29mX2Jvb2wgYiA6IHQgPSBgQm9vbCBiXG5sZXQgeW9qc29uX29mX3N0cmluZyBzdHIgOiB0ID0gYFN0cmluZyBzdHJcbmxldCB5b2pzb25fb2ZfYnl0ZXMgYnl0ZXMgOiB0ID0gYFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGJ5dGVzKVxubGV0IHlvanNvbl9vZl9jaGFyIGMgOiB0ID0gYFN0cmluZyAoU3RyaW5nLm1ha2UgMSBjKVxubGV0IHlvanNvbl9vZl9pbnQgbiA6IHQgPSBgSW50IG5cbmxldCB5b2pzb25fb2ZfZmxvYXQgbiA6IHQgPSBgRmxvYXQgblxubGV0IHlvanNvbl9vZl9pbnQzMiAobiA6IEludDMyLnQpIDogdCA9IGBJbnRsaXQgKEludDMyLnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9pbnQ2NCAobiA6IEludDY0LnQpIDogdCA9IGBJbnRsaXQgKEludDY0LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgbiA6IHQgPSBgSW50bGl0IChOYXRpdmVpbnQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX3JlZiB5b2pzb25fb2ZfX2EgcmYgPSB5b2pzb25fb2ZfX2EgIXJmXG5sZXQgeW9qc29uX29mX2xhenlfdCB5b2pzb25fb2ZfX2EgbHYgPSB5b2pzb25fb2ZfX2EgKExhenkuZm9yY2UgbHYpXG5cbmxldCB5b2pzb25fb2Zfb3B0aW9uIHlvanNvbl9vZl9fYSA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHlvanNvbl9vZl9fYSB4XG4gIHwgTm9uZSAtPiBgTnVsbFxuOztcblxubGV0IHlvanNvbl9vZl9wYWlyIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgKGEsIGIpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGIgXVxuOztcblxubGV0IHlvanNvbl9vZl90cmlwbGUgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiB5b2pzb25fb2ZfX2MgKGEsIGIsIGMpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGI7IHlvanNvbl9vZl9fYyBjIF1cbjs7XG5cbigqIExpc3QucmV2IChMaXN0LnJldl9tYXAgLi4uKSBpcyB0YWlsIHJlY3Vyc2l2ZSwgdGhlIE9DYW1sIHN0YW5kYXJkXG4gICBsaWJyYXJ5IExpc3QubWFwIGlzIE5PVC4gKilcbmxldCB5b2pzb25fb2ZfbGlzdCB5b2pzb25fb2ZfX2EgbHN0ID0gYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgfmY6eW9qc29uX29mX19hIGxzdCkpXG5cbmxldCB5b2pzb25fb2ZfYXJyYXkgeW9qc29uX29mX19hIGFyID1cbiAgbGV0IGxzdF9yZWYgPSByZWYgW10gaW5cbiAgZm9yIGkgPSBBcnJheS5sZW5ndGggYXIgLSAxIGRvd250byAwIGRvXG4gICAgbHN0X3JlZiA6PSB5b2pzb25fb2ZfX2EgYXIuKGkpIDo6ICFsc3RfcmVmXG4gIGRvbmU7XG4gIGBMaXN0ICFsc3RfcmVmXG47O1xuXG5sZXQgeW9qc29uX29mX2hhc2h0YmwgeW9qc29uX29mX2tleSB5b2pzb25fb2ZfdmFsIGh0YmwgPVxuICBsZXQgY29sbCB+a2V5OmsgfmRhdGE6diBhY2MgPSBgTGlzdCBbIHlvanNvbl9vZl9rZXkgazsgeW9qc29uX29mX3ZhbCB2IF0gOjogYWNjIGluXG4gIGBMaXN0IChIYXNodGJsLmZvbGQgaHRibCB+aW5pdDpbXSB+Zjpjb2xsKVxuOztcblxubGV0IHlvanNvbl9vZl9vcGFxdWUgXyA9IGBTdHJpbmcgXCI8b3BhcXVlPlwiXG5sZXQgeW9qc29uX29mX2Z1biBfID0gYFN0cmluZyBcIjxmdW4+XCJcblxuZXhjZXB0aW9uIE9mX3lvanNvbl9lcnJvciBvZiBleG4gKiB0XG5cbmxldCByZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzID0gcmVmIHRydWVcbmxldCBvZl95b2pzb25fZXJyb3JfZXhuIGV4YyB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChleGMsIHlvanNvbikpXG5sZXQgb2ZfeW9qc29uX2Vycm9yIHdoYXQgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoRmFpbHVyZSB3aGF0LCB5b2pzb24pKVxuXG5sZXQgdW5pdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiAoKVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidW5pdF9vZl95b2pzb246IGBOdWxsIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJvb2xfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEJvb2wgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJib29sX29mX3lvanNvbjogdHJ1ZS9mYWxzZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBzdHJpbmdfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJzdHJpbmdfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYnl0ZXNfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gQnl0ZXMub2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYnl0ZXNfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgY2hhcl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPlxuICAgIGlmIFN0cmluZy5sZW5ndGggc3RyIDw+IDFcbiAgICB0aGVuIG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgbXVzdCBjb250YWluIG9uZSBjaGFyYWN0ZXIgb25seVwiIHlvanNvbjtcbiAgICBzdHIuWzBdXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG9mIHNpemUgb25lIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50IHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBmbG9hdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgRmxvYXQgdiAtPiB2XG4gIHwgYEludCBpIC0+IGZsb2F0X29mX2ludCBpXG4gIHwgYEludGxpdCBzdHIgLT4gZmxvYXRfb2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiZmxvYXRfb2ZfeW9qc29uOiBmbG9hdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQzMl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQzMi5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDMyLm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQzMl9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50NjRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50NjQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQ2NC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50NjRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG5hdGl2ZWludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBOYXRpdmVpbnQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBOYXRpdmVpbnQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcIm5hdGl2ZWludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgcmVmX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gcmVmIChhX19vZl95b2pzb24geW9qc29uKVxubGV0IGxhenlfdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IExhenkuZnJvbV92YWwgKGFfX29mX3lvanNvbiB5b2pzb24pXG5cbmxldCBvcHRpb25fb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBlbCAtPiBTb21lIChhX19vZl95b2pzb24gZWwpXG47O1xuXG5sZXQgcGFpcl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgYSwgYlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwicGFpcl9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgdHJpcGxlX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIGNfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uOyBjX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGxldCBjID0gY19fb2ZfeW9qc29uIGNfeW9qc29uIGluXG4gICAgYSwgYiwgY1xuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidHJpcGxlX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCBsaXN0X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgcmV2X2xzdCA9IExpc3QucmV2X21hcCBsc3QgfmY6YV9fb2ZfeW9qc29uIGluXG4gICAgTGlzdC5yZXYgcmV2X2xzdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibGlzdF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYXJyYXlfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFtdIC0+IFt8fF1cbiAgfCBgTGlzdCAoaCA6OiB0KSAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCB0ICsgMSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIGxlbiAoYV9fb2ZfeW9qc29uIGgpIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiByZXNcbiAgICAgIHwgaCA6OiB0IC0+XG4gICAgICAgIHJlcy4oaSkgPC0gYV9fb2ZfeW9qc29uIGg7XG4gICAgICAgIGxvb3AgKGkgKyAxKSB0XG4gICAgaW5cbiAgICBsb29wIDEgdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYXJyYXlfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGhhc2h0Ymxfb2ZfeW9qc29uIGtleV9vZl95b2pzb24gdmFsX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCBodGJsID0gSGFzaHRibC5jcmVhdGUgMCBpblxuICAgIGxldCBhY3QgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBbIGtfeW9qc29uOyB2X3lvanNvbiBdIC0+XG4gICAgICAgIEhhc2h0YmwuYWRkIGh0YmwgfmtleTooa2V5X29mX3lvanNvbiBrX3lvanNvbikgfmRhdGE6KHZhbF9vZl95b2pzb24gdl95b2pzb24pXG4gICAgICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IHR1cGxlIGxpc3QgbmVlZGVkXCIgeW9qc29uXG4gICAgaW5cbiAgICBMaXN0Lml0ZXIgbHN0IH5mOmFjdDtcbiAgICBodGJsXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBvcGFxdWVfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcIm9wYXF1ZV9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IG9wYXF1ZSB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbmxldCBmdW5fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcImZ1bl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IGZ1bmN0aW9uIHZhbHVlc1wiIHlvanNvblxuOztcblxubW9kdWxlIFByaW1pdGl2ZXMgPSBzdHJ1Y3RcbiAgbGV0IHlvanNvbl9vZl9hcnJheSA9IHlvanNvbl9vZl9hcnJheVxuICBsZXQgYXJyYXlfb2ZfeW9qc29uID0gYXJyYXlfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYm9vbCA9IHlvanNvbl9vZl9ib29sXG4gIGxldCBib29sX29mX3lvanNvbiA9IGJvb2xfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfY2hhciA9IHlvanNvbl9vZl9jaGFyXG4gIGxldCBjaGFyX29mX3lvanNvbiA9IGNoYXJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfZmxvYXQgPSB5b2pzb25fb2ZfZmxvYXRcbiAgbGV0IGZsb2F0X29mX3lvanNvbiA9IGZsb2F0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludCA9IHlvanNvbl9vZl9pbnRcbiAgbGV0IGludF9vZl95b2pzb24gPSBpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50MzIgPSB5b2pzb25fb2ZfaW50MzJcbiAgbGV0IGludDMyX29mX3lvanNvbiA9IGludDMyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDY0ID0geW9qc29uX29mX2ludDY0XG4gIGxldCBpbnQ2NF9vZl95b2pzb24gPSBpbnQ2NF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9saXN0ID0geW9qc29uX29mX2xpc3RcbiAgbGV0IGxpc3Rfb2ZfeW9qc29uID0gbGlzdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgPSB5b2pzb25fb2ZfbmF0aXZlaW50XG4gIGxldCBuYXRpdmVpbnRfb2ZfeW9qc29uID0gbmF0aXZlaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX29wdGlvbiA9IHlvanNvbl9vZl9vcHRpb25cbiAgbGV0IG9wdGlvbl9vZl95b2pzb24gPSBvcHRpb25fb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfcmVmID0geW9qc29uX29mX3JlZlxuICBsZXQgcmVmX29mX3lvanNvbiA9IHJlZl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9zdHJpbmcgPSB5b2pzb25fb2Zfc3RyaW5nXG4gIGxldCBzdHJpbmdfb2ZfeW9qc29uID0gc3RyaW5nX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2J5dGVzID0geW9qc29uX29mX2J5dGVzXG4gIGxldCBieXRlc19vZl95b2pzb24gPSBieXRlc19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl91bml0ID0geW9qc29uX29mX3VuaXRcbiAgbGV0IHVuaXRfb2ZfeW9qc29uID0gdW5pdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9sYXp5X3QgPSB5b2pzb25fb2ZfbGF6eV90XG4gIGxldCBsYXp5X3Rfb2ZfeW9qc29uID0gbGF6eV90X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2hhc2h0YmwgPSB5b2pzb25fb2ZfaGFzaHRibFxuICBsZXQgaGFzaHRibF9vZl95b2pzb24gPSBoYXNodGJsX29mX3lvanNvblxuZW5kXG4iLCJtb2R1bGUgWW9qc29uX2NvbnZfZXJyb3IgPSBZb2pzb25fY29udl9lcnJvclxubW9kdWxlIFlvanNvbl9jb252ID0gWW9qc29uX2NvbnZcbm1vZHVsZSBZb2pzb25hYmxlID0gWW9qc29uYWJsZV9pbnRmXG5tb2R1bGUgWW9qc29uID0gWW9qc29uXG5cbm1vZHVsZSBPcHRpb24gPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uID1cbiAgICB8IE5vbmVcbiAgICB8IFNvbWUgb2YgJ2FcbmVuZFxuXG5leHRlcm5hbCBpZ25vcmUgOiBfIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuZXh0ZXJuYWwgcG9seV9lcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbmxldCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IGZ1biB4IC0+ICF4XG4iLCJtb2R1bGUgQXBpID0gSmVsbHlmaW5fYXBpXG5cbnR5cGUgY3JlZGVudGlhbHMgPSB7IGJhc2VfdXJsIDogc3RyaW5nOyB1c2VybmFtZSA6IHN0cmluZzsgcGFzc3dvcmQgOiBzdHJpbmcgfVxuXG50eXBlIGNvbm5leGlvbiA9IHtcbiAgYmFzZV91cmwgOiBzdHJpbmc7XG4gIGF1dGhfcmVzcG9uc2UgOiBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUucmVzcG9uc2U7XG59XG5cbmxldCBnZXRfdG9rZW4gdCA9IHQuYXV0aF9yZXNwb25zZS5BcGkuQXV0aGVudGljYXRlX2J5X25hbWUuYWNjZXNzX3Rva2VuXG5cbmxldCBjb25uZWN0IGNyZWRlbnRpYWxzID1cbiAgbGV0IG1vZHVsZSBBdXRoID0gQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSA9IGNyZWRlbnRpYWxzIGluXG4gIGxldCBhdXRoID0geyBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUudXNlcm5hbWU7IHB3ID0gcGFzc3dvcmQgfSBpblxuICBsZXQrIGF1dGhfcmVzcG9uc2UgPSBBcGkucmVxdWVzdCB+YmFzZV91cmwgKG1vZHVsZSBBdXRoKSBhdXRoICgpIGluXG4gIHsgYmFzZV91cmw7IGF1dGhfcmVzcG9uc2UgfVxuXG5sZXQgcXVlcnkgdCA9XG4gIGxldCB0b2tlbiA9IGdldF90b2tlbiB0IGluXG4gIGxldCBiYXNlX3VybCA9IHQuYmFzZV91cmwgaW5cbiAgSmVsbHlmaW5fYXBpLnJlcXVlc3QgfmJhc2VfdXJsIH50b2tlblxuIiwib3BlbiBTdGRcbm9wZW4gQnJyXG5cbnR5cGUgdGFnID0gQmxvY2sgb2YgaW50IHwgSW50IG9mIGludFxuXG5sZXQgdGFnX29mIHYgPVxuICAoKiB3b3cgd293IHdvdy4gaXMgdGhhdCBva2F5eWlzaCA/KilcbiAgbGV0IG9iaiA9IE9iai5yZXByIHYgaW5cbiAgaWYgT2JqLmlzX2Jsb2NrIG9iaiB0aGVuIEJsb2NrIChPYmoudGFnIG9iaikgZWxzZSBJbnQgKE9iai5tYWdpYyBvYmopXG5cbm1vZHVsZSB0eXBlIFF1ZXJpZXMgPSBzaWdcbiAgdHlwZSAnYSBxdWVyeVxuICB0eXBlICdhIGV2ZW50XG5lbmRcblxubW9kdWxlIE1ha2UgKFEgOiBRdWVyaWVzKSA9IHN0cnVjdFxuICB0eXBlIGVycm9yID0gWyBgSnYgb2YgSnYuRXJyb3IudCB8IGBNc2cgb2Ygc3RyaW5nIF1cbiAgdHlwZSAnYSBxdWVyeSA9ICdhIFEucXVlcnlcbiAgdHlwZSAnYSBldmVudCA9ICdhIFEuZXZlbnRcbiAgdHlwZSAnYSB3aXRoX3V1aWQgPSB7IHV1aWQgOiBzdHJpbmc7IGRhdGEgOiAnYSB9XG4gIHR5cGUgJ2EgbWVzc2FnZSA9IEFuc3dlciBvZiAnYSB3aXRoX3V1aWQgfCBFdmVudCBvZiAoJ2EgZXZlbnQgKiAnYSlcbiAgdHlwZSBsaXN0ZW5lciA9IHN0cmluZ1xuXG4gICgqIHRvZG86Y2hlY2sgdGhhdCB0aGUgd29ya2VyIGFuZCB0aGUgY2xpZW50IHNoYXJlIHRoZSBzYW1lIGFwaT8gKilcblxuICBtb2R1bGUgU3RhcnRfY2xpZW50IChQIDogc2lnXG4gICAgdmFsIHVybCA6IHN0cmluZ1xuICBlbmQpID1cbiAgc3RydWN0XG4gICAgbGV0IGZ1dHVyZXMgOiAoc3RyaW5nLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IGxpc3RlbmVycyA6ICh0YWcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgd29ya2VyID0gQnJyX3dlYndvcmtlcnMuV29ya2VyLmNyZWF0ZSBAQCBKc3RyLm9mX3N0cmluZyBQLnVybFxuXG4gICAgbGV0IHF1ZXJ5ICh0eXBlIGEpIChxdWVyeSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgICBsZXQgc2V0IGp2ID0gc2V0IEBAIEVuY29kaW5ncy5vZl9qdiBqdiBpblxuICAgICAgbGV0IHF1ZXJ5ID0geyB1dWlkOyBkYXRhID0gcXVlcnkgfSB8PiBFbmNvZGluZ3MudG9fanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLnBvc3Qgd29ya2VyIChKdi5vZl9qc3RyIHF1ZXJ5KTtcbiAgICAgIEhhc2h0YmwuYWRkIGZ1dHVyZXMgdXVpZCBzZXQ7XG4gICAgICBmdXRcblxuICAgIGxldCBsaXN0ZW4gKHR5cGUgYSkgKGV2ZW50IDogYSBldmVudCkgfihmIDogYSAtPiB1bml0KSA6IGxpc3RlbmVyID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgc2V0IGp2ID0gZiAoT2JqLm1hZ2ljIGp2KSBpblxuICAgICAgSGFzaHRibC5hZGQgbGlzdGVuZXJzICh0YWdfb2YgZXZlbnQpIHNldDtcbiAgICAgIHV1aWRcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrIG1lc3NhZ2UgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIG1hdGNoIG1lc3NhZ2Ugd2l0aFxuICAgICAgfCBFdmVudCAoZSwgdikgLT5cbiAgICAgICAgICBIYXNodGJsLmZpbmRfYWxsIGxpc3RlbmVycyAodGFnX29mIGUpIHw+IExpc3QuaXRlciB+ZjooZnVuIGYgLT4gZiB2KVxuICAgICAgfCBBbnN3ZXIgeyB1dWlkOyBkYXRhIH0gLT5cbiAgICAgICAgICBsZXQgZiA9IEhhc2h0YmwuZmluZCBmdXR1cmVzIHV1aWQgaW5cbiAgICAgICAgICBIYXNodGJsLnJlbW92ZSBmdXR1cmVzIHV1aWQ7XG4gICAgICAgICAgZiBkYXRhXG5cbiAgICBsZXQgXyA9XG4gICAgICBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlXG4gICAgICBAQCBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuYXNfdGFyZ2V0IHdvcmtlclxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBXb3JrZXJfaW1wbCA9IGZ1bmN0b3IgKCkgLT4gc2lnXG4gICAgdmFsIG9uX3F1ZXJ5IDogJ2EgcXVlcnkgLT4gKCdhLCBlcnJvcikgRnV0LnJlc3VsdFxuICBlbmRcblxuICBsZXQgZGlzcGF0Y2hfZXZlbnQgKHR5cGUgYSkgKGUgOiBhIGV2ZW50KSAodiA6IGEpID1cbiAgICAoKiBsZXQgZGF0YSA9IEVuY29kaW5ncy5tYXJzaGFsX3RvX2pzdHIgfD4gSnYub2ZfanN0ciBpbiAqKVxuICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3QgKEVuY29kaW5ncy50b19qc3RyIChFdmVudCAoZSwgdikpIHw+IEp2Lm9mX2pzdHIpXG5cbiAgKCoqIEV4ZWN1dGUgVydzIGJvZHkgYW5kIGNvbmZpZ3VyZSBtZXNzYWdpbmcgKilcbiAgbW9kdWxlIE1ha2Vfd29ya2VyIChXIDogV29ya2VyX2ltcGwpID0gc3RydWN0XG4gICAgb3BlbiBCcnJcbiAgICBtb2R1bGUgVyA9IFcgKClcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrICh7IHV1aWQ7IGRhdGEgfSA6ICdhIHF1ZXJ5IHdpdGhfdXVpZCkgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQrIHJlc3VsdCA9IFcub25fcXVlcnkgZGF0YSBpblxuICAgICAgbGV0IGRhdGEgPSBFbmNvZGluZ3MudG9fanN0ciByZXN1bHQgfD4gSnYub2ZfanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdFxuICAgICAgICAoRW5jb2RpbmdzLnRvX2pzdHIgKEFuc3dlciB7IHV1aWQ7IGRhdGEgfSkgfD4gSnYub2ZfanN0cilcblxuICAgIGxldCBfID0gRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZSBHLnRhcmdldFxuICBlbmRcbmVuZFxuIiwib3BlbiBTdGRcblxuKCoqIFNvbWUgc29ydHMgcmVxdWlyZSBhIGN1c3RvbSBvcmRlcmluZyB3aGljaCBpcyBkb25lIHVzaW5nIGEgdGFibGUgb2YgaW5kZXhlcy4gRm9yIGV4YW1wbGUsIHRvIGdldCBhIHJhbmRvbSBzb3J0IHdlIHNpbXBsZSBzaHVmZmxlIGFuIGFycmF5IHdoaWNoIHNpemUgaXMgdGhlIG9uZSBvZiB0aGUgcmVzdWx0LiAqKVxubW9kdWxlIE9yZGVyID0gc3RydWN0XG4gIHR5cGUgdCA9IEluaXRpYWwgfCBBc2MgfCBEZXNjIHwgQ3VzdG9tIG9mIGludCBhcnJheVxuXG4gIGxldCByYW5kb20gfnNpemUgPVxuICAgIGxldCB0YmwgPSBBcnJheS5pbml0IHNpemUgfmY6RnVuLmlkIGluXG4gICAgbGV0ICgpID0gQXJyYXkuc2h1ZmZsZSB0YmwgaW5cbiAgICBDdXN0b20gdGJsXG5cbiAgbGV0IG9mX3N0cmluZyB+c2l6ZSA9IGZ1bmN0aW9uXG4gICAgfCBcInJhbmRvbVwiIC0+IHJhbmRvbSB+c2l6ZVxuICAgIHwgXCJhc2NcIiAtPiBBc2NcbiAgICB8IFwiZGVzY1wiIC0+IERlc2NcbiAgICB8IF8gLT4gSW5pdGlhbFxuXG4gIGxldCBhcHBseSB0IH5zaXplIGkgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgSW5pdGlhbCB8IEFzYyAtPiBpXG4gICAgfCBEZXNjIC0+IHNpemUgLSAxIC0gaVxuICAgIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRlX2FkZGVkIHwgTmFtZVxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gRGF0ZV9hZGRlZFxuICAgIHwgXCJuYW1lXCIgLT4gTmFtZVxuICAgIHwgXyAtPiBEYXRlX2FkZGVkXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHsgdXVpZCA6IFV1aWRtLnQ7IHJlcXVlc3QgOiByZXE7IHN0YXJ0X29mZnNldCA6IGludDsgaXRlbV9jb3VudCA6IGludCB9XG50eXBlIHJhbmdlZCA9IHsgdmlldyA6IHQ7IGZpcnN0IDogaW50OyBsYXN0IDogaW50OyBvcmRlciA6IE9yZGVyLnQgfVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LkRhdGVfYWRkZWQpID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDpcbiAgICAgICAgVmlldy50ICogVmlldy5PcmRlci50ICogaW50IGFycmF5XG4gICAgICAgIC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJtb2R1bGUgU3RvcmVzID0gU3RvcmVzXG5tb2R1bGUgU3luYyA9IFN5bmNcbm1vZHVsZSBWaWV3ID0gVmlld1xub3BlbiBCcnJlclxub3BlbiBCcnJcbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxubW9kdWxlIFdvcmtlcl9hcGkgPSBEYl93b3JrZXJfYXBpXG5cbm1vZHVsZSBJdGVtX3N0b3JlID0gc3RydWN0XG4gIGluY2x1ZGUgU3RvcmVzLkl0ZW1zX3N0b3JlXG5cbiAgbW9kdWxlIEluZGV4ID0gc3RydWN0XG4gICAgbW9kdWxlIElkID0gU3RvcmVzLkl0ZW1zQnlJZFxuICAgIG1vZHVsZSBEYXRlX2FkZGVkID0gU3RvcmVzLkl0ZW1zQnlEYXRlQWRkZWRcbiAgICBtb2R1bGUgVHlwZV9OYW1lID0gU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZVxuICAgIG1vZHVsZSBLaW5kX1ZpZXcgPSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kXG4gIGVuZFxuZW5kXG5cbmxldCBvbl91cGdyYWRlX25lZWRlZCBlIHEgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgb2xkX3ZlcnNpb24sIG5ld192ZXJzaW9uID1cbiAgICBsZXQgdiA9IEV2LmFzX3R5cGUgZSBpblxuICAgIEV2ZW50cy5WZXJzaW9uX2NoYW5nZS4ob2xkX3ZlcnNpb24gdiwgbmV3X3ZlcnNpb24gdilcbiAgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgW1xuICAgICAgXCJVcGdyYWRpbmcgaW5kZXhlZF9kYiBzY2hlbWEgZnJvbSB2ZXJzaW9uXCI7IG9sZF92ZXJzaW9uOyBcInRvXCI7IG5ld192ZXJzaW9uO1xuICAgIF07XG4gIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IHEgaW5cbiAgbGV0IHN0b3JlcyA9IERhdGFiYXNlLm9iamVjdF9zdG9yZV9uYW1lcyBkYiBpblxuICBDb25zb2xlLmluZm8gWyBcIkVyYXNpbmcgZXhpc3Rpbmcgc3RvcmVzXCIgXTtcbiAgQXJyYXkuaXRlciAoRGF0YWJhc2UuZGVsZXRlX29iamVjdF9zdG9yZSBkYikgc3RvcmVzO1xuICBsZXQgbGlzdCA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB+YXV0b19pbmNyZW1lbnQ6ZmFsc2UgZGJcbiAgaW5cbiAgbGV0IGl0ZW1zID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCB2aXJ0dWFsX2ZvbGRlcnMgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBWRikgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpbmRleF9kYXRlX2FkZGVkID1cbiAgICBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkKSBpdGVtc1xuICBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZSkgaXRlbXMgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmQpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeUlkKSBpdGVtcyBpblxuICBDb25zb2xlLmluZm9cbiAgICBbIFwiU3RvcmVzIGNyZWF0ZWQ6XCI7IGxpc3Q7IGl0ZW1zOyBpbmRleF9kYXRlX2FkZGVkOyB2aXJ0dWFsX2ZvbGRlcnMgXVxuXG5sZXQgd2l0aF9pZGIgP3ZlcnNpb24gfm5hbWUgZiA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBmIF9ldiBkYnIgPVxuICAgIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IGRiciBpblxuICAgIGYgZGJcbiAgaW5cbiAgZ2V0X2ZhY3RvcnkgKClcbiAgfD4gRmFjdG9yeS5vcGVuJyB+bmFtZSA/dmVyc2lvblxuICB8PiBPcGVuX2RiX3JlcXVlc3Qub25fdXBncmFkZV9uZWVkZWQgfmY6b25fdXBncmFkZV9uZWVkZWRcbiAgfD4gUmVxdWVzdC5vbl9zdWNjZXNzIH5mIHw+IGlnbm9yZVxuIiwib3BlbiEgU3RkXG5vcGVuIERiLldvcmtlcl9hcGlcbm9wZW4gQnJyZXJcbm9wZW4hIEJyclxubW9kdWxlIElEQiA9IEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgSVMgPSBEYi5JdGVtX3N0b3JlXG5cbmxldCAoKSA9IFJhbmRvbS5zZWxmX2luaXQgKClcblxubGV0IG1hcF9lcnJvciBmID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIGYgPSBmIGluXG4gIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSBmXG5cbmxldCBhc19mdXQgcSA9IElEQi5SZXF1ZXN0LmZ1dCBxIHw+IG1hcF9lcnJvclxuXG5sZXQgZnV0X29mX2FycmF5IChmcyA6ICdhIEZ1dC50IGFycmF5KSA6ICdhIGFycmF5IEZ1dC50ID1cbiAgbGV0IGZ1dCBwID0gSnYub2JqIFt8IChcImZ1dFwiLCBwKSB8XSBpblxuICBsZXQgcHJvbWlzZScgZiA9IEp2LmdldCAoSnYucmVwciBmKSBcImZ1dFwiIGluXG4gIGxldCBhcnIgPSBKdi5vZl9hcnJheSBwcm9taXNlJyBmcyBpblxuICBsZXQgYWxsID0gSnYuUHJvbWlzZS5hbGwgYXJyIGluXG4gIGxldCB0b19hcnJheSBsID0gSnYuUHJvbWlzZS5yZXNvbHZlIChKdi50b19hcnJheSBPYmoubWFnaWMgbCkgaW5cbiAgT2JqLm1hZ2ljIEBAIGZ1dCBAQCBKdi5Qcm9taXNlLmJpbmQgYWxsIHRvX2FycmF5XG5cbm1vZHVsZSBXb3JrZXIgKCkgPSBzdHJ1Y3RcbiAgbGV0IGNoZWNrX2RiIGlkYiBzb3VyY2UgPVxuICAgIGxldCBzZXJ2ZXJfaWQsIHNvdXJjZSA9IHNvdXJjZSBpblxuICAgIGxldCByZXBvcnQgc3RhdHVzID1cbiAgICAgIGRpc3BhdGNoX2V2ZW50IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSAoc2VydmVyX2lkLCBzdGF0dXMpXG4gICAgaW5cbiAgICBEYi5TeW5jLmNoZWNrX2FuZF9zeW5jIH5yZXBvcnQgfnNvdXJjZSBpZGJcblxuICBsZXQgaWRiID1cbiAgICBsZXQgaWRiLCBzZXRfaWRiID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBfID1cbiAgICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgICBpZ25vcmUgKHNldF9pZGIgQEAgT2sgaWRiKVxuICAgIGluXG4gICAgaWRiXG5cbiAgbGV0IHJlYWRfb25seV9zdG9yZSAoKSA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBsZXQrIGlkYiA9IGlkYiBpblxuICAgIElEQi5EYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgRGIuSSkgXSB+bW9kZTpSZWFkb25seSBpZGJcbiAgICB8PiBJREIuVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgRGIuSSlcblxuICBsZXQgZ2V0X3ZpZXdfa2V5cyA9XG4gICAgbGV0IHZpZXdfbWVtbyA6XG4gICAgICAgICggc3RyaW5nIERiLlZpZXcuc2VsZWN0aW9uICogRGIuVmlldy5Tb3J0LnQsXG4gICAgICAgICAgSVMuQ29udGVudC5LZXkudCBhcnJheSApXG4gICAgICAgIEhhc2h0YmwudCA9XG4gICAgICBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGluXG4gICAgbGV0IGxhc3RfdmlldyA6IChpbnQgKiBJUy5Db250ZW50LktleS50IGFycmF5KSByZWYgPSByZWYgKC0xLCBbfHxdKSBpblxuICAgIGZ1biBzdG9yZSB7IERiLlZpZXcua2luZCA9IF87IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9IC0+XG4gICAgICAoKiB0b2RvOiBzdGFnZWQgbWVtb2l6YXRpb24gKyBzcGVjaWFsaXplZCBxdWVyaWVzIHVzaW5nIGluZGV4ZXMgKilcbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQgaGFzaCA9IEhhc2h0YmwuaGFzaCAoc3JjX3ZpZXdzLCBzb3J0LCBmaWx0ZXJzKSBpblxuICAgICAgaWYgSW50LmVxdWFsIChmc3QgIWxhc3RfdmlldykgaGFzaCB0aGVuIEZ1dC5vayAoc25kICFsYXN0X3ZpZXcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCsga2V5cyA9XG4gICAgICAgICAgdHJ5IEZ1dC5vayBAQCBIYXNodGJsLmZpbmQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpXG4gICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIGxldCsgYWxsX2tleXMgPVxuICAgICAgICAgICAgICBsZXQgbG93ZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJBdWRpb1wiIHxdIGluXG4gICAgICAgICAgICAgIGxldCB1cHBlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXFx1ezB9XCIgfF0gaW5cbiAgICAgICAgICAgICAgbGV0IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICBJREIuS2V5X3JhbmdlLmJvdW5kIH5sb3dlciB+dXBwZXIgfmxvd2VyX29wZW46dHJ1ZVxuICAgICAgICAgICAgICAgICAgfnVwcGVyX29wZW46ZmFsc2UgKClcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGlkeCA9IElTLmluZGV4IChtb2R1bGUgSVMuSW5kZXguS2luZF9WaWV3KSBzdG9yZSBpblxuICAgICAgICAgICAgICBJUy5JbmRleC5LaW5kX1ZpZXcuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpZHggfD4gYXNfZnV0XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGtleXMgPVxuICAgICAgICAgICAgICBtYXRjaCBzcmNfdmlld3Mgd2l0aFxuICAgICAgICAgICAgICB8IEFsbCAtPiBhbGxfa2V5c1xuICAgICAgICAgICAgICB8IE9ubHkgc3JjX3ZpZXdzIC0+XG4gICAgICAgICAgICAgICAgICBBcnJheS5maWx0ZXIgYWxsX2tleXNcbiAgICAgICAgICAgICAgICAgICAgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkudmlld3M7IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuZXhpc3RzIHZpZXdzIH5mOihmdW4gdiAtPiBMaXN0Lm1lbXEgdiB+c2V0OnNyY192aWV3cykpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpIGtleXM7XG4gICAgICAgICAgICBrZXlzXG4gICAgICAgIGluXG4gICAgICAgIGxldCBrZXlzID1cbiAgICAgICAgICBtYXRjaCBmaWx0ZXJzIHdpdGhcbiAgICAgICAgICB8IFsgU2VhcmNoIHN1YiBdIHdoZW4gbm90IChTdHJpbmcuaXNfZW1wdHkgc3ViKSAtPlxuICAgICAgICAgICAgICBsZXQgc3ViID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWIgaW5cbiAgICAgICAgICAgICAgQXJyYXkuZmlsdGVyIGtleXMgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lOyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSBTdHJpbmcuRmluZC5jb21waWxlIChQcmludGYuc3ByaW50ZiBcIiVzXCIgc3ViKSBpblxuICAgICAgICAgICAgICAgICAgU3RyaW5nLkZpbmQuZmluZCB+cGF0dGVybiBzb3J0X25hbWUgPj0gMClcbiAgICAgICAgICB8IF8gLT4ga2V5c1xuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIG1hdGNoIHNvcnQgd2l0aFxuICAgICAgICAgIHwgTmFtZSAtPlxuICAgICAgICAgICAgICBBcnJheS5zb3J0IGtleXNcbiAgICAgICAgICAgICAgICB+Y21wOihmdW5cbiAgICAgICAgICAgICAgICAgICAgeyBEYi5TdG9yZXMuSXRlbXMuS2V5LnNvcnRfbmFtZSA9IHNuYTsgXyB9XG4gICAgICAgICAgICAgICAgICAgIHsgRGIuU3RvcmVzLkl0ZW1zLktleS5zb3J0X25hbWUgPSBzbmI7IF8gfVxuICAgICAgICAgICAgICAgICAgLT4gU3RyaW5nLmNvbXBhcmUgc25hIHNuYilcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbGFzdF92aWV3IDo9IChoYXNoLCBrZXlzKTtcbiAgICAgICAga2V5c1xuXG4gIGxldCBvbl9xdWVyeSAodHlwZSBhKSAocSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgIG1hdGNoIHEgd2l0aFxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCBzIC0+XG4gICAgICAgIGxldCAoKSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHMgaW5cbiAgICAgICAgRnV0Lm9rICgpXG4gICAgfCBBZGRfc2VydmVycyBsIC0+XG4gICAgICAgIGxldCogaWRiID0gaWRiIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXMgPSBjaGVja19kYiBpZGIgKExpc3QuaGQgbCkgaW5cbiAgICAgICAgUmVzdWx0Lm1hcF9lcnIgKGZ1biBqdiAtPiBgSnYganYpIHJlc1xuICAgIHwgR2V0X2FsbCAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsgcmVxID0gRGIuSS5nZXRfYWxsIHN0b3JlIHw+IGFzX2Z1dCBpblxuICAgICAgICBBcnJheS5tYXAgfmY6KGZ1biBpIC0+IGkuRGIuU3RvcmVzLkl0ZW1zLml0ZW0pIHJlcSB8PiBBcnJheS50b19saXN0XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcFxuICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyX21hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgfCBTb21lICh7IERiLlN0b3Jlcy5JdGVtcy5pdGVtID0geyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IGFzIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgd2hlbiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIHNlcnZlcl9pZCcgLT5cbiAgICAgICAgICAgICAgICAgICAgIFNvbWUgaXRlbVxuICAgICAgICAgICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gTm9uZSkpXG4gICAgICAgIGluXG4gICAgICAgIGl0ZW1zXG4gICAgfCBHZXRfbGlicmFyaWVzICgpIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgTGlzdC5tYXAgbCB+ZjooT3B0aW9uLmdldF9leG5fb3IgXCJJdGVtIHNob3VsZCBleGlzdHMuXCIpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgQ3JlYXRlX3ZpZXcgcmVxdWVzdCAtPlxuICAgICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIGluXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KyBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSByZXF1ZXN0IGluXG4gICAgICAgIGxldCBpdGVtX2NvdW50ID0gQXJyYXkubGVuZ3RoIGtleXMgaW5cbiAgICAgICAgeyBEYi5WaWV3LnV1aWQ7IHJlcXVlc3Q7IHN0YXJ0X29mZnNldCA9IDA7IGl0ZW1fY291bnQgfVxuICAgIHwgR2V0ICh2aWV3LCBvcmRlciwgaW5kZXhlcykgLT5cbiAgICAgICAgKCogVGhpcyByZXF1ZXN0IGlzIGNyaXRpY2FsIHRvIHZpcnR1YWwgbGlzdHMgcGVyZm9ybWFuY2VzIGFuZCBzaG91bGRcbiAgICAgICAgICAgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gKilcbiAgICAgICAgbGV0KiBzdG9yZSA9IHJlYWRfb25seV9zdG9yZSAoKSBpblxuICAgICAgICBsZXQqIGtleXMgPSBnZXRfdmlld19rZXlzIHN0b3JlIHZpZXcucmVxdWVzdCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgcmVzdWx0cyA9XG4gICAgICAgICAgQXJyYXkubWFwIGluZGV4ZXMgfmY6KGZ1biBpbmRleCAtPlxuICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleCArIHZpZXcuc3RhcnRfb2Zmc2V0IGluXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID1cbiAgICAgICAgICAgICAgICAgIERiLlZpZXcuT3JkZXIuYXBwbHkgfnNpemU6dmlldy5pdGVtX2NvdW50IG9yZGVyIGluZGV4XG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAoKiBUaGlzIGNvdWxkIGJlIG9wdGltaXplIHdoZW4gYWNjZXNzIGlzIHNlcXVlbnRpYWwgKilcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5cy4oaW5kZXgpIGluXG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICAgICAgICAgIGxldCsgcmVzdWx0ID0gSVMuZ2V0IGtleSBzdG9yZSB8PiBJREIuUmVxdWVzdC5mdXQgaW5cbiAgICAgICAgICAgICAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgICAgICAgICAgICAgIHwgT2sgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgaXRlbVwiOyBrZXk7IGVyciBdO1xuICAgICAgICAgICAgICAgICAgICBOb25lXG4gICAgICAgICAgICAgICAgfCBPayAoU29tZSB2KSAtPiBTb21lIHZcbiAgICAgICAgICAgICAgd2l0aCBfIC0+IEZ1dC5yZXR1cm4gTm9uZSlcbiAgICAgICAgICB8PiBmdXRfb2ZfYXJyYXlcbiAgICAgICAgaW5cbiAgICAgICAgT2sgcmVzdWx0c1xuZW5kXG5cbmluY2x1ZGUgTWFrZV93b3JrZXIgKFdvcmtlcilcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19 +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJkYl93b3JrZXIuYmMuanMiLCJzb3VyY2VSb290IjoiIiwibmFtZXMiOlsiY2FtbF9hcnJheV9ibGl0IiwiYTEiLCJpMSIsImEyIiwiaTIiLCJsZW4iLCJqIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJmIiwiU3RyaW5nIiwibnVsbCIsInMiLCJNYXRoIiwiY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IiwiVWludDhBcnJheSIsImIiLCJsIiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJzMiIsImMxIiwiYzIiLCJjYW1sX3N0cl9yZXBlYXQiLCJuIiwiciIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwidCIsImMiLCJ2IiwiTWxCeXRlcyIsInRhZyIsImNvbnRlbnRzIiwibGVuZ3RoIiwidGhpcyIsImNvbnRlbnQiLCJjYW1sX2J5dGVzX29mX2pzYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwieCIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9ibGl0X3N0cmluZyIsImQiLCJlIiwianNvb19zeXNfZ2V0ZW52IiwicHJvY2VzcyIsImdsb2JhbFRoaXMiLCJ1bmRlZmluZWQiLCJjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyIsImNhbWxfZ2xvYmFsX2RhdGEiLCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZSIsImV4biIsImZvcmNlIiwiY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX3NldCIsImNhbWxfYnl0ZXNfc2V0IiwiY2FtbF9ieXRlc191bnNhZmVfZ2V0IiwiY2FtbF9jYWxsX2dlbiIsImFyZ3MiLCJhcmdzTGVuIiwiZyIsIm5hcmdzIiwiQXJyYXkiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfaGFzaF9taXhfc3RyaW5nIiwiY2FtbF9oYXNoX21peF9ieXRlc19hcnIiLCJjYW1sX21sX2J5dGVzX2NvbnRlbnQiLCJjYW1sX2hhc2hfbWl4X2J5dGVzIiwiY2FtbF9oYXNoX21peF9maW5hbCIsImNhbWxfaGFzaCIsImNvdW50IiwibGltaXQiLCJzZWVkIiwib2JqIiwicXVldWUiLCJyZCIsIndyIiwiaGgiLCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdCIsInN0eWxlIiwiZXhwX3NpZ24iLCJzaWduX3N0ciIsImNzdCIsInhfc3RyIiwiaWR4IiwiY2FtbF9pbnQ2NF9pc196ZXJvIiwiY2FtbF9pbnQ2NF9vZl9pbnQzMiIsImNhbWxfaW50NjRfdG9faW50MzIiLCJjYW1sX2ludDY0X2lzX25lZ2F0aXZlIiwiY2FtbF9pbnQ2NF9uZWciLCJjYW1sX2ludDY0X2Zvcm1hdCIsIndiYXNlIiwiY3Z0YmwiLCJjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UiLCJiYXNlIiwiY2FtbF9wYXJzZV9kaWdpdCIsImNhbWxfaW50X29mX3N0cmluZyIsInRocmVzaG9sZCIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfanNfbWV0aF9jYWxsIiwiY2FtbF9qc19uZXciLCJGIiwiY2FtbF9qc19vYmplY3QiLCJjYW1sX2pzX3RvX2FycmF5IiwiY2FtbF9jYWxsYmFjayIsImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QiLCJhcml0eSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIiLCJvcmlnaW4iLCJldmVudCIsInplcm9fcG9zIiwibG9jZm10Iiwib2NhbWxfbGV4X3RhYmxlcyIsInRwX2xvYyIsInRwX2xvYyQwIiwidHBfbG9jJDEiLCJ0cF9sb2MkMiIsInRwX2xvYyQzIiwidHBfbG9jJDQiLCJ0cF9sb2MkNSIsInRwX2xvYyQ2IiwidHBfbG9jJDciLCJ0cF9sb2MkOCIsInRwX2xvYyQ5IiwidHBfbG9jJDEwIiwicGF0aCQwIiwibmFtZSQyIiwidHBfbG9jJDExIiwidHBfbG9jJDEyIiwicGF0aCQyIiwicGF0aCQzIiwibmFtZSQzIiwicGF0aCQ2IiwibmFtZSQ0IiwibmFtZSQ1IiwibmFtZSQ2IiwibmFtZSQ3IiwibmFtZSQ4IiwiaW5jbHVkZV9pdGVtX3R5cGVzIiwiaW5pdGlhbF9yZXBvcnQiLCJlcmFzZV9yZWwiLCJyZXN0IiwicmVzdCQwIiwicmVzdCQxIiwicmVzdCQyIiwicmVzdCQzIiwicmVzdCQ0IiwicmVzdCQ1IiwicmVzdCQ2IiwicmVzdCQ3IiwidHkiLCJyZXN0JDgiLCJ0eTEiLCJyZXN0JDkiLCJyZXN0JDEwIiwicmVzdCQxMSIsInJlc3QkMTIiLCJyZXN0JDEzIiwiY29uY2F0X2ZtdHR5IiwiZm10dHkxIiwiZm10dHkyIiwidHkyIiwiY29uY2F0X2ZtdCIsImZtdDEiLCJmbXQyIiwicGFkIiwicGFkJDAiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2IiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImN1ciIsImZhaWx3aXRoIiwiaW52YWxpZF9hcmciLCJhYnMiLCJtYXhfaW50IiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsInN0cmluZ19vZl9pbnQiLCJ2YWxpZF9mbG9hdF9sZXhlbSIsImxvb3AiLCJpJDAiLCJpJDEiLCJzdHJpbmdfb2ZfZmxvYXQiLCJzeW1ib2wiLCJsMSIsImwyIiwidGwiLCJoZCIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fb3V0X2dlbiIsInBlcm0iLCJvcGVuX291dCIsImZsdXNoX2FsbCIsIml0ZXIiLCJvdXRwdXRfc3RyaW5nIiwib2MiLCJvdXRwdXRfc3Vic3RyaW5nIiwiY2xvc2Vfb3V0Iiwib3Blbl9pbl9nZW4iLCJvcGVuX2luIiwiaWMiLCJwcmVycl9lbmRsaW5lIiwiZXhpdF9mdW5jdGlvbiIsImZfeWV0X3RvX3J1biIsIm9sZF9leGl0IiwiZl95ZXRfdG9fcnVuJDAiLCJvbGRfZXhpdCQwIiwibmV3X2V4aXQiLCJzdWNjZXNzIiwiZG9fYXRfZXhpdCIsImlzX2Jsb2NrIiwicmFpc2VfdW5kZWZpbmVkIiwiZm9yY2VfbGF6eV9ibG9jayIsImJsayIsImNsb3N1cmUiLCJlJDAiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsIm1hcCIsImdldF9vayIsIm1hcCQwIiwib2ZfaW50X2V4biIsInMkMCIsInJldl9hcHBlbmQiLCJsMSQwIiwibDIkMCIsImwxJDEiLCJsMiQxIiwicmV2IiwiaW5pdF90YWlscmVjX2F1eCIsImFjYyIsImFjYyQwIiwiYWNjJDEiLCJpbml0X2F1eCIsInJtYXBfZiIsImFjY3UkMCIsImFjY3UiLCJsJDAiLCJsJDEiLCJhY2N1JDEiLCJtaW4kMCIsIm1heCIsInRvX3N0cmluZyIsIm9mczEiLCJvZnMyIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImVzY2FwZV9pZl9uZWVkZWQiLCJpbmRleF9yZWMiLCJsaW0iLCJ0b2xpc3QiLCJyZXMkMCIsInJlcyQxIiwibGlzdF9sZW5ndGgiLCJmaWxsIiwiY21wIiwibWF4c29uIiwiaTMxIiwidHJpY2tsZWRvd24iLCJ0cmlja2xlIiwiYnViYmxlZG93biIsImJ1YmJsZSIsInRyaWNrbGV1cCIsImZhdGhlciIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJlbGVtZW50c19hdXgiLCJlbGVtZW50cyIsImZpbmRfbGFzdF9vcHRfYXV4IiwidjAkMCIsImZpbmRfbGFzdF9vcHQiLCJjbGVhciIsInB1c2giLCJwb3Bfb3B0IiwidG9wX29wdCIsIml0ZXIkMSIsImNyZWF0ZSQwIiwiY2xlYXIkMCIsImNlbGwiLCJtYXRjaCIsInBlZWtfb3B0IiwidGFrZSIsIm5leHQiLCJ0YWtlX29wdCIsImZyb20iLCJjcmVhdGUkMSIsIm4kMCIsIm4kMSIsInN1YiQxIiwibGVuZ3RoJDAiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfc3Vic3RyaW5nIiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N0cmluZyIsImRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIiwiYnVmZmVyX2NyZWF0ZSIsImluaXRfc2l6ZSIsImJ1ZmZlcl9jaGVja19zaXplIiwib3ZlcmhlYWQiLCJtaW5fbGVuIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJmb3JtYXR0aW5nX2xpdCIsInN0ciQwIiwiYnByaW50X2ZtdHR5IiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwiZm10dHkkNCIsImZtdHR5JDUiLCJmbXR0eSQ2IiwiZm10dHkkNyIsImZtdHR5JDgiLCJmbXR0eSQ5Iiwic3ViX2ZtdHR5IiwiZm10dHkkMTAiLCJzdWJfZm10dHkkMCIsImZtdHR5JDExIiwiZm10dHkkMTIiLCJmbXR0eSQxMyIsImZtdHR5JDE0IiwiZm10dHkkMTUiLCJzeW1tIiwiZm10dHlfcmVsX2RldCIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwidHJhbnMiLCJqZCIsImRqIiwiZ2EiLCJhZyIsImRlJDkiLCJlZCQ5IiwiYWYkOSIsImZhJDkiLCJkZSQxMCIsImVkJDEwIiwiYWYkMTAiLCJmYSQxMCIsImRlJDExIiwiZWQkMTEiLCJhZiQxMSIsImZhJDExIiwiZGUkMTIiLCJlZCQxMiIsImFmJDEyIiwiZmEkMTIiLCJkZSQxMyIsImVkJDEzIiwiYWYkMTMiLCJmYSQxMyIsInJlc3QxIiwicmVzdDIiLCJyZXN0MSQwIiwicmVzdDIkMCIsInJlc3QxJDEiLCJyZXN0MiQxIiwicmVzdDEkMiIsInJlc3QyJDIiLCJyZXN0MSQzIiwicmVzdDIkMyIsInJlc3QxJDQiLCJyZXN0MiQ0IiwicmVzdDEkNSIsInJlc3QyJDUiLCJyZXN0MSQ2IiwicmVzdDIkNiIsInJlc3QxJDciLCJ0eTEkMCIsInJlc3QyJDciLCJ0eTIkMCIsInJlc3QxJDgiLCJ0eTEyIiwidHkxMSIsInJlc3QyJDgiLCJ0eTIyIiwidHkyMSIsImY0IiwiZjIiLCJyZXN0MSQ5IiwicmVzdDIkOSIsInJlc3QxJDEwIiwicmVzdDIkMTAiLCJyZXN0MSQxMSIsInJlc3QyJDExIiwicmVzdDEkMTIiLCJyZXN0MiQxMiIsInJlc3QxJDEzIiwicmVzdDIkMTMiLCJ0eXBlX3BhZGRpbmciLCJwYWR0eSIsInBhZHR5JDAiLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2Zvcm1hdCIsInR5cGVfZm9ybWF0X2dlbiIsImZtdCQwIiwiZm10dHlfcmVzdCIsImZtdF9yZXN0IiwiZm10dHlfcmVzdCQwIiwiZm10X3Jlc3QkMCIsImZtdCQxIiwiZm10X3Jlc3QkMSIsImZtdHR5X3Jlc3QkMSIsImZtdCQyIiwiZm10X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMiIsImZtdCQzIiwiZm10X3Jlc3QkMyIsImZtdHR5X3Jlc3QkMyIsImZtdCQ0IiwiZm10X3Jlc3QkNCIsImZtdHR5X3Jlc3QkNCIsImZtdCQ1IiwiZm10X3Jlc3QkNSIsImZtdHR5X3Jlc3QkNSIsInByZWMkNCIsImZtdCQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInBhZCQ5IiwicGFkJDEwIiwiZm10dHlfcmVzdCQ2IiwicHJlYyQ2IiwiZm10JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicGFkJDExIiwicGFkJDEyIiwiZm10dHlfcmVzdCQ3IiwicHJlYyQ4IiwiZm10JDgiLCJmbXRfcmVzdCQ4IiwicGFkJDEzIiwicGFkJDE0IiwiZm10dHlfcmVzdCQ4IiwiZm10JDkiLCJmbXRfcmVzdCQ5IiwiZm10JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXQkMTEiLCJmbXRfcmVzdCQxMSIsImZtdCQxMiIsImZtdHR5X3Jlc3QkOSIsImZtdF9yZXN0JDEyIiwicGFkX29wdCIsImZtdCQxMyIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHkxIiwiZm10X3Jlc3QkMTMiLCJzdWJfZm10dHkkMSIsInBhZF9vcHQkMCIsImZtdCQxNCIsImZtdHR5X3Jlc3QkMTEiLCJmbXRfcmVzdCQxNCIsImZtdCQxNSIsImZtdHR5X3Jlc3QkMTIiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJ0eXBlX2Zvcm1hdHRpbmdfZ2VuIiwiZm10dHlfcmVzdCQxMyIsImZtdF9yZXN0JDE4IiwiZm10dHkkMTgiLCJmbXQkMTgiLCJmbXR0eV9yZXN0JDE0IiwiZm10X3Jlc3QkMTkiLCJmbXR0eSQxOSIsImZtdCQxOSIsImZtdHR5X3Jlc3QkMTUiLCJmbXRfcmVzdCQyMCIsImZtdHR5JDIwIiwiZm10JDIwIiwidHlwZV9pZ25vcmVkX3BhcmFtIiwiZm10MCIsImZtdHR5MCIsImZtdHR5MyIsImZtdDMiLCJmbXQxJDAiLCJmbXR0eTIkMCIsImZtdDIkMCIsImZtdHR5MyQwIiwiZm10MyQwIiwidHlwZV9pZ25vcmVkX3BhcmFtX29uZSIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInN1Yl9mbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QkMCIsInN1Yl9mbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDciLCJzdWJfZm10dHlfcmVzdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkOSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJzdWJfZm10dHlfcmVzdCQxMiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwic3ViX2ZtdHR5X3Jlc3QkMTQiLCJzdWIyX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTUiLCJzdWIyX2ZtdHR5JDAiLCJzdWJfZm10dHlfcmVzdCQxNiIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE4Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJzdWJfZm10dHlfcmVzdCQyMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJzdWJfZm10dHlfcmVzdCQyMyIsInN1Yl9mbXR0eV9yZXN0JDI0Iiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJzdWJfZm10dHlfcmVzdCQyNiIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgiLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfaWNvbnYiLCJmb3JtYXRfb2ZfaWNvbnZMIiwiZm9ybWF0X29mX2ljb252bCIsImZvcm1hdF9vZl9pY29udm4iLCJmb3JtYXRfb2ZfZmNvbnYiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImxlZnQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4IiwiYWRkX2RvdF9pZl9uZWVkZWQiLCJpc192YWxpZCIsImNhbWxfc3BlY2lhbF92YWwiLCJmb3JtYXRfY2FtbF9jaGFyIiwic3RyaW5nX29mX2ZtdHR5IiwibWFrZV9wcmludGYkMCIsImskMCIsIm5ld19hY2MiLCJtYWtlX3ByaW50ZiIsIm1ha2VfcGFkZGluZyIsIm1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIiwibWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiIsImFjYyQyIiwiYWNjJDMiLCJhY2MkNCIsImskMSIsImthY2MiLCJrJDIiLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwicCQwIiwicCQxIiwiYXJpdHkkMCIsIm1ha2VfY3VzdG9tIiwib3V0cHV0X2FjYyIsInAkMyIsInAkNCIsInAkNSIsInAkMiIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsImokMCIsImokMSIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJrZnByaW50ZiIsImZwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsImZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQwIiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiYnQiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJzbG90IiwiaW5mbyIsImlzX3JhaXNlIiwicHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsIm91dGNoYW4iLCJiYWNrdHJhY2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwicmF3X2JhY2t0cmFjZSIsInJlZ2lzdGVyX3ByaW50ZXIiLCJmbiIsIm9sZF9wcmludGVycyIsIm5ld19wcmludGVycyIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsImVtcHR5X2JhY2t0cmFjZSIsInRyeV9nZXRfcmF3X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiQwIiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0IiwiY29tYmluZSIsImV4dHJhY3QiLCJzZWVkJDAiLCJtYWtlJDIiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkMCIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsIm9uZ29pbmdfdHJhdmVyc2FsIiwicGFyYW1zIiwicmFuZG9taXplZF9kZWZhdWx0IiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJ4JDAiLCJ4JDEiLCJpbml0aWFsX3NpemUiLCJyYW5kb20iLCJpbnNlcnRfYWxsX2J1Y2tldHMiLCJpbmRleGZ1biIsImlucGxhY2UiLCJvZGF0YSIsIm5kYXRhIiwibnNpemUiLCJuZGF0YV90YWlsIiwiaW5zZXJ0X2J1Y2tldCIsImNlbGwkMCIsImNlbGwkMSIsIm5pZHgiLCJyZXNpemUkMCIsIm9zaXplIiwia2V5X2luZGV4IiwicmVtb3ZlX2J1Y2tldCIsImZpbmRfcmVjIiwiZDEiLCJuZXh0MSIsImQyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJmaW5kIiwidGFpbCIsImhlYWQiLCJ0YWIiLCJvZmYkMSIsImluc2VydGlvbl9wb2ludCQwIiwid2lkdGgkMSIsImJveF90eXBlJDAiLCJ0Ym94IiwidGFnX25hbWUkMCIsIm1hcmtlciQwIiwiYWR2YW5jZV9sZWZ0IiwicGVuZGluZ19jb3VudCIsInNpemUkMCIsImVucXVldWVfYWR2YW5jZSIsInRvayIsImVucXVldWVfc3RyaW5nX2FzIiwiZW5xdWV1ZV9zdHJpbmciLCJpbml0aWFsaXplX3NjYW5fc3RhY2siLCJxdWV1ZV9lbGVtIiwic2V0X3NpemUiLCJsZWZ0X3RvdGFsIiwic2Nhbl9wdXNoIiwiZWxlbSIsInBwX29wZW5fYm94X2dlbiIsImJyX3R5IiwicHBfb3Blbl9zeXNfYm94IiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJpc2l6ZSIsInBwX3ByaW50X3N0cmluZyIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3V0IiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfYmxhbmtzIiwiZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnIiwiZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWciLCJkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyIsInBwX21ha2VfZm9ybWF0dGVyIiwicHBfcXVldWUiLCJzeXNfdG9rIiwic2Nhbl9zdGFjayIsInBwX21hcmdpbiIsIm91dHB1dCIsImZsdXNoIiwicHBmIiwiZm9ybWF0dGVyX29mX291dF9jaGFubmVsIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwiZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiYyQwIiwiZiQwIiwicCQ2IiwicCQ3IiwiZnByaW50ZiQwIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInRvX2p2Iiwia2V5cyIsImJvdW5kIiwibG93ZXIiLCJ1cHBlciIsImxvd2VyX29wZW4iLCJzdGgkMCIsInVwcGVyX29wZW4iLCJvbGRfdmVyc2lvbiIsIm5ld192ZXJzaW9uIiwidXBncmFkZV9uZWVkZWQiLCJlcnJvciQwIiwib2ZfanYiLCJlcnJvciQxIiwib25fc3VjY2VzcyIsImV2Iiwib25fZXJyb3IiLCJmdXQkMCIsInNldCIsInJlc3VsdF9mdXQiLCJ0b19zdHJpbmckMSIsInRvX2p2JDAiLCJnZXQiLCJqdiIsImdldF9hbGwiLCJnZXRfYWxsX2tleXMiLCJxdWVyeSIsInF1ZXJ5JDAiLCJwcmltYXJ5X2tleSIsImFkdmFuY2UiLCJjb250aW51ZSQwIiwia2V5JDAiLCJwcmltYXJ5X2tleSQwIiwiYWR2YW5jZSQwIiwiY29udGludWUkMSIsImRlbGV0ZSQwIiwidXBkYXRlIiwib3Blbl9jdXJzb3IiLCJkaXJlY3Rpb24iLCJkaXJlY3Rpb24kMCIsImQkMCIsImNyZWF0ZV9pbmRleCIsIkkiLCJrZXlfcGF0aCIsInN0cmluZ19vZl9tb2RlIiwib2JqZWN0X3N0b3JlIiwiUyIsImNyZWF0ZV9vYmplY3Rfc3RvcmUiLCJhdXRvX2luY3JlbWVudCIsIm9wdHMiLCJvcHRzJDAiLCJvcHRpb25zIiwiZGVsZXRlX29iamVjdF9zdG9yZSIsInRyYW5zYWN0aW9uIiwic3RvcmVzIiwibW9kZSQwIiwianZfb2Zfc3RvcmUiLCJvYmplY3Rfc3RvcmVfbmFtZXMiLCJvbl91cGdyYWRlX25lZWRlZCIsInJlcSIsIm9wZW4iLCJ2ZXJzaW9uIiwiZ2V0X2ZhY3RvcnkiLCJnbG9iYWwkMCIsImF1eCIsImEkMCIsImkkMiIsImludF9vZl9jb2xvciIsImNvZGVfb2Zfc3R5bGUiLCJzdHJpbmdfb2Zfc3R5bGUiLCJlcXVhbCQwIiwicmVjdXJzZSIsInN5bWJvbCQ2IiwiaXNfbm9uZSQwIiwiaXRlciQyIiwidmFsdWUkMCIsImdldF9leG5fb3IiLCJzeW1ib2wkNyIsIm1hcF9lcnIiLCJnZXRfZXhuIiwiZmxhdHRlbl9sIiwic3ltYm9sJDgiLCJrbXBfcGF0dGVybl9sZW5ndGgiLCJnZXQkMiIsImRpciIsImttcF9jb21waWxlIiwiZmFpbHVyZSIsImttcF9jb21waWxlJDAiLCJrbXBfZmluZCIsInBhdHRlcm4iLCJwYXRfbGVuIiwiZXhwZWN0ZWQiLCJmYWlsX29mZnNldCIsImNvbXBpbGUiLCJzdWIiLCJmaW5kJDAiLCJwYXR0ZXJuJDAiLCJwcmUiLCJjaGVjayIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwiY3MiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInYxIiwidjIiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwiZm9ybWF0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDIiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwicGFpciIsImpzb25fdG9fY2hhbm5lbCIsImpzb25fdG9fZmlsZV9leG4iLCJqc29uX3RvX2J1ZmZlciIsImpzb25fdG9fc3RyaW5nIiwianNvbl9lcnJvciIsImVycm9yX3RvX3N0cmluZyIsImVycm9yX2luZm8iLCJmbmFtZSIsImxudW0iLCJsbnVtJDAiLCJsbnVtJDEiLCJmbmFtZSQwIiwibG9jIiwiYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMiLCJmcm9tX3N0cmluZyIsInRvX3N0YW5kYXJkIiwibm9kZSIsInYkMSIsInRwbCIsImpvcHQiLCJ2JDAiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMCIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckMyIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDEiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDAiLCJqc3RyIiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ5b2pzb25fb2ZfYm9vbCIsInlvanNvbl9vZl9zdHJpbmciLCJ5b2pzb25fb2ZfaW50IiwieW9qc29uX29mX29wdGlvbiIsInlvanNvbl9vZl9hIiwieW9qc29uX29mX2xpc3QiLCJsc3QiLCJyZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzIiwib2ZfeW9qc29uX2Vycm9yIiwid2hhdCIsInlvanNvbiIsImJvb2xfb2ZfeW9qc29uIiwic3RyaW5nX29mX3lvanNvbiIsImludF9vZl95b2pzb24iLCJvcHRpb25fb2ZfeW9qc29uIiwiYV9vZl95b2pzb24iLCJsaXN0X29mX3lvanNvbiIsInJldl9sc3QiLCJzdGFnX25vX2FyZ3MiLCJuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSIsImVtcHR5X2xpc3RfaW52YWxpZF9zdW0iLCJ1bmV4cGVjdGVkX3N0YWciLCJyZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIiwicmV2X2ZsZF9uYW1lcyIsImZsZF9uYW1lc19zdHIiLCJyZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyIsInJlY29yZF9leHRyYV9maWVsZHMiLCJyZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIiwiZmllbGRzJDAiLCJyZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIiwidW5kZWZpbmVkJDAiLCJyZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20iLCJzeW1ib2wkOSIsImpzdHJfb2ZfbWV0aG9kIiwib3JkZXJfb2ZfeW9qc29uIiwieW9qc29uX29mX29yZGVyIiwic29ydF9vZl95b2pzb24iLCJ5b2pzb25fb2Zfc29ydCIsImltYWdlX2JsdXJfaGFzaF9vZl95b2pzb24iLCJ5b2pzb25fb2ZfaW1hZ2VfYmx1cl9oYXNoIiwiaW1hZ2VfYmx1cl9oYXNoZXNfb2ZfeW9qc29uIiwiZmllbGRfeW9qc29ucyIsInByaW1hcnlfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZHMiLCJibmQiLCJibmRzJDAiLCJ0eXBlX29mX3lvanNvbiIsInlvanNvbl9vZl90eXBlIiwiZmllbGRfb2ZfeW9qc29uIiwieW9qc29uX29mX2ZpZWxkIiwidHlwZV9zdHJfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGVfc3RyIiwidHMiLCJ0X29mX3lvanNvbiIsIm5hbWVfZmllbGQiLCJzb3J0X25hbWVfZmllbGQiLCJpZF9maWVsZCIsInBhdGhfZmllbGQiLCJhbGJ1bV9pZF9maWVsZCIsInBhcmVudF9pZF9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsImltYWdlX2JsdXJfaGFzaGVzX2ZpZWxkIiwidHlwZV9maWVsZCIsImNvbGxlY3Rpb25fdHlwZV9maWVsZCIsImZ2YWx1ZSQwIiwiZnZhbHVlJDEiLCJmdmFsdWUkMiIsImZ2YWx1ZSQzIiwiZnZhbHVlJDQiLCJmdmFsdWUkNSIsImZ2YWx1ZSQ2IiwiZnZhbHVlJDciLCJmdmFsdWUkOCIsInNvcnRfbmFtZV92YWx1ZSIsInBhdGhfdmFsdWUiLCJhbGJ1bV9pZF92YWx1ZSIsInBhcmVudF9pZF92YWx1ZSIsImNvbGxlY3Rpb25fdHlwZV92YWx1ZSIsInR5cGVfdmFsdWUiLCJpbWFnZV9ibHVyX2hhc2hlc192YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsImlkX3ZhbHVlIiwibmFtZV92YWx1ZSIsInlvanNvbl9vZl90Iiwidl9jb2xsZWN0aW9uX3R5cGUiLCJ2X3R5cGUiLCJ2X2ltYWdlX2JsdXJfaGFzaGVzIiwidl9zZXJ2ZXJfaWQiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X2lkIiwidl9zb3J0X25hbWUiLCJ2X25hbWUiLCJhcmckOCIsImJuZCQzIiwiYm5kcyQxIiwiYXJnJDAiLCJibmRzJDIiLCJhcmckMSIsImJuZHMkMyIsImFyZyQyIiwiYm5kcyQ0IiwiYXJnJDMiLCJibmQkMCIsImJuZHMkNSIsImFyZyQ0IiwiYm5kJDEiLCJibmRzJDYiLCJhcmckNSIsImJuZHMkNyIsInYkMiIsImFyZyQ2IiwiYm5kJDIiLCJibmRzJDgiLCJhcmckNyIsImJuZHMkOSIsInBhcmFtc19vZl95b2pzb24iLCJpZHNfZmllbGQiLCJ1c2VyX2lkX2ZpZWxkIiwiZmllbGRzX2ZpZWxkIiwiaW5jbHVkZV9pdGVtX3R5cGVzX2ZpZWxkIiwic3RhcnRfaW5kZXhfZmllbGQiLCJsaW1pdF9maWVsZCIsInNvcnRfb3JkZXJfZmllbGQiLCJzb3J0X2J5X2ZpZWxkIiwicmVjdXJzaXZlX2ZpZWxkIiwiZW5hYmxlX3VzZXJfZGF0YV9maWVsZCIsImVuYWJsZV9pbWFnZXNfZmllbGQiLCJmdmFsdWUkOSIsImZ2YWx1ZSQxMCIsImlkc192YWx1ZSIsInN0YXJ0X2luZGV4X3ZhbHVlIiwibGltaXRfdmFsdWUiLCJzb3J0X29yZGVyX3ZhbHVlIiwiZW5hYmxlX2ltYWdlc192YWx1ZSIsImVuYWJsZV91c2VyX2RhdGFfdmFsdWUiLCJyZWN1cnNpdmVfdmFsdWUiLCJzb3J0X2J5X3ZhbHVlIiwiaW5jbHVkZV9pdGVtX3R5cGVzX3ZhbHVlIiwiZmllbGRzX3ZhbHVlIiwidXNlcl9pZF92YWx1ZSIsInlvanNvbl9vZl9wYXJhbXMiLCJ2X2VuYWJsZV9pbWFnZXMiLCJ2X2VuYWJsZV91c2VyX2RhdGEiLCJ2X3JlY3Vyc2l2ZSIsInZfc29ydF9ieSIsInZfc29ydF9vcmRlciIsInZfbGltaXQiLCJ2X3N0YXJ0X2luZGV4Iiwidl9pbmNsdWRlX2l0ZW1fdHlwZXMiLCJ2X2ZpZWxkcyIsInZfdXNlcl9pZCIsInZfaWRzIiwiYXJnJDkiLCJibmRzJDEwIiwiYXJnJDEwIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwiaXRlbXNfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfZmllbGQiLCJ0b3RhbF9yZWNvcmRfY291bnRfdmFsdWUiLCJpdGVtc192YWx1ZSIsInlvanNvbl9vZl9yZXNwb25zZSIsInZfdG90YWxfcmVjb3JkX2NvdW50Iiwidl9pdGVtcyIsIm1ldGhvZCIsImVuZHBvaW50IiwicGFyYW1zX29mX3lvanNvbiQwIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X2ZpZWxkIiwiaW5jbHVkZV9leHRlcm5hbF9jb250ZW50X3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyQwIiwidl9pbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQiLCJyZXNwb25zZV9vZl95b2pzb24kMCIsInlvanNvbl9vZl9yZXNwb25zZSQwIiwiZW5kcG9pbnQkMCIsInBwIiwidmlydHVhbF9mb2xkZXJfb2ZfeW9qc29uIiwibG9jYXRpb25zX2ZpZWxkIiwiaXRlbV9pZF9maWVsZCIsIml0ZW1faWRfdmFsdWUiLCJsb2NhdGlvbnNfdmFsdWUiLCJ5b2pzb25fb2ZfdmlydHVhbF9mb2xkZXIiLCJ2X2l0ZW1faWQiLCJ2X2xvY2F0aW9ucyIsInNlc3Npb25fdXVpZCIsInNldF9zZXNzaW9uX3V1aWQiLCJhdXRob3JpemF0aW9uIiwidG9rZW4kMCIsInNlc3Npb25fdXVpZCQwIiwicmVxdWVzdCQxIiwiYmFzZV91cmwiLCJoZWFkZXJzIiwiUSIsInBhdGhfcGFyYW1zIiwiYmFzZV91cmkiLCJiYXNlX3BhdGhfc2VnbWVudHMiLCJlbmRwb2ludF9wYXRoX3NlZ21lbnRzIiwicGF0aF9zZWdtZW50cyQwIiwidXJpIiwidXJpJDAiLCJhdXRob3JpemF0aW9uJDAiLCJoZWFkZXJzJDAiLCJib2R5IiwidXJsJDAiLCJwYXJhbXMkMCIsInVyaV93aXRoX3BhcmFtcyIsInVybCQxIiwiaW5pdCQwIiwibWV0aG9kJDAiLCJnZXRfdG9rZW4iLCJ0YWdfb2YiLCJmdXR1cmVzIiwibGlzdGVuZXJzIiwid29ya2VyIiwib25fbWVzc2FnZSIsIm1lc3NhZ2UiLCJ1dWlkIiwiZGlzcGF0Y2hfZXZlbnQiLCJhcHBseSIsInRfdG9fanYiLCJlbmNvZGVyIiwianZfdG9fdCIsImRlY29kZXIiLCJ0X29mX3lvanNvbiQwIiwiaXRlbV9maWVsZCIsIml0ZW1fdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidG9fanYkMSIsIm9mX2p2JDAiLCJ0b19qdiQyIiwib2ZfanYkMSIsImdldF9rZXkiLCJzb3J0c19vZl95b2pzb24iLCJkYXRlX2FkZGVkX2ZpZWxkIiwidmlld3NfZmllbGQiLCJ2aWV3c192YWx1ZSIsImRhdGVfYWRkZWRfdmFsdWUiLCJ5b2pzb25fb2Zfc29ydHMiLCJ2X3ZpZXdzIiwidl9kYXRlX2FkZGVkIiwidF9vZl95b2pzb24kMSIsInNvcnRzX2ZpZWxkIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQxIiwidl9zb3J0cyIsInRvX2p2JDMiLCJ2aWV3cyIsInNvcnRfbmFtZSIsImlkJDAiLCJzb3J0X25hbWUkMCIsInZpZXdzJDAiLCJvZl9qdiQyIiwicGF0aCQxIiwidG9fanYkNCIsIm9mX2p2JDMiLCJ0b19qdiQ1Iiwib2ZfanYkNCIsInRvX2p2JDYiLCJvZl9qdiQ1IiwidHlwZSIsInBhdGgkNCIsInRvX2p2JDciLCJvZl9qdiQ2IiwiY29sbGVjdGlvbl90eXBlIiwicGF0aCQ1IiwidG9fanYkOCIsIm9mX2p2JDciLCJnZXRfa2V5JDAiLCJ0b19qdiQ5Iiwib2ZfanYkOCIsInRvX2p2JDEwIiwib2ZfanYkOSIsImdldF9rZXkkMSIsImNodW5rX3NpemUiLCJmZXRjaF90b3RhbF9pdGVtX2NvdW50Iiwic291cmNlIiwiZ2V0X2RiX2luZm9zIiwiaWRiIiwic2V0X2luZm9zIiwiaW5mb3MiLCJ0cmFuc2FjdGlvbiQwIiwic3RvcmUiLCJsYXN0X2tleSIsImN1cnNvciIsIml0ZW0iLCJpc19kYl9jb25zaXN0ZW50IiwibGFzdF9zb3VyY2VfaXRlbV9rZXkiLCJkYl9zeW5jX2luZm9zIiwiY2hlY2tfc3RhdHVzIiwiZGJfaW5mb3MiLCJ0b3RhbF9pdGVtX2NvdW50IiwiZmlyc3RfdW5mZXRjaGVkX2tleSIsIml0ZW0kMCIsInVwZGF0ZV92aWV3cyIsInNfaXRlbXMiLCJkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmkiLCJwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4iLCJwYXJlbnRfaWQiLCJwaWQiLCJwYXRoc19vZl9wYXJlbnRzIiwicGFyZW50cyIsInBhdGhzIiwidmlld3Nfb2ZfcGF0aCIsInZmb2xkZXJzIiwibG9jYXRpb25zIiwidmlld19pZCIsInN5bmMiLCJyZXBvcnQiLCJtYWtlX3BsYWNlaG9sZGVycyIsImxhc3QiLCJmZXRjaF9taXNzaW5nX2l0ZW1zIiwiZmV0Y2hfcXVldWUiLCJlbnF1ZXVlIiwic3RhcnRfaW5kZXgiLCJ0b2RvIiwic3RhcnRfaW5kZXgkMCIsInRvZG8kMCIsInRvZG8kMSIsInN0YXJ0X2luZGV4JDEiLCJ0b3RhbF9xdWVyaWVzIiwicnVuX3F1ZXVlIiwidGhyZWFkcyIsInRha2VfbiIsImVsdCIsIml0ZW1zIiwiaWRiX3B1dCIsInNfbGlzdCIsImluZGV4JDAiLCJyZXFzIiwiZmlyc3RfbWlzc2luZ19rZXkiLCJsYXN0X3NvdXJjZV9pdGVtX2tleSQwIiwiZmlyc3RfdW5mZXRjaGVkX2tleSQwIiwiY2hlY2tfYW5kX3N5bmMiLCJpbml0aWFsIiwicmVwb3J0JDAiLCJzeW5jX3Byb2dyZXNzIiwib25fdXBncmFkZV9uZWVkZWQkMCIsIm5ld192ZXJzaW9uJDAiLCJvbGRfdmVyc2lvbiQwIiwiZGIiLCJ2aXJ0dWFsX2ZvbGRlcnMiLCJpbmRleF9kYXRlX2FkZGVkIiwid2l0aF9pZGIiLCJkYnIiLCJtYXBfZXJyb3IiLCJhc19mdXQiLCJmdXRfb2ZfYXJyYXkiLCJmdXQiLCJwcm9taXNlIiwiYXJyIiwiYWxsJDAiLCJ0b19hcnJheSQwIiwiY2hlY2tfZGIiLCJzb3VyY2UkMCIsInNlcnZlcl9pZCIsInNldF9pZGIiLCJyZWFkX29ubHlfc3RvcmUiLCJ2aWV3X21lbW8iLCJsYXN0X3ZpZXciLCJnZXRfdmlld19rZXlzIiwiZmlsdGVycyIsInNvcnQkMCIsInNyY192aWV3cyIsImhhc2gkMCIsInN1YiQwIiwia2V5cyQwIiwic25iIiwic25hIiwiYWxsX2tleXMiLCJzcmNfdmlld3MkMCIsIm9uX3F1ZXJ5IiwiaXRlbXMkMCIsInNlcnZlcl9pZCQwIiwicmVxdWVzdCIsIml0ZW1fY291bnQiLCJpbmRleGVzIiwib3JkZXIiLCJpbmRleCQxIiwicmVzdWx0cyJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9jb21wbGlhbnRfbGV4eGVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N0b3Jlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3luYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbEF0b21pYy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NJbnQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NDaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J5dGVzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3F1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FsbGJhY2subWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc19vZl9vY2FtbC1jb21waWxlci9ydW50aW1lL2pzb29fcnVudGltZS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvaW5kZXhlZF9kYi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NBcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NMaXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ09wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NSYW5kb20ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL3N0ZC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3BweF95b2pzb25fY29udl9saWIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi93b3JrZXJfYXBpL3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3ZpZXcubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiX3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9kYl93b3JrZXIvZGJfd29ya2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkX2V4aXQubWwiXSwibWFwcGluZ3MiOiI7O0EsQzs7Rzs7O1E7Uzs7O0c7STtJO0k7RztFOzs7O0dBcURBLFNBQVNBLGdCQUFnQkMsSUFBSUMsSUFBSUMsSUFBSUMsSUFBSUM7SUFDdkMsR0FBSUQsTUFBTUY7S0FBSSxJQUNELElBQUZJLE9BQU9BLEtBQUtELEtBQUtDLEtBQUtILEdBQUdDLEtBQUtFLEtBQUtMLEdBQUdDLEtBQUtJOztLQUMvQyxJQUNNLElBQUZBLElBQUlELEtBQUtDLFFBQVFBLEtBQUtILEdBQUdDLEtBQUtFLEtBQUtMLEdBQUdDLEtBQUtJO0lBRXREO0dBQ0Y7R0NZQSxTQUFTQyx5QkFBMEJDLEdBQUdDLEdBQUdKO0lBQ2pDLElBQUZLLElBQUlDO0lBQ1IsR0FBSUYsVUFBVUosZUFBZUEsT0FBT0csVUFBVSxPQUFPRSxRQUFTRSxNQUFNSjtJQUM5RCxJQUFGSztJQUNKLFVBQVdSLEtBQUtJLFdBQVVKO0tBQ3hCUSxLQUFLSCxRQUFTRSxNQUFNSixRQUFRQyxHQUFFQSxJQUFJSyxTQUFTVDtJQUM3QyxPQUFPUTtHQUNUO0dBcVhBLFNBQVNFLDRCQUE2QkY7SUFFcEMsSUFBSUwsUUFBUVEsV0FBV0gsTUFDbkJJLElBQUlKLEtBQUtLLElBQUlELFVBQVVSO0lBQzNCLE1BQU9BLElBQUlTLEdBQUdULEtBQUtELEVBQUVDLEtBQUtRLGFBQWFSO0lBQ3ZDLElBQUtTLElBQUlMLEtBQUtKLElBQUlTLEdBQUdULEtBQUtELEVBQUVDO0lBQzVCSSxNQUFNTDtJQUNOSztJQUNBLE9BQU9MO0dBQ1Q7R0FpSkEsU0FBU1csZ0JBQWdCQyxJQUFJbEIsSUFBSW1C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QTJDckJnRyxHQUFFa25DO1FBQWE5Z0M7SUFDMUIsT05nS002eUI7c0JNL0pDalosS0F2RURnb0IsYUFxRU9kLEtBRU5sbkIsd0JBRkloZ0IsR0FBRWtuQyxLQUUwQjs7YUFGYjlnQzs7WUNocUN4QmtpQyxVRDJxQ1FwQjt3QjtJQUFNLHNCLHdCQUFOQTtHQUF5QjtzQkFzQnZCbG5DO0lBQ0osSUFEZW9HLGdCQUNuQmhNLElBdFhGaXRDLG1CQXVYRUgsMEJBREE5c0M7YUFFQTIrQixJQUFFL1k7S0F6R0Fnb0IsYUF3R0ZkLEtBQ0VsbkI7S0FFRixPQUFBLFdBTFFoZ0IsR0FyV1Z3bkMsdUJBc1dFcHRDLEdBQ0E4c0M7SUFHOEI7SUFDbEMsT04wSE1qTyxZTTdIRkYsUUFIbUIzeUI7O3FCQVNaQSxLQUFNLGlCQTcxQ2ZnTSxJQTYxQ1NoTSxLQUFzQjtZQUkvQm1pQztJQzcxQ0F0QyxlQWdKQXFCO0lEOHNDRixPQzkxQ0VyQixlQWlKQXNCO0dEOHNDNkI7R3pCaDFCekJyeEIsUXlCODBCSnF5QjtZRWgyQ0FDLG1CQUFtQnpsQyxNQUNqQnZHO0lBQUosSUFDSTJnQyxPQUFVLGFBRFYzZ0MsZUFBQUEsTUFBQUE7SUFFSiwwQkFIcUJ1RyxNQUVqQm82QjtJQUNKO0dBQThCO0dDd0k5QjtHRDNJRXFMO0dDK0lxQixlLFU7RyxJLHdCOzJCLE8sYzs7STtJLE87Rzs7STtJOzs7O0ksTztHO3lCLE8sc0IsYzttQyxPLHlCO0c7RyxJLGU7dUIsNEI7NEIsaUM7O0k7STtHOztJLDRCO0c7O0ksWTs7SSxPOztHOztJLFk7O0k7STs7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZOzJCLFUsTzs7SSxZOztJOzt3Qiw4Qjt3QixtQjs7STtJLCtCLE8sdUI7Rzs7SSx3QixvQixvQjs7OztNLFE7TTs7Ozs7STtHOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1CO3lCLE8sTyxzQzs7SSxPO2E7YTtHO3FCLE8saUI7dUI7dUI7bUIsZ0I7eUIsa0I7eUIsa0I7O0k7SyxNO0k7SSx1QiwrQztJO0kscUMsOEI7STtvQix1RDtJO0c7d0IsdUI7O0k7OzsyQixpQixtQjtHOztJLDZCLGdCLG1CO0c7O0ksSSxnQztJO0ssd0M7STtJO0c7a0Isd0I7O3FCLG1CLG9CO0ksb0IsbUIsdUI7STtHOztJLHFDO0c7eUIsb0I7O0ksc0I7O2MsZTs7YyxPO2E7Rzs7SSw0QixPckI5SXJCbHBCO0c7Rzs4QiwwQjs7STtJLFU7STtJO0c7RztHO0c7RztHO3NCLE8sa0I7O0ksSSxROzs7OztLOztJO0c7RztHO0c7STtJO0k7O0ksVzs7STtHO0c7b0Isc0I7OzJCLE8sb0I7STtLO007TTtNO0s7Ozs7OztLOztHOzsyQixzQixxQjtJO0ssSSxrQjtLO0s7Szs7Ozs7O0s7O0c7Rzt1QixPLGE7c0Isa0I7O0k7STtJO0c7eUIsTyxhO0c7RywrQjtnQyxrQyxTO0c7O0k7OztvQjs7TTtNOzs7OztJLE87RztxQiw4Qzt1Qiw4QztzQiw4QztHO0c7RztHO0c7RztHOzBCOztJLG1DLGU7RztHOztJO0ksUztJOztLO0s7O0ksb0I7STtHOzs7Ozs7Ozs7Ozs7Ozs7STtJLGtEO0k7STtJLHFCRERBRixtQjtJO0k7STtJO0k7STtJO0ksb0Q7STtHO0c7O0k7STtHO0c7Rzs7d0I7SSxzQixrQztHO0c7RztHO0c7RztvQixpQjtHO0c7Rzs7STtJO0c7Rzs7STtJO0k7RztHO0c7RztZdUJsQk1xcEI7SUFBUSx1QkFDVDloQyxjQUFLLFlBQUxBO1FBQ0QraEM7SUFBUSxnQkFGTkQsT0FFRkM7R0FBOEI7WUFRaENDLE1BQU9DLE9BQU9DLE9BQVFsbUI7SUFDeEIsR0FEd0JBLFNBQWFDLE1BQWJELFFBQUFtbUIsYUFBYWxtQixjQUFia21CO0lBQ3hCLGFBRDJEQyxpQkFBYkMsYUFBYUQsZ0JBQWJDO0lBQ3RDLElBQUo5dEM7SUFDSixPQURJQSxRQURLMHRDLE9BQU9DLFdBQVFDLGdCQUFzQkU7R0FHb0I7WUFPOURDLFlBQVlodUMsR0FB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bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzs7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7Ozs7Ozs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7OzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzsyQjBCL0RFUSxhMUIrREZobkMsVUFBQXdtQzs7MkIwQi9ERVEsYTFCK0RGaG5DLFVBQUF3bUM7OzJCMEIvREVRLGExQitERmhuQyxVQUFBd21DOzs7OztPQUFBLE8wQmhERVMsd0IxQmdERmpuQyxVQUFBd21DOzs7SUFBQSxPMEJ4Q0VXLGdCMUJ3Q0ZubkMsVUFBQXdtQztHQXNDbUI7WUF0Q25CNkM7SUFBQTs7T0FDRTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTs7T0FDQTtlQUNBOztHQUNpQjtHQUVuQixTQUFBQyxnQkFBQTlDO0lBQUEsVUFBQUEscUNBQUFBO2dCQUFBQTtnQkFBQSxPMEJwRkVVLHVCMUJvRkZqbkMsVUFBQXVtQzs7Ozs7Ozs7OzswQjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7Ozs7MkIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7Ozs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7Ozs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7Ozs7Ozs7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7Ozs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7Ozs7Ozs7OzJCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs0QjBCdkdFUSxhMUJ1R0YvbUMsVUFBQXVtQzs7NEIwQnZHRVEsYTFCdUdGL21DLFVBQUF1bUM7OzRCMEJ2R0VRLGExQnVHRi9tQyxVQUFBdW1DOzs7Ozs7OzRCMEJ2R0VRLGEx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ekRvTEZXOztnQkFDRSxJQUFBaUMsV3dEN0hBaEUsaUJ4RDRIRmlDO2dCQUNFaUIsb0JBQUFjOzs7c0J5RHJMQTVDLFN6RCtMQXFDO2VBWEYxQixvQkFBQUcsWXlEcExFZCxTekRvTEZXOztlQVdFLElBQUFrQyxXQW5JRnJDLDRCQXdIQUs7ZUFXRXdCLGlDQUFBUTs7cUJ5RC9MQTdDLFN6RHVMQWdDO2NBSEZyQixvQkFBQUcsWXlEcExFZCxTekRvTEZXOztjQUdFLElBQUFtQyxXd0QvSEFsRSxpQnhENEhGaUM7Y0FHRW1CLGtCQUFBYzs7b0J5RHZMQTlDLFN6RGlNQXVDO2FBYkY1QixvQkFBQUcsWXlEcExFZCxTekRvTEZXOztpQkFhRW9DLFd3RDlFQWpFLGlCQTNEQUYsa0J4RDRIRmlDO2FBYUUwQiwrQkFBQVE7O21CeURqTUEvQyxTekR5TEFrQztZQUxGdkIsb0JBQUFHLFl5RHBMRWQsU3pEb0xGVzs7WUFLRSxJQUFBcUMsV3dEaklBcEUsaUJ4RDRIRmlDO1lBS0VxQix3QkFBQWM7Ozs7b0JBTEY1ZDs7UUFnQmlEO0tBaEJqRG5tQixLQUFBd2hDO1F5RHBMRVQsU3pEb0xGVztNQUFBLE8wQi9JRWxCLHdCMUIrSUZybkMsVXlEcExFNG5DLFN6RG9MRlcsYUFBQWpDO1F5RHBMRXNCLFN6RG9MRlk7TUFBQSxPMEIzSUVsQixvQjFCMklGdG5DLFV5RHBMRTRuQyxTekRvTEZZLFFBQUFsQztLQUNFO01BQUEsUXlEckxBc0IsU3pEcUxBOEI7TUFDQW1CLGtCeUR0TEFqRCxTekRzTEErQjtNQUNBLFV5RHZMQS9CLFN6RHVMQWdDO01BQ0FrQixheUR4TEFsRCxTekR3TEFpQztNQUNBa0IsaUJ5RHpMQW5ELFN6RHlMQWtDO01BQ0FrQixrQnlEMUxBcEQsU3pEMExBbUM7TUFJQSxVeUQ5TEFuQyxTekQ4TEFvQztNQUNBLFV5RC9MQXBDLFN6RCtMQXFDO01BQ0EsVXlEaE1BckMsU3pEZ01Bc0M7TUFDQWUsd0J5RGpNQXJELFN6RGlNQXVDOzs7T0FEQWU7T0FEQUM7T0FEQUM7T0FQQUM7T0FGQUM7TUFERixHQWFF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QTs7WUFDdkNDLFVBbkVDOTBELE1BbUVSKzBELFFBbkVRLzBELE1BbUVka0IsT0FuRWNsQjtRQXVFakI7aUJBMUlGMnpEOzBCQXlJTzNFO2tCQUNMOzJCQXBJRjhFLGNBbUlPOUUsT0FIRjl0RDtvQ0FJRTRuQzs0QkFDTDtxQ0FuS0ptcUI7O2tEQXFLZ0M1MEQ7MENBQ3RCOzJDQUdJOzRDQUZFeXpELFVBRmdCenpELFFBUHpCNkM7NENBVVM4ekQsVUh2S2RoSyxNRzZKVytKLE9BQU43ekQsU0FTUzR3RDs0Q0FLQXRtRCx1QkFWUHM5QixNQU1Pa3NCLGFBQUFBOzRDQU1KOztnRDdCcElWbHJCLFk2QmtJY3QrQixLQVhQd2pEO3lEQWFRdG5EO2lEQUNMLFNBREtBO3NEQUdHeUQsTUFISHpEO2tEQUlELG9CQU5BOEQsU0FLSUw7a0RBQ0o7OzZEQUpDekQ7NkRBRVE7cURBS0ZuTTtpREFBTSxXQUFOQTtnREFBWTsyQ0FQdkI7O3NEQVFRO3lDQUFlO3lDQXhCZnU1RDs4Q0FNWEcsU0FxQkwsV0FyQktBLFNBcUJLOzJCQUFBO2lCQUFBOztJQUFBO0lBakxDLG1CQW1GYlI7OzhCQWlHZTtHMUR5V2pCMTFDOztFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X3NldCAoYXJyYXksIGluZGV4LCBuZXd2YWwpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBhcnJheVtpbmRleCsxXT1uZXd2YWw7IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2dldCBtdXRhYmxlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZ2V0IChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS5sZW5ndGggLSAxKSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXlbaW5kZXgrMV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfZmlsbFxuZnVuY3Rpb24gY2FtbF9hcnJheV9maWxsKGFycmF5LCBvZnMsIGxlbiwgdil7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgYXJyYXlbb2ZzK2krMV0gPSB2O1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoZWNrX2JvdW5kIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV92ZWN0IChsZW4sIGluaXQpIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTA7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSBpbml0O1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYWtlX2Zsb2F0X3ZlY3QgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9tYWtlX2Zsb2F0X3ZlY3QobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9jcmVhdGUobGVuKXtcbiAgaWYgKGxlbiA8IDApIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGxlbiA9IGxlbiArIDEgfCAwO1xuICB2YXIgYiA9IG5ldyBBcnJheShsZW4pO1xuICBiWzBdPTI1NDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBsZW47IGkrKykgYltpXSA9IDA7XG4gIHJldHVybiBiXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLyBBbiBPQ2FtbCBzdHJpbmcgaXMgYW4gb2JqZWN0IHdpdGggdGhyZWUgZmllbGRzOlxuLy8gLSB0YWcgJ3QnXG4vLyAtIGxlbmd0aCAnbCdcbi8vIC0gY29udGVudHMgJ2MnXG4vL1xuLy8gVGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmcgY2FuIGJlIGVpdGhlciBhIEphdmFTY3JpcHQgYXJyYXkgb3Jcbi8vIGEgSmF2YVNjcmlwdCBzdHJpbmcuIFRoZSBsZW5ndGggb2YgdGhpcyBzdHJpbmcgY2FuIGJlIGxlc3MgdGhhbiB0aGVcbi8vIGxlbmd0aCBvZiB0aGUgT0NhbWwgc3RyaW5nLiBJbiB0aGlzIGNhc2UsIHJlbWFpbmluZyBieXRlcyBhcmVcbi8vIGFzc3VtZWQgdG8gYmUgemVyb2VzLiBBcnJheXMgYXJlIG11dGFibGUgYnV0IGNvbnN1bWVzIG1vcmUgbWVtb3J5XG4vLyB0aGFuIHN0cmluZ3MuIEEgY29tbW9uIHBhdHRlcm4gaXMgdG8gc3RhcnQgZnJvbSBhbiBlbXB0eSBzdHJpbmcgYW5kXG4vLyBwcm9ncmVzc2l2ZWx5IGZpbGwgaXQgZnJvbSB0aGUgc3RhcnQuIFBhcnRpYWwgc3RyaW5ncyBtYWtlcyBpdFxuLy8gcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMgZWZmaWNpZW50bHkuXG4vL1xuLy8gV2hlbiBjb252ZXJ0aW5nIHRvIGFuZCBmcm9tIFVURi0xNiwgd2Uga2VlcCB0cmFjayBvZiB3aGV0aGVyIHRoZVxuLy8gc3RyaW5nIGlzIGNvbXBvc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAoaW4gd2hpY2ggY2FzZSwgbm9cbi8vIGNvbnZlcnNpb24gbmVlZHMgdG8gYmUgcGVyZm9ybWVkKSBvciBub3QuXG4vL1xuLy8gVGhlIHN0cmluZyB0YWcgY2FuIHRodXMgdGFrZSB0aGUgZm9sbG93aW5nIHZhbHVlczpcbi8vICAgZnVsbCBzdHJpbmcgICAgIEJZVEUgfCBVTktOT1dOOiAgICAgIDBcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBBU0NJSTogICAgICAgIDlcbi8vICAgICAgICAgICAgICAgICAgIEJZVEUgfCBOT1RfQVNDSUk6ICAgIDhcbi8vICAgc3RyaW5nIHByZWZpeCAgIFBBUlRJQUw6ICAgICAgICAgICAgIDJcbi8vICAgYXJyYXkgICAgICAgICAgIEFSUkFZOiAgICAgICAgICAgICAgIDRcbi8vXG4vLyBPbmUgY2FuIHVzZSBiaXQgbWFza2luZyB0byBkaXNjcmltaW5hdGUgdGhlc2UgZGlmZmVyZW50IGNhc2VzOlxuLy8gICBrbm93bl9lbmNvZGluZyh4KSA9IHgmOFxuLy8gICBpc19hc2NpaSh4KSA9ICAgICAgIHgmMVxuLy8gICBraW5kKHgpID0gICAgICAgICAgIHgmNlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfc3RyX3JlcGVhdChuLCBzKSB7XG4gIGlmKG4gPT0gMCkgcmV0dXJuIFwiXCI7XG4gIGlmIChzLnJlcGVhdCkge3JldHVybiBzLnJlcGVhdChuKTt9IC8vIEVDTUFzY3JpcHQgNiBhbmQgRmlyZWZveCAyNCtcbiAgdmFyIHIgPSBcIlwiLCBsID0gMDtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKG4gJiAxKSByICs9IHM7XG4gICAgbiA+Pj0gMTtcbiAgICBpZiAobiA9PSAwKSByZXR1cm4gcjtcbiAgICBzICs9IHM7XG4gICAgbCsrO1xuICAgIGlmIChsID09IDkpIHtcbiAgICAgIHMuc2xpY2UoMCwxKTsgLy8gZmxhdHRlbiB0aGUgc3RyaW5nXG4gICAgICAvLyB0aGVuLCB0aGUgZmxhdHRlbmluZyBvZiB0aGUgd2hvbGUgc3RyaW5nIHdpbGwgYmUgZmFzdGVyLFxuICAgICAgLy8gYXMgaXQgd2lsbCBiZSBjb21wb3NlZCBvZiBsYXJnZXIgcGllY2VzXG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuLy9XZWFrZGVmXG4vLyBQcmUgRUNNQVNjcmlwdCA1LCBbYXBwbHldIHdvdWxkIG5vdCBzdXBwb3J0IGFycmF5LWxpa2Ugb2JqZWN0LlxuLy8gSW4gc3VjaCBzZXR1cCwgVHlwZWRfYXJyYXkgd291bGQgYmUgaW1wbGVtZW50ZWQgYXMgcG9seWZpbGwsIGFuZCBbZi5hcHBseV0gd291bGRcbi8vIGZhaWwgaGVyZS4gTWFyayB0aGUgcHJpbWl0aXZlIGFzIFdlYWtkZWYsIHNvIHRoYXQgcGVvcGxlIGNhbiBvdmVycmlkZSBpdCBlYXNpbHkuXG5mdW5jdGlvbiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKGEsIGksIGxlbikge1xuICB2YXIgZiA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gIGlmIChpID09IDAgJiYgbGVuIDw9IDQwOTYgJiYgbGVuID09IGEubGVuZ3RoKSByZXR1cm4gZi5hcHBseSAobnVsbCwgYSk7XG4gIHZhciBzID0gXCJcIjtcbiAgZm9yICg7IDAgPCBsZW47IGkgKz0gMTAyNCxsZW4tPTEwMjQpXG4gICAgcyArPSBmLmFwcGx5IChudWxsLCBhLnNsaWNlKGksaSArIE1hdGgubWluKGxlbiwgMTAyNCkpKTtcbiAgcmV0dXJuIHM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmOF9vZl91dGYxNlxuZnVuY3Rpb24gY2FtbF91dGY4X29mX3V0ZjE2KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBiLCBjLCBkLCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYyA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYyA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYyA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhjMCB8IChjID4+IDYpKTtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjIDwgMHhkODAwIHx8IGMgPj0gMHhkZmZmKSB7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhlMCB8IChjID4+IDEyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA+PSAweGRiZmYgfHwgaSArIDEgPT0gbCB8fFxuICAgICAgICAgICAgICAgKGQgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBkID4gMHhkZmZmKSB7XG4gICAgICAvLyBVbm1hdGNoZWQgc3Vycm9nYXRlIHBhaXIsIHJlcGxhY2VkIGJ5IFxcdWZmZmQgKHJlcGxhY2VtZW50IGNoYXJhY3RlcilcbiAgICAgIHQgKz0gXCJcXHhlZlxceGJmXFx4YmRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgaSsrO1xuICAgICAgYyA9IChjIDw8IDEwKSArIGQgLSAweDM1ZmRjMDA7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhmMCB8IChjID4+IDE4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDEyKSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfVxuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBjYW1sX3V0ZjE2X29mX3V0Zjgocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IFwiXCIsIGMsIGMxLCBjMiwgdiwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMxID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjMSA8IDB4ODApIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgKGogPCBsKSAmJiAoYzEgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgdiA9IDE7XG4gICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgIGMgPSBjMiArIChjMSA8PCA2KTtcbiAgICAgIGlmIChjMSA8IDB4ZTApIHtcbiAgICAgICAgdiA9IGMgLSAweDMwODA7XG4gICAgICAgIGlmICh2IDwgMHg4MCkgdiA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2ID0gMjtcbiAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkpIHtcbiAgICAgICAgICBjID0gYzIgKyAoYyA8PCA2KTtcbiAgICAgICAgICBpZiAoYzEgPCAweGYwKSB7XG4gICAgICAgICAgICB2ID0gYyAtIDB4ZTIwODA7XG4gICAgICAgICAgICBpZiAoKHYgPCAweDgwMCkgfHwgKCh2ID49IDB4ZDdmZikgJiYgKHYgPCAweGUwMDApKSkgdiA9IDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHYgPSAzO1xuICAgICAgICAgICAgaWYgKCgrK2kgPCBsKSAmJiAoKChjMiA9IHMuY2hhckNvZGVBdChpKSkgJiAtNjQpID09IDEyOCkgJiZcbiAgICAgICAgICAgICAgICAoYzEgPCAweGY1KSkge1xuICAgICAgICAgICAgICB2ID0gYzIgLSAweDNjODIwODAgKyAoYyA8PCA2KTtcbiAgICAgICAgICAgICAgaWYgKHYgPCAweDEwMDAwIHx8IHYgPiAweDEwZmZmZikgdiA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh2IDwgNCkgeyAvLyBJbnZhbGlkIHNlcXVlbmNlXG4gICAgICBpIC09IHY7XG4gICAgICB0ICs9IFwiXFx1ZmZmZFwiO1xuICAgIH0gZWxzZSBpZiAodiA+IDB4ZmZmZilcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGQ3YzAgKyAodiA+PiAxMCksIDB4ZGMwMCArICh2ICYgMHgzRkYpKVxuICAgIGVsc2VcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2KTtcbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29faXNfYXNjaWlcbmZ1bmN0aW9uIGpzb29faXNfYXNjaWkgKHMpIHtcbiAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBnZXRzIGJldHRlciBhdCBhcm91bmQgdGhpcyBwb2ludCBmb3IgYWxsIGJyb3dzZXJzXG4gIGlmIChzLmxlbmd0aCA8IDI0KSB7XG4gICAgLy8gU3BpZGVybW9ua2V5IGdldHMgbXVjaCBzbG93ZXIgd2hlbiBzLmxlbmd0aCA+PSAyNCAob24gNjQgYml0IGFyY2hzKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykgaWYgKHMuY2hhckNvZGVBdChpKSA+IDEyNykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2VcbiAgICByZXR1cm4gIS9bXlxceDAwLVxceDdmXS8udGVzdChzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSkge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGlmIChpID49IHMuYy5sZW5ndGgpIHJldHVybiAwO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYy5jaGFyQ29kZUF0KGkpO1xuICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgcmV0dXJuIHMuY1tpXVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgLy8gVGhlIE9DYW1sIGNvbXBpbGVyIHVzZXMgQ2hhci51bnNhZmVfY2hyIG9uIGludGVnZXJzIGxhcmdlciB0aGFuIDI1NSFcbiAgYyAmPSAweGZmO1xuICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIHtcbiAgICBpZiAoaSA9PSBzLmMubGVuZ3RoKSB7XG4gICAgICBzLmMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoYyk7XG4gICAgICBpZiAoaSArIDEgPT0gcy5sKSBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpO1xuICB9XG4gIHMuY1tpXSA9IGM7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19ib3VuZF9lcnJvciwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAzKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDMyKHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpLFxuICAgICAgYjMgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gNykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBuZXcgQXJyYXkoOCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspe1xuICAgIGFbNyAtIGpdID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjIgPSAweEZGICYgaTE2ID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMTY7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDE2XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQxNlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGI0ID0gMHhGRiAmIGkzMiA+PiAyNCxcbiAgICAgIGIzID0gMHhGRiAmIGkzMiA+PiAxNixcbiAgICAgIGIyID0gMHhGRiAmIGkzMiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTMyO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMiwgYjMpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAzLCBiNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MzJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDMyXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MzIocyxpLGkzMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoaTY0KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKykge1xuICAgIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDcgLSBqLCBhW2pdKTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDY0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyAocykge1xuICB2YXIgdGFnID0gOSAvKiBCWVRFUyB8IEFTQ0lJICovO1xuICBpZiAoIWpzb29faXNfYXNjaWkocykpXG4gICAgdGFnID0gOCAvKiBCWVRFUyB8IE5PVF9BU0NJSSAqLywgcyA9IGNhbWxfdXRmOF9vZl91dGYxNihzKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRhZywgcywgcy5sZW5ndGgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sQnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gTWxCeXRlcyAodGFnLCBjb250ZW50cywgbGVuZ3RoKSB7XG4gIHRoaXMudD10YWc7IHRoaXMuYz1jb250ZW50czsgdGhpcy5sPWxlbmd0aDtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKXtcbiAgc3dpdGNoICh0aGlzLnQpIHtcbiAgY2FzZSA5OiAvKkJZVEVTIHwgQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyh0aGlzKTtcbiAgY2FzZSAwOiAvKkJZVEVTIHwgVU5LT1dOKi9cbiAgICBpZiAoanNvb19pc19hc2NpaSh0aGlzLmMpKSB7XG4gICAgICB0aGlzLnQgPSA5OyAvKkJZVEVTIHwgQVNDSUkqL1xuICAgICAgcmV0dXJuIHRoaXMuYztcbiAgICB9XG4gICAgdGhpcy50ID0gODsgLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gIGNhc2UgODogLypCWVRFUyB8IE5PVF9BU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgfVxufTtcbk1sQnl0ZXMucHJvdG90eXBlLnRvVXRmMTYgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIHIgPSB0aGlzLnRvU3RyaW5nKCk7XG4gIGlmKHRoaXMudCA9PSA5KSByZXR1cm4gclxuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHIpO1xufVxuTWxCeXRlcy5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiAoKXtcbiAgdmFyIGNvbnRlbnQgPSB0aGlzLnQgPT0gNCA/IHRoaXMuYy5zbGljZSgpIDogdGhpcy5jO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGhpcy50LGNvbnRlbnQsdGhpcy5sKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQllURVMgKi9cbiAgaWYgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8pXG4gICAgcy5jICs9IGNhbWxfc3RyX3JlcGVhdChzLmwgLSBzLmMubGVuZ3RoLCAnXFwwJylcbiAgZWxzZVxuICAgIHMuYyA9IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAocy5jLCAwLCBzLmMubGVuZ3RoKTtcbiAgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEFSUkFZICovXG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkocy5sKTtcbiAgdmFyIGIgPSBzLmMsIGwgPSBiLmxlbmd0aCwgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gYi5jaGFyQ29kZUF0KGkpO1xuICBmb3IgKGwgPSBzLmw7IGkgPCBsOyBpKyspIGFbaV0gPSAwO1xuICBzLmMgPSBhO1xuICBzLnQgPSA0OyAvKiBBUlJBWSAqL1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgKHMpIHtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkocyk7XG4gIHJldHVybiBzLmM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyAocykge1xuICB2YXIgbCA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIGEgPSBuZXcgVWludDhBcnJheShsKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGlmKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlcyxjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2J5dGVzKGxlbikge1xuICBpZiAobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQnl0ZXMuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhhLDAsYS5sZW5ndGgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9hcnJheSAoYSkge1xuICBpZighIChhIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICBhID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKDQsYSxhLmxlbmd0aCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfY29tcGFyZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPy0xOihzMS5jID4gczIuYyk/MTowO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jID09IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9ieXRlc19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuLy9BbGlhczogY2FtbF9maWxsX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXRcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29uY2F0KGEsYikgeyByZXR1cm4gYSArIGIgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb25jYXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIE1sQnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChzMSxzMil7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhzMS50LHMxLmMrczIuYyxzMS5sK3MyLmwpXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBzLmNoYXJDb2RlQXQoaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfdW5zYWZlX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBzLmxlbmd0aFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/LTE6KHMxID4gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWwgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDw9IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocy5jKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpIHtcbiAgaWYoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gcztcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIGlmIChqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpXG4gIGVsc2UgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF91dGY4X29mX3V0ZjE2KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocykgeyByZXR1cm4gbmV3IE1sQnl0ZXMoMCxzLHMubGVuZ3RoKTsgfVxuXG5cbi8vIFRoZSBzZWN0aW9uIGJlbG93IHNob3VsZCBiZSB1c2VkIHdoZW4gdXNlLWpzLXN0cmluZz1mYWxzZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX3NldChzLGksYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbXBhcmUoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2NvbXBhcmUoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3N0cmluZyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBzLmMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpe1xuICByZXR1cm4gcy50b1V0ZjE2KClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmdcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nKHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2lzX21sX2J5dGVzKHMpIHtcbiAgcmV0dXJuIChzIGluc3RhbmNlb2YgTWxCeXRlcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfY29udGVudFxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19jb250ZW50KHMpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgcmV0dXJuIHMuYztcbiAgY2FzZSA0OlxuICAgIHJldHVybiBzLmNcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaVxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgIS9bXlxceDAwLVxceGZmXS8udGVzdChzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2lzX21sX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2lzX21sX2J5dGVzKHMpO1xufVxuXG4vLyBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSBkZXByZWNhdGVkXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9uZXdfc3RyaW5nIChzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdG9fanNfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfdG9fanNfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc190b19zdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHMpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcoeCkgeyByZXR1cm4gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcoeCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoeCkgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBTeXNcblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuU3lzX2Vycm9yLCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4aXQgKGNvZGUpIHtcbiAgaWYoZ2xvYmFsVGhpcy5xdWl0KSBnbG9iYWxUaGlzLnF1aXQoY29kZSk7XG4gIC8vbm9kZWpzXG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdClcbiAgICBnbG9iYWxUaGlzLnByb2Nlc3MuZXhpdChjb2RlKTtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiRnVuY3Rpb24gJ2V4aXQnIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG4pe1xuICBzd2l0Y2goZXhuWzJdKSB7XG4gIGNhc2UgLTg6IC8vIE1hdGNoX2ZhaWx1cmVcbiAgY2FzZSAtMTE6IC8vIEFzc2VydF9mYWlsdXJlXG4gIGNhc2UgLTEyOiAvLyBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuICAgIHJldHVybiAxO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2V4Y2VwdGlvblxuLy9SZXF1aXJlczogTWxCeXRlcywgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGV4bil7XG4gIHZhciByID0gXCJcIjtcbiAgaWYoZXhuWzBdID09IDApIHtcbiAgICByICs9IGV4blsxXVsxXTtcbiAgICBpZihleG4ubGVuZ3RoID09IDMgJiYgZXhuWzJdWzBdID09IDAgJiYgY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbihleG5bMV0pKSB7XG5cbiAgICAgIHZhciBidWNrZXQgPSBleG5bMl07XG4gICAgICB2YXIgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhcnQgPSAyXG4gICAgICB2YXIgYnVja2V0ID0gZXhuO1xuICAgIH1cbiAgICByICs9IFwiKFwiO1xuICAgIGZvcih2YXIgaSA9IHN0YXJ0OyBpIDwgYnVja2V0Lmxlbmd0aDsgaSArKyl7XG4gICAgICBpZihpID4gc3RhcnQpIHIrPVwiLCBcIjtcbiAgICAgIHZhciB2ID0gYnVja2V0W2ldXG4gICAgICBpZih0eXBlb2YgdiA9PSBcIm51bWJlclwiKVxuICAgICAgICByKz0gdi50b1N0cmluZygpO1xuICAgICAgZWxzZSBpZih2IGluc3RhbmNlb2YgTWxCeXRlcyl7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYodHlwZW9mIHYgPT0gXCJzdHJpbmdcIil7XG4gICAgICAgIHIrPSAnXCInICsgdi50b1N0cmluZygpICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGVsc2UgciArPSBcIl9cIjtcbiAgICB9XG4gICAgciArPSBcIilcIlxuICB9IGVsc2UgaWYgKGV4blswXSA9PSAyNDgpe1xuICAgIHIgKz0gZXhuWzFdXG4gIH1cbiAgcmV0dXJuIHJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbiwgY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXJyKXtcbiAgaWYoZXJyIGluc3RhbmNlb2YgQXJyYXkgJiYgKGVyclswXSA9PSAwIHx8IGVyclswXSA9PSAyNDgpKSB7XG4gICAgdmFyIGhhbmRsZXIgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUHJpbnRleGMuaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvblwiKTtcbiAgICBpZihoYW5kbGVyKSBjYW1sX2NhbGxiYWNrKGhhbmRsZXIsIFtlcnIsZmFsc2VdKTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBtc2cgPSBjYW1sX2Zvcm1hdF9leGNlcHRpb24oZXJyKTtcbiAgICAgIHZhciBhdF9leGl0ID0gY2FtbF9uYW1lZF92YWx1ZShcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiKTtcbiAgICAgIGlmKGF0X2V4aXQpIGNhbWxfY2FsbGJhY2soYXRfZXhpdCwgWzBdKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uIFwiICsgbXNnKTtcbiAgICAgIGlmKGVyci5qc19lcnJvcikgdGhyb3cgZXJyLmpzX2Vycm9yO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fc3lzX2dldGVudiAoY29uc3QpXG5mdW5jdGlvbiBqc29vX3N5c19nZXRlbnYobikge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgLy9ub2RlanMgZW52XG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5lbnZcbiAgICAgJiYgcHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBwcm9jZXNzLmVudltuXTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGVudiAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudiAobmFtZSkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKSk7XG4gIGlmKHIgPT09IHVuZGVmaW5lZClcbiAgICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnZcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2dldGVudlxuZnVuY3Rpb24gY2FtbF9zeXNfdW5zYWZlX2dldGVudihuYW1lKXtcbiAgcmV0dXJuIGNhbWxfc3lzX2dldGVudiAobmFtZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJndlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciBjYW1sX2FyZ3YgPSAoKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYocHJvY2Vzc1xuICAgICAmJiBwcm9jZXNzLmFyZ3ZcbiAgICAgJiYgcHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IHByb2Nlc3MuYXJndlxuICAgIC8vbm9kZWpzXG4gICAgbWFpbiA9IGFyZ3ZbMV07XG4gICAgYXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gIH1cblxuICB2YXIgcCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKG1haW4pO1xuICB2YXIgYXJnczIgPSBbMCwgcF07XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKVxuICAgIGFyZ3MyLnB1c2goY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoYXJnc1tpXSkpO1xuICByZXR1cm4gYXJnczI7XG59KSgpKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG52YXIgY2FtbF9leGVjdXRhYmxlX25hbWUgPSBjYW1sX2FyZ3ZbMV1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2FyZ3YgKGEpIHtcbiAgcmV0dXJuIFswLCBjYW1sX2FyZ3ZbMV0sIGNhbWxfYXJndl07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfYXJndiAoYSkge1xuICByZXR1cm4gY2FtbF9hcmd2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19tb2RpZnlfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19tb2RpZnlfYXJndihhcmcpe1xuICBjYW1sX2FyZ3YgPSBhcmc7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG5mdW5jdGlvbiBjYW1sX3N5c19leGVjdXRhYmxlX25hbWUoYSl7XG4gIHJldHVybiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHZhciBjbWQgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhjbWQpO1xuICBpZiAodHlwZW9mIHJlcXVpcmUgIT0gXCJ1bmRlZmluZWRcIil7XG4gICAgdmFyIGNoaWxkX3Byb2Nlc3MgPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7XG4gICAgaWYoY2hpbGRfcHJvY2VzcyAmJiBjaGlsZF9wcm9jZXNzLmV4ZWNTeW5jKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY2hpbGRfcHJvY2Vzcy5leGVjU3luYyhjbWQse3N0ZGlvOiAnaW5oZXJpdCd9KTtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgfVxuICBlbHNlIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYgKGdsb2JhbFRoaXMuY3J5cHRvKSB7XG4gICAgIGlmIChnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICB2YXIgYSA9IGdsb2JhbFRoaXMuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgSW50MzJBcnJheSg0KSk7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfSBlbHNlIGlmIChnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcykge1xuICAgICAgIHZhciBhID0gbmV3IEludDMyQXJyYXkoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLmJ1ZmZlcik7XG4gICAgICAgcmV0dXJuIFswLCBhWzBdLCBhWzFdLCBhWzJdLCBhWzNdXTtcbiAgICAgfVxuICB9XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICB2YXIgeCA9IG5vd14weGZmZmZmZmZmKk1hdGgucmFuZG9tKCk7XG4gIHJldHVybiBbMCx4XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmlnX2VuZGlhbiAoKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2ludF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplIGNvbnN0XG4vLyBtYXhfaW50IC8gNCBzbyB0aGF0IHRoZSBmb2xsb3dpbmcgZG9lcyBub3Qgb3ZlcmZsb3dcbi8vbGV0IG1heF9zdHJpbmdfbGVuZ3RoID0gd29yZF9zaXplIC8gOCAqIG1heF9hcnJheV9sZW5ndGggLSAxOztcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgKCkgeyByZXR1cm4gKDB4N0ZGRkZGRkYvNCkgfCAwO31cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4ICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJVbml4XCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIldpbjMyXCIgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiAoKSB7IHJldHVybiBvc190eXBlID09IFwiQ3lnd2luXCIgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImpzX29mX29jYW1sXCIpXTtcbn1cblxuLy9Qcm92aWRlczogb3NfdHlwZVxudmFyIG9zX3R5cGUgPSAoZ2xvYmFsVGhpcy5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gJiZcbiAgICAgICAgICAgICAgIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PSBcIndpbjMyXCIpID8gXCJDeWd3aW5cIiA6IFwiVW5peFwiO1xuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9jb25maWcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9jb25maWcgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMob3NfdHlwZSksIDMyLCAwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3N5c19pc2F0dHkoX2NoYW4pIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV92YXJpYW50XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfdmFyaWFudChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyhfdW5pdCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIoKXtyZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG52YXIgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1xuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIChib29sKSB7XG4gIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IGJvb2w7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZFxuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCAoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9lbmFibGVkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfeGRnX2RlZmF1bHRzXG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF94ZGdfZGVmYXVsdHMoX3VuaXQpIHtcbiAgcmV0dXJuIDA7IC8vIGVtcHR5IGxpc3Rcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNfcmVndWxhcl9maWxlKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmlzRmlsZShyb290LnJlc3QpO1xufVxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbiAgaWYocHJvY2VzcyAmJiBwcm9jZXNzLm9uKSB7XG4gICAgcHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyLCBvcmlnaW4pIHtcbiAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycik7XG4gICAgICBwcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbi8vUmVxdWlyZXM6IGpzb29fc3lzX2dldGVudlxudmFyIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gRkxBRyhcIndpdGgtanMtZXJyb3JcIik7XG5cbihmdW5jdGlvbiAoKSB7XG4gIHZhciByID0ganNvb19zeXNfZ2V0ZW52KFwiT0NBTUxSVU5QQVJBTVwiKVxuICBpZihyICE9PSB1bmRlZmluZWQpe1xuICAgIHZhciBsID0gci5zcGxpdChcIixcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYobFtpXSA9PSBcImJcIikgeyBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IDE7IGJyZWFrIH1cbiAgICAgIGVsc2UgaWYgKGxbaV0uc3RhcnRzV2l0aChcImI9XCIpKSB7XG4gICAgICAgIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gKyhsW2ldLnNsaWNlKDIpKX1cbiAgICAgIGVsc2UgY29udGludWU7XG4gICAgfVxuICB9XG59KSAoKVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9iYWNrdHJhY2Vfc3RhdHVzIChfdW5pdCkgeyByZXR1cm4gY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPyAxIDogMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgKCkgeyByZXR1cm4gWzBdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX3JlY29yZF9iYWNrdHJhY2UgKGIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSBiOyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QoKSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9zbG90ICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdDogaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfcmVzdG9yZV9yYXdfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZShleG4sIGJ0KSB7IHJldHVybiAwIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayAoKSB7IHJldHVybiBbMF07IH1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCgpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdFwiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vSWY6ICFlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApXG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIGVsc2UgaWYgKGQgPCAwKSB7XG4gICAgdmFyIGcgPSBmLmFwcGx5KG51bGwsYXJncy5zbGljZSgwLG4pKTtcbiAgICBpZih0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZztcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihnLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMSk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJncy5sZW5ndGgrZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQ7XG4gICAgcmV0dXJuIGc7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiBlZmZlY3RzXG4vL1dlYWtkZWZcbmZ1bmN0aW9uIGNhbWxfY2FsbF9nZW4oZiwgYXJncykge1xuICB2YXIgbiA9IChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGg7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW47XG4gIGlmIChkID09IDApIHtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgfSBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciByZXN0ID0gYXJncy5zbGljZShuIC0gMSk7XG4gICAgdmFyIGsgPSBhcmdzIFthcmdzTGVuIC0gMV07XG4gICAgYXJncyA9IGFyZ3Muc2xpY2UoMCwgbik7XG4gICAgYXJnc1tuIC0gMV0gPSBmdW5jdGlvbiAoZykge1xuICAgICAgaWYgKHR5cGVvZiBnICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBrKGcpO1xuICAgICAgdmFyIGFyZ3MgPSByZXN0LnNsaWNlKCk7XG4gICAgICBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPSBrO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZywgYXJncyk7IH07XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgYXJnc0xlbi0tO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbl07XG4gICAgc3dpdGNoIChkKSB7XG4gICAgY2FzZSAxOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAyKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAyOiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICh4LCB5LCB6KXtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3NMZW4gKyAzKTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3NMZW47IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbl0gPSB4O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMV0gPSB5O1xuICAgICAgICBuYXJnc1thcmdzTGVuICsgMl0gPSB6O1xuICAgICAgICByZXR1cm4gZi5hcHBseShudWxsLCBuYXJncylcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKXtcbiAgICAgICAgdmFyIGV4dHJhX2FyZ3MgPSAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKT8xOmFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgZXh0cmFfYXJncyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKVxuICAgICAgICAgIG5hcmdzW2FyZ3NMZW4gKyBpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgICB9O1xuICAgIH19XG4gICAgZy5sID0gZCArIDE7XG4gICAgcmV0dXJuIGsoZyk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUobm0sdikge1xuICBjYW1sX25hbWVkX3ZhbHVlc1tjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5tKV0gPSB2O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZXNcbmZ1bmN0aW9uIGNhbWxfbmFtZWRfdmFsdWUobm0pIHtcbiAgcmV0dXJuIGNhbWxfbmFtZWRfdmFsdWVzW25tXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dsb2JhbF9kYXRhXG52YXIgY2FtbF9nbG9iYWxfZGF0YSA9IFswXTtcblxuLy9Qcm92aWRlczogY2FtbF9idWlsZF9zeW1ib2xzXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9idWlsZF9zeW1ib2xzKHN5bWIpIHtcbiAgdmFyIHIgPSB7fTtcbiAgaWYoc3ltYikge1xuICAgIGZvcih2YXIgaSA9IDE7IGkgPCBzeW1iLmxlbmd0aDsgaSsrKXtcbiAgICAgIHJbY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoc3ltYltpXVsxXSldID0gc3ltYltpXVsyXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKGNvbnN0LCBzaGFsbG93LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfY2FsbGJhY2ssIGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKG4sIHYsIG5hbWVfb3B0KSB7XG4gIGlmIChuYW1lX29wdCkge1xuICAgIHZhciBuYW1lID0gbmFtZV9vcHQ7XG4gICAgaWYoZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKSB7XG4gICAgICBuID0gY2FtbF9jYWxsYmFjayhnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MsIFtuYW1lXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scykge1xuICAgICAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4KSB7XG4gICAgICAgIGNhbWxfZ2xvYmFsX2RhdGEuc3ltaWR4ID0gY2FtbF9idWlsZF9zeW1ib2xzKGNhbWxfZ2xvYmFsX2RhdGEuc3ltYm9scylcbiAgICAgIH1cbiAgICAgIHZhciBuaWQgPSBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeFtuYW1lXVxuICAgICAgaWYobmlkID49IDApXG4gICAgICAgIG4gPSBuaWRcbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9yZWdpc3Rlcl9nbG9iYWw6IGNhbm5vdCBsb2NhdGUgXCIgKyBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2FtbF9nbG9iYWxfZGF0YVtuICsgMV0gPSB2O1xuICBpZihuYW1lX29wdCkgY2FtbF9nbG9iYWxfZGF0YVtuYW1lX29wdF0gPSB2O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9nbG9iYWxfZGF0YSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2dldF9nbG9iYWxfZGF0YSAoKSB7IHJldHVybiBjYW1sX2dsb2JhbF9kYXRhOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfcHJpbnRhYmxlIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfaXNfcHJpbnRhYmxlKGMpIHsgcmV0dXJuICsoYyA+IDMxICYmIGMgPCAxMjcpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfcHJpbnRfc3RhdHNcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfcHJpbnRfc3RhdHModW5pdCkgeyByZXR1cm4gMCB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWJcblxuLy9Qcm92aWRlczogY2FtbF9qc19wdXJlX2V4cHIgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfcHVyZV9leHByIChmKSB7IHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFswXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczpjYW1sX3N0YWNrX2RlcHRoXG4vL0lmOiBlZmZlY3RzXG52YXIgY2FtbF9zdGFja19kZXB0aCA9IDA7XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19jaGVja19kZXB0aFxuLy9JZjogZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX3N0YWNrX2RlcHRoXG5mdW5jdGlvbiBjYW1sX3N0YWNrX2NoZWNrX2RlcHRoKCkge1xuICAgIHJldHVybiAtLWNhbWxfc3RhY2tfZGVwdGggPiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiAhZWZmZWN0c1xuLy9SZXF1aXJlczpjYW1sX2NhbGxfZ2VuXG52YXIgY2FtbF9jYWxsYmFjayA9IGNhbWxfY2FsbF9nZW47XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbGJhY2tcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aCwgY2FtbF9jYWxsX2dlbiwgY2FtbF9leG5fc3RhY2ssIGNhbWxfZmliZXJfc3RhY2ssIGNhbWxfd3JhcF9leGNlcHRpb24sIGNhbWxfcmVzdW1lX3N0YWNrLCBjYW1sX2ZyZXNoX29vX2lkLCBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50XG5mdW5jdGlvbiBjYW1sX2NhbGxiYWNrKGYsYXJncykge1xuICBmdW5jdGlvbiB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcihlZmYsayxtcykge1xuICAgIC8vIFJlc3VtZXMgdGhlIGNvbnRpbnVhdGlvbiBrIGJ5IHJhaXNpbmcgZXhjZXB0aW9uIFVuaGFuZGxlZC5cbiAgICBjYW1sX3Jlc3VtZV9zdGFjayhrWzFdLG1zKTtcbiAgICB2YXIgZXhuID0gY2FtbF9uYW1lZF92YWx1ZShcIkVmZmVjdC5VbmhhbmRsZWRcIik7XG4gICAgaWYoZXhuKSBjYW1sX3JhaXNlX3dpdGhfYXJnKGV4biwgZWZmKTtcbiAgICBlbHNlIHtcbiAgICAgIGV4biA9IFsyNDgsY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIkVmZmVjdC5VbmhhbmRsZWRcIiksIGNhbWxfZnJlc2hfb29faWQoMCldO1xuICAgICAgY2FtbF9yYWlzZV9jb25zdGFudChleG4pO1xuICAgIH1cbiAgfVxuICB2YXIgc2F2ZWRfc3RhY2tfZGVwdGggPSBjYW1sX3N0YWNrX2RlcHRoO1xuICB2YXIgc2F2ZWRfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2s7XG4gIHZhciBzYXZlZF9maWJlcl9zdGFjayA9IGNhbWxfZmliZXJfc3RhY2s7XG4gIHRyeSB7XG4gICAgY2FtbF9leG5fc3RhY2sgPSAwO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPVxuICAgICAge2g6WzAsIDAsIDAsIHVuY2F1Z2h0X2VmZmVjdF9oYW5kbGVyXSwgcjp7azowLCB4OjAsIGU6MH19O1xuICAgIHZhciByZXMgPSB7am9vX3RyYW1wOiBmLFxuICAgICAgICAgICAgICAgam9vX2FyZ3M6IGFyZ3MuY29uY2F0KGZ1bmN0aW9uICh4KXtyZXR1cm4geDt9KX07XG4gICAgZG8ge1xuICAgICAgY2FtbF9zdGFja19kZXB0aCA9IDQwO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzID0gY2FtbF9jYWxsX2dlbihyZXMuam9vX3RyYW1wLCByZXMuam9vX2FyZ3MpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBIYW5kbGUgZXhjZXB0aW9uIGNvbWluZyBmcm9tIEphdmFTY3JpcHQgb3IgZnJvbSB0aGUgcnVudGltZS4gKi9cbiAgICAgICAgaWYgKCFjYW1sX2V4bl9zdGFjaykgdGhyb3cgZTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBjYW1sX2V4bl9zdGFja1sxXTtcbiAgICAgICAgY2FtbF9leG5fc3RhY2sgPSBjYW1sX2V4bl9zdGFja1syXTtcbiAgICAgICAgcmVzID0ge2pvb190cmFtcDogaGFuZGxlcixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBbY2FtbF93cmFwX2V4Y2VwdGlvbihlKV19O1xuICAgICAgfVxuICAgIH0gd2hpbGUocmVzICYmIHJlcy5qb29fYXJncylcbiAgfSBmaW5hbGx5IHtcbiAgICBjYW1sX3N0YWNrX2RlcHRoID0gc2F2ZWRfc3RhY2tfZGVwdGg7XG4gICAgY2FtbF9leG5fc3RhY2sgPSBzYXZlZF9leG5fc3RhY2s7XG4gICAgY2FtbF9maWJlcl9zdGFjayA9IHNhdmVkX2ZpYmVyX3N0YWNrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfanNcbmZ1bmN0aW9uIGNhbWxfaXNfanMoKSB7XG4gIHJldHVybiAxO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmcodW5pdCl7XG4gIHJldHVybiBGTEFHKFwidXNlLWpzLXN0cmluZ1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHModW5pdCl7XG4gIHJldHVybiBGTEFHKFwiZWZmZWN0c1wiKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dyYXBfZXhjZXB0aW9uIGNvbnN0IChtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyxjYW1sX25hbWVkX3ZhbHVlXG5mdW5jdGlvbiBjYW1sX3dyYXBfZXhjZXB0aW9uKGUpIHtcbiAgaWYgKEZMQUcoXCJleGN3cmFwXCIpKSB7XG4gICAgaWYoZSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZTtcbiAgICB2YXIgZXhuO1xuICAgIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gICAgaWYoZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvbWF4aW11bSBjYWxsIHN0YWNrL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gICAgZWxzZSBpZihnbG9iYWxUaGlzLkludGVybmFsRXJyb3JcbiAgICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZS5tZXNzYWdlXG4gICAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC90b28gbXVjaCByZWN1cnNpb24vaSkpXG4gICAgICBleG4gPSBjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93O1xuICAgIC8vV3JhcCBFcnJvciBpbiBKcy5FcnJvciBleGNlcHRpb25cbiAgICBlbHNlIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgICAgZXhuID0gWzAsY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIiksZV07XG4gICAgZWxzZVxuICAgICAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gICAgICBleG4gPSBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xuICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBlcnJvciBhdCBoYW5kLCBsZXQncyB1c2UgaXQuXG4gICAgaWYgKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yKVxuICAgICAgZXhuLmpzX2Vycm9yID0gZTtcbiAgICByZXR1cm4gZXhuO1xuICB9IGVsc2VcbiAgICByZXR1cm4gZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIGlmKGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnKVxuICAgIHJldHVybiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKTtcbiAgZWxzZSByZXR1cm4gZXhuXG59XG5cbi8vIEV4cGVyaW1lbnRhbFxuLy9Qcm92aWRlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy9uZXZlciByZXJhaXNlIGZvciBjb25zdGFudCBleG5cbiAgaWYoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT0gMjQ4KSBleG4uanNfZXJyb3IgPSBuZXcgZ2xvYmFsVGhpcy5FcnJvcihcIkpzIGV4Y2VwdGlvbiBjb250YWluaW5nIGJhY2t0cmFjZVwiKTtcbiAgcmV0dXJuIGV4bjtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBbMCwgZXhuLmpzX2Vycm9yXTsgfVxuICByZXR1cm4gMDtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9ib29sKHgpIHsgcmV0dXJuICEheDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYm9vbCh4KSB7IHJldHVybiAreDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9pbnQzMlxuLy9BbGlhczogY2FtbF9qc19mcm9tX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc19mcm9tX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fZmxvYXQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190b19mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2ludDMyIGNvbnN0IChjb25zdClcbi8vQWxpYXM6IGNhbWxfanNfdG9fbmF0aXZlaW50XG5mdW5jdGlvbiBjYW1sX2pzX3RvX2ludDMyKHgpIHsgcmV0dXJuIHh8MDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9hcnJheShhKSB7XG4gIHJldHVybiBhLnNsaWNlKDEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc190b19hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc190b19hcnJheShhKSB7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBiWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxsZW47aSsrKSBiW2krMV0gPSBhW2ldO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X29mX2pzX2FycmF5IGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9saXN0X29mX2pzX2FycmF5KGEpe1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgaT1hLmxlbmd0aCAtIDE7IGk+PTA7IGktLSl7XG4gICAgdmFyIGUgPSBhW2ldO1xuICAgIGwgPSBbMCxlLGxdO1xuICB9XG4gIHJldHVybiBsXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF90b19qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3Zhcih4KSB7XG4gIHZhciB4ID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoeCk7XG4gIC8vQ2hlY2tzIHRoYXQgeCBoYXMgdGhlIGZvcm0gaWRlbnRbLmlkZW50XSpcbiAgaWYoIXgubWF0Y2goL15bYS16QS1aXyRdW2EtekEtWl8kMC05XSooXFwuW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKSokLykpe1xuICAgIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vY29uc29sZS5lcnJvcihcIkpzLlVuc2FmZS5ldmFsX3N0cmluZ1wiKVxuICB9XG4gIHJldHVybiBldmFsKHgpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19jYWxsIChjb25zdCwgbXV0YWJsZSwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19jYWxsKGYsIG8sIGFyZ3MpIHsgcmV0dXJuIGYuYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5fY2FsbCAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfZnVuX2NhbGwoZiwgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIGYoKTtcbiAgY2FzZSAyOiByZXR1cm4gZiAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIGYgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgcmV0dXJuIGYuYXBwbHkobnVsbCwgY2FtbF9qc19mcm9tX2FycmF5KGEpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbWV0aF9jYWxsIChtdXRhYmxlLCBjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbWV0aF9jYWxsKG8sIGYsIGFyZ3MpIHtcbiAgcmV0dXJuIG9bY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoZildLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX25ldyAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfbmV3KGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBuZXcgYztcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgY2FzZSA4OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9vanNfbmV3X2FyciAoY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb2pzX25ld19hcnIoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMDogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDE6IHJldHVybiBuZXcgYyAoYVswXSk7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgYSk7IH1cbiAgRi5wcm90b3R5cGUgPSBjLnByb3RvdHlwZTtcbiAgcmV0dXJuIG5ldyBGO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYobGVuID4gMCl7XG4gICAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJncyA9IFt1bmRlZmluZWRdO1xuICAgIH1cbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgICByZXR1cm4gKHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKT9jYW1sX2pzX3dyYXBfY2FsbGJhY2socmVzKTpyZXM7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcml0eSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gIH07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFjaywgY2FtbF9qc193cmFwX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuICsgMSk7XG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHZhciByZXMgPSBjYW1sX2NhbGxiYWNrKGYsYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZixbdGhpcyxhcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0KGFyaXR5LCBmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkgKyAxKTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgYXJnc1swXSA9IHRoaXM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpKzFdID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZShmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikgLSAxO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTsgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiAhZWZmZWN0c1xuZnVuY3Rpb24gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKSB7XG4gIHJldHVybiAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuY3Rpb25fYXJpdHlcbi8vSWY6IGVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICAvLyBGdW5jdGlvbnMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNvbnRpbnVhdGlvbiBwYXJhbWV0ZXIuIFRoaXMgc2hvdWxkXG4gIC8vIG5vdCBiZSB2aXNpYmxlIHdoZW4gY2FsbGluZyB0aGVtIGZyb20gSmF2YVNjcmlwdFxuICByZXR1cm4gKChmLmwgPj0gMCk/Zi5sOihmLmwgPSBmLmxlbmd0aCkpIC0gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2VxdWFscyAoeCwgeSkgeyByZXR1cm4gKyh4ID09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc3RyaWN0X2VxdWFscyBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PT0geSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19ldmFsX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19ldmFsX3N0cmluZyAocykge3JldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXhwciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19leHByKHMpIHtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9wdXJlX2pzX2V4cHIgKHMpe1xuICBjb25zb2xlLmVycm9yKFwiY2FtbF9wdXJlX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19vYmplY3QgKG9iamVjdF9saXRlcmFsKVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfb2JqZWN0IChhKSB7XG4gIHZhciBvID0ge307XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwID0gYVtpXTtcbiAgICBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHBbMV0pXSA9IHBbMl07XG4gIH1cbiAgcmV0dXJuIG87XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgYXJnKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnLCBhcmddKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2VcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9hcmdzICh0YWcsIGFyZ3MpIHsgdGhyb3cgY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlKFswLCB0YWddLmNvbmNhdChhcmdzKSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGpzb29fZmxvb3JfbG9nMlxudmFyIGxvZzJfb2sgPSBNYXRoLmxvZzIgJiYgTWF0aC5sb2cyKDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3KSA9PSAxMDIwXG5mdW5jdGlvbiBqc29vX2Zsb29yX2xvZzIoeCkge1xuICBpZihsb2cyX29rKSByZXR1cm4gTWF0aC5mbG9vcihNYXRoLmxvZzIoeCkpXG4gIHZhciBpID0gMDtcbiAgaWYgKHggPT0gMCkgcmV0dXJuIC1JbmZpbml0eTtcbiAgaWYoeD49MSkge3doaWxlICh4Pj0yKSB7eC89MjsgaSsrfSB9XG4gIGVsc2Uge3doaWxlICh4IDwgMSkge3gqPTI7IGktLX0gfTtcbiAgcmV0dXJuIGk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyLCBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0ICh4KSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMSwgMCwgMHg3ZmYwKTtcbiAgICBpZiAoeCA+IDApXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHg3ZmYwKVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSgwLCAwLCAweGZmZjApXG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8weDgwMDA6KHg+PTApPzA6MHg4MDAwO1xuICBpZiAoc2lnbikgeCA9IC14O1xuICAvLyBJbnQ2NC5iaXRzX29mX2Zsb2F0IDEuMTIzNTU4MjA5Mjg4OTQ3NEUrMzA3ID0gMHg3ZmIwMDAwMDAwMDAwMDAwTFxuICAvLyB1c2luZyBNYXRoLkxPRzJFKk1hdGgubG9nKHgpIGluIHBsYWNlIG9mIE1hdGgubG9nMiByZXN1bHQgaW4gcHJlY2lzaW9uIGxvc3RcbiAgdmFyIGV4cCA9IGpzb29fZmxvb3JfbG9nMih4KSArIDEwMjM7XG4gIGlmIChleHAgPD0gMCkge1xuICAgIGV4cCA9IDA7XG4gICAgeCAvPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgfSBlbHNlIHtcbiAgICB4IC89IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICAgIGlmICh4IDwgMTYpIHtcbiAgICAgIHggKj0gMjsgZXhwIC09MTsgfVxuICAgIGlmIChleHAgPT0gMCkge1xuICAgICAgeCAvPSAyOyB9XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLDI0KTtcbiAgdmFyIHIzID0geHwwO1xuICB4ID0gKHggLSByMykgKiBrO1xuICB2YXIgcjIgPSB4fDA7XG4gIHggPSAoeCAtIHIyKSAqIGs7XG4gIHZhciByMSA9IHh8MDtcbiAgcjMgPSAocjMgJjB4ZikgfCBzaWduIHwgZXhwIDw8IDQ7XG4gIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShyMSwgcjIsIHIzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCAoeCkge1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheShmbG9hdDMyYS5idWZmZXIpO1xuICByZXR1cm4gaW50MzJhWzBdIHwgMDtcbn1cblxuLy9GUCBsaXRlcmFscyBjYW4gYmUgd3JpdHRlbiB1c2luZyB0aGUgaGV4YWRlY2ltYWxcbi8vbm90YXRpb24gMHg8bWFudGlzc2EgaW4gaGV4PnA8ZXhwb25lbnQ+IGZyb20gSVNPIEM5OS5cbi8vaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpL2pzLWhleGZsb2F0L2Jsb2IvbWFzdGVyL2hleGZsb2F0LmpzXG4vL1Byb3ZpZGVzOiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgKHgsIHByZWMsIHN0eWxlKSB7XG4gIGlmICghaXNGaW5pdGUoeCkpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhcIm5hblwiKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKCh4ID4gMCk/XCJpbmZpbml0eVwiOlwiLWluZmluaXR5XCIpO1xuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MTooeD49MCk/MDoxO1xuICBpZihzaWduKSB4ID0gLXg7XG4gIHZhciBleHAgPSAwO1xuICBpZiAoeCA9PSAwKSB7IH1cbiAgZWxzZSBpZiAoeCA8IDEpIHtcbiAgICB3aGlsZSAoeCA8IDEgJiYgZXhwID4gLTEwMjIpICB7IHggKj0gMjsgZXhwLS0gfVxuICB9IGVsc2Uge1xuICAgIHdoaWxlICh4ID49IDIpIHsgeCAvPSAyOyBleHArKyB9XG4gIH1cbiAgdmFyIGV4cF9zaWduID0gZXhwIDwgMCA/ICcnIDogJysnO1xuICB2YXIgc2lnbl9zdHIgPSAnJztcbiAgaWYgKHNpZ24pIHNpZ25fc3RyID0gJy0nXG4gIGVsc2Uge1xuICAgIHN3aXRjaChzdHlsZSl7XG4gICAgY2FzZSA0MyAvKiAnKycgKi86IHNpZ25fc3RyID0gJysnOyBicmVhaztcbiAgICBjYXNlIDMyIC8qICcgJyAqLzogc2lnbl9zdHIgPSAnICc7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAocHJlYyA+PSAwICYmIHByZWMgPCAxMykge1xuICAgIC8qIElmIGEgcHJlY2lzaW9uIGlzIGdpdmVuLCBhbmQgaXMgc21hbGwsIHJvdW5kIG1hbnRpc3NhIGFjY29yZGluZ2x5ICovXG4gICAgdmFyIGNzdCA9IE1hdGgucG93KDIscHJlYyAqIDQpO1xuICAgIHggPSBNYXRoLnJvdW5kKHggKiBjc3QpIC8gY3N0O1xuICB9XG4gIHZhciB4X3N0ciA9IHgudG9TdHJpbmcoMTYpO1xuICBpZihwcmVjID49IDApe1xuICAgIHZhciBpZHggPSB4X3N0ci5pbmRleE9mKCcuJyk7XG4gICAgaWYoaWR4PDApIHtcbiAgICAgIHhfc3RyICs9ICcuJyArIGNhbWxfc3RyX3JlcGVhdChwcmVjLCAnMCcpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaXplID0gaWR4KzErcHJlYztcbiAgICAgIGlmKHhfc3RyLmxlbmd0aCA8IHNpemUpXG4gICAgICAgIHhfc3RyICs9IGNhbWxfc3RyX3JlcGVhdChzaXplIC0geF9zdHIubGVuZ3RoLCAnMCcpO1xuICAgICAgZWxzZVxuICAgICAgICB4X3N0ciA9IHhfc3RyLnN1YnN0cigwLHNpemUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHNpZ25fc3RyICsgJzB4JyArIHhfc3RyICsgJ3AnICsgZXhwX3NpZ24gKyBleHAudG9TdHJpbmcoMTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGxvID0geC5sbztcbiAgdmFyIG1pID0geC5taTtcbiAgdmFyIGhpID0geC5oaTtcbiAgdmFyIGV4cCA9IChoaSAmIDB4N2ZmZikgPj4gNDtcbiAgaWYgKGV4cCA9PSAyMDQ3KSB7XG4gICAgaWYgKChsb3xtaXwoaGkmMHhmKSkgPT0gMClcbiAgICAgIHJldHVybiAoaGkgJiAweDgwMDApPygtSW5maW5pdHkpOkluZmluaXR5O1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBOYU47XG4gIH1cbiAgdmFyIGsgPSBNYXRoLnBvdygyLC0yNCk7XG4gIHZhciByZXMgPSAobG8qayttaSkqaysoaGkmMHhmKTtcbiAgaWYgKGV4cCA+IDApIHtcbiAgICByZXMgKz0gMTY7XG4gICAgcmVzICo9IE1hdGgucG93KDIsZXhwLTEwMjcpO1xuICB9IGVsc2VcbiAgICByZXMgKj0gTWF0aC5wb3coMiwtMTAyNik7XG4gIGlmIChoaSAmIDB4ODAwMCkgcmVzID0gLSByZXM7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV4dGFmdGVyX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfc3ViLGNhbWxfaW50NjRfb2ZfaW50MzJcbmZ1bmN0aW9uIGNhbWxfbmV4dGFmdGVyX2Zsb2F0ICh4LHkpIHtcbiAgaWYoaXNOYU4oeCkgfHwgaXNOYU4oeSkpIHJldHVybiBOYU47XG4gIGlmKHg9PXkpIHJldHVybiB5O1xuICBpZih4PT0wKXtcbiAgICBpZih5IDwgMClcbiAgICAgIHJldHVybiAtTWF0aC5wb3coMiwgLTEwNzQpXG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE1hdGgucG93KDIsIC0xMDc0KVxuICB9XG4gIHZhciBiaXRzID0gY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHgpO1xuICB2YXIgb25lID0gY2FtbF9pbnQ2NF9vZl9pbnQzMigxKTtcbiAgaWYgKCh4PHkpID09ICh4PjApKVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X2FkZChiaXRzLCBvbmUpXG4gIGVsc2VcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9zdWIoYml0cywgb25lKVxuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGJpdHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RydW5jX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX3RydW5jX2Zsb2F0KHgpe1xuICByZXR1cm4gTWF0aC50cnVuYyh4KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgKHgpIHtcbiAgdmFyIGludDMyYSA9IG5ldyBJbnQzMkFycmF5KDEpO1xuICBpbnQzMmFbMF0gPSB4O1xuICB2YXIgZmxvYXQzMmEgPSBuZXcgRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHtcbiAgaWYgKHggPj0gMCkge1xuICAgIHZhciB5ID0gTWF0aC5mbG9vcih4KTtcbiAgICByZXR1cm4gKHggLSB5ID49IDAuNSk/KHkgKyAxKTp5XG4gIH0gZWxzZSB7XG4gICAgdmFyIHkgPSBNYXRoLmNlaWwoeCk7XG4gICAgcmV0dXJuICh5IC0geCA+PSAwLjUpPyh5IC0gMSk6eVxuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2NicnRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2JydF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jYnJ0KHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2VyZl9mbG9hdCh4KSB7XG4gIHZhciBhMSA9IDAuMjU0ODI5NTkyO1xuICB2YXIgYTIgPSAtMC4yODQ0OTY3MzY7XG4gIHZhciBhMyA9IDEuNDIxNDEzNzQxO1xuICB2YXIgYTQgPSAtMS40NTMxNTIwMjc7XG4gIHZhciBhNSA9IDEuMDYxNDA1NDI5O1xuICB2YXIgcCA9IDAuMzI3NTkxMTtcblxuICB2YXIgc2lnbiA9IDE7XG4gIGlmICh4IDwgMCkge1xuICAgIHNpZ24gPSAtMTtcbiAgfVxuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHZhciB0ID0gMS4wIC8gKDEuMCArIHAgKiB4KTtcbiAgdmFyIHkgPSAxLjAgLSAoKCgoYTUgKiB0ICsgYTQpICogdCArIGEzKSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIE1hdGguZXhwKC14ICogeCk7XG5cbiAgcmV0dXJuIHNpZ24gKiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZmNfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXJmX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2VyZmNfZmxvYXQoeCkge1xuICByZXR1cm4gMSAtIGNhbWxfZXJmX2Zsb2F0KHgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm1hX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZtYV9mbG9hdCh4LCB5LCB6KSB7XG4gIHZhciBTUExJVCA9IE1hdGgucG93KDIsIDI3KSArIDE7XG4gIHZhciBNSU5fVkFMVUUgPSBNYXRoLnBvdygyLCAtMTAyMik7XG4gIHZhciBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbiAgdmFyIEMgPSA0MTY7XG4gIHZhciBBID0gTWF0aC5wb3coMiwgK0MpO1xuICB2YXIgQiA9IE1hdGgucG93KDIsIC1DKTtcblxuICBmdW5jdGlvbiBtdWx0aXBseSAoYSwgYikge1xuICAgIHZhciBhdCA9IFNQTElUICogYTtcbiAgICB2YXIgYWhpID0gYXQgLSAoYXQgLSBhKTtcbiAgICB2YXIgYWxvID0gYSAtIGFoaTtcbiAgICB2YXIgYnQgPSBTUExJVCAqIGI7XG4gICAgdmFyIGJoaSA9IGJ0IC0gKGJ0IC0gYik7XG4gICAgdmFyIGJsbyA9IGIgLSBiaGk7XG4gICAgdmFyIHAgPSBhICogYjtcbiAgICB2YXIgZSA9ICgoYWhpICogYmhpIC0gcCkgKyBhaGkgKiBibG8gKyBhbG8gKiBiaGkpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdmFyIHMgPSBhICsgYjtcbiAgICB2YXIgdiA9IHMgLSBhO1xuICAgIHZhciBlID0gKGEgLSAocyAtIHYpKSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGp1c3QgKHgsIHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCAmJiB5ICE9PSAwICYmIFNQTElUICogeCAtIChTUExJVCAqIHggLSB4KSA9PT0geCA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKSA6IHg7XG4gIH07XG5cbiAgaWYgKHggPT09IDAgfHwgeCAhPT0geCB8fCB4ID09PSArMSAvIDAgfHwgeCA9PT0gLTEgLyAwIHx8XG4gICAgICB5ID09PSAwIHx8IHkgIT09IHkgfHwgeSA9PT0gKzEgLyAwIHx8IHkgPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB4ICogeSArIHo7XG4gIH1cbiAgaWYgKHogPT09IDApIHtcbiAgICByZXR1cm4geCAqIHk7XG4gIH1cbiAgaWYgKHogIT09IHogfHwgeiA9PT0gKzEgLyAwIHx8IHogPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMTtcbiAgd2hpbGUgKE1hdGguYWJzKHgpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeCAqPSBCO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHkgKj0gQjtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICogc2NhbGU7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHgpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeCAqPSBBO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHkgKj0gQTtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciB4cyA9IHg7XG4gIHZhciB5cyA9IHk7XG4gIHZhciB6cyA9IHogLyBzY2FsZTtcblxuICBpZiAoTWF0aC5hYnMoenMpID4gTWF0aC5hYnMoeHMgKiB5cykgKiA0IC8gRVBTSUxPTikge1xuICAgIHJldHVybiB6O1xuICB9XG4gIGlmIChNYXRoLmFicyh6cykgPCBNYXRoLmFicyh4cyAqIHlzKSAqIEVQU0lMT04gLyA0ICogRVBTSUxPTiAvIDQpIHtcbiAgICB6cyA9ICh6IDwgMCA/IC0xIDogKzEpICogTUlOX1ZBTFVFO1xuICB9XG5cbiAgdmFyIHh5ID0gbXVsdGlwbHkoeHMsIHlzKTtcbiAgdmFyIHMgPSBhZGQoeHkucCwgenMpO1xuICB2YXIgdSA9IGFkZCh4eS5lLCBzLmUpO1xuICB2YXIgaSA9IGFkZChzLnMsIHUucyk7XG5cbiAgdmFyIGYgPSBpLnMgKyBhZGp1c3QoaS5lLCB1LmUpO1xuICBpZiAoZiA9PT0gMCkge1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgdmFyIGZzID0gZiAqIHNjYWxlO1xuICBpZiAoTWF0aC5hYnMoZnMpID4gTUlOX1ZBTFVFKSB7XG4gICAgcmV0dXJuIGZzO1xuICB9XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSB3YXMgZXh0cmEgcm91bmRpbmcgZm9yIGEgZGVub3JtYWxpemVkIHZhbHVlLlxuICByZXR1cm4gZnMgKyBhZGp1c3QoZiAtIGZzIC8gc2NhbGUsIGkuZSkgKiBzY2FsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdCAoZm10LCB4KSB7XG4gIGZ1bmN0aW9uIHRvRml4ZWQoeCxkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gcGFyc2VJbnQoeC50b1N0cmluZygpLnNwbGl0KCcrJylbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLGUpO1xuICAgICAgICB4ICs9IChuZXcgQXJyYXkoZSsxKSkuam9pbignMCcpO1xuICAgICAgICBpZihkcCA+IDApIHtcbiAgICAgICAgICB4ID0geCArICcuJyArIChuZXcgQXJyYXkoZHArMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuIHgudG9GaXhlZChkcClcbiAgICB9XG4gIH1cbiAgdmFyIHMsIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICB2YXIgcHJlYyA9IChmLnByZWMgPCAwKT82OmYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09IDAgJiYgMS94ID09IC1JbmZpbml0eSkpIHsgZi5zaWduID0gLTE7IHggPSAteDsgfVxuICBpZiAoaXNOYU4oeCkpIHsgcyA9IFwibmFuXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2UgaWYgKCFpc0Zpbml0ZSh4KSkgeyBzID0gXCJpbmZcIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZVxuICAgIHN3aXRjaCAoZi5jb252KSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICB2YXIgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjKTtcbiAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICB2YXIgaSA9IHMubGVuZ3RoO1xuICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmJzpcbiAgICAgIHMgPSB0b0ZpeGVkKHgsIHByZWMpOyBicmVhaztcbiAgICBjYXNlICdnJzpcbiAgICAgIHByZWMgPSBwcmVjP3ByZWM6MTtcbiAgICAgIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyAtIDEpO1xuICAgICAgdmFyIGogPSBzLmluZGV4T2YoJ2UnKTtcbiAgICAgIHZhciBleHAgPSArcy5zbGljZShqICsgMSk7XG4gICAgICBpZiAoZXhwIDwgLTQgfHwgeCA+PSAxZTIxIHx8IHgudG9GaXhlZCgwKS5sZW5ndGggPiBwcmVjKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgdmFyIGkgPSBqIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKSArIHMuc2xpY2Uoaik7XG4gICAgICAgIGkgPSBzLmxlbmd0aDtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcCA9IHByZWM7XG4gICAgICAgIGlmIChleHAgPCAwKSB7IHAgLT0gZXhwICsgMTsgcyA9IHgudG9GaXhlZChwKTsgfVxuICAgICAgICBlbHNlIHdoaWxlIChzID0geC50b0ZpeGVkKHApLCBzLmxlbmd0aCA+IHByZWMgKyAxKSBwLS07XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9zdHJpbmcocykge1xuICB2YXIgcmVzO1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKVxuICByZXMgPSArcztcbiAgaWYgKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHJldHVybiByZXM7XG4gIHMgPSBzLnJlcGxhY2UoL18vZyxcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKSByZXR1cm4gcmVzO1xuICB2YXIgbSA9IC9eICooWystXT8pMHgoWzAtOWEtZl0rKVxcLj8oWzAtOWEtZl0qKShwKFsrLV0/WzAtOV0rKSk/L2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA1XG4gIGlmKG0pe1xuICAgIHZhciBtMyA9IG1bM10ucmVwbGFjZSgvMCskLywnJyk7XG4gICAgdmFyIG1hbnRpc3NhID0gcGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9IChtWzVdfDApIC0gNCptMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZigvXlxcKz9pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gSW5maW5pdHk7XG4gIGlmKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiAtSW5maW5pdHk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHkuZnVuICkgeyB4LmZ1biA9IHkuZnVuOyByZXR1cm4gMDsgfVxuICBpZiggdHlwZW9mIHk9PT1cImZ1bmN0aW9uXCIgKSB7IHguZnVuID0geTsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FsbG9jX2R1bW15X2luZml4XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2FsbG9jX2R1bW15X2luZml4ICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYgKHgpIHsgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIFt4XSkgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9vYmpfZHVwICh4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial90cnVuY2F0ZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfb2JqX3RydW5jYXRlICh4LCBzKSB7XG4gIGlmIChzPD0wIHx8IHMgKyAxID4geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIk9iai50cnVuY2F0ZVwiKTtcbiAgaWYgKHgubGVuZ3RoICE9IHMgKyAxKSB4Lmxlbmd0aCA9IHMgKyAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfbWFrZV9mb3J3YXJkXG5mdW5jdGlvbiBjYW1sX29ial9tYWtlX2ZvcndhcmQgKGIsdikge1xuICBiWzBdPTI1MDtcbiAgYlsxXT12O1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwXG5mdW5jdGlvbiBjYW1sX29ial9jb21wYXJlX2FuZF9zd2FwKHgsaSxvbGQsbil7XG4gIGlmKHhbaSsxXSA9PSBvbGQpIHtcbiAgICB4W2krMV0gPSBuO1xuICAgIHJldHVybiAxO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2lzX3NoYXJlZFxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfc2hhcmVkKHgpe1xuICByZXR1cm4gMVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkIGNvbnN0IChtdXRhYmxlKVxuZnVuY3Rpb24gY2FtbF9sYXp5X21ha2VfZm9yd2FyZCAodikgeyByZXR1cm4gWzI1MCwgdl07IH1cblxuLy8vLy8vLy8vLy8vLyBDYW1saW50ZXJuYWxPT1xuLy9Qcm92aWRlczogY2FtbF9nZXRfcHVibGljX21ldGhvZCBjb25zdFxudmFyIGNhbWxfbWV0aG9kX2NhY2hlID0gW107XG5mdW5jdGlvbiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIChvYmosIHRhZywgY2FjaGVpZCkge1xuICB2YXIgbWV0aHMgPSBvYmpbMV07XG4gIHZhciBvZnMgPSBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXTtcbiAgaWYgKG9mcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3Jhd19maWVsZChvLGkpIHsgcmV0dXJuIG9baSsxXSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobyxpLHYpIHsgcmV0dXJuIG9baSsxXSA9IHYgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yZWFjaGFibGVfd29yZHNcbmZ1bmN0aW9uIGNhbWxfb2JqX3JlYWNoYWJsZV93b3JkcyhvKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2FkZF9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfb2JqX2FkZF9vZmZzZXQodixvZmZzZXQpIHtcbiAgY2FtbF9mYWlsd2l0aChcIk9iai5hZGRfb2Zmc2V0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3VwZGF0ZV90YWcoYixvLG4pIHtcbiAgICBpZihiWzBdPT1vKSB7IGJbMF0gPSBuOyByZXR1cm4gMSB9XG4gICAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcmNpbmcobykge1xuICBpZiAoKG8gaW5zdGFuY2VvZiBBcnJheSkgJiYgb1swXSA9PSAob1swXSA+Pj4gMCkgJiZcbiAgICAgIGNhbWxfb2JqX3VwZGF0ZV90YWcobywgMjQ2LCAyNDQpKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3VwZGF0ZV90b19mb3J3YXJkXG4vL1JlcXVpcmVzOiBjYW1sX29ial91cGRhdGVfdGFnXG4gIGZ1bmN0aW9uIGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZChvKSB7XG4gIGNhbWxfb2JqX3VwZGF0ZV90YWcobywyNDQsMjUwKTtcbiAgcmV0dXJuIDA7IC8vIHVuaXRcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVzZXRfdG9fbGF6eVxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenkobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI0Nik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xhenlfcmVhZF9yZXN1bHRcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3JlYWRfcmVzdWx0KG8pIHtcbiAgcmV0dXJuIChjYW1sX29ial90YWcobykgPT0gMjUwKT9vWzFdOm87XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG4vL1ZlcnNpb246IDwgNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA+PSA1XG5mdW5jdGlvbiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodCkge1xuICByZXR1cm4gKHQgPT0gMjQ1KSA/IDEgOiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkLCBBbmR5IFJheVxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuLy9cbi8vIEJpZ2FycmF5LlxuLy9cbi8vIC0gYWxsIGJpZ2FycmF5IHR5cGVzIGluY2x1ZGluZyBJbnQ2NCBhbmQgQ29tcGxleC5cbi8vIC0gZm9ydHJhbiArIGMgbGF5b3V0c1xuLy8gLSBzdWIvc2xpY2UvcmVzaGFwZVxuLy8gLSByZXRhaW4gZmFzdCBwYXRoIGZvciAxZCBhcnJheSBhY2Nlc3NcblxuLy9Qcm92aWRlczogY2FtbF9iYV9pbml0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2JhX2luaXQoKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemUoZGltcykge1xuICB2YXIgbl9kaW1zID0gZGltcy5sZW5ndGg7XG4gIHZhciBzaXplID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuX2RpbXM7IGkrKykge1xuICAgIGlmIChkaW1zW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIHNpemUgPSBzaXplICogZGltc1tpXTtcbiAgfVxuICByZXR1cm4gc2l6ZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKXtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDc6IGNhc2UgMTA6IGNhc2UgMTE6IHJldHVybiAyO1xuICBkZWZhdWx0OiByZXR1cm4gMTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpe1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxOiAgdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMjogIHZpZXcgPSBJbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgNDogIHZpZXcgPSBJbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA1OiAgdmlldyA9IFVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDc6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgODogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDEwOiB2aWV3ID0gRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMTogdmlldyA9IEZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBVaW50OEFycmF5OyBicmVhaztcbiAgfVxuICBpZiAoIXZpZXcpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmNyZWF0ZTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgdmFyIGRhdGEgPSBuZXcgdmlldyhzaXplICogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246IDwgNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnJheVwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPj0gNC4xMVxudmFyIGNhbWxfYmFfY3VzdG9tX25hbWUgPSBcIl9iaWdhcnIwMlwiXG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpLCBjYW1sX2ludDY0X2hpMzIsIGNhbWxfaW50NjRfbG8zMlxuZnVuY3Rpb24gTWxfQmlnYXJyYXkgKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG5cbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBjYW1sX2JhX2N1c3RvbV9uYW1lO1xuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICB2YXIgb2ZzID0gMDtcbiAgaWYodHlwZW9mIGFyZyA9PT0gXCJudW1iZXJcIikgYXJnID0gW2FyZ107XG4gIGlmICghIChhcmcgaW5zdGFuY2VvZiBBcnJheSkpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImJpZ2FycmF5LmpzOiBpbnZhbGlkIG9mZnNldFwiKTtcbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYXJnLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5nZXQvc2V0OiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIGlmKHRoaXMubGF5b3V0ID09IDAgLyogY19sYXlvdXQgKi8pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFyZ1tpXSA8IDAgfHwgYXJnW2ldID49IHRoaXMuZGltc1tpXSlcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyBhcmdbaV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSB0aGlzLmRpbXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChhcmdbaV0gPCAxIHx8IGFyZ1tpXSA+IHRoaXMuZGltc1tpXSl7XG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgKGFyZ1tpXSAtIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2ZzO1xufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGwgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBoID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobCxoKTtcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciByID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaSA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIFsyNTQsIHIsIGldO1xuICBkZWZhdWx0OlxuICAgIHJldHVybiB0aGlzLmRhdGFbb2ZzXVxuICB9XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMF0gPSB2WzFdO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSB2WzJdO1xuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMFxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBhID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHZhciBiID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGlmKGEgPT0gYil7XG4gICAgICB0aGlzLmRhdGEuZmlsbChhKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBhIDogYjtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgaW0gPSB2WzFdO1xuICAgIHZhciByZSA9IHZbMl07XG4gICAgaWYoaW0gPT0gcmUpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoaW0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGltIDogcmU7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBkZWZhdWx0OlxuICAgIHRoaXMuZGF0YS5maWxsKHYpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoYiwgdG90YWwpIHtcbiAgaWYgKHRoaXMubGF5b3V0ICE9IGIubGF5b3V0IHx8IHRoaXMua2luZCAhPSBiLmtpbmQpIHtcbiAgICB2YXIgazEgPSB0aGlzLmtpbmQgfCAodGhpcy5sYXlvdXQgPDwgOCk7XG4gICAgdmFyIGsyID0gICAgYi5raW5kIHwgKGIubGF5b3V0IDw8IDgpO1xuICAgIHJldHVybiBrMiAtIGsxO1xuICB9XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGIuZGltcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYi5kaW1zLmxlbmd0aCAtIHRoaXMuZGltcy5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKHRoaXMuZGltc1tpXSAhPSBiLmRpbXNbaV0pXG4gICAgICByZXR1cm4gKHRoaXMuZGltc1tpXSA8IGIuZGltc1tpXSkgPyAtMSA6IDE7XG4gIHN3aXRjaCAodGhpcy5raW5kKSB7XG4gIGNhc2UgMDpcbiAgY2FzZSAxOlxuICBjYXNlIDEwOlxuICBjYXNlIDExOlxuICAgIC8vIEZsb2F0c1xuICAgIHZhciB4LCB5O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICB4ID0gdGhpcy5kYXRhW2ldO1xuICAgICAgeSA9IGIuZGF0YVtpXTtcbiAgICAgIGlmICh4IDwgeSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHggPiB5KVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICh4ICE9IHkpIHtcbiAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKHggPT0geCkgcmV0dXJuIDE7XG4gICAgICAgIGlmICh5ID09IHkpIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSs9Mikge1xuICAgICAgLy8gQ2hlY2sgaGlnaGVzdCBiaXRzIGZpcnN0XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPCBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdID4gYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApIDwgKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA+IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMjpcbiAgY2FzZSAzOlxuICBjYXNlIDQ6XG4gIGNhc2UgNTpcbiAgY2FzZSA2OlxuICBjYXNlIDg6XG4gIGNhc2UgOTpcbiAgY2FzZSAxMjpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA8IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKHRoaXMuZGF0YVtpXSA+IGIuZGF0YVtpXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheV9jXzFfMVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcbiAgdGhpcy5raW5kICAgPSBraW5kIDtcbiAgdGhpcy5sYXlvdXQgPSBsYXlvdXQ7XG4gIHRoaXMuZGltcyAgID0gZGltcztcbiAgdGhpcy5kYXRhICAgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZSA9IG5ldyBNbF9CaWdhcnJheSgpXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUub2Zmc2V0ID0gZnVuY3Rpb24gKGFyZykge1xuICBpZih0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKXtcbiAgICBpZigoYXJnIGluc3RhbmNlb2YgQXJyYXkpICYmIGFyZy5sZW5ndGggPT0gMSlcbiAgICAgIGFyZyA9IGFyZ1swXTtcbiAgICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIk1sX0JpZ2FycmF5X2NfMV8xLm9mZnNldFwiKTtcbiAgfVxuICBpZiAoYXJnIDwgMCB8fCBhcmcgPj0gdGhpcy5kaW1zWzBdKVxuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFyZztcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHRoaXMuZGF0YVtvZnNdID0gdjtcbiAgcmV0dXJuIDBcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jb21wYXJlXG5mdW5jdGlvbiBjYW1sX2JhX2NvbXBhcmUoYSxiLHRvdGFsKXtcbiAgcmV0dXJuIGEuY29tcGFyZShiLHRvdGFsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBNbF9CaWdhcnJheV9jXzFfMSwgY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKXtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpO1xuICBpZihjYW1sX2JhX2dldF9zaXplKGRpbXMpICogc2l6ZV9wZXJfZWxlbWVudCAhPSBkYXRhLmxlbmd0aCkge1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImxlbmd0aCBkb2Vzbid0IG1hdGNoIGRpbXNcIik7XG4gIH1cbiAgaWYobGF5b3V0ID09IDAgJiYgLy8gY19sYXlvdXRcbiAgICAgZGltcy5sZW5ndGggPT0gMSAmJiAvLyBBcnJheTFcbiAgICAgc2l6ZV9wZXJfZWxlbWVudCA9PSAxKSAvLyAxLXRvLTEgbWFwcGluZ1xuICAgIHJldHVybiBuZXcgTWxfQmlnYXJyYXlfY18xXzEoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuXG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlKGtpbmQsIGxheW91dCwgZGltc19tbCkge1xuICB2YXIgZGltcyA9IGNhbWxfanNfZnJvbV9hcnJheShkaW1zX21sKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfY2hhbmdlX2xheW91dChiYSwgbGF5b3V0KSB7XG4gIGlmKGJhLmxheW91dCA9PSBsYXlvdXQpIHJldHVybiBiYTtcbiAgdmFyIG5ld19kaW1zID0gW11cbiAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIG5ld19kaW1zW2ldID0gYmEuZGltc1tiYS5kaW1zLmxlbmd0aCAtIGkgLSAxXTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBsYXlvdXQsIG5ld19kaW1zLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kXG5mdW5jdGlvbiBjYW1sX2JhX2tpbmQoYmEpIHtcbiAgcmV0dXJuIGJhLmtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbGF5b3V0XG5mdW5jdGlvbiBjYW1sX2JhX2xheW91dChiYSkge1xuICByZXR1cm4gYmEubGF5b3V0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX251bV9kaW1zXG5mdW5jdGlvbiBjYW1sX2JhX251bV9kaW1zKGJhKSB7XG4gIHJldHVybiBiYS5kaW1zLmxlbmd0aDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1cbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9kaW0oYmEsIGkpIHtcbiAgaWYgKGkgPCAwIHx8IGkgPj0gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZGltXCIpO1xuICByZXR1cm4gYmEuZGltc1tpXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMVxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzEoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fMlxuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzIoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kaW1fM1xuLy9SZXF1aXJlczogY2FtbF9iYV9kaW1cbmZ1bmN0aW9uIGNhbWxfYmFfZGltXzMoYmEpIHtcbiAgcmV0dXJuIGNhbWxfYmFfZGltKGJhLCAyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9nZW5lcmljKGJhLCBpKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKTtcbiAgcmV0dXJuIGJhLmdldChvZnMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDE2KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcyArIDEpO1xuICByZXR1cm4gKGIxIHwgKGIyIDw8IDgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQzMihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgcmV0dXJuICggKGIxIDw8IDApICB8XG4gICAgICAgICAgIChiMiA8PCA4KSAgfFxuICAgICAgICAgICAoYjMgPDwgMTYpIHxcbiAgICAgICAgICAgKGI0IDw8IDI0KSApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDY0KGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICB2YXIgYjUgPSBiYS5nZXQob2ZzKzQpO1xuICB2YXIgYjYgPSBiYS5nZXQob2ZzKzUpO1xuICB2YXIgYjcgPSBiYS5nZXQob2ZzKzYpO1xuICB2YXIgYjggPSBiYS5nZXQob2ZzKzcpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbYjgsYjcsYjYsYjUsYjQsYjMsYjIsYjFdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMShiYSwgaTApIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoaTApKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMihiYSwgaTAsIGkxKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMV0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9nZXRfMyhiYSwgaTAsIGkxLCBpMikge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfZ2VuZXJpYyhiYSwgaSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDE2KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMSA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQzMihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDMgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzIsICh2ID4+PiAxNikgJiAweGZmKTtcbiAgYmEuc2V0KG9mcyszLCAodiA+Pj4gMjQpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDY0KGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgNyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgdiA9IGNhbWxfaW50NjRfdG9fYnl0ZXModik7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA4OyBpKyspIGJhLnNldChvZnMraSwgdls3LWldKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMVxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMShiYSwgaTAsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChpMCksIHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8yXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8yKGJhLCBpMCwgaTEsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTFdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8zXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8zKGJhLCBpMCwgaTEsIGkyLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxLGkyXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9maWxsXG5mdW5jdGlvbiBjYW1sX2JhX2ZpbGwoYmEsIHYpIHtcbiAgYmEuZmlsbCh2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2JsaXQoc3JjLCBkc3QpIHtcbiAgaWYgKGRzdC5kaW1zLmxlbmd0aCAhPSBzcmMuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGRzdC5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmIChkc3QuZGltc1tpXSAhPSBzcmMuZGltc1tpXSlcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZHN0LmRhdGEuc2V0KHNyYy5kYXRhKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc3ViXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zdWIoYmEsIG9mcywgbGVuKSB7XG4gIHZhciBjaGFuZ2VkX2RpbTtcbiAgdmFyIG11bCA9IDE7XG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSAwO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgKGJhLmRpbXMubGVuZ3RoIC0gMSk7IGkrKylcbiAgICAgIG11bCA9IG11bCAqIGJhLmRpbXNbaV07XG4gICAgY2hhbmdlZF9kaW0gPSBiYS5kaW1zLmxlbmd0aCAtIDE7XG4gICAgb2ZzID0gb2ZzIC0gMTtcbiAgfVxuICBpZiAob2ZzIDwgMCB8fCBsZW4gPCAwIHx8IChvZnMgKyBsZW4pID4gYmEuZGltc1tjaGFuZ2VkX2RpbV0pe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnN1YjogYmFkIHN1Yi1hcnJheVwiKTtcbiAgfVxuICB2YXIgbmV3X2RpbXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIG5ld19kaW1zW2ldID0gYmEuZGltc1tpXTtcbiAgbmV3X2RpbXNbY2hhbmdlZF9kaW1dID0gbGVuO1xuICBtdWwgKj0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBtdWwsIChvZnMgKyBsZW4pICogbXVsKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2xpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc2xpY2UoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG51bV9pbmRzID0gdmluZC5sZW5ndGg7XG4gIHZhciBpbmRleCA9IFtdO1xuICB2YXIgc3ViX2RpbXMgPSBbXTtcbiAgdmFyIG9mcztcblxuICBpZiAobnVtX2luZHMgPiBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zbGljZTogdG9vIG1hbnkgaW5kaWNlc1wiKTtcblxuICAvLyBDb21wdXRlIG9mZnNldCBhbmQgY2hlY2sgYm91bmRzXG4gIGlmIChiYS5sYXlvdXQgPT0gMCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gdmluZFtpXTtcbiAgICBmb3IgKDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDA7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKG51bV9pbmRzKTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzICsgaV0gPSB2aW5kW2ldO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAxO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZSgwLCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzKTtcbiAgfVxuICBvZnMgPSBiYS5vZmZzZXQoaW5kZXgpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoc3ViX2RpbXMpO1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogc2l6ZV9wZXJfZWxlbWVudCwgKG9mcyArIHNpemUpICogc2l6ZV9wZXJfZWxlbWVudCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBzdWJfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3Jlc2hhcGVcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbmZ1bmN0aW9uIGNhbWxfYmFfcmVzaGFwZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbmV3X2RpbSA9IFtdO1xuICB2YXIgbnVtX2RpbXMgPSB2aW5kLmxlbmd0aDtcblxuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgfVxuICB2YXIgbnVtX2VsdHMgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICBuZXdfZGltW2ldID0gdmluZFtpXTtcbiAgICBpZiAobmV3X2RpbVtpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgbnVtX2VsdHMgPSBudW1fZWx0cyAqIG5ld19kaW1baV07XG4gIH1cblxuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIC8vIENoZWNrIHRoYXQgc2l6ZXMgYWdyZWVcbiAgaWYgKG51bV9lbHRzICE9IHNpemUpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogc2l6ZSBtaXNtYXRjaFwiKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIG5ld19kaW0sIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfc2VyaWFsaXplKHdyaXRlciwgYmEsIHN6KSB7XG4gIHdyaXRlci53cml0ZSgzMiwgYmEuZGltcy5sZW5ndGgpO1xuICB3cml0ZXIud3JpdGUoMzIsIChiYS5raW5kIHwgKGJhLmxheW91dCA8PCA4KSkpO1xuICBpZihiYS5jYW1sX2N1c3RvbSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZihiYS5kaW1zW2ldIDwgMHhmZmZmKVxuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRpbXNbaV0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgMHhmZmZmKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCAwKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgd3JpdGVyLndyaXRlKDMyLGJhLmRpbXNbaV0pXG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSg4LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMTYsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHdyaXRlci53cml0ZSg4LDApO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGJhLmdldChpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGIpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBqID0gYmEuZ2V0KGkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsxXSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoalsyXSkpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBjb21wbGV4ID0gYmEuZ2V0KGkpO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzFdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsyXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHN6WzBdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA0O1xuICBzelsxXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9kZXNlcmlhbGl6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzLCBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2Rlc2VyaWFsaXplKHJlYWRlciwgc3osIG5hbWUpe1xuICB2YXIgbnVtX2RpbXMgPSByZWFkZXIucmVhZDMycygpO1xuICBpZiAobnVtX2RpbXMgPCAwIHx8IG51bV9kaW1zID4gMTYpXG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiB3cm9uZyBudW1iZXIgb2YgYmlnYXJyYXkgZGltZW5zaW9uc1wiKTtcbiAgdmFyIHRhZyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIHZhciBraW5kID0gdGFnICYgMHhmZlxuICB2YXIgbGF5b3V0ID0gKHRhZyA+PiA4KSAmIDE7XG4gIHZhciBkaW1zID0gW11cbiAgaWYobmFtZSA9PSBcIl9iaWdhcnIwMlwiKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgICAgdmFyIHNpemVfZGltID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICAgIGlmKHNpemVfZGltID09IDB4ZmZmZil7XG4gICAgICAgIHZhciBzaXplX2RpbV9oaSA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIHZhciBzaXplX2RpbV9sbyA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgIGlmKHNpemVfZGltX2hpICE9IDApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBiaWdhcnJheSBkaW1lbnNpb24gb3ZlcmZsb3cgaW4gMzJiaXRcIik7XG4gICAgICAgIHNpemVfZGltID0gc2l6ZV9kaW1fbG87XG4gICAgICB9XG4gICAgICBkaW1zLnB1c2goc2l6ZV9kaW0pO1xuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykgZGltcy5wdXNoKHJlYWRlci5yZWFkMzJ1KCkpO1xuICB2YXIgc2l6ZSA9IGNhbWxfYmFfZ2V0X3NpemUoZGltcyk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIHNpemUpO1xuICB2YXIgYmEgPSBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQxNnUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB2YXIgc2l4dHkgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgaWYoc2l4dHkpIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY2Fubm90IHJlYWQgYmlnYXJyYXkgd2l0aCA2NC1iaXQgT0NhbWwgaW50c1wiKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAvLyAoaW50NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGludDY0ID0gY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KTtcbiAgICAgIGJhLnNldChpLGludDY0KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciBmID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksZik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciByZSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbSA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLFsyNTQscmUsaW1dKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgfVxuICBzelswXSA9ICg0ICsgbnVtX2RpbXMpICogNDtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL0RlcHJlY2F0ZWRcbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2Zyb21cbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9mcm9tKGRhdGExLCBkYXRhMiwganN0eXAsIGtpbmQsIGxheW91dCwgZGltcyl7XG4gIGlmKGRhdGEyIHx8IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkgPT0gMil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9jcmVhdGVfZnJvbTogdXNlIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcIik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGExKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9oYXNoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9oYXNoKGJhKXtcbiAgdmFyIG51bV9lbHRzID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgdmFyIGggPSAwO1xuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDI1NikgbnVtX2VsdHMgPSAyNTY7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDQgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTQpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgOCkgfCAoYmEuZGF0YVtpKzJdIDw8IDE2KSB8IChiYS5kYXRhW2krM10gPDwgMjQpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIHcgPSAwO1xuICAgIHN3aXRjaCAobnVtX2VsdHMgJiAzKSB7XG4gICAgY2FzZSAzOiB3ICA9IGJhLmRhdGFbaSsyXSA8PCAxNjsgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDI6IHcgfD0gYmEuZGF0YVtpKzFdIDw8IDg7ICAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMTogdyB8PSBiYS5kYXRhW2krMF07XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAxMjgpIG51bV9lbHRzID0gMTI4O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyAyIDw9IGJhLmRhdGEubGVuZ3RoOyBpKz0yKXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDE2KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICBpZiAoKG51bV9lbHRzICYgMSkgIT0gMClcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDc6ICAvLyBJbnQzMkFycmF5IChpbnQ2NClcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBudW1fZWx0cyAqPSAyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV90b190eXBlZF9hcnJheSBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGJhKXtcbiAgcmV0dXJuIGJhLmRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kO1xuICBpZiAgICAgICh0YSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSkga2luZCA9IDA7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQ4QXJyYXkpIGtpbmQgPSAyO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGtpbmQgPSAzO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSBraW5kID0gNDtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkga2luZCA9IDU7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheTogdW5zdXBwb3J0ZWQga2luZFwiKTtcbiAgcmV0dXJuIGtpbmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGtpbmQgPSBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpO1xuICB2YXIgdGEgPVxuICAgICAgLyogTmVlZGVkIHRvIGF2b2lkIHVuc2lnbmVkIHNldHRlcnMgb3ZlcmZsb3dpbmdcbiAgICAgICAgIHRoZSByYW5nZSBvZiBPQ2FtbCBbaW50MzJdIHZhbHVlcy4gKi9cbiAgICAgIHRhIGluc3RhbmNlb2YgVWludDMyQXJyYXkgP1xuICAgICAgbmV3IEludDMyQXJyYXkodGEuYnVmZmVyICx0YS5ieXRlT2Zmc2V0LCB0YS5sZW5ndGgpIDogdGE7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF91bml2X3BhcmFtIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9WZXJzaW9uOiA8IDQuMTJcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfaGFzaCAoY291bnQsIGxpbWl0LCBzZWVkLCBvYmopIHtcbiAgdmFyIHF1ZXVlLCByZCwgd3IsIHN6LCBudW0sIGgsIHYsIGksIGxlbjtcbiAgc3ogPSBsaW1pdDtcbiAgaWYgKHN6IDwgMCB8fCBzeiA+IDI1Nikgc3ogPSAyNTY7XG4gIG51bSA9IGNvdW50O1xuICBoID0gc2VlZDtcbiAgcXVldWUgPSBbb2JqXTsgcmQgPSAwOyB3ciA9IDE7XG4gIHdoaWxlIChyZCA8IHdyICYmIG51bSA+IDApIHtcbiAgICB2ID0gcXVldWVbcmQrK107XG4gICAgaWYgKHYgJiYgdi5jYW1sX2N1c3RvbSl7XG4gICAgICBpZihjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGhoID0gY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dLmhhc2godik7XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludCAoaCwgaGgpO1xuICAgICAgICBudW0gLS07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgc3dpdGNoICh2WzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2WzJdKTtcbiAgICAgICAgbnVtLS07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTA6XG4gICAgICAgIC8vIEZvcndhcmRcbiAgICAgICAgcXVldWVbLS1yZF0gPSB2WzFdO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh2WzBdKSkge1xuICAgICAgICAgIC8qIEFsbCBjb250aW51YXRpb25zIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWUsXG4gICAgICAgICAgICAgc2luY2Ugd2UgaGF2ZSBubyBpZGVhIGhvdyB0byBkaXN0aW5ndWlzaCB0aGVtLiAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHZhciB0YWcgPSAoKHYubGVuZ3RoIC0gMSkgPDwgMTApIHwgdlswXTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHRhZyk7XG4gICAgICAgIGZvciAoaSA9IDEsIGxlbiA9IHYubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAod3IgPj0gc3opIGJyZWFrO1xuICAgICAgICAgIHF1ZXVlW3dyKytdID0gdltpXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gKHZ8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB2K3YrMSk7XG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAvLyBGbG9hdFxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCx2KTtcbiAgICAgIG51bS0tO1xuICAgIH1cbiAgfVxuICBoID0gY2FtbF9oYXNoX21peF9maW5hbChoKTtcbiAgcmV0dXJuIGggJiAweDNGRkZGRkZGO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsLCBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfaGFzaChoLCB2KXtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLHYpO1xuICB2YXIgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfY29uc3RhbnRzXG52YXIgY2FtbF9tYXJzaGFsX2NvbnN0YW50cyA9IHtcbiAgUFJFRklYX1NNQUxMX0JMT0NLOiAgICAgICAgIDB4ODAsXG4gIFBSRUZJWF9TTUFMTF9JTlQ6ICAgICAgICAgICAweDQwLFxuICBQUkVGSVhfU01BTExfU1RSSU5HOiAgICAgICAgMHgyMCxcbiAgQ09ERV9JTlQ4OiAgICAgICAgICAgICAgICAgIDB4MDAsXG4gIENPREVfSU5UMTY6ICAgICAgICAgICAgICAgICAweDAxLFxuICBDT0RFX0lOVDMyOiAgICAgICAgICAgICAgICAgMHgwMixcbiAgQ09ERV9JTlQ2NDogICAgICAgICAgICAgICAgIDB4MDMsXG4gIENPREVfU0hBUkVEODogICAgICAgICAgICAgICAweDA0LFxuICBDT0RFX1NIQVJFRDE2OiAgICAgICAgICAgICAgMHgwNSxcbiAgQ09ERV9TSEFSRUQzMjogICAgICAgICAgICAgIDB4MDYsXG4gIENPREVfQkxPQ0szMjogICAgICAgICAgICAgICAweDA4LFxuICBDT0RFX0JMT0NLNjQ6ICAgICAgICAgICAgICAgMHgxMyxcbiAgQ09ERV9TVFJJTkc4OiAgICAgICAgICAgICAgIDB4MDksXG4gIENPREVfU1RSSU5HMzI6ICAgICAgICAgICAgICAweDBBLFxuICBDT0RFX0RPVUJMRV9CSUc6ICAgICAgICAgICAgMHgwQixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAgICAgICAgIDB4MEMsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9CSUc6ICAgICAweDBELFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAgMHgwRSxcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6ICAgIDB4MEYsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOiAweDA3LFxuICBDT0RFX0NPREVQT0lOVEVSOiAgICAgICAgICAgMHgxMCxcbiAgQ09ERV9JTkZJWFBPSU5URVI6ICAgICAgICAgIDB4MTEsXG4gIENPREVfQ1VTVE9NOiAgICAgICAgICAgICAgICAweDEyLFxuICBDT0RFX0NVU1RPTV9MRU46ICAgICAgICAgICAgMHgxOCxcbiAgQ09ERV9DVVNUT01fRklYRUQ6ICAgICAgICAgIDB4MTlcbn1cblxuXG4vL1Byb3ZpZGVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gVUludDhBcnJheVJlYWRlciAocywgaSkgeyB0aGlzLnMgPSBzOyB0aGlzLmkgPSBpOyB9XG5VSW50OEFycmF5UmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuc1t0aGlzLmkrK107IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgOCkgfCBzW2kgKyAxXVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQgPj4gMTYpIHwgc1tpICsgMV07XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoc1tpXSA8PCAyNCkgfCAoc1tpKzFdIDw8IDE2KSB8XG4gICAgICAoc1tpKzJdIDw8IDgpIHwgc1tpKzNdO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSh0aGlzLnMuc3ViYXJyYXkoaSwgaSArIGxlbikpO1xuICB9LFxuICByZWFkdWludDhhcnJheTpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICB2YXIgcyA9IHRoaXMucztcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgIGJbal0gPSBzLmNoYXJDb2RlQXQoaSArIGopO1xuICAgIH1cbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBiO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IEJpZ1N0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIEJpZ1N0cmluZ1JlYWRlciAoYnMsIGkpIHsgdGhpcy5zID0gYnM7IHRoaXMuaSA9IGk7IH1cbkJpZ1N0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDgpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCAyNCA+PiAxNikgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKSAgICAgICAgICkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkobGVuKVxuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKyl7XG4gICAgICBhcnJbal0gPSBjYW1sX2JhX2dldF8xKHRoaXMucywgaStqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBvZmZzZXQgPSB0aGlzLm9mZnNldChpKTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiB0aGlzLnMuZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9kZWNvbXByZXNzX2lucHV0XG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB2YXIgbiA9IGMgJiAweDdGO1xuICAgIHdoaWxlICgoYyAmIDB4ODApICE9IDApIHtcbiAgICAgIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuICB2YXIgbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICBzd2l0Y2gobWFnaWMpe1xuICBjYXNlIDB4ODQ5NUE2QkU6IC8qIEludGV4dF9tYWdpY19udW1iZXJfc21hbGwgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IDIwO1xuICAgIHZhciBjb21wcmVzc2VkID0gMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICB2YXIgdW5jb21wcmVzc2VkX2RhdGFfbGVuID0gZGF0YV9sZW47XG4gICAgdmFyIG51bV9vYmplY3RzID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHJlYWRlci5yZWFkOHUoKSAmIDB4M0Y7XG4gICAgdmFyIGNvbXByZXNzZWQgPSAxO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWR2bHEgKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfNjQgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiBhIDMyLWJpdCBwbGF0Zm9ybVwiKTtcbiAgICBicmVha1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrO1xuICB9XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgaW50ZXJuX29ial90YWJsZSA9IChudW1fb2JqZWN0cyA+IDApP1tdOm51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMgKHJlYWRlcikge1xuICAgIHZhciBjb2RlID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICBpZiAoY29kZSA+PSAweDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLykge1xuICAgICAgaWYgKGNvZGUgPj0gMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLykge1xuICAgICAgICB2YXIgdGFnID0gY29kZSAmIDB4RjtcbiAgICAgICAgdmFyIHNpemUgPSAoY29kZSA+PiA0KSAmIDB4NztcbiAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIChjb2RlICYgMHgzRik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID49IDB4MjAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HICovKSB7XG4gICAgICAgIHZhciBsZW4gPSBjb2RlICYgMHgxRjtcbiAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaChjb2RlKSB7XG4gICAgICAgIGNhc2UgMHgwMDogLy9jc3QuQ09ERV9JTlQ4OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzICgpO1xuICAgICAgICBjYXNlIDB4MDE6IC8vY3N0LkNPREVfSU5UMTY6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzICgpO1xuICAgICAgICBjYXNlIDB4MDI6IC8vY3N0LkNPREVfSU5UMzI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICAgICAgICBjYXNlIDB4MDM6IC8vY3N0LkNPREVfSU5UNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA0OiAvL2NzdC5DT0RFX1NIQVJFRDg6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDU6IC8vY3N0LkNPREVfU0hBUkVEMTY6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA2OiAvL2NzdC5DT0RFX1NIQVJFRDMyOlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwODogLy9jc3QuQ09ERV9CTE9DSzMyOlxuICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICB2YXIgdGFnID0gaGVhZGVyICYgMHhGRjtcbiAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBkYXRhIGJsb2NrIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA5OiAvL2NzdC5DT0RFX1NUUklORzg6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBBOiAvL2NzdC5DT0RFX1NUUklORzMyOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEM6IC8vY3N0LkNPREVfRE9VQkxFX0xJVFRMRTpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0WzcgLSBpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQjogLy9jc3QuQ09ERV9ET1VCTEVfQklHOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRDogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRjogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMDogLy9jc3QuQ09ERV9DT0RFUE9JTlRFUjpcbiAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBjb2RlIHBvaW50ZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgxMjogLy9jc3QuQ09ERV9DVVNUT006XG4gICAgICAgIGNhc2UgMHgxODogLy9jc3QuQ09ERV9DVVNUT01fTEVOOlxuICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgIHZhciBjLCBzID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkZXIucmVhZDh1ICgpKSAhPSAwKSBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbc107XG4gICAgICAgICAgdmFyIGV4cGVjdGVkX3NpemU7XG4gICAgICAgICAgaWYoIW9wcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICBzd2l0Y2goY29kZSl7XG4gICAgICAgICAgY2FzZSAweDEyOiAvLyBjc3QuQ09ERV9DVVNUT00gKGRlcHJlY2F0ZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vIGNzdC5DT0RFX0NVU1RPTV9GSVhFRFxuICAgICAgICAgICAgaWYoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZXhwZWN0ZWQgYSBmaXhlZC1zaXplIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE4OiAvLyBjc3QuQ09ERV9DVVNUT01fTEVOXG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTsgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHJlYWRlci5pO1xuICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgIHZhciB2ID0gb3BzLmRlc2VyaWFsaXplKHJlYWRlciwgc2l6ZSk7XG4gICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSBzaXplWzBdKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG1lc3NhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYoY29tcHJlc3NlZCkge1xuICAgIGlmKGNhbWxfZGVjb21wcmVzc19pbnB1dCkge1xuICAgICAgdmFyIGRhdGEgPSByZWFkZXIucmVhZHVpbnQ4YXJyYXkoZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBVaW50OEFycmF5KHVuY29tcHJlc3NlZF9kYXRhX2xlbik7XG4gICAgICB2YXIgcmVzID0gY2FtbF9kZWNvbXByZXNzX2lucHV0KGRhdGEsIHJlcyk7XG4gICAgICB2YXIgcmVhZGVyID0gbmV3IFVJbnQ4QXJyYXlSZWFkZXIocmVzLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjb21wcmVzc2VkIG9iamVjdCwgY2Fubm90IGRlY29tcHJlc3NcIik7XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjIChyZWFkZXIpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA8IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMjBcblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG4vL1ZlcnNpb246ID49IDUuMS4wXG52YXIgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplID0gMTZcblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBVSW50OEFycmF5UmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbmZ1bmN0aW9uIGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKHMsIG9mcykge1xuICB2YXIgciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyksIG9mcyk7XG4gIGZ1bmN0aW9uIHJlYWR2bHEob3ZlcmZsb3cpIHtcbiAgICB2YXIgYyA9IHIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gci5yZWFkOHUoKTtcbiAgICAgIHZhciBuNyA9IG4gPDwgNztcbiAgICAgIGlmIChuICE9IG43ID4+IDcpIG92ZXJmbG93WzBdID0gdHJ1ZTtcbiAgICAgIG4gPSBuNyB8IChjICYgMHg3Rik7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9XG5cbiAgc3dpdGNoKHIucmVhZDMydSgpKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgZGF0YV9sZW4gPSByLnJlYWQzMnUoKTtcbiAgICBicmVhaztcbiAgY2FzZSAweDg0OTVBNkJEOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2NvbXByZXNzZWQgKi9cbiAgICB2YXIgaGVhZGVyX2xlbiA9IHIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBvdmVyZmxvdyA9IFtmYWxzZV07XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZHZscShvdmVyZmxvdyk7XG4gICAgaWYob3ZlcmZsb3dbMF0pe1xuICAgICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBvYmplY3QgdG9vIGxhcmdlIHRvIGJlIHJlYWQgYmFjayBvbiB0aGlzIHBsYXRmb3JtXCIpO1xuICAgIH1cbiAgICBicmVha1xuICBjYXNlIDB4ODQ5NUE2QkY6IC8qIEludGV4dF9tYWdpY19udW1iZXJfYmlnICovXG4gIGRlZmF1bHQ6XG4gICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBiYWQgb2JqZWN0XCIpO1xuICAgIGJyZWFrXG4gIH1cbiAgcmV0dXJuIGhlYWRlcl9sZW4gLSBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUgKyBkYXRhX2xlbjtcbn1cblxuLy9Qcm92aWRlczogTWxPYmplY3RUYWJsZVxudmFyIE1sT2JqZWN0VGFibGU7XG5pZiAodHlwZW9mIGdsb2JhbFRoaXMuTWFwID09PSAndW5kZWZpbmVkJykge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgLyogcG9seWZpbGwgKHVzaW5nIGxpbmVhciBzZWFyY2gpICovXG4gICAgZnVuY3Rpb24gTmFpdmVMb29rdXAob2JqcykgeyB0aGlzLm9ianMgPSBvYmpzOyB9XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vYmpzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLm9ianNbaV0gPT09IHYpIHJldHVybiBpO1xuICAgICAgfVxuICAgIH07XG4gICAgTmFpdmVMb29rdXAucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy8gRG8gbm90aGluZyBoZXJlLiBbTWxPYmplY3RUYWJsZS5zdG9yZV0gd2lsbCBwdXNoIHRvIFt0aGlzLm9ianNdIGRpcmVjdGx5LlxuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBOYWl2ZUxvb2t1cCh0aGlzLm9ianMpO1xuICAgIH07XG4gIH0oKTtcbn1cbmVsc2Uge1xuICBNbE9iamVjdFRhYmxlID0gZnVuY3Rpb24gTWxPYmplY3RUYWJsZSgpIHtcbiAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgZ2xvYmFsVGhpcy5NYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IE1sT2JqZWN0VGFibGUsIGNhbWxfbGlzdF90b19qc19hcnJheSwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9pc19jb250aW51YXRpb25fdGFnXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBjb25zb2xlLndhcm4oXCJpbiBjYW1sX291dHB1dF92YWw6IGZsYWcgTWFyc2hhbC5DbG9zdXJlcyBpcyBub3Qgc3VwcG9ydGVkLlwiKTtcblxuICAgIHZhciB3cml0ZXIgPSBuZXcgV3JpdGVyICgpO1xuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBpbnRlcm5fb2JqX3RhYmxlID0gbm9fc2hhcmluZyA/IG51bGwgOiBuZXcgTWxPYmplY3RUYWJsZSgpO1xuXG4gICAgZnVuY3Rpb24gbWVtbyh2KSB7XG4gICAgICBpZiAobm9fc2hhcmluZykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIGV4aXN0aW5nX29mZnNldCA9IGludGVybl9vYmpfdGFibGUucmVjYWxsKHYpO1xuICAgICAgaWYgKGV4aXN0aW5nX29mZnNldCkgeyB3cml0ZXIud3JpdGVfc2hhcmVkKGV4aXN0aW5nX29mZnNldCk7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIHsgaW50ZXJuX29ial90YWJsZS5zdG9yZSh2KTsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZXJuX3JlYyAodikge1xuICAgICAgaWYgKHYuY2FtbF9jdXN0b20pIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIG5hbWUgPSB2LmNhbWxfY3VzdG9tO1xuICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW25hbWVdO1xuICAgICAgICB2YXIgc3pfMzJfNjQgPSBbMCwwXTtcbiAgICAgICAgaWYoIW9wcy5zZXJpYWxpemUpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQ3VzdG9tKVwiKTtcbiAgICAgICAgaWYob3BzLmZpeGVkX2xlbmd0aCA9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOCAvKmNzdC5DT0RFX0NVU1RPTV9MRU4qLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgaGVhZGVyX3BvcyA9IHdyaXRlci5wb3MgKCk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcywgMzIsIHN6XzMyXzY0WzBdKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDQsIDMyLCAwKTsgLy8gemVyb1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgOCwgMzIsIHN6XzMyXzY0WzFdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTkgLypjc3QuQ09ERV9DVVNUT01fRklYRUQqLyk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBuYW1lLmNoYXJDb2RlQXQoaSkpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSg4LCAwKTtcbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHdyaXRlci5wb3MoKTtcbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIGlmIChvcHMuZml4ZWRfbGVuZ3RoICE9IHdyaXRlci5wb3MoKSAtIG9sZF9wb3MpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBpbmNvcnJlY3QgZml4ZWQgc2l6ZXMgc3BlY2lmaWVkIGJ5IFwiICsgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMiArICgoc3pfMzJfNjRbMF0gKyAzKSA+PiAyKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMiArICgoc3pfMzJfNjRbMV0gKyA3KSA+PiAzKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHYgaW5zdGFuY2VvZiBBcnJheSAmJiB2WzBdID09PSAodlswXXwwKSkge1xuICAgICAgICBpZiAodlswXSA9PSAyNTEpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoQWJzdHJhY3QpXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwib3V0cHV0X3ZhbHVlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEgJiYgbWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICBpZiAodlswXSA8IDE2ICYmIHYubGVuZ3RoIC0gMSA8IDgpXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDgwIC8qY3N0LlBSRUZJWF9TTUFMTF9CTE9DSyovICsgdlswXSArICgodi5sZW5ndGggLSAxKTw8NCkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDggLypjc3QuQ09ERV9CTE9DSzMyKi8sICgodi5sZW5ndGgtMSkgPDwgMTApIHwgdlswXSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IHYubGVuZ3RoO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSB2Lmxlbmd0aDtcbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSkgc3RhY2sucHVzaCAodiwgMSk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXModikpIHtcbiAgICAgICAgaWYoIShjYW1sX2lzX21sX2J5dGVzKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIikpKSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IFtCeXRlcy50XSBjYW5ub3Qgc2FmZWx5IGJlIG1hcnNoYWxlZCB3aXRoIFstLWVuYWJsZSB1c2UtanMtc3RyaW5nXVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9ieXRlc19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcodikpIHtcbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQodixpKSk7XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDEgKyAoKChsZW4gKyA0KSAvIDQpfDApO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAxICsgKCgobGVuICsgOCkgLyA4KXwwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2ICE9ICh2fDApKXtcbiAgICAgICAgICB2YXIgdHlwZV9vZl92ID0gdHlwZW9mIHY7XG4gICAgICAgICAgaWYodHlwZV9vZl92ICE9IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyBJZiBhIGZsb2F0IGhhcHBlbnMgdG8gYmUgYW4gaW50ZWdlciBpdCBpcyBzZXJpYWxpemVkIGFzIGFuIGludGVnZXJcbiAgICAgICAgICAvLyAoSnNfb2Zfb2NhbWwgY2Fubm90IHRlbGwgd2hldGhlciB0aGUgdHlwZSBvZiBhbiBpbnRlZ2VyIG51bWJlciBpc1xuICAgICAgICAgIC8vIGZsb2F0IG9yIGludGVnZXIuKSBUaGlzIGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBjcmFzaGVzIHdoZW5cbiAgICAgICAgICAvLyB1bm1hcnNoYWxsaW5nIHVzaW5nIHRoZSBzdGFuZGFyZCBydW50aW1lLlxuICAgICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgICAgdmFyIHQgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh2KSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDBDIC8qY3N0LkNPREVfRE9VQkxFX0xJVFRMRSovKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpPDg7IGkrKyl7d3JpdGVyLndyaXRlKDgsdFs3IC0gaV0pfVxuICAgICAgICAgIHdyaXRlci5zaXplXzMyICs9IDNcbiAgICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodiA+PSAwICYmIHYgPCAweDQwKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAwWDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLyArIHYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2ID49IC0oMSA8PCA3KSAmJiB2IDwgKDEgPDwgNykpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSg4LCAweDAwIC8qY3N0LkNPREVfSU5UOCovLCB2KTtcbiAgICAgICAgICBlbHNlIGlmICh2ID49IC0oMSA8PCAxNSkgJiYgdiA8ICgxIDw8IDE1KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDE2LCAweDAxIC8qY3N0LkNPREVfSU5UMTYqLywgdik7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMzIsIDB4MDIgLypjc3QuQ09ERV9JTlQzMiovLCB2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBleHRlcm5fcmVjICh2KTtcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGkgPSBzdGFjay5wb3AgKCk7XG4gICAgICB2YXIgdiA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIGlmIChpICsgMSA8IHYubGVuZ3RoKSBzdGFjay5wdXNoICh2LCBpICsgMSk7XG4gICAgICBleHRlcm5fcmVjICh2W2ldKTtcbiAgICB9XG4gICAgaWYgKGludGVybl9vYmpfdGFibGUpIHdyaXRlci5vYmpfY291bnRlciA9IGludGVybl9vYmpfdGFibGUub2Jqcy5sZW5ndGg7XG4gICAgd3JpdGVyLmZpbmFsaXplKCk7XG4gICAgcmV0dXJuIHdyaXRlci5jaHVuaztcbiAgfVxufSAoKTtcblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX29mX2FycmF5IChjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX2JsaXRfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciAocywgb2ZzLCBsZW4sIHYsIGZsYWdzKSB7XG4gIHZhciB0ID0gY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncyk7XG4gIGlmICh0Lmxlbmd0aCA+IGxlbikgY2FtbF9mYWlsd2l0aCAoXCJNYXJzaGFsLnRvX2J1ZmZlcjogYnVmZmVyIG92ZXJmbG93XCIpO1xuICBjYW1sX2JsaXRfYnl0ZXModCwgMCwgcywgb2ZzLCB0Lmxlbmd0aCk7XG4gIHJldHVybiAwO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKXtcbiAgaWYgKHR5cGVvZiBhID09PSBcIm51bWJlclwiKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhhKSkgcmV0dXJuIDI1MjsgLy8gc3RyaW5nX3RhZ1xuICBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhhKSkgcmV0dXJuIDEyNTI7IC8vIG9jYW1sIHN0cmluZyAoaWYgZGlmZmVyZW50IGZyb20gYnl0ZXMpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBBcnJheSAmJiBhWzBdID09PSAoYVswXT4+PjApICYmIGFbMF0gPD0gMjU1KSB7XG4gICAgLy8gTG9vayBsaWtlIGFuIG9jYW1sIGJsb2NrXG4gICAgdmFyIHRhZyA9IGFbMF0gfCAwO1xuICAgIC8vIGlnbm9yZSBkb3VibGVfYXJyYXlfdGFnIGJlY2F1c2Ugd2UgY2Fubm90IGFjY3VyYXRlbHkgc2V0XG4gICAgLy8gdGhpcyB0YWcgd2hlbiB3ZSBjcmVhdGUgYW4gYXJyYXkgb2YgZmxvYXQuXG4gICAgcmV0dXJuICh0YWcgPT0gMjU0KT8wOnRhZ1xuICB9XG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBTdHJpbmcpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN0cmluZ1wiKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE51bWJlcikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGEgJiYgYS5jYW1sX2N1c3RvbSkgcmV0dXJuIDEyNTU7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmIChhICYmIGEuY29tcGFyZSkgcmV0dXJuIDEyNTY7IC8vIGxpa2UgY3VzdG9tX3RhZyAoMjU1KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcImZ1bmN0aW9uXCIpIHJldHVybiAxMjQ3OyAvLyBsaWtlIGNsb3N1cmVfdGFnICgyNDcpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3ltYm9sXCIpIHJldHVybiAxMjUxO1xuICByZXR1cm4gMTAwMTsgLy9vdXRfb2ZfaGVhcF90YWdcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2N1c3RvbV9vcHNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKXtcbiAgcmV0dXJuIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0uY29tcGFyZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShudW0sIGN1c3RvbSwgc3dhcCwgdG90YWwpIHtcbiAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oY3VzdG9tKTtcbiAgaWYoY29tcCkge1xuICAgIHZhciB4ID0gKHN3YXAgPiAwKT9jb21wKGN1c3RvbSxudW0sdG90YWwpOmNvbXAobnVtLGN1c3RvbSx0b3RhbCk7XG4gICAgaWYodG90YWwgJiYgeCAhPSB4KSByZXR1cm4gc3dhcDsgLy8gdG90YWwgJiYgbmFuXG4gICAgaWYoK3ggIT0gK3gpIHJldHVybiAreDsgLy8gbmFuXG4gICAgaWYoKHggfCAwKSAhPSAwKSByZXR1cm4gKHggfCAwKTsgLy8gIW5hblxuICB9XG4gIHJldHVybiBzd2FwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWwgKGNvbnN0LCBjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ludF9jb21wYXJlLCBjYW1sX3N0cmluZ19jb21wYXJlLCBjYW1sX2J5dGVzX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tLCBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHRhZ19hKSkge1xuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGNvbnRpbnVhdGlvbiB2YWx1ZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEZvcm1hdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2Zvcm1hdFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2Zvcm1hdCAoZm10KSB7XG4gIGZtdCA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KTtcbiAgdmFyIGxlbiA9IGZtdC5sZW5ndGg7XG4gIGlmIChsZW4gPiAzMSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZm9ybWF0X2ludDogZm9ybWF0IHRvbyBsb25nXCIpO1xuICB2YXIgZiA9XG4gICAgICB7IGp1c3RpZnk6JysnLCBzaWduc3R5bGU6Jy0nLCBmaWxsZXI6JyAnLCBhbHRlcm5hdGU6ZmFsc2UsXG4gICAgICAgIGJhc2U6MCwgc2lnbmVkY29udjpmYWxzZSwgd2lkdGg6MCwgdXBwZXJjYXNlOmZhbHNlLFxuICAgICAgICBzaWduOjEsIHByZWM6LTEsIGNvbnY6J2YnIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgYyA9IGZtdC5jaGFyQXQoaSk7XG4gICAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAnLSc6XG4gICAgICBmLmp1c3RpZnkgPSAnLSc7IGJyZWFrO1xuICAgIGNhc2UgJysnOiBjYXNlICcgJzpcbiAgICAgIGYuc2lnbnN0eWxlID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnMCc6XG4gICAgICBmLmZpbGxlciA9ICcwJzsgYnJlYWs7XG4gICAgY2FzZSAnIyc6XG4gICAgICBmLmFsdGVybmF0ZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOiBjYXNlICc1JzpcbiAgICBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzpcbiAgICAgIGYud2lkdGggPSAwO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLndpZHRoID0gZi53aWR0aCAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgICBicmVhaztcbiAgICBjYXNlICcuJzpcbiAgICAgIGYucHJlYyA9IDA7XG4gICAgICBpKys7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYucHJlYyA9IGYucHJlYyAqIDEwICsgYzsgaSsrXG4gICAgICB9XG4gICAgICBpLS07XG4gICAgY2FzZSAnZCc6IGNhc2UgJ2knOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlICd1JzpcbiAgICAgIGYuYmFzZSA9IDEwOyBicmVhaztcbiAgICBjYXNlICd4JzpcbiAgICAgIGYuYmFzZSA9IDE2OyBicmVhaztcbiAgICBjYXNlICdYJzpcbiAgICAgIGYuYmFzZSA9IDE2OyBmLnVwcGVyY2FzZSA9IHRydWU7IGJyZWFrO1xuICAgIGNhc2UgJ28nOlxuICAgICAgZi5iYXNlID0gODsgYnJlYWs7XG4gICAgY2FzZSAnZSc6IGNhc2UgJ2YnOiBjYXNlICdnJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYuY29udiA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJ0UnOiBjYXNlICdGJzogY2FzZSAnRyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLnVwcGVyY2FzZSA9IHRydWU7XG4gICAgICBmLmNvbnYgPSBjLnRvTG93ZXJDYXNlICgpOyBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcmF3YnVmZmVyKSB7XG4gIGlmIChmLnVwcGVyY2FzZSkgcmF3YnVmZmVyID0gcmF3YnVmZmVyLnRvVXBwZXJDYXNlKCk7XG4gIHZhciBsZW4gPSByYXdidWZmZXIubGVuZ3RoO1xuICAvKiBBZGp1c3QgbGVuIHRvIHJlZmxlY3QgYWRkaXRpb25hbCBjaGFycyAoc2lnbiwgZXRjKSAqL1xuICBpZiAoZi5zaWduZWRjb252ICYmIChmLnNpZ24gPCAwIHx8IGYuc2lnbnN0eWxlICE9ICctJykpIGxlbisrO1xuICBpZiAoZi5hbHRlcm5hdGUpIHtcbiAgICBpZiAoZi5iYXNlID09IDgpIGxlbiArPSAxO1xuICAgIGlmIChmLmJhc2UgPT0gMTYpIGxlbiArPSAyO1xuICB9XG4gIC8qIERvIHRoZSBmb3JtYXR0aW5nICovXG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnICcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgaWYgKGYuc2lnbmVkY29udikge1xuICAgIGlmIChmLnNpZ24gPCAwKSBidWZmZXIgKz0gJy0nO1xuICAgIGVsc2UgaWYgKGYuc2lnbnN0eWxlICE9ICctJykgYnVmZmVyICs9IGYuc2lnbnN0eWxlO1xuICB9XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gOCkgYnVmZmVyICs9ICcwJztcbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSAxNikgYnVmZmVyICs9IGYudXBwZXJjYXNlP1wiMFhcIjpcIjB4XCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcwJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJzAnO1xuICBidWZmZXIgKz0gcmF3YnVmZmVyO1xuICBpZiAoZi5qdXN0aWZ5ID09ICctJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhidWZmZXIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMubm9kZSAhPT0gJ3VuZGVmaW5lZCcpXG59XG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gZmFsc2Vcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sTm9kZUZkLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNGaWxlKCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLCBtb2RlLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ta2RpclN5bmModGhpcy5ubShuYW1lKSx7bW9kZTptb2RlfSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ybWRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJtZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRkaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMucmVhZGRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRGlyZWN0b3J5KCk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBiID0gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgICB0aGlzLmZzLnVubGlua1N5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIGI7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIGNvbnN0cyA9IHJlcXVpcmUoJ2NvbnN0YW50cycpO1xuICB2YXIgcmVzID0gMDtcbiAgZm9yKHZhciBrZXkgaW4gZil7XG4gICAgc3dpdGNoKGtleSl7XG4gICAgY2FzZSBcInJkb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19SRE9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJ3cm9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fV1JPTkxZOyBicmVhaztcbiAgICBjYXNlIFwiYXBwZW5kXCIgIDpcbiAgICAgIHJlcyB8PSBjb25zdHMuT19XUk9OTFkgfCBjb25zdHMuT19BUFBFTkQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiY3JlYXRlXCIgICA6IHJlcyB8PSBjb25zdHMuT19DUkVBVDsgICAgYnJlYWs7XG4gICAgY2FzZSBcInRydW5jYXRlXCIgOiByZXMgfD0gY29uc3RzLk9fVFJVTkM7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJleGNsXCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX0VYQ0w7ICAgICBicmVhaztcbiAgICBjYXNlIFwiYmluYXJ5XCIgICA6IHJlcyB8PSBjb25zdHMuT19CSU5BUlk7ICAgYnJlYWs7XG4gICAgY2FzZSBcInRleHRcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fVEVYVDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJub25ibG9ja1wiIDogcmVzIHw9IGNvbnN0cy5PX05PTkJMT0NLOyBicmVhaztcbiAgICB9XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgZmQgPSB0aGlzLmZzLm9wZW5TeW5jKHRoaXMubm0obmFtZSksIHJlcyk7XG4gICAgdmFyIGlzQ2hhcmFjdGVyRGV2aWNlID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNDaGFyYWN0ZXJEZXZpY2UoKTtcbiAgICBmLmlzQ2hhcmFjdGVyRGV2aWNlID0gaXNDaGFyYWN0ZXJEZXZpY2U7XG4gICAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZW5hbWUgPSBmdW5jdGlvbihvLCBuLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZW5hbWVTeW5jKHRoaXMubm0obyksIHRoaXMubm0obikpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5sc3RhdCA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIganNfc3RhdHMgPSB0aGlzLmZzLmxzdGF0U3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5zdGF0c19mcm9tX2pzKGpzX3N0YXRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zeW1saW5rID0gZnVuY3Rpb24odG9fZGlyLCB0YXJnZXQsIHBhdGgsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnN5bWxpbmtTeW5jKHRoaXMubm0odGFyZ2V0KSwgdGhpcy5ubShwYXRoKSwgdG9fZGlyID8gJ2RpcicgOiAnZmlsZScpO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJlYWRsaW5rID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBsaW5rID0gdGhpcy5mcy5yZWFkbGlua1N5bmModGhpcy5ubShuYW1lKSwgJ3V0ZjgnKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobGluayk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5vcGVuZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yYWlzZV9ub2RlanNfZXJyb3IgPSBmdW5jdGlvbihlcnIsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKFwiVW5peC5Vbml4X2Vycm9yXCIpO1xuICBpZiAocmFpc2VfdW5peCAmJiB1bml4X2Vycm9yKSB7XG4gICAgdmFyIGFyZ3MgPSBtYWtlX3VuaXhfZXJyX2FyZ3MoZXJyLmNvZGUsIGVyci5zeXNjYWxsLCBlcnIucGF0aCwgZXJyLmVycm5vKTtcbiAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBhcmdzKTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3RhdHNfZnJvbV9qcyA9IGZ1bmN0aW9uKGpzX3N0YXRzKSB7XG4gIC8qID09PVVuaXguZmlsZV9raW5kPT09XG4gICAqIHR5cGUgZmlsZV9raW5kID1cbiAgICogICAgIFNfUkVHICAgICAgICAgICAgICAgICAgICAgICAoKiogUmVndWxhciBmaWxlICopXG4gICAqICAgfCBTX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIERpcmVjdG9yeSAqKVxuICAgKiAgIHwgU19DSFIgICAgICAgICAgICAgICAgICAgICAgICgqKiBDaGFyYWN0ZXIgZGV2aWNlICopXG4gICAqICAgfCBTX0JMSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIEJsb2NrIGRldmljZSAqKVxuICAgKiAgIHwgU19MTksgICAgICAgICAgICAgICAgICAgICAgICgqKiBTeW1ib2xpYyBsaW5rICopXG4gICAqICAgfCBTX0ZJRk8gICAgICAgICAgICAgICAgICAgICAgKCoqIE5hbWVkIHBpcGUgKilcbiAgICogICB8IFNfU09DSyAgICAgICAgICAgICAgICAgICAgICAoKiogU29ja2V0ICopXG4gICAqL1xuICB2YXIgZmlsZV9raW5kO1xuICBpZiAoanNfc3RhdHMuaXNGaWxlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAwO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICBmaWxlX2tpbmQgPSAxO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQ2hhcmFjdGVyRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAyO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzQmxvY2tEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDM7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTeW1ib2xpY0xpbmsoKSkge1xuICAgIGZpbGVfa2luZCA9IDQ7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNGSUZPKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA1O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU29ja2V0KCkpIHtcbiAgICBmaWxlX2tpbmQgPSA2O1xuICB9XG4gIC8qID09PVVuaXguc3RhdHM9PT1cbiAgICogdHlwZSBzdGF0cyA9XG4gICAqICB7IHN0X2RldiA6IGludDsgICAgICAgICAgICAgICAoKiogRGV2aWNlIG51bWJlciAqKVxuICAgKiAgICBzdF9pbm8gOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIElub2RlIG51bWJlciAqKVxuICAgKiAgICBzdF9raW5kIDogZmlsZV9raW5kOyAgICAgICAgKCoqIEtpbmQgb2YgdGhlIGZpbGUgKilcbiAgICogICAgc3RfcGVybSA6IGZpbGVfcGVybTsgICAgICAgICgqKiBBY2Nlc3MgcmlnaHRzICopXG4gICAqICAgIHN0X25saW5rIDogaW50OyAgICAgICAgICAgICAoKiogTnVtYmVyIG9mIGxpbmtzICopXG4gICAqICAgIHN0X3VpZCA6IGludDsgICAgICAgICAgICAgICAoKiogVXNlciBpZCBvZiB0aGUgb3duZXIgKilcbiAgICogICAgc3RfZ2lkIDogaW50OyAgICAgICAgICAgICAgICgqKiBHcm91cCBJRCBvZiB0aGUgZmlsZSdzIGdyb3VwICopXG4gICAqICAgIHN0X3JkZXYgOiBpbnQ7ICAgICAgICAgICAgICAoKiogRGV2aWNlIElEIChpZiBzcGVjaWFsIGZpbGUpICopXG4gICAqICAgIHN0X3NpemUgOiBpbnQ7ICAgICAgICAgICAgICAoKiogU2l6ZSBpbiBieXRlcyAqKVxuICAgKiAgICBzdF9hdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgYWNjZXNzIHRpbWUgKilcbiAgICogICAgc3RfbXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lICopXG4gICAqICAgIHN0X2N0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBzdGF0dXMgY2hhbmdlIHRpbWUgKilcbiAgICogIH1cbiAgICovXG4gIHJldHVybiBCTE9DSyhcbiAgICAwLFxuICAgIGpzX3N0YXRzLmRldixcbiAgICBqc19zdGF0cy5pbm8sXG4gICAgZmlsZV9raW5kLFxuICAgIGpzX3N0YXRzLm1vZGUsXG4gICAganNfc3RhdHMubmxpbmssXG4gICAganNfc3RhdHMudWlkLFxuICAgIGpzX3N0YXRzLmdpZCxcbiAgICBqc19zdGF0cy5yZGV2LFxuICAgIGpzX3N0YXRzLnNpemUsXG4gICAganNfc3RhdHMuYXRpbWVNcyxcbiAgICBqc19zdGF0cy5tdGltZU1zLFxuICAgIGpzX3N0YXRzLmN0aW1lTXNcbiAgKTtcbn1cblxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVEZXZpY2Vcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZURldmljZSgpIHtcbn1cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vUmVxdWlyZXM6IE1sRmlsZSwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcsIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfc2V0LCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxOb2RlRmQoZmQsIGZsYWdzKXtcbiAgdGhpcy5mcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gIHRoaXMuZmQgPSBmZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxOb2RlRmQucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sTm9kZUZkLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZUZkO1xuXG5NbE5vZGVGZC5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB0cnkge1xuICAgIHRoaXMuZnMuZnRydW5jYXRlU3luYyh0aGlzLmZkLGxlbnwwKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB0aGlzLmZzLndyaXRlU3luYyh0aGlzLmZkLCBidWYsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGEsYnVmX29mZnNldCxsZW4pe1xuICB0cnkge1xuICAgIGlmKHRoaXMuZmxhZ3MuaXNDaGFyYWN0ZXJEZXZpY2UpXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuKTtcbiAgICBlbHNlXG4gICAgICB2YXIgcmVhZCA9IHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYSwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICAgIHJldHVybiByZWFkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5jbG9zZVN5bmModGhpcy5mZCk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRmRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIE1sTm9kZUZkKCl7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9SZXF1aXJlczogTWxOb2RlRmRcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKXtcbiAgaWYoZmxhZ3MubmFtZSkge1xuICAgIHRyeSB7XG4gICAgICB2YXIgZnMgPSByZXF1aXJlKFwiZnNcIik7XG4gICAgICB2YXIgZmQyID0gZnMub3BlblN5bmMoZmxhZ3MubmFtZSwgXCJyc1wiKTtcbiAgICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQyLCBmbGFncyk7XG4gICAgfSBjYXRjaChlKSB7ICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBNbE5vZGVGZChmZCwgZmxhZ3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIHJldHVybiBudWxsO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBjYXNlIFwiXCI6IGJyZWFrO1xuICAgIGRlZmF1bHQ6IG5jb21wLnB1c2goY29tcFtpXSk7YnJlYWtcbiAgICB9XG4gIH1cbiAgbmNvbXAudW5zaGlmdChjb21wMFswXSk7XG4gIG5jb21wLm9yaWcgPSBuYW1lO1xuICByZXR1cm4gbmNvbXA7XG59XG5cbi8vUHJvdmlkZXM6anNvb19tb3VudF9wb2ludFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBNbE5vZGVEZXZpY2UsIGNhbWxfcm9vdCwgZnNfbm9kZV9zdXBwb3J0ZWRcbnZhciBqc29vX21vdW50X3BvaW50ID0gW11cbmlmIChmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbE5vZGVEZXZpY2UoY2FtbF9yb290KX0pO1xufSBlbHNlIHtcbiAganNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOmNhbWxfcm9vdCxkZXZpY2U6bmV3IE1sRmFrZURldmljZShjYW1sX3Jvb3QpfSk7XG59XG5qc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6XCIvc3RhdGljL1wiLCBkZXZpY2U6bmV3IE1sRmFrZURldmljZShcIi9zdGF0aWMvXCIpfSk7XG5cbi8vUHJvdmlkZXM6Y2FtbF9saXN0X21vdW50X3BvaW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xpc3RfbW91bnRfcG9pbnQoKXtcbiAgdmFyIHByZXYgPSAwXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKXtcbiAgICB2YXIgb2xkID0gcHJldjtcbiAgICBwcmV2ID0gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoanNvb19tb3VudF9wb2ludFtpXS5wYXRoKSwgb2xkXVxuICB9XG4gIHJldHVybiBwcmV2O1xufVxuXG4vL1Byb3ZpZGVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dldF9yb290LCBNbE5vZGVEZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG0gPSBqc29vX21vdW50X3BvaW50W2ldO1xuICAgIGlmKG5hbWVfc2xhc2guc2VhcmNoKG0ucGF0aCkgPT0gMFxuICAgICAgICYmICghcmVzIHx8IHJlcy5wYXRoLmxlbmd0aCA8IG0ucGF0aC5sZW5ndGgpKVxuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgfVxuICBpZiggIXJlcyAmJiBmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHJvb3QgPSBjYW1sX2dldF9yb290KG5hbWUpO1xuICAgIGlmIChyb290ICYmIHJvb3QubWF0Y2goL15bYS16QS1aXTpcXC8kLykpe1xuICAgICAgdmFyIG0gPSB7cGF0aDpyb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKHJvb3QpfTtcbiAgICAgIGpzb29fbW91bnRfcG9pbnQucHVzaChtKTtcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gICAgfVxuICB9XG4gIGlmKCByZXMgKSByZXR1cm4gcmVzO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcihcIm5vIGRldmljZSBmb3VuZCBmb3IgXCIgKyBuYW1lX3NsYXNoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb3VudF9hdXRvbG9hZFxuLy9SZXF1aXJlczogTWxGYWtlRGV2aWNlLCBjYW1sX21ha2VfcGF0aCwganNvb19tb3VudF9wb2ludCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF9tb3VudF9hdXRvbG9hZChuYW1lLGYpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpuYW1lLGRldmljZTpuZXcgTWxGYWtlRGV2aWNlKG5hbWUsZil9KVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bm1vdW50XG4vL1JlcXVpcmVzOiBqc29vX21vdW50X3BvaW50LCBjYW1sX21ha2VfcGF0aCwgY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF91bm1vdW50KG5hbWUpe1xuICB2YXIgcGF0aCA9IGNhbWxfbWFrZV9wYXRoKG5hbWUpO1xuICB2YXIgbmFtZSA9IGNhbWxfdHJhaWxpbmdfc2xhc2gocGF0aC5qb2luKFwiL1wiKSk7XG4gIHZhciBpZHggPSAtMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGpzb29fbW91bnRfcG9pbnQubGVuZ3RoOyBpKyspXG4gICAgaWYoanNvb19tb3VudF9wb2ludFtpXS5wYXRoID09IG5hbWUpIGlkeCA9IGk7XG4gIGlmKGlkeCA+IC0xKSBqc29vX21vdW50X3BvaW50LnNwbGljZShpZHgsMSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldGN3ZFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpciwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0Y3dkKCkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX2N1cnJlbnRfZGlyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2hkaXJcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF90cmFpbGluZ19zbGFzaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfY2hkaXIoZGlyKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZGlyKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICBpZihyb290LnJlc3QpIGNhbWxfY3VycmVudF9kaXIgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHJvb3QucGF0aCArIHJvb3QucmVzdCk7XG4gICAgZWxzZSBjYW1sX2N1cnJlbnRfZGlyID0gcm9vdC5wYXRoO1xuICAgIHJldHVybiAwO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZGlyKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfYV9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9hX2RpcihuYW1lKXtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCxwZXJtKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm90X2FfZGlyXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGUodmZkLCBraW5kLCBsYXlvdXQsIHNoYXJlZCwgZGltcywgcG9zKSB7XG4gIC8vIHZhciBkYXRhID0gY2FtbF9zeXNfZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LHtyZG9ubHk6MX0pO1xuICAgIHZhciBsZW4gID0gZmlsZS5sZW5ndGgoKTtcbiAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuKTtcbiAgICBmaWxlLnJlYWQoMCxidWYsMCxsZW4pO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShidWYpXG4gIH1cbiAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG59XG4iLCIvL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9nZXR0aW1lb2ZkYXlcbi8vQWxpYXM6IHVuaXhfdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X3RpbWUgKCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihjYW1sX3VuaXhfZ2V0dGltZW9mZGF5ICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2dtdGltZVxuLy9BbGlhczogdW5peF9nbXRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X2xvY2FsdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgdmFyIGphbiA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIHZhciBqdWwgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDYsIDEpO1xuICB2YXIgc3RkVGltZXpvbmVPZmZzZXQgPSBNYXRoLm1heChqYW4uZ2V0VGltZXpvbmVPZmZzZXQoKSwganVsLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRTZWNvbmRzKCksIGQuZ2V0TWludXRlcygpLCBkLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldERhdGUoKSwgZC5nZXRNb250aCgpLCBkLmdldEZ1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgKGQuZ2V0VGltZXpvbmVPZmZzZXQoKSA8IHN0ZFRpbWV6b25lT2Zmc2V0KSB8IDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8pXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ta3RpbWVcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sb2NhbHRpbWVcbi8vQWxpYXM6IHVuaXhfbWt0aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IGNhbWxfdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLHQsdG0yKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGFydHVwIGNvbnN0XG4vL0FsaWFzOiB3aW5fc3RhcnR1cFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXJ0dXAoKSB7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfY2xlYW51cCBjb25zdFxuLy9BbGlhczogd2luX2NsZWFudXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9jbGVhbnVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCBjb25zdFxuLy9BbGlhczogd2luX2hhbmRsZV9mZFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbGVkZXNjcl9vZl9mZCh4KSB7cmV0dXJuIHg7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaXNhdHR5XG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuLy9BbGlhczogdW5peF9pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciB0dHkgPSByZXF1aXJlKCd0dHknKTtcbiAgICByZXR1cm4gdHR5LmlzYXR0eShmaWxlRGVzY3JpcHRvcik/MTowO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9BbGlhczogdW5peF9pc2F0dHlcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9pc2F0dHkoZmlsZURlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG1ha2VfdW5peF9lcnJfYXJnc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbnZhciB1bml4X2Vycm9yID0gW1xuICAvKiA9PT1Vbml4LmVycm9yPT09XG4gICAqXG4gICAqIFRoaXMgYXJyYXkgaXMgaW4gb3JkZXIgb2YgdGhlIHZhcmlhbnQgaW4gT0NhbWxcbiAgICovXG4gIFwiRTJCSUdcIiwgXCJFQUNDRVNcIiwgXCJFQUdBSU5cIiwgXCJFQkFERlwiLCBcIkVCVVNZXCIsIFwiRUNISUxEXCIsIFwiRURFQURMS1wiLCBcIkVET01cIixcbiAgXCJFRVhJU1RcIiwgXCJFRkFVTFRcIiwgXCJFRkJJR1wiLCBcIkVJTlRSXCIsIFwiRUlOVkFMXCIsIFwiRUlPXCIsIFwiRUlTRElSXCIsIFwiRU1GSUxFXCIsXG4gIFwiRU1MSU5LXCIsIFwiRU5BTUVUT09MT05HXCIsIFwiRU5GSUxFXCIsIFwiRU5PREVWXCIsIFwiRU5PRU5UXCIsIFwiRU5PRVhFQ1wiLCBcIkVOT0xDS1wiLFxuICBcIkVOT01FTVwiLCBcIkVOT1NQQ1wiLCBcIkVOT1NZU1wiLCBcIkVOT1RESVJcIiwgXCJFTk9URU1QVFlcIiwgXCJFTk9UVFlcIiwgXCJFTlhJT1wiLFxuICBcIkVQRVJNXCIsIFwiRVBJUEVcIiwgXCJFUkFOR0VcIiwgXCJFUk9GU1wiLCBcIkVTUElQRVwiLCBcIkVTUkNIXCIsIFwiRVhERVZcIiwgXCJFV09VTERCTE9DS1wiLFxuICBcIkVJTlBST0dSRVNTXCIsIFwiRUFMUkVBRFlcIiwgXCJFTk9UU09DS1wiLCBcIkVERVNUQUREUlJFUVwiLCBcIkVNU0dTSVpFXCIsXG4gIFwiRVBST1RPVFlQRVwiLCBcIkVOT1BST1RPT1BUXCIsIFwiRVBST1RPTk9TVVBQT1JUXCIsIFwiRVNPQ0tUTk9TVVBQT1JUXCIsXG4gIFwiRU9QTk9UU1VQUFwiLCBcIkVQRk5PU1VQUE9SVFwiLCBcIkVBRk5PU1VQUE9SVFwiLCBcIkVBRERSSU5VU0VcIiwgXCJFQUREUk5PVEFWQUlMXCIsXG4gIFwiRU5FVERPV05cIiwgXCJFTkVUVU5SRUFDSFwiLCBcIkVORVRSRVNFVFwiLCBcIkVDT05OQUJPUlRFRFwiLCBcIkVDT05OUkVTRVRcIiwgXCJFTk9CVUZTXCIsXG4gIFwiRUlTQ09OTlwiLCBcIkVOT1RDT05OXCIsIFwiRVNIVVRET1dOXCIsIFwiRVRPT01BTllSRUZTXCIsIFwiRVRJTUVET1VUXCIsIFwiRUNPTk5SRUZVU0VEXCIsXG4gIFwiRUhPU1RET1dOXCIsIFwiRUhPU1RVTlJFQUNIXCIsIFwiRUxPT1BcIiwgXCJFT1ZFUkZMT1dcIlxuXTtcbmZ1bmN0aW9uIG1ha2VfdW5peF9lcnJfYXJncyhjb2RlLCBzeXNjYWxsLCBwYXRoLCBlcnJubykge1xuICB2YXIgdmFyaWFudCA9IHVuaXhfZXJyb3IuaW5kZXhPZihjb2RlKTtcbiAgaWYgKHZhcmlhbnQgPCAwKSB7XG4gICAgLy8gRGVmYXVsdCBpZiB1bmRlZmluZWRcbiAgICBpZiAoZXJybm8gPT0gbnVsbCkge1xuICAgICAgZXJybm8gPSAtOTk5OVxuICAgIH1cbiAgICAvLyBJZiBub25lIG9mIHRoZSBhYm92ZSB2YXJpYW50cywgZmFsbGJhY2sgdG8gRVVOS05PV05FUlIoaW50KVxuICAgIHZhcmlhbnQgPSBCTE9DSygwLCBlcnJubyk7XG4gIH1cbiAgdmFyIGFyZ3MgPSBbXG4gICAgdmFyaWFudCxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzeXNjYWxsIHx8IFwiXCIpLFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGggfHwgXCJcIilcbiAgXTtcbiAgcmV0dXJuIGFyZ3M7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uuc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9zdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X3N0YXRfNjRcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X2xzdGF0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmxzdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9sc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5sc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogY2FtbF91bml4X2xzdGF0LCBjYW1sX2ludDY0X29mX2ludDMyXG4vL0FsaWFzOiB1bml4X2xzdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfbHN0YXRfNjQobmFtZSkge1xuICB2YXIgciA9IGNhbWxfdW5peF9sc3RhdChuYW1lKTtcbiAgcls5XSA9IGNhbWxfaW50NjRfb2ZfaW50MzIocls5XSk7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X21rZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfbWtkaXIobmFtZSwgcGVybSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm1rZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcm1kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9ybWRpcihuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2Uucm1kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N5bWxpbms6IGNhbm5vdCBzeW1saW5rIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1zXCIpO1xuICBpZiAoIXNyY19yb290LmRldmljZS5zeW1saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNyY19yb290LmRldmljZS5zeW1saW5rKHRvX2Rpciwgc3JjX3Jvb3QucmVzdCwgZHN0X3Jvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9yZWFkbGlua1xuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRsaW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5yZWFkbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfcmVhZGxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UucmVhZGxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF91bmxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfdW5saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXR1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHVpZFxuZnVuY3Rpb24gY2FtbF91bml4X2dldHVpZCh1bml0KSB7XG4gIGlmKGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKXtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCgpO1xuICB9XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vQWxpYXM6IHVuaXhfZ2V0cHd1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXRwd3VpZCh1bml0KSB7XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9oYXNfc3ltbGlua1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaGFzX3N5bWxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9oYXNfc3ltbGluayh1bml0KSB7XG4gIHJldHVybiBmc19ub2RlX3N1cHBvcnRlZCgpPzE6MFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfb3BlbmRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfb3BlbmRpclxuZnVuY3Rpb24gY2FtbF91bml4X29wZW5kaXIocGF0aCkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHBhdGgpO1xuICBpZiAoIXJvb3QuZGV2aWNlLm9wZW5kaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X29wZW5kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICB2YXIgZGlyX2hhbmRsZSA9IHJvb3QuZGV2aWNlLm9wZW5kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xuICByZXR1cm4geyBwb2ludGVyIDogZGlyX2hhbmRsZSwgcGF0aDogcGF0aCB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9yZWFkZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKSB7XG4gIHZhciBlbnRyeTtcbiAgdHJ5IHtcbiAgICAgIGVudHJ5ID0gZGlyX2hhbmRsZS5wb2ludGVyLnJlYWRTeW5jKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcInJlYWRkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbiAgaWYgKGVudHJ5ID09PSBudWxsKSB7XG4gICAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZW50cnkubmFtZSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlXG4vL0FsaWFzOiB1bml4X2Nsb3NlZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSkge1xuICB0cnkge1xuICAgICAgZGlyX2hhbmRsZS5wb2ludGVyLmNsb3NlU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCBkaXJfaGFuZGxlLnBhdGgpKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmV3aW5kZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfY2xvc2VkaXIsIGNhbWxfdW5peF9vcGVuZGlyXG4vL0FsaWFzOiB1bml4X3Jld2luZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3Jld2luZGRpcihkaXJfaGFuZGxlKSB7XG4gIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbiAgdmFyIG5ld19kaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIoZGlyX2hhbmRsZS5wYXRoKTtcbiAgZGlyX2hhbmRsZS5wb2ludGVyID0gbmV3X2Rpcl9oYW5kbGUucG9pbnRlcjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kZmlyc3Rcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91bml4X29wZW5kaXIsIGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZGZpcnN0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGZpcnN0KHBhdGgpIHtcbiAgLy8gVGhlIFdpbmRvd3MgY29kZSBhZGRzIHRoaXMgZ2xvYiB0byB0aGUgcGF0aCwgc28gd2UgbmVlZCB0byByZW1vdmUgaXRcbiAgdmFyIHBhdGhfanMgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwYXRoKTtcbiAgcGF0aF9qcyA9IHBhdGhfanMucmVwbGFjZSgvKF58W1xcXFxcXC9dKVxcKlxcLlxcKiQvLCBcIlwiKTtcbiAgcGF0aCA9IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHBhdGhfanMpO1xuICAvLyAqLiogaXMgbm93IHN0cmlwcGVkXG4gIHZhciBkaXJfaGFuZGxlID0gY2FtbF91bml4X29wZW5kaXIocGF0aCk7XG4gIHZhciBmaXJzdF9lbnRyeSA9IGNhbWxfdW5peF9yZWFkZGlyKGRpcl9oYW5kbGUpO1xuICAvLyBUaGUgV2luZG93cyBiaW5kaW5ncyB0eXBlIGRpcl9oYW5kbGUgYXMgYW4gYGludGAgYnV0IGl0J3Mgbm90IGluIEpTXG4gIHJldHVybiBbMCwgZmlyc3RfZW50cnksIGRpcl9oYW5kbGVdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZG5leHRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9yZWFkZGlyXG4vL0FsaWFzOiB3aW5fZmluZG5leHRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maW5kbmV4dChkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRjbG9zZVxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyXG4vL0FsaWFzOiB3aW5fZmluZGNsb3NlXG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZGNsb3NlKGRpcl9oYW5kbGUpIHtcbiAgcmV0dXJuIGNhbWxfdW5peF9jbG9zZWRpcihkaXJfaGFuZGxlKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyBjb25zdFxuLy9BbGlhczogdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3VuaXhfaW5ldF9hZGRyX29mX3N0cmluZyAoKSB7cmV0dXJuIDA7fVxuXG5cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZURldmljZVxuLy9SZXF1aXJlczogTWxGYWtlRmlsZSwgTWxGYWtlRmQsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3NcbmZ1bmN0aW9uIE1sRmFrZURldmljZSAocm9vdCwgZikge1xuICB0aGlzLmNvbnRlbnQ9e307XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIHRoaXMubG9va3VwRnVuID0gZjtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNyZWF0ZV9kaXJfaWZfbmVlZGVkID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY29tcCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICB2YXIgcmVzID0gXCJcIjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXAubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICByZXMgKz0gY29tcFtpXSArIFwiL1wiO1xuICAgIGlmKHRoaXMuY29udGVudFtyZXNdKSBjb250aW51ZTtcbiAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5zbGFzaCA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gL1xcLyQvLnRlc3QobmFtZSk/bmFtZToobmFtZSArIFwiL1wiKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgdGhpcy5jb250ZW50W25hbWVdPW5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHJlc1sxXSkpO1xuICAgIH1cbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gIGlmKG5hbWUgPT0gXCJcIikgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSkgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZmlsZSBleGlzdHNcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpICYmICF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIHJldHVybiAxXG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIDBcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsbW9kZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVFWElTVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IEZpbGUgZXhpc3RzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcGFyZW50ID0gL14oLiopXFwvW14vXSsvLmV4ZWMobmFtZSk7XG4gIHBhcmVudCA9IChwYXJlbnQgJiYgcGFyZW50WzFdKSB8fCAnJztcbiAgaWYoIXRoaXMuZXhpc3RzKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZCh0aGlzLnNsYXNoKG5hbWUpKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgaWYobi5tYXRjaChyKSkge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVEVNUFRZXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiOiBEaXJlY3Rvcnkgbm90IGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVfc2xhc2hdO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gIH1cbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgdmFyIHNlZW4gPSB7fVxuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0gJiYgIXNlZW5bbVsxXV0pIHtzZWVuW21bMV1dID0gdHJ1ZTsgYS5wdXNoKG1bMV0pfVxuICB9XG4gIHJldHVybiBhO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG5cbiAgdmFyIGEgPSB0aGlzLnJlYWRkaXIobmFtZSk7XG4gIHZhciBjID0gZmFsc2U7XG4gIHZhciBpID0gMDtcbiAgcmV0dXJuIHsgcmVhZFN5bmMgOiAoZnVuY3Rpb24gKCkge1xuICAgIGlmIChjKSB7XG4gICAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoaSA9PSBhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgdmFyIGVudHJ5ID0gYVtpXTtcbiAgICBpKys7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkgfVxuICB9KVxuICAgICwgY2xvc2VTeW5jOiAoZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGMpIHtcbiAgICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFQkFERlwiLCBcImNsb3NlZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IGNsb3NlZGlyIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYyA9IHRydWU7XG4gICAgICBhID0gW107XG4gICAgfSlcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKG5hbWUgPT0gXCJcIikgIHJldHVybiB0cnVlO1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBvayA9IHRoaXMuY29udGVudFtuYW1lXT90cnVlOmZhbHNlO1xuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICByZXR1cm4gb2s7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIHZhciBmaWxlO1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbiAgcmV0dXJuIG5ldyBNbEZha2VGZCh0aGlzLm5tKG5hbWUpLCBmaWxlLCBmKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBNbEZha2VGaWxlKGNvbnRlbnQpe1xuICB0aGlzLmRhdGEgPSBjb250ZW50O1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxGYWtlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VGaWxlXG5NbEZha2VGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHZhciBvbGQgPSB0aGlzLmRhdGE7XG4gIHRoaXMuZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgY2FtbF9ibGl0X2J5dGVzKG9sZCwgMCwgdGhpcy5kYXRhLCAwLCBsZW4pO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgodGhpcy5kYXRhKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIHZhciBuZXdfc3RyID0gY2FtbF9jcmVhdGVfYnl0ZXMob2Zmc2V0ICsgbGVuKTtcbiAgICB2YXIgb2xkX2RhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5kYXRhID0gbmV3X3N0cjtcbiAgICBjYW1sX2JsaXRfYnl0ZXMob2xkX2RhdGEsIDAsIHRoaXMuZGF0YSwgMCwgY2xlbik7XG4gIH1cbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgbGVuID0gY2xlbiAtIG9mZnNldDtcbiAgfVxuICBpZihsZW4pIHtcbiAgICB2YXIgZGF0YSA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbnwwKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXModGhpcy5kYXRhLCBvZmZzZXQsIGRhdGEsIDAsIGxlbik7XG4gICAgYnVmLnNldChjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGRhdGEpLCBwb3MpO1xuICB9XG4gIHJldHVybiBsZW5cbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGZF9vdXRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZF9vdXQoZmQsZmxhZ3MpIHtcbiAgTWxGYWtlRmlsZS5jYWxsKHRoaXMsIGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgdGhpcy5sb2cgPSAoZnVuY3Rpb24gKHMpIHsgcmV0dXJuIDAgfSk7XG4gIGlmKGZkID09IDEgJiYgdHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nO1xuICBlbHNlIGlmKGZkID09IDIgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5lcnJvcjtcbiAgZWxzZSBpZih0eXBlb2YgY29uc29sZS5sb2cgPT0gXCJmdW5jdGlvblwiKVxuICAgIHRoaXMubG9nID0gY29uc29sZS5sb2dcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHsgcmV0dXJuIDAgfVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5sb2cpIHtcbiAgICBpZihsZW4gPiAwXG4gICAgICAgJiYgcG9zID49IDBcbiAgICAgICAmJiBwb3MrbGVuIDw9IGJ1Zi5sZW5ndGhcbiAgICAgICAmJiBidWZbcG9zK2xlbi0xXSA9PSAxMClcbiAgICAgIGxlbiAtLTtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICB2YXIgc3JjID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9hcnJheShidWYpLCBwb3MsIHNyYywgMCwgbGVuKTtcbiAgICB0aGlzLmxvZyhzcmMudG9VdGYxNigpKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgYWxyZWFkeSBjbG9zZWRcIik7XG59XG5NbEZha2VGZF9vdXQucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbiAob2Zmc2V0LCBidWYsIHBvcywgbGVuKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMuZmQgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBpcyB3cml0ZSBvbmx5XCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sb2cgPSB1bmRlZmluZWQ7XG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBNbEZha2VGZChuYW1lLCBmaWxlLGZsYWdzKSB7XG4gIHRoaXMuZmlsZSA9IGZpbGU7XG4gIHRoaXMubmFtZSA9IG5hbWU7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cblxuTWxGYWtlRmQucHJvdG90eXBlLmVycl9jbG9zZWQgPSBmdW5jdGlvbiAoKSB7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubmFtZSAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUubGVuZ3RoICgpXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKG9mZnNldCxidWYscG9zLGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUud3JpdGUob2Zmc2V0LGJ1Zixwb3MsbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBpZih0aGlzLmZpbGUpIHJldHVybiB0aGlzLmZpbGUucmVhZChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pXG4gIHRoaXMuZXJyX2Nsb3NlZCgpO1xufVxuTWxGYWtlRmQucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZpbGUgPSB1bmRlZmluZWQ7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2NoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX01ENUluaXQsIGNhbWxfTUQ1VXBkYXRlLCBjYW1sX01ENUZpbmFsXG5mdW5jdGlvbiBjYW1sX21kNV9jaGFuKGNoYW5pZCx0b3JlYWQpe1xuICB2YXIgY3R4ID0gY2FtbF9NRDVJbml0KCk7XG4gIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheSg0MDk2KTtcbiAgaWYodG9yZWFkIDwgMCl7XG4gICAgd2hpbGUodHJ1ZSl7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgaWYocmVhZCA9PSAwKSBicmVhaztcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSh0b3JlYWQgPiAwKSB7XG4gICAgICB2YXIgcmVhZCA9IGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLGJ1ZmZlciwwLCAodG9yZWFkID4gYnVmZmVyLmxlbmd0aCA/IGJ1ZmZlci5sZW5ndGggOiB0b3JlYWQpKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICAgICAgY2FtbF9NRDVVcGRhdGUoY3R4LGJ1ZmZlci5zdWJhcnJheSgwLCByZWFkKSwgcmVhZCk7XG4gICAgICB0b3JlYWQgLT0gcmVhZFxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoY2FtbF9NRDVGaW5hbChjdHgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9tZDVfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X3N0cmluZyhzLCBvZnMsIGxlbikge1xuICByZXR1cm4gY2FtbF9tZDVfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcocyksb2ZzLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG52YXIgY2FtbF9NRDVUcmFuc2Zvcm0gPSAoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQgKHgsIHkpIHsgcmV0dXJuICh4ICsgeSkgfCAwOyB9XG4gIGZ1bmN0aW9uIHh4KHEsYSxiLHgscyx0KSB7XG4gICAgYSA9IGFkZChhZGQoYSwgcSksIGFkZCh4LCB0KSk7XG4gICAgcmV0dXJuIGFkZCgoYSA8PCBzKSB8IChhID4+PiAoMzIgLSBzKSksIGIpO1xuICB9XG4gIGZ1bmN0aW9uIGZmKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBjKSB8ICgofmIpICYgZCksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGdnKGEsYixjLGQseCxzLHQpIHtcbiAgICByZXR1cm4geHgoKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xuICB9XG4gIGZ1bmN0aW9uIGhoKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGIgXiBjIF4gZCwgYSwgYiwgeCwgcywgdCk7IH1cbiAgZnVuY3Rpb24gaWkoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpOyB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICh3LCBidWZmZXIpIHtcbiAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMV0sIDEyLCAweEU4QzdCNzU2KTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNF0sIDcsIDB4RjU3QzBGQUYpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyA3XSwgMjIsIDB4RkQ0Njk1MDEpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbMTBdLCAxNywgMHhGRkZGNUJCMSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsxM10sIDEyLCAweEZEOTg3MTkzKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNSwgMHhGNjFFMjU2Mik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMF0sIDIwLCAweEU5QjZDN0FBKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNCwgMHhEOEExRTY4MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsxNF0sIDksIDB4QzMzNzA3RDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyWzEzXSwgNSwgMHhBOUUzRTkwNSk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlclsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlclsxMl0sIDIwLCAweDhEMkE0QzhBKTtcblxuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTFdLCAxNiwgMHg2RDlENjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgNF0sIDExLCAweDRCREVDRkE5KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDQsIDB4Mjg5QjdFQzYpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWyA2XSwgMjMsIDB4MDQ4ODFEMDUpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbMTVdLCAxNiwgMHgxRkEyN0NGOCk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWyA3XSwgMTAsIDB4NDMyQUZGOTcpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWzEyXSwgNiwgMHg2NTVCNTlDMyk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDFdLCAyMSwgMHg4NTg0NUREMSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsgNl0sIDE1LCAweEEzMDE0MzE0KTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzExXSwgMTAsIDB4QkQzQUYyMzUpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgd1sxXSA9IGFkZChiLCB3WzFdKTtcbiAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gIH19KSgpXG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1SW5pdFxuZnVuY3Rpb24gY2FtbF9NRDVJbml0KCkge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDY0KTtcbiAgdmFyIGIzMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xuICB2YXIgYjggPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICByZXR1cm4ge2xlbjowLFxuICAgICAgICAgIHc6bmV3IFVpbnQzMkFycmF5KFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XSksXG4gICAgICAgICAgYjMyOmIzMixcbiAgICAgICAgICBiODpiOH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9NRDVVcGRhdGVcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENVVwZGF0ZShjdHgsIGlucHV0LCBpbnB1dF9sZW4pe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIHZhciBpbnB1dF9wb3MgPSAwO1xuICBjdHgubGVuICs9IGlucHV0X2xlbjtcbiAgaWYoaW5fYnVmKXtcbiAgICB2YXIgbWlzc2luZyA9IDY0IC0gaW5fYnVmO1xuICAgIGlmKGlucHV0X2xlbiA8IG1pc3NpbmcpIHtcbiAgICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxpbnB1dF9sZW4pLGluX2J1Zik7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheSgwLG1pc3NpbmcpLGluX2J1Zik7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSBtaXNzaW5nO1xuICAgIGlucHV0X3BvcyArPSBtaXNzaW5nO1xuICB9XG4gIHdoaWxlKGlucHV0X2xlbiA+PSA2NCl7XG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgNjQpLCAwKTtcbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgaW5wdXRfbGVuIC09IDY0O1xuICAgIGlucHV0X3BvcyArPSA2NDtcbiAgfVxuICBpZihpbnB1dF9sZW4pXG4gICAgY3R4LmI4LnNldChpbnB1dC5zdWJhcnJheShpbnB1dF9wb3MsaW5wdXRfcG9zICsgaW5wdXRfbGVuKSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1RmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1VHJhbnNmb3JtXG5mdW5jdGlvbiBjYW1sX01ENUZpbmFsKGN0eCl7XG4gIHZhciBpbl9idWYgPSBjdHgubGVuICYgMHgzZjtcbiAgY3R4LmI4W2luX2J1Zl0gPSAweDgwO1xuICBpbl9idWYgKys7XG4gIGlmKGluX2J1ZiA+IDU2KSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNjQ7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yKHZhciBqID0gaW5fYnVmOyBqIDwgNTY7IGorKyl7XG4gICAgICBjdHguYjhbal0gPSAwO1xuICAgIH1cbiAgfVxuICBjdHguYjMyWzE0XSA9IGN0eC5sZW4gPDwgMztcbiAgY3R4LmIzMlsxNV0gPSAoY3R4LmxlbiA+PiAyOSkgJiAweDFGRkZGRkZGO1xuICBjYW1sX01ENVRyYW5zZm9ybShjdHgudywgY3R4LmIzMik7XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKylcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgIHRbaSAqIDQgKyBqXSA9IChjdHgud1tpXSA+PiAoOCAqIGopKSAmIDB4RkY7XG4gIHJldHVybiB0O1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfYnl0ZXMocywgb2ZzLCBsZW4pIHtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMocyk7XG4gIGNhbWxfTUQ1VXBkYXRlKGN0eCxhLnN1YmFycmF5KG9mcywgb2ZzICsgbGVuKSwgbGVuKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Zkc1xudmFyIGNhbWxfc3lzX2ZkcyA9IG5ldyBBcnJheSgzKTtcblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuZnVuY3Rpb24gY2FtbF9zeXNfY2xvc2UoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlKSBmaWxlLmNsb3NlKCk7XG4gIGRlbGV0ZSBjYW1sX3N5c19mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbChmaWxlLGlkeCkge1xuICBpZihpZHggPT0gdW5kZWZpbmVkKXtcbiAgICBpZHggPSBjYW1sX3N5c19mZHMubGVuZ3RoO1xuICB9XG4gIGNhbWxfc3lzX2Zkc1tpZHhdID0gZmlsZTtcbiAgcmV0dXJuIGlkeCB8IDA7XG59XG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuIChuYW1lLCBmbGFncywgX3Blcm1zKSB7XG4gIHZhciBmID0ge307XG4gIHdoaWxlKGZsYWdzKXtcbiAgICBzd2l0Y2goZmxhZ3NbMV0pe1xuICAgIGNhc2UgMDogZi5yZG9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMTogZi53cm9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMjogZi5hcHBlbmQgPSAxO2JyZWFrO1xuICAgIGNhc2UgMzogZi5jcmVhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNDogZi50cnVuY2F0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA1OiBmLmV4Y2wgPSAxOyBicmVhaztcbiAgICBjYXNlIDY6IGYuYmluYXJ5ID0gMTticmVhaztcbiAgICBjYXNlIDc6IGYudGV4dCA9IDE7YnJlYWs7XG4gICAgY2FzZSA4OiBmLm5vbmJsb2NrID0gMTticmVhaztcbiAgICB9XG4gICAgZmxhZ3M9ZmxhZ3NbMl07XG4gIH1cbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LGYpO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoZmlsZSwgdW5kZWZpbmVkKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGZpbGUoZmQsIGZsYWdzKSB7XG4gICAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgICAgcmV0dXJuIGNhbWxfc3lzX29wZW5fZm9yX25vZGUoZmQsIGZsYWdzKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIG5ldyBNbEZha2VGZF9vdXQoZmQsIGZsYWdzKVxuICB9XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgwLHtyZG9ubHk6MSxhbHRuYW1lOlwiL2Rldi9zdGRpblwiLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMCk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgxLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMSk7XG4gIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSgyLHtidWZmZXJlZDoyLHdyb25seToxLGlzQ2hhcmFjdGVyRGV2aWNlOnRydWV9KSwgMik7XG59KSgpXG5cblxuLy8gb2NhbWwgQ2hhbm5lbHNcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX25hbWUoY2hhbmlkLCBuYW1lKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm5hbWUgPSBuYW1lO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3QgKGNhcHR1cmVkLCBpbnRvKXtcbiAgdmFyIHRvX3Jlc3RvcmUgPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNhcHR1cmVkKTtcbiAgdmFyIG5ld18gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGludG8pO1xuICBjYW1sX21sX2NoYW5uZWxzW2NhcHR1cmVkXSA9IG5ld187IC8vIFhYWFxuICByZXR1cm4gdG9fcmVzdG9yZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlIChjYXB0dXJlZCwgdG9fcmVzdG9yZSl7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2FwdHVyZWRdID0gdG9fcmVzdG9yZTsgLy8gWFhYXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfZ2V0KGlkKSB7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxzW2lkXTsgLy8gWFhYXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QgKCkge1xuICB2YXIgbCA9IDA7XG4gIGZvcih2YXIgYyA9IDA7IGMgPCBjYW1sX21sX2NoYW5uZWxzLmxlbmd0aDsgYysrKXtcbiAgICBpZihjYW1sX21sX2NoYW5uZWxzW2NdICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3BlbmVkICYmIGNhbWxfbWxfY2hhbm5lbHNbY10ub3V0KVxuICAgICAgbD1bMCxjYW1sX21sX2NoYW5uZWxzW2NdLmZkLGxdO1xuICB9XG4gIHJldHVybiBsO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9zeXNfZmRzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9zeXNfb3BlblxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IChmZCkge1xuICB2YXIgZmlsZSA9IGNhbWxfc3lzX2Zkc1tmZF07XG4gIGlmKGZpbGUuZmxhZ3MucmRvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHJlYWRvbmx5XCIpO1xuICB2YXIgYnVmZmVyZWQgPSAoZmlsZS5mbGFncy5idWZmZXJlZCAhPT0gdW5kZWZpbmVkKSA/IGZpbGUuZmxhZ3MuYnVmZmVyZWQgOiAxO1xuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmZpbGUsXG4gICAgb2Zmc2V0OmZpbGUuZmxhZ3MuYXBwZW5kP2ZpbGUubGVuZ3RoKCk6MCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6dHJ1ZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcjpuZXcgVWludDhBcnJheSg2NTUzNiksXG4gICAgYnVmZmVyZWQ6YnVmZmVyZWRcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIChmZCkgIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLndyb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyB3cml0ZW9ubHlcIik7XG4gIHZhciByZWZpbGwgPSBudWxsO1xuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmZpbGUsXG4gICAgb2Zmc2V0OmZpbGUuZmxhZ3MuYXBwZW5kP2ZpbGUubGVuZ3RoKCk6MCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6IGZhbHNlLFxuICAgIGJ1ZmZlcl9jdXJyOjAsXG4gICAgYnVmZmVyX21heDowLFxuICAgIGJ1ZmZlcjpuZXcgVWludDhBcnJheSg2NTUzNiksXG4gICAgcmVmaWxsOnJlZmlsbFxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5fd2l0aF9mbGFncyhmZCwgZmxhZ3Mpe1xuICByZXR1cm4gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4oZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRfd2l0aF9mbGFnc1xuLy9SZXF1aXJlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1ZlcnNpb246ID49IDUuMVxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dChmZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL0FsaWFzOiB3aW5fZmlsZWRlc2NyX29mX2NoYW5uZWxcbmZ1bmN0aW9uIGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5mZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlKGNoYW5pZCxtb2RlKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4uZmlsZS5mbGFncy50ZXh0ID0gIW1vZGVcbiAgY2hhbi5maWxlLmZsYWdzLmJpbmFyeSA9IG1vZGVcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vVmVyc2lvbjogPj0gNS4yXG5mdW5jdGlvbiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5mbGFncy5iaW5hcnlcbn1cblxuLy9JbnB1dCBmcm9tIGluX2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jbG9zZV9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jbG9zZVxuZnVuY3Rpb24gY2FtbF9tbF9jbG9zZV9jaGFubmVsIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKGNoYW4ub3BlbmVkKSB7XG4gICAgY2hhbi5vcGVuZWQgPSBmYWxzZTtcbiAgICBjYW1sX3N5c19jbG9zZShjaGFuLmZkKTtcbiAgICBjaGFuLmZkID0gLTE7XG4gICAgY2hhbi5idWZmZXIgPSBuZXcgVWludDhBcnJheSgwKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2hhbi5maWxlLmxlbmd0aCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGggKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXQoY2hhbmlkLGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub3V0cHV0ID0gKGZ1bmN0aW9uIChzKSB7ZihzKX0pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCxmKSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5yZWZpbGwgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmVmaWxsIChjaGFuKSB7XG4gIGlmKGNoYW4ucmVmaWxsICE9IG51bGwpe1xuICAgIHZhciBzdHIgPSBjaGFuLnJlZmlsbCgpO1xuICAgIHZhciBzdHJfYSA9IGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHN0cik7XG4gICAgaWYgKHN0cl9hLmxlbmd0aCA9PSAwKSB7XG4gICAgICBjaGFuLnJlZmlsbCA9IG51bGxcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZihjaGFuLmJ1ZmZlci5sZW5ndGggPCBjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpe1xuICAgICAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX21heCArIHN0cl9hLmxlbmd0aCk7XG4gICAgICAgIGIuc2V0KGNoYW4uYnVmZmVyKTtcbiAgICAgICAgY2hhbi5idWZmZXIgPSBiO1xuICAgICAgfVxuICAgICAgY2hhbi5idWZmZXIuc2V0KHN0cl9hLGNoYW4uYnVmZmVyX21heCk7XG4gICAgICBjaGFuLm9mZnNldCArPSBzdHJfYS5sZW5ndGg7XG4gICAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gc3RyX2EubGVuZ3RoO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgbnJlYWQgPSBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCwgY2hhbi5idWZmZXIsIGNoYW4uYnVmZmVyX21heCwgY2hhbi5idWZmZXIubGVuZ3RoIC0gY2hhbi5idWZmZXJfbWF4KTtcbiAgICBjaGFuLm9mZnNldCArPSBucmVhZDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggKz0gbnJlYWQ7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dCAoY2hhbmlkLCBiLCBpLCBsKSB7XG4gIHZhciBiYSA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYik7XG4gIHJldHVybiBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCwgYmEsIGksIGwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmlnYXJyYXkgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX2JhX3RvX3R5cGVkX2FycmF5KGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX3JlZmlsbCwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9ibG9jayAoY2hhbmlkLCBiYSwgaSwgbCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIG4gPSBsO1xuICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBpZihsIDw9IGF2YWlsKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGw7XG4gIH1cbiAgZWxzZSBpZihhdmFpbCA+IDApIHtcbiAgICBiYS5zZXQoY2hhbi5idWZmZXIuc3ViYXJyYXkoY2hhbi5idWZmZXJfY3VycixjaGFuLmJ1ZmZlcl9jdXJyICsgYXZhaWwpLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGF2YWlsO1xuICAgIG4gPSBhdmFpbDtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgIGNhbWxfcmVmaWxsKGNoYW4pO1xuICAgIHZhciBhdmFpbCA9IGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgaWYobiA+IGF2YWlsKSBuID0gYXZhaWw7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIG4pLCBpKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IG47XG4gIH1cbiAgcmV0dXJuIG4gfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JlZmlsbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBoZWFkZXIgPSBuZXcgVWludDhBcnJheShjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBmdW5jdGlvbiBibG9jayhidWZmZXIsIG9mZnNldCwgbikge1xuICAgIHZhciByID0gMDtcbiAgICB3aGlsZShyIDwgbil7XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCl7XG4gICAgICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICAgICAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heClcbiAgICAgICAgYnJlYWs7XG4gICAgICBidWZmZXJbb2Zmc2V0K3JdID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gICAgICByKys7XG4gICAgfVxuICAgIHJldHVybiByO1xuICB9XG4gIHZhciByID0gYmxvY2soaGVhZGVyLCAwLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBpZihyID09IDApXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICBlbHNlIGlmIChyIDwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdFwiKTtcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoaGVhZGVyKSwgMCk7XG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW4gKyBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUpO1xuICBidWYuc2V0KGhlYWRlciwwKTtcbiAgdmFyIHIgPSBibG9jayhidWYsIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSwgbGVuKVxuICBpZihyIDwgbGVuKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdHJ1bmNhdGVkIG9iamVjdCBcIiArIHIgKyBcIiAgXCIgKyBsZW4pO1xuICB2YXIgb2Zmc2V0ID0gWzBdO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgb2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQgPSBjaGFuLm9mZnNldCArIG9mZnNldFswXTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV90b19vdXRzaWRlX2hlYXBcbi8vUmVxdWlyZXM6IGNhbWxfaW5wdXRfdmFsdWVcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwKGMpIHtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWUoYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhciAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyX21heCl7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgfVxuICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB2YXIgcmVzID0gY2hhbi5idWZmZXJbY2hhbi5idWZmZXJfY3Vycl07XG4gIGNoYW4uYnVmZmVyX2N1cnIrKztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfY2hhciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dF9pbnQgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCA0OyBpKyspe1xuICAgIHJlcyA9IChyZXMgPDwgOCkgKyBjYW1sX21sX2lucHV0X2NoYXIoY2hhbmlkKSB8IDA7XG4gIH1cbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcykge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYgKGNoYW4ucmVmaWxsICE9IG51bGwpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiSWxsZWdhbCBzZWVrXCIpO1xuICBpZihwb3MgPj0gY2hhbi5vZmZzZXQgLSBjaGFuLmJ1ZmZlcl9tYXhcbiAgICAgJiYgcG9zIDw9IGNoYW4ub2Zmc2V0XG4gICAgICYmIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkpIHtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gY2hhbi5idWZmZXJfbWF4IC0gKGNoYW4ub2Zmc2V0IC0gcG9zKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLm9mZnNldCA9IHBvcztcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICBjaGFuLmJ1ZmZlcl9tYXggPSAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luKGNoYW5pZCxwb3Mpe1xuICByZXR1cm4gY2FtbF9zZWVrX2luKGNoYW5pZCxwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfc2Vla19pblxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgcG9zID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gY2FtbF9zZWVrX2luKGNoYW5pZCwgcG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfcG9zX2luKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4ub2Zmc2V0IC0gKGNoYW4uYnVmZmVyX21heCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcG9zX2luXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbihjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX2luKGNoYW5pZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW5fNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfcG9zX2luKGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X3NjYW5fbGluZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9yZWZpbGxcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgcCA9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGRvIHtcbiAgICBpZihwID49IGNoYW4uYnVmZmVyX21heCkge1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+IDApIHtcbiAgICAgICAgY2hhbi5idWZmZXIuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIpLDApO1xuICAgICAgICBwIC09IGNoYW4uYnVmZmVyX2N1cnI7XG4gICAgICAgIGNoYW4uYnVmZmVyX21heCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgIH1cbiAgICAgIGlmKGNoYW4uYnVmZmVyX21heCA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0oY2hhbi5idWZmZXJfbWF4KSB8IDA7XG4gICAgICB9XG4gICAgICB2YXIgcHJldl9tYXggPSBjaGFuLmJ1ZmZlcl9tYXg7XG4gICAgICBjYW1sX3JlZmlsbCAoY2hhbik7XG4gICAgICBpZihwcmV2X21heCA9PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgICAgcmV0dXJuIC0oY2hhbi5idWZmZXJfbWF4KSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChjaGFuLmJ1ZmZlcltwKytdICE9IDEwKTtcbiAgcmV0dXJuIChwIC0gY2hhbi5idWZmZXJfY3VycikgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2ZsdXNoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IGZsdXNoIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGlmKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlcl9jdXJyID09IDApIHJldHVybiAwO1xuICBpZihjaGFuLm91dHB1dCkge1xuICAgIGNoYW4ub3V0cHV0KGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhjaGFuLmJ1ZmZlciwgMCwgY2hhbi5idWZmZXJfY3VycikpO1xuICB9IGVsc2Uge1xuICAgIGNoYW4uZmlsZS53cml0ZShjaGFuLm9mZnNldCwgY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICB9XG4gIGNoYW4ub2Zmc2V0ICs9IGNoYW4uYnVmZmVyX2N1cnI7XG4gIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9vdXRwdXQgdG8gb3V0X2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfdGFcbi8vUmVxdWlyZXM6IGNhbWxfbWxfZmx1c2gsY2FtbF9tbF9ieXRlc19sZW5ndGhcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF90YShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICBpZihjaGFuLmJ1ZmZlcl9jdXJyICsgYnVmZmVyLmxlbmd0aCA+IGNoYW4uYnVmZmVyLmxlbmd0aCkge1xuICAgIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGgpO1xuICAgIGIuc2V0KGNoYW4uYnVmZmVyKTtcbiAgICBjaGFuLmJ1ZmZlciA9IGJcbiAgfVxuICBzd2l0Y2goY2hhbi5idWZmZXJlZCl7XG4gIGNhc2UgMDogLy8gVW5idWZmZXJlZFxuICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrXG4gIGNhc2UgMTogLy8gQnVmZmVyZWQgKHRoZSBkZWZhdWx0KVxuICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZihjaGFuLmJ1ZmZlcl9jdXJyID49IGNoYW4uYnVmZmVyLmxlbmd0aClcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMjogLy8gQnVmZmVyZWQgKG9ubHkgZm9yIHN0ZG91dCBhbmQgc3RkZXJyKVxuICAgIHZhciBpZCA9IGJ1ZmZlci5sYXN0SW5kZXhPZigxMClcbiAgICBpZihpZCA8IDApIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIsIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoO1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2hhbi5idWZmZXIuc2V0KGJ1ZmZlci5zdWJhcnJheSgwLCBpZCArIDEpLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gaWQgKyAxO1xuICAgICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGggLSBpZCAtIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9tbF9vdXRwdXRfdGFcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhidWZmZXIpO1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9iaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV90b190eXBlZF9hcnJheSwgY2FtbF9tbF9vdXRwdXRfdGFcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2JpZ2FycmF5KGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgYnVmZmVyID0gY2FtbF9iYV90b190eXBlZF9hcnJheShidWZmZXIpO1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKTtcbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbil7XG4gIHJldHVybiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsY2FtbF9ieXRlc19vZl9zdHJpbmcoYnVmZmVyKSxvZmZzZXQsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2NoYXIgKGNoYW5pZCxjKSB7XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCwxKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcsIGNhbWxfbWxfb3V0cHV0LGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWUgKGNoYW5pZCx2LGZsYWdzKSB7XG4gIHZhciBzID0gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nKHYsIGZsYWdzKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCxjYW1sX21sX3N0cmluZ19sZW5ndGgocykpO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0LCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX3NlZWtfb3V0KGNoYW5pZCwgcG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0KGNoYW5pZCxwb3Mpe1xuICByZXR1cm4gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfb3V0XzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgcG9zID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9wb3Nfb3V0KGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4ub2Zmc2V0ICsgY2hhbi5idWZmZXJfY3VyclxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9wb3Nfb3V0KGNoYW5pZCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3Nfb3V0XG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0IChjYW1sX3Bvc19vdXQoY2hhbmlkKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9pbnQgKGNoYW5pZCxpKSB7XG4gIHZhciBhcnIgPSBbKGk+PjI0KSAmIDB4RkYsKGk+PjE2KSAmIDB4RkYsKGk+PjgpICYgMHhGRixpICYgMHhGRiBdO1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsNCk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaXNfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaXNfYnVmZmVyZWQoY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkuYnVmZmVyZWQgPyAxIDogMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9idWZmZXJlZFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfYnVmZmVyZWQoY2hhbmlkLHYpIHtcbiAgY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLmJ1ZmZlcmVkID0gdjtcbiAgaWYoIXYpIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIDBcbn1cbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleCAqKVxuXG50eXBlIHBvc2l0aW9uID0ge1xuICBwb3NfZm5hbWUgOiBzdHJpbmc7XG4gIHBvc19sbnVtIDogaW50O1xuICBwb3NfYm9sIDogaW50O1xuICBwb3NfY251bSA6IGludDtcbn1cblxubGV0IGR1bW15X3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAwO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAtMTtcbn1cblxudHlwZSBsZXhidWYgPVxuICB7IHJlZmlsbF9idWZmIDogbGV4YnVmIC0+IHVuaXQ7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyIDogYnl0ZXM7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyX2xlbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9hYnNfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X2FjdGlvbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9lb2ZfcmVhY2hlZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBsZXhfbWVtIDogaW50IGFycmF5O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3AgOiBwb3NpdGlvbjtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3AgOiBwb3NpdGlvbjtcbiAgfVxuXG50eXBlIGxleF90YWJsZXMgPVxuICB7IGxleF9iYXNlOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cms6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdDogc3RyaW5nO1xuICAgIGxleF90cmFuczogc3RyaW5nO1xuICAgIGxleF9jaGVjazogc3RyaW5nO1xuICAgIGxleF9iYXNlX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cmtfY29kZSA6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdF9jb2RlIDogc3RyaW5nO1xuICAgIGxleF90cmFuc19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jaGVja19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jb2RlOiBzdHJpbmc7fVxuXG5leHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5leHRlcm5hbCBjX25ld19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbmV3X2xleF9lbmdpbmVcIlxuXG5sZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5cbmxldCBuZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19uZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxubGV0IGxleF9yZWZpbGwgcmVhZF9mdW4gYXV4X2J1ZmZlciBsZXhidWYgPVxuICBsZXQgcmVhZCA9XG4gICAgcmVhZF9mdW4gYXV4X2J1ZmZlciAoQnl0ZXMubGVuZ3RoIGF1eF9idWZmZXIpIGluXG4gIGxldCBuID1cbiAgICBpZiByZWFkID4gMFxuICAgIHRoZW4gcmVhZFxuICAgIGVsc2UgKGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZTsgMCkgaW5cbiAgKCogQ3VycmVudCBzdGF0ZSBvZiB0aGUgYnVmZmVyOlxuICAgICAgICA8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+XG4gICAgICAgIHwgIGp1bmsgfCAgICAgIHZhbGlkIGRhdGEgICAgIHwgICBqdW5rICAgIHxcbiAgICAgICAgXiAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXlxuICAgICAgICAwICAgIHN0YXJ0X3BvcyAgICAgICAgICAgICBidWZmZXJfZW5kICAgIEJ5dGVzLmxlbmd0aCBidWZmZXJcbiAgKilcbiAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuICsgbiA+IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlciB0aGVuIGJlZ2luXG4gICAgKCogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG5cbiAgICAgICA8PSBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXJcbiAgICB0aGVuIGJlZ2luXG4gICAgICAoKiBCdXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGlmIHdlIHJlY2xhaW0gdGhlIGp1bmsgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgb2YgdGhlIGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbGV4YnVmLmxleF9idWZmZXIgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAoKiBXZSBtdXN0IGdyb3cgdGhlIGJ1ZmZlci4gIERvdWJsaW5nIGl0cyBzaXplIHdpbGwgcHJvdmlkZSBlbm91Z2hcbiAgICAgICAgIHNwYWNlIHNpbmNlIG4gPD0gU3RyaW5nLmxlbmd0aCBhdXhfYnVmZmVyIDw9IFN0cmluZy5sZW5ndGggYnVmZmVyLlxuICAgICAgICAgV2F0Y2ggb3V0IGZvciBzdHJpbmcgbGVuZ3RoIG92ZXJmbG93LCB0aG91Z2guICopXG4gICAgICBsZXQgbmV3bGVuID1cbiAgICAgICAgSW50Lm1pbiAoMiAqIEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlcikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG4gPiBuZXdsZW5cbiAgICAgIHRoZW4gZmFpbHdpdGggXCJMZXhpbmcubGV4X3JlZmlsbDogY2Fubm90IGdyb3cgYnVmZmVyXCI7XG4gICAgICBsZXQgbmV3YnVmID0gQnl0ZXMuY3JlYXRlIG5ld2xlbiBpblxuICAgICAgKCogQ29weSB0aGUgdmFsaWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBuZXdidWYgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKTtcbiAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDwtIG5ld2J1ZlxuICAgIGVuZDtcbiAgICAoKiBSZWFsbG9jYXRpb24gb3Igbm90LCB3ZSBoYXZlIHNoaWZ0ZWQgdGhlIGRhdGEgbGVmdCBieVxuICAgICAgIHN0YXJ0X3BvcyBjaGFyYWN0ZXJzOyB1cGRhdGUgdGhlIHBvc2l0aW9ucyAqKVxuICAgIGxldCBzID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgICBsZXhidWYubGV4X2Fic19wb3MgPC0gbGV4YnVmLmxleF9hYnNfcG9zICsgcztcbiAgICBsZXhidWYubGV4X2N1cnJfcG9zIDwtIGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIDwtIDA7XG4gICAgbGV4YnVmLmxleF9sYXN0X3BvcyA8LSBsZXhidWYubGV4X2xhc3RfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gcyA7XG4gICAgbGV0IHQgPSBsZXhidWYubGV4X21lbSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC0xIGRvXG4gICAgICBsZXQgdiA9IHQuKGkpIGluXG4gICAgICBpZiB2ID49IDAgdGhlblxuICAgICAgICB0LihpKSA8LSB2LXNcbiAgICBkb25lXG4gIGVuZDtcbiAgKCogVGhlcmUgaXMgbm93IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgQnl0ZXMuYmxpdCBhdXhfYnVmZmVyIDAgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9idWZmZXJfbGVuIG47XG4gIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuXG5cbmxldCB6ZXJvX3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAxO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAwO1xufVxuXG5sZXQgZnJvbV9mdW5jdGlvbiA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgZiA9XG4gIHsgcmVmaWxsX2J1ZmYgPSBsZXhfcmVmaWxsIGYgKEJ5dGVzLmNyZWF0ZSA1MTIpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5jcmVhdGUgMTAyNDtcbiAgICBsZXhfYnVmZmVyX2xlbiA9IDA7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IGZhbHNlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgZnJvbV9jaGFubmVsID93aXRoX3Bvc2l0aW9ucyBpYyA9XG4gIGZyb21fZnVuY3Rpb24gP3dpdGhfcG9zaXRpb25zIChmdW4gYnVmIG4gLT4gaW5wdXQgaWMgYnVmIDAgbilcblxubGV0IGZyb21fc3RyaW5nID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBzID1cbiAgeyByZWZpbGxfYnVmZiA9IChmdW4gbGV4YnVmIC0+IGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZSk7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLm9mX3N0cmluZyBzOyAoKiBoYXZlIHRvIG1ha2UgYSBjb3B5IGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVuc2FmZS1zdHJpbmcgbW9kZSAqKVxuICAgIGxleF9idWZmZXJfbGVuID0gU3RyaW5nLmxlbmd0aCBzO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSB0cnVlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgc2V0X3Bvc2l0aW9uIGxleGJ1ZiBwb3NpdGlvbiA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wICA8LSB7cG9zaXRpb24gd2l0aCBwb3NfZm5hbWUgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfZm5hbWV9O1xuICBsZXhidWYubGV4X2Fic19wb3MgPC0gcG9zaXRpb24ucG9zX2NudW1cblxubGV0IHNldF9maWxlbmFtZSBsZXhidWYgZm5hbWUgPVxuICBsZXhidWYubGV4X2N1cnJfcCA8LSB7bGV4YnVmLmxleF9jdXJyX3Agd2l0aCBwb3NfZm5hbWUgPSBmbmFtZX1cblxubGV0IHdpdGhfcG9zaXRpb25zIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3Bvc1xuXG5sZXQgbGV4ZW1lIGxleGJ1ZiA9XG4gIGxldCBsZW4gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW5cblxubGV0IHN1Yl9sZXhlbWUgbGV4YnVmIGkxIGkyID1cbiAgbGV0IGxlbiA9IGkyLWkxIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuXG5cbmxldCBzdWJfbGV4ZW1lX29wdCBsZXhidWYgaTEgaTIgPVxuICBpZiBpMSA+PSAwIHRoZW4gYmVnaW5cbiAgICBsZXQgbGVuID0gaTItaTEgaW5cbiAgICBTb21lIChCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlbilcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBOb25lXG4gIGVuZFxuXG5sZXQgc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBpID0gQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGlcblxubGV0IHN1Yl9sZXhlbWVfY2hhcl9vcHQgbGV4YnVmIGkgPVxuICBpZiBpID49IDAgdGhlblxuICAgIFNvbWUgKEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5cbmxldCBsZXhlbWVfY2hhciBsZXhidWYgaSA9XG4gIEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciAobGV4YnVmLmxleF9zdGFydF9wb3MgKyBpKVxuXG5sZXQgbGV4ZW1lX3N0YXJ0IGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcC5wb3NfY251bVxubGV0IGxleGVtZV9lbmQgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2NudW1cblxubGV0IGxleGVtZV9zdGFydF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcFxubGV0IGxleGVtZV9lbmRfcCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcFxuXG5sZXQgbmV3X2xpbmUgbGV4YnVmID1cbiAgbGV0IGxjcCA9IGxleGJ1Zi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxleGJ1Zi5sZXhfY3Vycl9wIDwtXG4gICAgICB7IGxjcCB3aXRoXG4gICAgICAgIHBvc19sbnVtID0gbGNwLnBvc19sbnVtICsgMTtcbiAgICAgICAgcG9zX2JvbCA9IGxjcC5wb3NfY251bTtcbiAgICAgIH1cblxuXG5cbigqIERpc2NhcmQgZGF0YSBsZWZ0IGluIGxleGVyIGJ1ZmZlci4gKilcblxubGV0IGZsdXNoX2lucHV0IGxiID1cbiAgbGIubGV4X2N1cnJfcG9zIDwtIDA7XG4gIGxiLmxleF9hYnNfcG9zIDwtIDA7XG4gIGxldCBsY3AgPSBsYi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxiLmxleF9jdXJyX3AgPC0ge3plcm9fcG9zIHdpdGggcG9zX2ZuYW1lID0gbGNwLnBvc19mbmFtZX07XG4gIGxiLmxleF9idWZmZXJfbGVuIDwtIDA7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IHRvX3N0cmluZ19kZWZhdWx0ID0gZnVuY3Rpb25cbiAgfCBPdXRfb2ZfbWVtb3J5IC0+IFwiT3V0IG9mIG1lbW9yeVwiXG4gIHwgU3RhY2tfb3ZlcmZsb3cgLT4gXCJTdGFjayBvdmVyZmxvd1wiXG4gIHwgTWF0Y2hfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNSkgXCJQYXR0ZXJuIG1hdGNoaW5nIGZhaWxlZFwiXG4gIHwgQXNzZXJ0X2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiQXNzZXJ0aW9uIGZhaWxlZFwiXG4gIHwgVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiVW5kZWZpbmVkIHJlY3Vyc2l2ZSBtb2R1bGVcIlxuICB8IHggLT5cbiAgICAgIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICAgICAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZylcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGNvbnN0cnVjdG9yID1cbiAgICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgKE9iai5maWVsZCB4IDApIDApIDogc3RyaW5nKSBpblxuICAgICAgICBjb25zdHJ1Y3RvciBeIChmaWVsZHMgeClcblxubGV0IHRvX3N0cmluZyBlID1cbiAgbWF0Y2ggdXNlX3ByaW50ZXJzIGUgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiB0b19zdHJpbmdfZGVmYXVsdCBlXG5cbmxldCBwcmludCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZmx1c2ggc3RkZXJyO1xuICAgIHJhaXNlIHhcblxubGV0IGNhdGNoIGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGZsdXNoIHN0ZG91dDtcbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZXhpdCAyXG5cbnR5cGUgcmF3X2JhY2t0cmFjZV9zbG90XG50eXBlIHJhd19iYWNrdHJhY2VfZW50cnkgPSBwcml2YXRlIGludFxudHlwZSByYXdfYmFja3RyYWNlID0gcmF3X2JhY2t0cmFjZV9lbnRyeSBhcnJheVxuXG5sZXQgcmF3X2JhY2t0cmFjZV9lbnRyaWVzIGJ0ID0gYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2U6XG4gIHVuaXQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2VcIlxuXG5leHRlcm5hbCByYWlzZV93aXRoX2JhY2t0cmFjZTogZXhuIC0+IHJhd19iYWNrdHJhY2UgLT4gJ2FcbiAgPSBcIiVyYWlzZV93aXRoX2JhY2t0cmFjZVwiXG5cbnR5cGUgYmFja3RyYWNlX3Nsb3QgPVxuICB8IEtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlICAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgIDogc3RyaW5nO1xuICAgICAgbGluZV9udW1iZXIgOiBpbnQ7XG4gICAgICBzdGFydF9jaGFyICA6IGludDtcbiAgICAgIGVuZF9jaGFyICAgIDogaW50O1xuICAgICAgaXNfaW5saW5lICAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICAgOiBzdHJpbmc7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG4oKiB0byBhdm9pZCB3YXJuaW5nICopXG5sZXQgXyA9IFtLbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2U7IGZpbGVuYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbmxpbmUgPSBmYWxzZTsgZGVmbmFtZSA9IFwiXCIgfTtcbiAgICAgICAgIFVua25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlIH1dXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkXCJcbiAgICAgICAgICAgICAgKGluZm8gbC5pc19yYWlzZSkgbC5kZWZuYW1lIGwuZmlsZW5hbWVcbiAgICAgICAgICAgICAgKGlmIGwuaXNfaW5saW5lIHRoZW4gXCIgKGlubGluZWQpXCIgZWxzZSBcIlwiKVxuICAgICAgICAgICAgICBsLmxpbmVfbnVtYmVyIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xufVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24gPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgIFNvbWUge1xuICAgICAgZmlsZW5hbWUgICAgPSBsLmZpbGVuYW1lO1xuICAgICAgbGluZV9udW1iZXIgPSBsLmxpbmVfbnVtYmVyO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX2NoYXI7XG4gICAgfVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfXG4gIHwgS25vd25fbG9jYXRpb24geyBkZWZuYW1lID0gXCJcIiB9IC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IFNvbWUgbC5kZWZuYW1lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHMgcmF3X2JhY2t0cmFjZSA9XG4gICgqIFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IFNvbWUgaXNcbiAgICAgcmV0dXJuZWQgb25seSBpZiBhIHBhcnQgb2YgdGhlIHRyYWNlIGlzIHVzYWJsZS4gVGhpcyBnaXZlcyB1c1xuICAgICBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSwgYnV0IGl0IG1ha2VzIHRoZVxuICAgICBBUEkgbW9yZSB1c2VyLWZyaWVuZGx5IC0tIG90aGVyd2lzZSBtb3N0IHVzZXJzIHdvdWxkIGhhdmUgdG9cbiAgICAgcmVpbXBsZW1lbnQgdGhlIFwiUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIHNvcnJ5XCIgbG9naWNcbiAgICAgdGhlbXNlbHZlcy4gKilcbiAgbWF0Y2ggY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2Ugd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGJhY2t0cmFjZSAtPlxuICAgICAgbGV0IHVzYWJsZV9zbG90ID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcbiAgICAgICAgfCBLbm93bl9sb2NhdGlvbiBfIC0+IHRydWUgaW5cbiAgICAgIGxldCByZWMgZXhpc3RzX3VzYWJsZSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgKC0xKSAtPiBmYWxzZVxuICAgICAgICB8IGkgLT4gdXNhYmxlX3Nsb3QgYmFja3RyYWNlLihpKSB8fCBleGlzdHNfdXNhYmxlIChpIC0gMSkgaW5cbiAgICAgIGlmIGV4aXN0c191c2FibGUgKEFycmF5Lmxlbmd0aCBiYWNrdHJhY2UgLSAxKVxuICAgICAgdGhlbiBTb21lIGJhY2t0cmFjZVxuICAgICAgZWxzZSBOb25lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IGVudHJ5ID1cbiAgYmFja3RyYWNlX3Nsb3RzIFt8IGVudHJ5IHxdXG5cbm1vZHVsZSBTbG90ID0gc3RydWN0XG4gIHR5cGUgdCA9IGJhY2t0cmFjZV9zbG90XG4gIGxldCBmb3JtYXQgPSBmb3JtYXRfYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGlzX3JhaXNlID0gYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2VcbiAgbGV0IGlzX2lubGluZSA9IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZVxuICBsZXQgbG9jYXRpb24gPSBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvblxuICBsZXQgbmFtZSA9IGJhY2t0cmFjZV9zbG90X2RlZm5hbWVcbmVuZFxuXG5sZXQgcmF3X2JhY2t0cmFjZV9sZW5ndGggYnQgPSBBcnJheS5sZW5ndGggYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2UgLT4gaW50IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QgOlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gcmF3X2JhY2t0cmFjZV9zbG90IG9wdGlvblxuICA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFwiXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOlxuICAgcmV0dXJucyB0aGUgKnN0cmluZyogY29ycmVzcG9uZGluZyB0byB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgZ2V0X2JhY2t0cmFjZSAoKSA9IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxuZXh0ZXJuYWwgcmVjb3JkX2JhY2t0cmFjZTogYm9vbCAtPiB1bml0ID0gXCJjYW1sX3JlY29yZF9iYWNrdHJhY2VcIlxuZXh0ZXJuYWwgYmFja3RyYWNlX3N0YXR1czogdW5pdCAtPiBib29sID0gXCJjYW1sX2JhY2t0cmFjZV9zdGF0dXNcIlxuXG5sZXQgcmVjIHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBsZXQgb2xkX3ByaW50ZXJzID0gQXRvbWljLmdldCBwcmludGVycyBpblxuICBsZXQgbmV3X3ByaW50ZXJzID0gZm4gOjogb2xkX3ByaW50ZXJzIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBwcmludGVycyBvbGRfcHJpbnRlcnMgbmV3X3ByaW50ZXJzIGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gcmVnaXN0ZXJfcHJpbnRlciBmblxuXG5leHRlcm5hbCBnZXRfY2FsbHN0YWNrOiBpbnQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2tcIlxuXG5sZXQgZXhuX3Nsb3QgeCA9XG4gIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICBpZiBPYmoudGFnIHggPSAwIHRoZW4gT2JqLmZpZWxkIHggMCBlbHNlIHhcblxubGV0IGV4bl9zbG90X2lkIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDEpIDogaW50KVxuXG5sZXQgZXhuX3Nsb3RfbmFtZSB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAwKSA6IHN0cmluZylcblxuZXh0ZXJuYWwgZ2V0X2RlYnVnX2luZm9fc3RhdHVzIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXNcIlxuXG4oKiBEZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiBzdGFydHVwLmguIFNlZSBhbHNvIGJhY2t0cmFjZS5jICopXG5sZXQgZXJyb3JzID0gW3wgXCJcIjtcbiAgKCogRklMRV9OT1RfRk9VTkQgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIG5vdCBmb3VuZClcIjtcbiAgKCogQkFEX0JZVEVDT0RFICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQpXCI7XG4gICgqIFdST05HX01BR0lDICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyKVwiO1xuICAoKiBOT19GRFMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQ7XFxuIFxcXG4gICAgICAtLSB0b28gbWFueSBvcGVuIGZpbGVzLiBUcnkgcnVubmluZyB3aXRoIE9DQU1MUlVOUEFSQU09Yj0yKVwiXG58XVxuXG5sZXQgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZSA9XG4gIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICBsZXQgc3RhdHVzID0gZ2V0X2RlYnVnX2luZm9fc3RhdHVzICgpIGluXG4gIGlmIHN0YXR1cyA8IDAgdGhlblxuICAgIHByZXJyX2VuZGxpbmUgZXJyb3JzLihhYnMgc3RhdHVzKTtcbiAgZmx1c2ggc3RkZXJyXG5cbmxldCB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA9IHJlZiBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyXG5cbmxldCBzZXRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZm4gPSB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA6PSBmblxuXG5sZXQgZW1wdHlfYmFja3RyYWNlIDogcmF3X2JhY2t0cmFjZSA9IFt8IHxdXG5cbmxldCB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgPVxuICB0cnlcbiAgICBnZXRfcmF3X2JhY2t0cmFjZSAoKVxuICB3aXRoIF8gKCogT3V0X29mX21lbW9yeT8gKikgLT5cbiAgICBlbXB0eV9iYWNrdHJhY2VcblxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICAoKiBHZXQgdGhlIGJhY2t0cmFjZSBub3csIGluIGNhc2Ugb25lIG9mIHRoZSBbYXRfZXhpdF0gZnVuY3Rpb25cbiAgICAgICBkZXN0cm95cyBpdC4gKilcbiAgICBsZXQgcmF3X2JhY2t0cmFjZSA9XG4gICAgICBpZiBkZWJ1Z2dlcl9pbl91c2UgKCogU2FtZSB0ZXN0IGFzIGluIFtydW50aW1lL3ByaW50ZXhjLmNdICopIHRoZW5cbiAgICAgICAgZW1wdHlfYmFja3RyYWNlXG4gICAgICBlbHNlXG4gICAgICAgIHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKVxuICAgIGluXG4gICAgKHRyeSBTdGRsaWIuZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgIHRyeVxuICAgICAgIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlXG4gICAgd2l0aCBleG4nIC0+XG4gICAgICBsZXQgcmF3X2JhY2t0cmFjZScgPSB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvciBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcjogZXhjZXB0aW9uICVzXFxuXCJcbiAgICAgICAgKHRvX3N0cmluZyBleG4nKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgZmx1c2ggc3RkZXJyXG4gIHdpdGhcbiAgICB8IE91dF9vZl9tZW1vcnkgLT5cbiAgICAgICAgcHJlcnJfZW5kbGluZVxuICAgICAgICAgIFwiRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXJcIlxuXG4oKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBbY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25dIGluXG4gICBbcnVudGltZS9wcmludGV4Yy5jXSB3aGljaCBleHBlY3RzIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICopXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZVxuICB3aXRoIF8gLT5cbiAgICAoKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqKVxuICAgICgpXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiIsIiMgMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPSBzdHJ1Y3RcbiAgICAoKiBPdmVycmlkZSB0aGUgTGV4aW5nLmVuZ2luZSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBwb3NpdGlvbiByZWNvcmRcbiAgICAgICBlYWNoIHRpbWUgYSBydWxlIGlzIG1hdGNoZWQuIFJlZHVjZXMgdG90YWwgcGFyc2UgdGltZSBieSBhcm91bmQgMzAlLlxuICAgICAgIElkZWEgc3RvbGVuIGZyb20geW9qc29uICopXG5cbiAgICBpbmNsdWRlIExleGluZ1xuXG4gICAgZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuXG4gICAgbGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgICAgIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gICAgICAoKlxuICAgICAgaWYgcmVzdWx0ID49IDAgdGhlbiBiZWdpblxuICAgICAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICAgICAgZW5kO1xuICAgICAgKilcbiAgICAgIHJlc3VsdFxuICBlbmRcbiAgb3BlbiBUb2tlbnNcblxuXG4gIG1vZHVsZSB0eXBlIExleCA9IHNpZ1xuICAgIHZhbCByZWFkIDogTGV4aW5nLmxleGJ1ZiAtPiBUb2tlbnMudG9rZW5cbiAgZW5kXG5cbiAgbW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogTGV4ID0gc3RydWN0XG5cbiMgMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMjlcXDI1NVxcMDE3XFwwMDBcXDIzMlxcMjU1XFwwMDNcXDAwMFxcMjM0XFwyNTVcXDEyNlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMTNcXDAwMFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDEyM1xcMDAwXFwyNDNcXDI1NVxcMjQ0XFwyNTVcXFxuICAgIFxcMjQ1XFwyNTVcXDI0NlxcMjU1XFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDI0OVxcMjU1XFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDNcXDAwMFxcMjU0XFwyNTVcXDAwM1xcMDAwXFwwMDFcXDAwMFxcMDExXFwwMDBcXDI1M1xcMjU1XFwyMzlcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAxMVxcMDAwXFwwMDVcXDAwMFxcMjQyXFwyNTVcXDAyMFxcMDAwXFwwMTlcXDAwMFxcMDQ4XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjNcXDAwMFxcMDc1XFwwMDBcXDA4NFxcMDAwXFwyNDFcXDI1NVxcMDg1XFwwMDBcXDA4M1xcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDc1XFwwMDBcXDA3MVxcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA5M1xcMDAwXFwyNDBcXDI1NVxcMDk1XFwwMDBcXFxuICAgIFxcMDkzXFwwMDBcXDA4OVxcMDAwXFwwOTVcXDAwMFxcMDg1XFwwMDBcXDA4MVxcMDAwXFwwMDFcXDAwMFxcMDMyXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDE4NlxcMDAwXFwyMDlcXDAwMFxcMjE5XFwwMDBcXDIyOVxcMDAwXFwyNDBcXDAwMFxcMjUwXFwwMDBcXDAxOFxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyMzZcXDI1NVxcMjM1XFwyNTVcXDA5NFxcMDAxXFwxMTdcXDAwMVxcMTU1XFwwMDFcXDE3OFxcMDAxXFwwNTNcXDAwMFxcMjMxXFwyNTVcXFxuICAgIFxcMDg4XFwwMDFcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAxNFxcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDBcXDI1NVxcMjU1XFwwMjJcXDAwMFxcMjU1XFwyNTVcXDAyNlxcMDAwXFwwMTdcXDAwMFxcXG4gICAgXFwwMTdcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjVcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAxOVxcMDAwXFwwMThcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwMTVcXDAwMFxcMDEzXFwwMDBcXDA3MVxcMDAwXFwwMDJcXDAwMFxcXG4gICAgXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTRcXDAwMFxcMDg3XFwwMDBcXDAxN1xcMDAwXFwwOTNcXDAwMFxcMDE2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA4NlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDExXFwwMDBcXDA1OVxcMDAwXFwwNzdcXDAwMFxcMDAwXFwwMDBcXDA3N1xcMDAwXFwwMDlcXDAwMFxcMDM4XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDAwXFwwMDBcXDAyMVxcMDAwXFwwMDBcXDAwMFxcMDIwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDY5XFwwMDBcXDAzNFxcMDAwXFwwMzBcXDAwMFxcMDUwXFwwMDBcXDA3MFxcMDAwXFwwMjVcXDAwMFxcMDI5XFwwMDBcXFxuICAgIFxcMDMzXFwwMDBcXDAxMlxcMDAwXFwwNjBcXDAwMFxcMDQzXFwwMDBcXDAzMVxcMDAwXFwwMzZcXDAwMFxcMDI0XFwwMDBcXDA1M1xcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwMzhcXDAwMFxcMDI3XFwwMDBcXDAzMlxcMDAwXFwwMjZcXDAwMFxcMDI4XFwwMDBcXDAzNVxcMDAwXFwwMzdcXDAwMFxcXG4gICAgXFwwNDRcXDAwMFxcMDQyXFwwMDBcXDA0NVxcMDAwXFwwMjNcXDAwMFxcMDQ2XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDQ3XFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcMDcwXFwwMDBcXDA0OVxcMDAwXFxcbiAgICBcXDA0M1xcMDAwXFwwMzhcXDAwMFxcMDUyXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFwwNThcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDYzXFwwMDBcXDA2MVxcMDAwXFwwNjJcXDAwMFxcMDQwXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcMDY2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNjJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMzlcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDAwNVxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDkxXFwwMDBcXDAwMFxcMDAwXFwwODFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF9jaGVjayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwNzBcXDAwMFxcMDAwXFwwMDBcXDA2OVxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwwMjRcXDAwMFxcMDI1XFwwMDBcXDAzOVxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXDAyOFxcMDAwXFxcbiAgICBcXDAzMlxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA0MlxcMDAwXFwwMzBcXDAwMFxcMDM1XFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTJcXDAwMFxcMDM0XFwwMDBcXDAyNlxcMDAwXFwwMzFcXDAwMFxcMDAwXFwwMDBcXDAyN1xcMDAwXFwwMjRcXDAwMFxcMDM2XFwwMDBcXFxuICAgIFxcMDQwXFwwMDBcXDA0MVxcMDAwXFwwNDRcXDAwMFxcMDAwXFwwMDBcXDA0NVxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDA0NlxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFxcbiAgICBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDQ3XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTNcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXFxuICAgIFxcMDU4XFwwMDBcXDA1OVxcMDAwXFwwNjBcXDAwMFxcMDYxXFwwMDBcXDAxM1xcMDAwXFwwNjNcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAwXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMjU1XFwyNTVcXDA3M1xcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcXG4gICAgXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcXG4gICAgXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc4XFwwMDBcXDA4NlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFzZV9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfYmFja3Rya19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfZGVmYXVsdF9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfdHJhbnNfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NoZWNrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jb2RlID1cbiAgIFwiXCI7XG59XG5cbmxldCByZWMgcmVhZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgdHJ1ZSApXG4jIDI3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgNTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCBmYWxzZSApXG4jIDI3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgNjEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTlVMTCApXG4jIDI4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT1MgKVxuIyAyODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA0IC0+XG4jIDY1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9FIClcbiMgMjkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNSAtPlxuIyA2NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBUyApXG4jIDI5NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDYgLT5cbiMgNjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQUUgKVxuIyAzMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA3IC0+XG4jIDcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBUUyB0aGVuIFRTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzA5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOCAtPlxuIyA3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVEUgdGhlbiBURVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDkgLT5cbiMgODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVlMgdGhlbiBWU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMyNSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEwIC0+XG4jIDg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZFIHRoZW4gVkVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMSAtPlxuIyA5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT01NQSApXG4jIDMzOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEyIC0+XG4jIDkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTE9OIClcbiMgMzQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTMgLT5cbiMgOTUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5FR0lORklOSVRZIClcbiMgMzQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTQgLT5cbiMgOTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTUgLT5cbiMgOTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTYgLT5cbiMgMTAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBOQU4gKVxuIyAzNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNyAtPlxuIyAxMDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIExleHhlcl91dGlscy5zdHJpbmcybnVtIChMZXhpbmcubGV4ZW1lIGxleGJ1Zikgd2l0aFxuICAgICAgfCBJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfaW50ZWdlciB0b2tcbiAgICAgIHwgTEFSR0VJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfbGFyZ2VpbnQgdG9rXG4gICAgICB8IHRvayAtPiB0b2tcbiAgICApXG4jIDM3MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE4IC0+XG4jIDExMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgKEZMT0FUIChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSkpIClcbiMgMzc4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTkgLT5cbiMgMTEyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyBcIlwiIClcbiMgMzgzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjAgLT5cbmxldFxuIyAxMTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzXG4jIDM4OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbj0gTGV4aW5nLnN1Yl9sZXhlbWUgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAxKSAobGV4YnVmLkxleGluZy5sZXhfY3Vycl9wb3MgKyAtMSkgaW5cbiMgMTE0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyAoTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzKSApXG4jIDM5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIxIC0+XG4jIDExNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBFT0YgKVxuIyAzOTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMiAtPlxuIyAxMTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZCBsZXhidWYgKVxuIyA0MDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMyAtPlxuIyAxMjAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkIGxleGJ1ZjsgKVxuIyA0MDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNCAtPlxuIyAxMjIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWRfY29tbWVudCBsZXhidWY7IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI1IC0+XG4jIDEyOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDI2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjYgLT5cbiMgMTM0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKSApXG4jIDQzMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1lbnQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIDg4XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEzOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCAoKSApXG4jIDQ0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgMTQxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgMTQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgXCJ1bmV4cGVjdGVkIEVPRiBpbiBjb21tZW50XCIgKVxuIyA0NTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDE0NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDE0NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIGVuZFxuXG4jIDQ2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbiIsIm1vZHVsZSBZb2pzb24gPSBTdGQuWW9qc29uXG5vcGVuIEJyclxuXG50eXBlIG1ldGhvZCcgPSBHZXQgfCBQb3N0XG5cbmxldCBqc3RyX29mX21ldGhvZCA9IGZ1bmN0aW9uIEdldCAtPiBKc3RyLnYgXCJHRVRcIiB8IFBvc3QgLT4gSnN0ci52IFwiUE9TVFwiXG5cbm1vZHVsZSBUeXBlcyA9IHN0cnVjdFxuICB0eXBlIG9yZGVyID0gQXNjZW5kaW5nIHwgRGVzY2VuZGluZyBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBzb3J0ID1cbiAgICB8IEFsYnVtXG4gICAgfCBBbGJ1bUFydGlzdFxuICAgIHwgQXJ0aXN0XG4gICAgfCBCdWRnZXRcbiAgICB8IENvbW11bml0eVJhdGluZ1xuICAgIHwgQ3JpdGljUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZVBsYXllZFxuICAgIHwgUGxheUNvdW50XG4gICAgfCBQcmVtaWVyZURhdGVcbiAgICB8IFByb2R1Y3Rpb25ZZWFyXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgUmFuZG9tXG4gICAgfCBSZXZlbnVlXG4gICAgfCBSdW50aW1lXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cbmVuZFxuXG50eXBlIHVzZXIgPSB7XG4gIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgc2VydmVyX25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG59XG5bQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbm1vZHVsZSB0eXBlIFF1ZXJ5ID0gc2lnXG4gIHR5cGUgcGF0aF9wYXJhbXNcbiAgdHlwZSBwYXJhbXMgW0BAZGVyaXZpbmcgeW9qc29uXVxuICB0eXBlIHJlc3BvbnNlIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB2YWwgbWV0aG9kJyA6IG1ldGhvZCdcbiAgdmFsIGVuZHBvaW50IDogcGF0aF9wYXJhbXMgLT4gc3RyaW5nIGxpc3RcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIlVzZXJzXCI7IFwiQXV0aGVudGljYXRlQnlOYW1lXCIgXVxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiSXRlbXNcIiBdXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gWyBcIlVzZXJzXCI7IHBwLnVzZXJfaWQ7IFwiVmlld3NcIiBdXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkxpYnJhcnlcIjsgXCJWaXJ0dWFsRm9sZGVyc1wiIF1cbmVuZFxuXG5tb2R1bGUgU3lzdGVtID0gc3RydWN0XG4gIG1vZHVsZSBJbmZvID0gc3RydWN0XG4gICAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICAgdHlwZSByZXNwb25zZSA9IHtcbiAgICAgIGxvY2FsX2FkZHJlc3MgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJMb2NhbEFkcmVzc1wiXVxuICAgICAgc2VydmVyX25hbWUgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICAgICAgcHJvZHVjdF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiUHJvZHVjdE5hbWVcIl1cbiAgICAgIG9wZXJhdGluZ19zeXN0ZW0gOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJPcGVyYXRpbmdTeXN0ZW1cIl1cbiAgICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgfVxuICAgIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICAgIGxldCBtZXRob2QnID0gR2V0XG4gICAgbGV0IGVuZHBvaW50IF8gPSBbIFwiU3lzdGVtXCI7IFwiSW5mb1wiIF1cbiAgZW5kXG5lbmRcblxuKCogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBiZSBmaWxsZWQgYnkgdGhlIGFwcCAqKVxubGV0IHNlc3Npb25fdXVpZCA9IHJlZiBOb25lXG5sZXQgc2V0X3Nlc3Npb25fdXVpZCBzID0gc2Vzc2lvbl91dWlkIDo9IFNvbWUgc1xuXG5sZXQgYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgPVxuICBsZXQgdG9rZW4gPVxuICAgIG1hdGNoIHRva2VuIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSB0IC0+IFByaW50Zi5zcHJpbnRmIFwiLCBUb2tlbj0lU1wiIHRcbiAgaW5cbiAgbGV0IHNlc3Npb25fdXVpZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiICFzZXNzaW9uX3V1aWQgaW5cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIk1lZGlhQnJvd3NlciBDbGllbnQ9XFxcIk9jYW1peFxcXCIsIERldmljZT1cXFwiRmlyZWZveFxcXCIsIERldmljZUlkPVxcXCIlc1xcXCIsIFxcXG4gICAgIFZlcnNpb249XFxcIjAuMVxcXCIlc1wiXG4gICAgc2Vzc2lvbl91dWlkIHRva2VuXG5cbmxldCByZXF1ZXN0ICh0eXBlIHBwIHAgcikgfmJhc2VfdXJsID90b2tlbiA/aGVhZGVyc1xuICAgIChtb2R1bGUgUSA6IFF1ZXJ5XG4gICAgICB3aXRoIHR5cGUgcGF0aF9wYXJhbXMgPSBwcFxuICAgICAgIGFuZCB0eXBlIHBhcmFtcyA9IHBcbiAgICAgICBhbmQgdHlwZSByZXNwb25zZSA9IHIpIChwYXJhbXMgOiBwKSAocGF0aF9wYXJhbXMgOiBwcCkgOiByIEZ1dC5vcl9lcnJvciA9XG4gIGxldCBvcGVuIEJycl9pby5GZXRjaCBpblxuICBsZXQgYmFzZV91cmkgPSBVcmkudiAoSnN0ci52IGJhc2VfdXJsKSBpblxuICBsZXQgYmFzZV9wYXRoX3NlZ21lbnRzID0gUmVzdWx0LmdldF9vayBAQCBVcmkucGF0aF9zZWdtZW50cyBiYXNlX3VyaSBpblxuICBsZXQgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyA9IExpc3QubWFwIEpzdHIudiAoUS5lbmRwb2ludCBwYXRoX3BhcmFtcykgaW5cbiAgbGV0IHBhdGhfc2VnbWVudHMgPVxuICAgIGlmIGJhc2VfcGF0aF9zZWdtZW50cyA9IFsgSnN0ci5lbXB0eSBdIHRoZW4gZW5kcG9pbnRfcGF0aF9zZWdtZW50c1xuICAgIGVsc2UgTGlzdC5jb25jYXQgWyBiYXNlX3BhdGhfc2VnbWVudHM7IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgXVxuICBpblxuICBsZXQgdXJpID0gVXJpLndpdGhfcGF0aF9zZWdtZW50cyBiYXNlX3VyaSBwYXRoX3NlZ21lbnRzIGluXG4gIGxldCB1cmkgPSBSZXN1bHQuZ2V0X29rIHVyaSBpblxuICBsZXQgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24gP3Rva2VuICgpIGluXG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBzdGF0dXNfdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IFwiVW5rbm93blwiXG4gIHwgSW5fc3luYyAtPiBcIlN5bmNocm9uaXplZFwiXG4gIHwgSW5jb25zaXN0ZW50IC0+IFwiSW5jb25zaXN0ZW50XCJcbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBGb3JtYXQuc3ByaW50ZiBcIk5ldyBpdGVtczogbGFzdDogJWkgbWlzc2luZzogJWkgdW5mZXRjaGVkOiAlaVwiXG4gICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IGZpcnN0X21pc3Npbmdfa2V5IGZpcnN0X3VuZmV0Y2hlZF9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgRm9ybWF0LnNwcmludGYgXCJQYXJ0aWFsOiBsYXN0OiAlaSB1bmZldGNoZWQ6ICVpXCIgZmlyc3RfdW5mZXRjaGVkX2tleVxuICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5XG5cbmxldCBwcF9wcm9ncmVzcyBmbXQgeyB0b3RhbDsgcmVtYWluaW5nIH0gPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIoJWkvJWkpXCIgcmVtYWluaW5nIHRvdGFsXG5cbmxldCBwcF9yZXBvcnQgZm10IHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gPVxuICBsZXQgc3RhdHVzID0gc3RhdHVzX3RvX3N0cmluZyBzdGF0dXMgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJXMlYVwiIHN0YXR1c1xuICAgIChGb3JtYXQucHBfcHJpbnRfb3B0aW9uIHBwX3Byb2dyZXNzKVxuICAgIHN5bmNfcHJvZ3Jlc3NcblxubGV0IGxvZ19zdGF0dXMgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBzdGF0dXMgaXMgdW5rbm93blwiIF1cbiAgfCBJbl9zeW5jIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2UgaXMgc3luY2hyb25pemVkXCIgXVxuICB8IEluY29uc2lzdGVudCAtPiBDb25zb2xlLndhcm4gWyBcIkRhdGFiYXNlIGlzIG91dC1vZi1zeW5jXCIgXVxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlLlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfbWlzc2luZ19rZXkgKyAxO1xuICAgICAgICAgIFwibmV3IGl0ZW1zXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJTb21lIGl0ZW1zIGhhdmUgbm90IGJlZW4gZmV0Y2hlZCB5ZXQuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG5cbmxldCBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCogZGJfaW5mb3MgPSBnZXRfZGJfaW5mb3MgaWRiIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdG90YWxfaXRlbV9jb3VudCA9IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlIGluXG4gICgqIEtleXMgc3RhcnQgYXQgMCwgaXQncyBuYXR1cmFsIHRvIGNvdW50IGl0ZW0gYnkgc3RhcnRpbmcgd2l0aCAwICopXG4gIGxldCBsYXN0X3NvdXJjZV9pdGVtX2tleSA9IHRvdGFsX2l0ZW1fY291bnQgLSAxIGluXG4gIGlmIG5vdCAoaXNfZGJfY29uc2lzdGVudCB+c291cmNlIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9pbmZvcykgdGhlblxuICAgIEluY29uc2lzdGVudFxuICBlbHNlXG4gICAgbWF0Y2ggZGJfaW5mb3Mgd2l0aFxuICAgIHwgeyBsYXN0X2tleSA9IE5vbmU7IGxhc3RfdmFsdWUgPSBOb25lIH0gLT5cbiAgICAgICAgKCogVGhlIGRiIGhhcyBub3QgeWV0IGJlZW4gcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXJzICopXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0gMDtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwO1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5IDwgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+XG4gICAgICAgICgqIE5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2Ugc2luY2UgdGhlIGxhc3Qgc3luYyAqKVxuICAgICAgICBsZXQgZmlyc3RfdW5mZXRjaGVkX2tleSA9XG4gICAgICAgICAgbWF0Y2ggaXRlbSB3aXRoIE5vbmUgLT4gMCB8IFNvbWUgeyBpZDsgXyB9IC0+IGlkICsgMVxuICAgICAgICBpblxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IGtleSArIDE7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5O1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5ID0gbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+IChcbiAgICAgICAgbWF0Y2ggaXRlbSB3aXRoXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gd2hlbiBpZCA9IGtleSAtPiBJbl9zeW5jXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gaWQgKyAxOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9KVxuICAgIHwgXyAtPiBJbmNvbnNpc3RlbnRcblxubGV0IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB2aWV3cyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLlZpZXdzKVxuICAgICAgeyBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgPSBmYWxzZSB9XG4gICAgICB7IHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkIH1cbiAgaW5cbiAgTGlzdC5pdGVyIHZpZXdzLml0ZW1zIH5mOihmdW4gKGl0ZW0gOiBJdGVtLnQpIC0+XG4gICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgIGluXG4gICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgSS5wdXQgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IC0xOyB2aWV3cyA9IFtdOyBzb3J0X25hbWUgfTsgaXRlbSB9IHNfaXRlbXNcbiAgICAgIHw+IGlnbm9yZSk7XG4gIHZpZXdzXG5cbmxldCBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlICh2aWV3cyA6IFZpZXdzLnJlc3BvbnNlKSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4geyBJdGVtLmlkOyBfIH0gPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gU29tZSBpZDtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZm9sZF9sZWZ0IH5pbml0OlN0cmluZy5TZXQuZW1wdHkgcmVzLml0ZW1zXG4gICAgICB+ZjooZnVuIHNldCB7IEl0ZW0ucGFyZW50X2lkOyBfIH0gLT5cbiAgICAgICAgbWF0Y2ggcGFyZW50X2lkIHdpdGhcbiAgICAgICAgfCBOb25lIHwgU29tZSBOb25lIC0+IHNldFxuICAgICAgICB8IFNvbWUgKFNvbWUgcGlkKSAtPiBTdHJpbmcuU2V0LmFkZCBwaWQgc2V0KVxuICBpblxuICBsZXQgcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBTdHJpbmcuU2V0LnRvX2xpc3QgcGFyZW50cztcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGF0aCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZmlsdGVyX21hcCByZXMuaXRlbXMgfmY6KGZ1biB7IEl0ZW0uaWQ7IHBhdGg7IF8gfSAtPlxuICAgICAgICBPcHRpb24ubWFwIChmdW4gcGF0aCAtPiAoaWQsIHBhdGgpKSBwYXRoKVxuICBpblxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCsgcmVzdWx0ID1cbiAgICBMaXN0Lm1hcCB2aWV3cy5pdGVtcyB+ZjooZnVuICh7IEl0ZW0uaWQ7IF8gfSBhcyB2aWV3KSAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQqIHBhcmVudHMgPSBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4gdmlldyBpblxuICAgICAgICBsZXQrIHBhdGhzID0gcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzIGluXG4gICAgICAgIChpZCwgcGF0aHMpKVxuICAgIHw+IEZ1dC5vZl9saXN0XG4gIGluXG4gIFJlc3VsdC5mbGF0dGVuX2wgcmVzdWx0XG5cbmxldCB2aWV3c19vZl9wYXRoICh2Zm9sZGVycyA6IChzdHJpbmcgKiAoc3RyaW5nICogc3RyaW5nKSBsaXN0KSBsaXN0KSBwYXRoID1cbiAgKCogV2UgbG9vayBhdCB0aGUgcHJlZml4IG9mIGEgcGF0aCB0byBkZXRlcm1pbmUgd2hpY2ggdmlydHVhbF9mb2xkZXIgKGFuZCB0aHVzXG4gICAgIHZpZXcpIGl0J3MgYSBwYXJ0IG9mLiAqKVxuICBMaXN0LmZpbHRlcl9tYXAgdmZvbGRlcnMgfmY6KGZ1biAodmlld19pZCwgbG9jYXRpb25zKSAtPlxuICAgICAgaWYgTGlzdC5leGlzdHMgbG9jYXRpb25zIH5mOihmdW4gKF8sIHByZSkgLT4gU3RyaW5nLnByZWZpeCB+cHJlIHBhdGgpIHRoZW5cbiAgICAgICAgU29tZSB2aWV3X2lkXG4gICAgICBlbHNlIE5vbmUpXG5cbmxldCBzeW5jID8ocmVwb3J0ID0gZnVuIF8gLT4gKCkpIH4oc291cmNlIDogU291cmNlLmNvbm5leGlvbikgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0IGxhc3QgPVxuICAgICgqIHRvZG86IGVycm9yIGhhbmRsaW5nICopXG4gICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgaW5cbiAgICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICBmb3IgaSA9IGZpcnN0IHRvIGxhc3QgZG9cbiAgICAgIGlnbm9yZSBAQCBPSS5wdXQgeyBpZCA9IGk7IGl0ZW0gPSBOb25lIH0gc3RvcmVcbiAgICBkb25lXG4gIGluXG4gIGxldCBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0IGxhc3QgPVxuICAgIGxldCBvcGVuIFNvdXJjZSBpblxuICAgIGxldCogdmlld3MgPSB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiBpblxuICAgIGxldCogdmZvbGRlcnMgPSBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlIHZpZXdzIGluXG4gICAgbGV0ICgpID0gQ29uc29sZS5pbmZvIFsgXCJGZXRjaGluZyBpdGVtc1wiOyBmaXJzdDsgXCJ0b1wiOyBsYXN0OyBcIjpcIiBdIGluXG4gICAgbGV0IGZldGNoX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IHRvdGFsID0gbGFzdCAtIGZpcnN0ICsgMSBpblxuICAgIGxldCByZWMgZW5xdWV1ZSB+c3RhcnRfaW5kZXggdG9kbyA9XG4gICAgICBpZiB0b2RvID4gMCB0aGVuIChcbiAgICAgICAgbGV0IGxpbWl0ID0gbWluIHRvZG8gY2h1bmtfc2l6ZSBpblxuICAgICAgICBsZXQgcmVxID1cbiAgICAgICAgICBBcGkuSXRlbXMuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpICopXG4gICAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZDsgUGF0aCBdO1xuICAgICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gU29tZSBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgbGltaXQgPSBTb21lIGxpbWl0O1xuICAgICAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGluXG4gICAgICAgIFF1ZXVlLmFkZCByZXEgZmV0Y2hfcXVldWU7XG4gICAgICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OihzdGFydF9pbmRleCArIGxpbWl0KSAodG9kbyAtIGxpbWl0KSlcbiAgICBpblxuICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OmZpcnN0IHRvdGFsO1xuICAgIGxldCB0b3RhbF9xdWVyaWVzID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIGluXG4gICAgbGV0IHJlYyBydW5fcXVldWUgPyh0aHJlYWRzID0gMSkgcSA9XG4gICAgICBhc3NlcnQgKHRocmVhZHMgPiAwKTtcbiAgICAgIGxldCByZWMgdGFrZV9uIGFjYyBuID1cbiAgICAgICAgaWYgbiA9IDAgdGhlbiBMaXN0LnJldiBhY2NcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHEgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICAgICAgICB8IFNvbWUgZWx0IC0+IHRha2VfbiAoZWx0IDo6IGFjYykgKG4gLSAxKVxuICAgICAgaW5cbiAgICAgIGxldCBmIHJlcSA9XG4gICAgICAgIGxldCsgeyBBcGkuSXRlbXMuc3RhcnRfaW5kZXg7IGl0ZW1zOyBfIH0gPVxuICAgICAgICAgIHF1ZXJ5IHNvdXJjZSAobW9kdWxlIEFwaS5JdGVtcykgcmVxICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgcmVwb3J0XG4gICAgICAgICAgQEAgU29tZVxuICAgICAgICAgICAgICAgeyB0b3RhbCA9IHRvdGFsX3F1ZXJpZXM7IHJlbWFpbmluZyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSB9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtcyA9XG4gICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBzX2xpc3QgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgTGlzdC5pdGVyaSBpdGVtcyB+ZjooZnVuIGluZGV4ICh7IEFwaS5JdGVtLmlkOyBwYXRoOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gc3RhcnRfaW5kZXggKyBpbmRleCBpblxuICAgICAgICAgICAgICBsZXQgcGF0aCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHZpZXdzID0gdmlld3Nfb2ZfcGF0aCB2Zm9sZGVycyBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICAgICAgICAgIGlnbm9yZSAoT0kucHV0IHsgaWQgPSBpbmRleDsgaXRlbSA9IFNvbWUgaWQgfSBzX2xpc3QpO1xuICAgICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgICAgICAoSS5wdXRcbiAgICAgICAgICAgICAgICAgICB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gaW5kZXg7IHZpZXdzOyBzb3J0X25hbWUgfTsgaXRlbSB9XG4gICAgICAgICAgICAgICAgICAgc19pdGVtcykpXG4gICAgICAgIGluXG4gICAgICAgIGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zXG4gICAgICBpblxuICAgICAgbGV0IHJlcXMgPSB0YWtlX24gW10gdGhyZWFkcyBpblxuICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgbGV0KiByZXFzID0gRnV0Lm9mX2xpc3QgKExpc3QubWFwIH5mIHJlcXMpIGluXG4gICAgICBpZiBMaXN0LmlzX2VtcHR5IHJlcXMgdGhlbiBGdXQub2sgKCkgZWxzZSBydW5fcXVldWUgcVxuICAgIGluXG4gICAgcnVuX3F1ZXVlIGZldGNoX3F1ZXVlXG4gIGluXG4gIGZ1bmN0aW9uXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3RfbWlzc2luZ19rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgSW5jb25zaXN0ZW50IC0+IEZ1dC5vayAoKVxuICB8IF8gLT4gRnV0Lm9rICgpXG5cbmxldCBjaGVja19hbmRfc3luYyA/cmVwb3J0IH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiBzdGF0dXMgPSBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgaW5cbiAgbGV0IGluaXRpYWwgPSB7IGluaXRpYWxfcmVwb3J0IHdpdGggc3RhdHVzIH0gaW5cbiAgbGV0IHJlcG9ydCcgPVxuICAgIE9wdGlvbi5tYXBcbiAgICAgIChmdW4gcmVwb3J0IC0+XG4gICAgICAgIGxldCAoKSA9ICgqIFNlbmQgYSBmaXJzdCByZXBvcnQgKikgcmVwb3J0IGluaXRpYWwgaW5cbiAgICAgICAgZnVuIHN5bmNfcHJvZ3Jlc3MgLT4gcmVwb3J0IHsgaW5pdGlhbCB3aXRoIHN5bmNfcHJvZ3Jlc3MgfSlcbiAgICAgIHJlcG9ydFxuICBpblxuICBsZXQrICgpID0gc3luYyA/cmVwb3J0OnJlcG9ydCcgfnNvdXJjZSBpZGIgc3RhdHVzIGluXG4gIE9wdGlvbi5pdGVyXG4gICAgKGZ1biByZXBvcnQgLT4gcmVwb3J0IHsgc3RhdHVzID0gSW5fc3luYzsgc3luY19wcm9ncmVzcyA9IE5vbmUgfSlcbiAgICByZXBvcnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgR2FicmllbCBTY2hlcmVyLCBwcm9qZXQgUGFydG91dCwgSU5SSUEgUGFyaXMtU2FjbGF5ICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDYW1saW50ZXJuYWxBdG9taWMgaXMgYSBkZXBlbmRlbmN5IG9mIFN0ZGxpYiwgc28gaXQgaXMgY29tcGlsZWQgd2l0aFxuICAgLW5vcGVydmFzaXZlcy4gKilcbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBXZSBhcmUgbm90IHJldXNpbmcgKCdhIHJlZikgZGlyZWN0bHkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVhc29uXG4gICBhYm91dCBhdG9taWNpdHkgaWYgd2Ugd2lzaCB0bzogZXZlbiBpbiBhIHNlcXVlbnRpYWwgaW1wbGVtZW50YXRpb24sXG4gICBzaWduYWxzIGFuZCBvdGhlciBhc3luY2hyb25vdXMgY2FsbGJhY2tzIG1pZ2h0IGJyZWFrIGF0b21pY2l0eS4gKilcbnR5cGUgJ2EgdCA9IHttdXRhYmxlIHY6ICdhfVxuXG5sZXQgbWFrZSB2ID0ge3Z9XG5sZXQgZ2V0IHIgPSByLnZcbmxldCBzZXQgciB2ID0gci52IDwtIHZcblxuKCogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHNldCB0byBuZXZlciBiZSBpbmxpbmVkOiBGbGFtYmRhIGlzXG4gICBhbGxvd2VkIHRvIG1vdmUgc3Vycm91bmRpbmcgY29kZSBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sXG4gICBpbmNsdWRpbmcgYWxsb2NhdGlvbnMuICopXG5cbmxldFtAaW5saW5lIG5ldmVyXSBleGNoYW5nZSByIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gdjtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGNvbXBhcmVfYW5kX3NldCByIHNlZW4gdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIGlmIGN1ciA9PSBzZWVuIHRoZW4gKFxuICAgIHIudiA8LSB2O1xuICAgICgqIEVORCBBVE9NSUMgKilcbiAgICB0cnVlXG4gICkgZWxzZVxuICAgIGZhbHNlXG5cbmxldFtAaW5saW5lIG5ldmVyXSBmZXRjaF9hbmRfYWRkIHIgbiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSAoY3VyICsgbik7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4Y2VwdGlvbnMgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICAoKiBmb3IgcnVudGltZS9mYWlsX25hdC5jICopXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5hcnJheV9ib3VuZF9lcnJvclwiXG4gICAgKEludmFsaWRfYXJndW1lbnQgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpXG5cbmV4dGVybmFsIHJhaXNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2VcIlxuZXh0ZXJuYWwgcmFpc2Vfbm90cmFjZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlX25vdHJhY2VcIlxuXG5sZXQgZmFpbHdpdGggcyA9IHJhaXNlKEZhaWx1cmUgcylcbmxldCBpbnZhbGlkX2FyZyBzID0gcmFpc2UoSW52YWxpZF9hcmd1bWVudCBzKVxuXG5leGNlcHRpb24gRXhpdFxuZXhjZXB0aW9uIE1hdGNoX2ZhaWx1cmUgPSBNYXRjaF9mYWlsdXJlXG5leGNlcHRpb24gQXNzZXJ0X2ZhaWx1cmUgPSBBc3NlcnRfZmFpbHVyZVxuZXhjZXB0aW9uIEludmFsaWRfYXJndW1lbnQgPSBJbnZhbGlkX2FyZ3VtZW50XG5leGNlcHRpb24gRmFpbHVyZSA9IEZhaWx1cmVcbmV4Y2VwdGlvbiBOb3RfZm91bmQgPSBOb3RfZm91bmRcbmV4Y2VwdGlvbiBPdXRfb2ZfbWVtb3J5ID0gT3V0X29mX21lbW9yeVxuZXhjZXB0aW9uIFN0YWNrX292ZXJmbG93ID0gU3RhY2tfb3ZlcmZsb3dcbmV4Y2VwdGlvbiBTeXNfZXJyb3IgPSBTeXNfZXJyb3JcbmV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSA9IEVuZF9vZl9maWxlXG5leGNlcHRpb24gRGl2aXNpb25fYnlfemVybyA9IERpdmlzaW9uX2J5X3plcm9cbmV4Y2VwdGlvbiBTeXNfYmxvY2tlZF9pbyA9IFN5c19ibG9ja2VkX2lvXG5leGNlcHRpb24gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUgPSBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuXG4oKiBDb21wb3NpdGlvbiBvcGVyYXRvcnMgKilcblxuZXh0ZXJuYWwgKCB8PiApIDogJ2EgLT4gKCdhIC0+ICdiKSAtPiAnYiA9IFwiJXJldmFwcGx5XCJcbmV4dGVybmFsICggQEAgKSA6ICgnYSAtPiAnYikgLT4gJ2EgLT4gJ2IgPSBcIiVhcHBseVwiXG5cbigqIERlYnVnZ2luZyAqKVxuXG5leHRlcm5hbCBfX0xPQ19fIDogc3RyaW5nID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0ZJTEVfXyA6IHN0cmluZyA9IFwiJWxvY19GSUxFXCJcbmV4dGVybmFsIF9fTElORV9fIDogaW50ID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19NT0RVTEVfXyA6IHN0cmluZyA9IFwiJWxvY19NT0RVTEVcIlxuZXh0ZXJuYWwgX19QT1NfXyA6IHN0cmluZyAqIGludCAqIGludCAqIGludCA9IFwiJWxvY19QT1NcIlxuZXh0ZXJuYWwgX19GVU5DVElPTl9fIDogc3RyaW5nID0gXCIlbG9jX0ZVTkNUSU9OXCJcblxuZXh0ZXJuYWwgX19MT0NfT0ZfXyA6ICdhIC0+IHN0cmluZyAqICdhID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0xJTkVfT0ZfXyA6ICdhIC0+IGludCAqICdhID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19QT1NfT0ZfXyA6ICdhIC0+IChzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQpICogJ2EgPSBcIiVsb2NfUE9TXCJcblxuKCogQ29tcGFyaXNvbnMgKilcblxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbmxldCBtaW4geCB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggIT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcVwiXG5cbigqIEJvb2xlYW4gb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5cbigqIEludGVnZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tICkgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsICggfisgKSA6IGludCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgKCAtICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCAoICogKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsICggLyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgKCBtb2QgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcblxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5cbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5cbmxldCBsbm90IHggPSB4IGx4b3IgKC0xKVxuXG5leHRlcm5hbCAoIGxzbCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgKCBsc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmV4dGVybmFsICggYXNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5cbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuXG4oKiBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zX2Zsb2F0XCIgXCJhY29zXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luX2Zsb2F0XCIgXCJhc2luXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuX2Zsb2F0XCIgXCJhdGFuXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4yIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbjJfZmxvYXRcIiBcImF0YW4yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGh5cG90IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc19mbG9hdFwiIFwiY29zXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc2hfZmxvYXRcIiBcImNhbWxfYWNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Rhbl9mbG9hdFwiIFwidGFuXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5oX2Zsb2F0XCIgXCJ0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5leHRlcm5hbCBjb3B5c2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1vZF9mbG9hdFwiIFwiZm1vZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIGZsb2F0X29mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGludF9vZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmxldCBpbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuZWdfaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4RkZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmFuID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAxTFxubGV0IG1heF9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9FRl9GRl9GRl9GRl9GRl9GRl9GRkxcbmxldCBtaW5fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4MDBfMTBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgZXBzaWxvbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgzQ19CMF8wMF8wMF8wMF8wMF8wMF8wMExcblxudHlwZSBmcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5cbigqIFN0cmluZyBhbmQgYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlcyBTdHJpbmcgYW5kIEJ5dGVzICopXG5cbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19sZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBzdHJpbmdfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc19ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc191bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0ICggXiApIHMxIHMyID1cbiAgbGV0IGwxID0gc3RyaW5nX2xlbmd0aCBzMSBhbmQgbDIgPSBzdHJpbmdfbGVuZ3RoIHMyIGluXG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIChsMSArIGwyKSBpblxuICBzdHJpbmdfYmxpdCBzMSAwIHMgMCBsMTtcbiAgc3RyaW5nX2JsaXQgczIgMCBzIGwxIGwyO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgQ2hhciAqKVxuXG5leHRlcm5hbCBpbnRfb2ZfY2hhciA6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NoYXJfb2ZfaW50IDogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcImNoYXJfb2ZfaW50XCIgZWxzZSB1bnNhZmVfY2hhcl9vZl9pbnQgblxuXG4oKiBVbml0IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFBhaXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBmc3QgOiAnYSAqICdiIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsIHNuZCA6ICdhICogJ2IgLT4gJ2IgPSBcIiVmaWVsZDFcIlxuXG4oKiBSZWZlcmVuY2VzICopXG5cbnR5cGUgJ2EgcmVmID0geyBtdXRhYmxlIGNvbnRlbnRzIDogJ2EgfVxuZXh0ZXJuYWwgcmVmIDogJ2EgLT4gJ2EgcmVmID0gXCIlbWFrZW11dGFibGVcIlxuZXh0ZXJuYWwgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgKCA6PSApIDogJ2EgcmVmIC0+ICdhIC0+IHVuaXQgPSBcIiVzZXRmaWVsZDBcIlxuZXh0ZXJuYWwgaW5jciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWluY3JcIlxuZXh0ZXJuYWwgZGVjciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWRlY3JcIlxuXG4oKiBSZXN1bHQgdHlwZSAqKVxuXG50eXBlICgnYSwnYikgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnYlxuXG4oKiBTdHJpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG5sZXQgc3RyaW5nX29mX2Jvb2wgYiA9XG4gIGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxubGV0IGJvb2xfb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgXyAtPiBpbnZhbGlkX2FyZyBcImJvb2xfb2Zfc3RyaW5nXCJcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbiAgfCBfIC0+IE5vbmVcblxubGV0IHN0cmluZ19vZl9pbnQgbiA9XG4gIGZvcm1hdF9pbnQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5cbmxldCBpbnRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmV4dGVybmFsIHN0cmluZ19nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuXG5sZXQgdmFsaWRfZmxvYXRfbGV4ZW0gcyA9XG4gIGxldCBsID0gc3RyaW5nX2xlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID49IGwgdGhlbiBzIF4gXCIuXCIgZWxzZVxuICAgIG1hdGNoIHN0cmluZ19nZXQgcyBpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gbG9vcCAoaSArIDEpXG4gICAgfCBfIC0+IHNcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzdHJpbmdfb2ZfZmxvYXQgZiA9IHZhbGlkX2Zsb2F0X2xleGVtIChmb3JtYXRfZmxvYXQgXCIlLjEyZ1wiIGYpXG5cbmV4dGVybmFsIGZsb2F0X29mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxuXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuKCogTGlzdCBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIExpc3QgKilcblxubGV0IHJlYyAoIEAgKSBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGhkIDo6IHRsIC0+IGhkIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxubGV0IGV4aXRfZnVuY3Rpb24gPSBDYW1saW50ZXJuYWxBdG9taWMubWFrZSBmbHVzaF9hbGxcblxubGV0IHJlYyBhdF9leGl0IGYgPVxuICBsZXQgbW9kdWxlIEF0b21pYyA9IENhbWxpbnRlcm5hbEF0b21pYyBpblxuICAoKiBNUFIjNzI1MywgTVBSIzc3OTY6IG1ha2Ugc3VyZSBcImZcIiBpcyBleGVjdXRlZCBvbmx5IG9uY2UgKilcbiAgbGV0IGZfeWV0X3RvX3J1biA9IEF0b21pYy5tYWtlIHRydWUgaW5cbiAgbGV0IG9sZF9leGl0ID0gQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uIGluXG4gIGxldCBuZXdfZXhpdCAoKSA9XG4gICAgaWYgQXRvbWljLmNvbXBhcmVfYW5kX3NldCBmX3lldF90b19ydW4gdHJ1ZSBmYWxzZSB0aGVuIGYgKCkgO1xuICAgIG9sZF9leGl0ICgpXG4gIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBleGl0X2Z1bmN0aW9uIG9sZF9leGl0IG5ld19leGl0IGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gYXRfZXhpdCBmXG5cbmxldCBkb19hdF9leGl0ICgpID0gKENhbWxpbnRlcm5hbEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbikgKClcblxubGV0IGV4aXQgcmV0Y29kZSA9XG4gIGRvX2F0X2V4aXQgKCk7XG4gIHN5c19leGl0IHJldGNvZGVcblxubGV0IF8gPSByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiIGRvX2F0X2V4aXRcblxuZXh0ZXJuYWwgbWFqb3IgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZ2NfbWFqb3JcIlxuZXh0ZXJuYWwgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCA6IHVuaXQgLT4gYm9vbFxuICA9IFwiY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZFwiXG5sZXQgKCkgPSBpZiBuYWtlZF9wb2ludGVyc19jaGVja2VkICgpIHRoZW4gYXRfZXhpdCBtYWpvclxuXG4oKk1PRFVMRV9BTElBU0VTKilcbm1vZHVsZSBBcmcgICAgICAgICAgPSBBcmdcbm1vZHVsZSBBcnJheSAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICA9IEFycmF5TGFiZWxzXG5tb2R1bGUgQXRvbWljICAgICAgID0gQXRvbWljXG5tb2R1bGUgQmlnYXJyYXkgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgPSBCb29sXG5tb2R1bGUgQnVmZmVyICAgICAgID0gQnVmZmVyXG5tb2R1bGUgQnl0ZXMgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgPSBCeXRlc0xhYmVsc1xubW9kdWxlIENhbGxiYWNrICAgICA9IENhbGxiYWNrXG5tb2R1bGUgQ2hhciAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICA9IENvbXBsZXhcbm1vZHVsZSBEaWdlc3QgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBFaXRoZXIgICAgICAgPSBFaXRoZXJcbm1vZHVsZSBFcGhlbWVyb24gICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgPSBGaWxlbmFtZVxubW9kdWxlIEZsb2F0ICAgICAgICA9IEZsb2F0XG5tb2R1bGUgRm9ybWF0ICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgID0gRnVuXG5tb2R1bGUgR2MgICAgICAgICAgID0gR2Ncbm1vZHVsZSBHZW5sZXggICAgICAgPSBHZW5sZXhcbm1vZHVsZSBIYXNodGJsICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgID0gSW5fY2hhbm5lbFxubW9kdWxlIEludCAgICAgICAgICA9IEludFxubW9kdWxlIEludDMyICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgID0gSW50NjRcbm1vZHVsZSBMYXp5ICAgICAgICAgPSBMYXp5XG5tb2R1bGUgTGV4aW5nICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgID0gTGlzdFxubW9kdWxlIExpc3RMYWJlbHMgICA9IExpc3RMYWJlbHNcbm1vZHVsZSBNYXAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgPSBNYXJzaGFsXG5tb2R1bGUgTW9yZUxhYmVscyAgID0gTW9yZUxhYmVsc1xubW9kdWxlIE5hdGl2ZWludCAgICA9IE5hdGl2ZWludFxubW9kdWxlIE9iaiAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICA9IE9vXG5tb2R1bGUgT3B0aW9uICAgICAgID0gT3B0aW9uXG5tb2R1bGUgT3V0X2NoYW5uZWwgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgPSBQYXJzaW5nXG5tb2R1bGUgUGVydmFzaXZlcyAgID0gUGVydmFzaXZlc1xubW9kdWxlIFByaW50ZXhjICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgID0gUHJpbnRmXG5tb2R1bGUgUXVldWUgICAgICAgID0gUXVldWVcbm1vZHVsZSBSYW5kb20gICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgPSBSZXN1bHRcbm1vZHVsZSBTY2FuZiAgICAgICAgPSBTY2FuZlxubW9kdWxlIFNlcSAgICAgICAgICA9IFNlcVxubW9kdWxlIFNldCAgICAgICAgICA9IFNldFxubW9kdWxlIFN0YWNrICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgID0gU3RkTGFiZWxzXG5tb2R1bGUgU3RyZWFtICAgICAgID0gU3RyZWFtXG5tb2R1bGUgU3RyaW5nICAgICAgID0gU3RyaW5nXG5tb2R1bGUgU3RyaW5nTGFiZWxzID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgID0gU3lzXG5tb2R1bGUgVWNoYXIgICAgICAgID0gVWNoYXJcbm1vZHVsZSBVbml0ICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgID0gV2Vha1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgIFRoaXMgaXMgYSBsYWdnZWQtRmlib25hY2NpIEYoNTUsIDI0LCArKSB3aXRoIGEgbW9kaWZpZWQgYWRkaXRpb25cbiAgIGZ1bmN0aW9uIHRvIGVuaGFuY2UgdGhlIG1peGluZyBvZiBiaXRzLlxuICAgSWYgd2UgdXNlIG5vcm1hbCBhZGRpdGlvbiwgdGhlIGxvdy1vcmRlciBiaXQgZmFpbHMgdGVzdHMgMSBhbmQgN1xuICAgb2YgdGhlIERpZWhhcmQgdGVzdCBzdWl0ZSwgYW5kIGJpdHMgMSBhbmQgMiBhbHNvIGZhaWwgdGVzdCA3LlxuICAgSWYgd2UgdXNlIG11bHRpcGxpY2F0aW9uIGFzIHN1Z2dlc3RlZCBieSBNYXJzYWdsaWEsIGl0IGRvZXNuJ3QgZmFyZVxuICAgbXVjaCBiZXR0ZXIuXG4gICBCeSBtaXhpbmcgdGhlIGJpdHMgb2Ygb25lIG9mIHRoZSBudW1iZXJzIGJlZm9yZSBhZGRpdGlvbiAoWE9SIHRoZVxuICAgNSBoaWdoLW9yZGVyIGJpdHMgaW50byB0aGUgbG93LW9yZGVyIGJpdHMpLCB3ZSBnZXQgYSBnZW5lcmF0b3IgdGhhdFxuICAgcGFzc2VzIGFsbCB0aGUgRGllaGFyZCB0ZXN0cy5cbiopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSB7IHN0IDogaW50IGFycmF5OyBtdXRhYmxlIGlkeCA6IGludCB9XG5cbiAgbGV0IG5ld19zdGF0ZSAoKSA9IHsgc3QgPSBBcnJheS5tYWtlIDU1IDA7IGlkeCA9IDAgfVxuICBsZXQgYXNzaWduIHN0MSBzdDIgPVxuICAgIEFycmF5LmJsaXQgc3QyLnN0IDAgc3QxLnN0IDAgNTU7XG4gICAgc3QxLmlkeCA8LSBzdDIuaWR4XG5cblxuICBsZXQgZnVsbF9pbml0IHMgc2VlZCA9XG4gICAgbGV0IGNvbWJpbmUgYWNjdSB4ID0gRGlnZXN0LnN0cmluZyAoYWNjdSBeIEludC50b19zdHJpbmcgeCkgaW5cbiAgICBsZXQgZXh0cmFjdCBkID1cbiAgICAgIENoYXIuY29kZSBkLlswXSArIChDaGFyLmNvZGUgZC5bMV0gbHNsIDgpICsgKENoYXIuY29kZSBkLlsyXSBsc2wgMTYpXG4gICAgICArIChDaGFyLmNvZGUgZC5bM10gbHNsIDI0KVxuICAgIGluXG4gICAgbGV0IHNlZWQgPSBpZiBBcnJheS5sZW5ndGggc2VlZCA9IDAgdGhlbiBbfCAwIHxdIGVsc2Ugc2VlZCBpblxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgZG9cbiAgICAgIHMuc3QuKGkpIDwtIGk7XG4gICAgZG9uZTtcbiAgICBsZXQgYWNjdSA9IHJlZiBcInhcIiBpblxuICAgIGZvciBpID0gMCB0byA1NCArIEludC5tYXggNTUgbCBkb1xuICAgICAgbGV0IGogPSBpIG1vZCA1NSBpblxuICAgICAgbGV0IGsgPSBpIG1vZCBsIGluXG4gICAgICBhY2N1IDo9IGNvbWJpbmUgIWFjY3Ugc2VlZC4oayk7XG4gICAgICBzLnN0LihqKSA8LSAocy5zdC4oaikgbHhvciBleHRyYWN0ICFhY2N1KSBsYW5kIDB4M0ZGRkZGRkY7ICAoKiBQUiM1NTc1ICopXG4gICAgZG9uZTtcbiAgICBzLmlkeCA8LSAwXG5cblxuICBsZXQgbWFrZSBzZWVkID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgZnVsbF9pbml0IHJlc3VsdCBzZWVkO1xuICAgIHJlc3VsdFxuXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID0gbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IGNvcHkgcyA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGFzc2lnbiByZXN1bHQgcztcbiAgICByZXN1bHRcblxuXG4gICgqIFJldHVybnMgMzAgcmFuZG9tIGJpdHMgYXMgYW4gaW50ZWdlciAwIDw9IHggPCAxMDczNzQxODI0ICopXG4gIGxldCBiaXRzIHMgPVxuICAgIHMuaWR4IDwtIChzLmlkeCArIDEpIG1vZCA1NTtcbiAgICBsZXQgY3VydmFsID0gcy5zdC4ocy5pZHgpIGluXG4gICAgbGV0IG5ld3ZhbCA9IHMuc3QuKChzLmlkeCArIDI0KSBtb2QgNTUpXG4gICAgICAgICAgICAgICAgICsgKGN1cnZhbCBseG9yICgoY3VydmFsIGxzciAyNSkgbGFuZCAweDFGKSkgaW5cbiAgICBsZXQgbmV3dmFsMzAgPSBuZXd2YWwgbGFuZCAweDNGRkZGRkZGIGluICAoKiBQUiM1NTc1ICopXG4gICAgcy5zdC4ocy5pZHgpIDwtIG5ld3ZhbDMwO1xuICAgIG5ld3ZhbDMwXG5cblxuICBsZXQgcmVjIGludGF1eCBzIG4gPVxuICAgIGxldCByID0gYml0cyBzIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiAweDNGRkZGRkZGIC0gbiArIDEgdGhlbiBpbnRhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiAweDNGRkZGRkZGIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRhdXggcyBib3VuZFxuXG4gIGxldCByZWMgaW50NjNhdXggcyBuID1cbiAgICBsZXQgbWF4X2ludF8zMiA9ICgxIGxzbCAzMCkgKyAweDNGRkZGRkZGIGluICgqIDB4N0ZGRkZGRkYgKilcbiAgICBsZXQgYjEgPSBiaXRzIHMgaW5cbiAgICBsZXQgYjIgPSBiaXRzIHMgaW5cbiAgICBsZXQgKHIsIG1heF9pbnQpID1cbiAgICAgIGlmIG4gPD0gbWF4X2ludF8zMiB0aGVuXG4gICAgICAgICgqIDMxIHJhbmRvbSBiaXRzIG9uIGJvdGggNjQtYml0IE9DYW1sIGFuZCBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMTUgYml0cyBvZiBiMSBhbmQgMTYgYml0cyBvZiBiMi4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKGIyIGxhbmQgMHgzRkZGQzAwMCkgbHNsIDEpIGxvciAoYjEgbHNyIDE1KSlcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludF8zMilcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGIzID0gYml0cyBzIGluXG4gICAgICAgICgqIDYyIHJhbmRvbSBiaXRzIG9uIDY0LWJpdCBPQ2FtbDsgdW5yZWFjaGFibGUgb24gSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDIwIGJpdHMgb2YgYjEgYW5kIDIxIGJpdHMgb2YgYjIgYW5kIGIzLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoKGIzIGxhbmQgMHgzRkZGRkUwMCkgbHNsIDEyKSBsb3IgKGIyIGxzciA5KSkgbHNsIDIwKVxuICAgICAgICAgICAgbG9yIChiMSBsc3IgMTApXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnQpXG4gICAgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IG1heF9pbnQgLSBuICsgMSB0aGVuIGludDYzYXV4IHMgbiBlbHNlIHZcblxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgZWxzZSBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgdGhlblxuICAgICAgaW50NjNhdXggcyBib3VuZFxuICAgIGVsc2VcbiAgICAgIGludGF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50MzIub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50MzIuc2hpZnRfbGVmdCAoSW50MzIub2ZfaW50IChiaXRzIHMgbGFuZCAxKSkgMzAgaW5cbiAgICBsZXQgciA9IEludDMyLmxvZ29yIGIxIGIyIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgaWYgSW50MzIuc3ViIHIgdiA+IEludDMyLmFkZCAoSW50MzIuc3ViIEludDMyLm1heF9pbnQgbikgMWxcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQ2NGF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDY0Lm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzKSkgMzAgaW5cbiAgICBsZXQgYjMgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcyBsYW5kIDcpKSA2MCBpblxuICAgIGxldCByID0gSW50NjQubG9nb3IgYjEgKEludDY0LmxvZ29yIGIyIGIzKSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgIGlmIEludDY0LnN1YiByIHYgPiBJbnQ2NC5hZGQgKEludDY0LnN1YiBJbnQ2NC5tYXhfaW50IG4pIDFMXG4gICAgdGhlbiBpbnQ2NGF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50NjQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMExcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0XCJcbiAgICBlbHNlIGludDY0YXV4IHMgYm91bmRcblxuXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuXG4gICgqIFJldHVybnMgYSBmbG9hdCAwIDw9IHggPD0gMSB3aXRoIGF0IG1vc3QgNjAgYml0cyBvZiBwcmVjaXNpb24uICopXG4gIGxldCByYXdmbG9hdCBzID1cbiAgICBsZXQgc2NhbGUgPSAxMDczNzQxODI0LjAgICgqIDJeMzAgKilcbiAgICBhbmQgcjEgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBhbmQgcjIgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBpbiAocjEgLy4gc2NhbGUgKy4gcjIpIC8uIHNjYWxlXG5cblxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICBsZXQgYm9vbCBzID0gKGJpdHMgcyBsYW5kIDEgPSAwKVxuXG4gIGxldCBiaXRzMzIgcyA9XG4gICAgbGV0IGIxID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgbGV0IGIyID0gSW50MzIuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgMTQpIGluICAoKiAxNiBiaXRzICopXG4gICAgSW50MzIuKGxvZ29yIGIxIChzaGlmdF9sZWZ0IGIyIDE2KSlcblxuICBsZXQgYml0czY0IHMgPVxuICAgIGxldCBiMSA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIyID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjMgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA4KSBpbiAgKCogMjIgYml0cyAqKVxuICAgIEludDY0Lihsb2dvciBiMSAobG9nb3IgKHNoaWZ0X2xlZnQgYjIgMjEpIChzaGlmdF9sZWZ0IGIzIDQyKSkpXG5cbiAgbGV0IG5hdGl2ZWJpdHMgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoYml0czMyIHMpXG4gICAgZWxzZSBmdW4gcyAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGJpdHM2NCBzKVxuXG5lbmRcblxuKCogVGhpcyBpcyB0aGUgc3RhdGUgeW91IGdldCB3aXRoIFtpbml0IDI3MTgyODE4XSBhbmQgdGhlbiBhcHBseWluZ1xuICAgdGhlIFwibGFuZCAweDNGRkZGRkZGXCIgZmlsdGVyIHRvIHRoZW0uICBTZWUgIzU1NzUsICM1NzkzLCAjNTk3Ny4gKilcbmxldCBkZWZhdWx0ID0ge1xuICBTdGF0ZS5zdCA9IFt8XG4gICAgICAweDNhZTI1MjJiOyAweDFkOGQ0NjM0OyAweDE1YjRmYWQwOyAweDE4YjE0YWNlOyAweDEyZjhhM2M0OyAweDNiMDg2YzQ3O1xuICAgICAgMHgxNmQ0NjdkNjsgMHgxMDFkOTFjNzsgMHgzMjFkZjE3NzsgMHgwMTc2YzE5MzsgMHgxZmY3MmJmMTsgMHgxZTg4OTEwOTtcbiAgICAgIDB4MGI0NjRiMTg7IDB4MmI4NmI5N2M7IDB4MDg5MWRhNDg7IDB4MDMxMzc0NjM7IDB4MDg1YWM1YTE7IDB4MTVkNjFmMmY7XG4gICAgICAweDNiY2VkMzU5OyAweDI5YzFjMTMyOyAweDNhODY3NjZlOyAweDM2NmQ4Yzg2OyAweDFmNWI2MjIyOyAweDNjZTFiNTlmO1xuICAgICAgMHgyZWJmNzhlMTsgMHgyN2NkMWI4NjsgMHgyNThmM2RjMzsgMHgzODlhODE5NDsgMHgwMmU0YzQ0YzsgMHgxOGM0M2Y3ZDtcbiAgICAgIDB4MGY2ZTUzNGY7IDB4MWU3ZGYzNTk7IDB4MDU1ZDBiN2U7IDB4MTBlODRlN2U7IDB4MTI2MTk4ZTQ7IDB4MGU3NzIyY2I7XG4gICAgICAweDFjYmVkZTI4OyAweDMzOTFiOTY0OyAweDNkNDBlOTJhOyAweDBjNTk5MzNkOyAweDBiOGNkMGI3OyAweDI0ZWZmZjFjO1xuICAgICAgMHgyODAzZmRhYTsgMHgwOGViYzcyZTsgMHgwZjUyMmUzMjsgMHgwNTM5OGVkYzsgMHgyMTQ0YTA0YzsgMHgwYWVmM2NiZDtcbiAgICAgIDB4MDFhZDQ3MTk7IDB4MzViOTNjZDY7IDB4MmE1NTlkNGY7IDB4MWU2ZmQ3Njg7IDB4MjZlMjdmMzY7IDB4MTg2ZjE4YzM7XG4gICAgICAweDJmYmY5NjdhO1xuICAgIHxdO1xuICBTdGF0ZS5pZHggPSAwO1xufVxuXG5sZXQgYml0cyAoKSA9IFN0YXRlLmJpdHMgZGVmYXVsdFxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCBkZWZhdWx0IGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50MzIgYm91bmQgPSBTdGF0ZS5pbnQzMiBkZWZhdWx0IGJvdW5kXG5sZXQgbmF0aXZlaW50IGJvdW5kID0gU3RhdGUubmF0aXZlaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IGRlZmF1bHQgYm91bmRcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IGRlZmF1bHQgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCBkZWZhdWx0XG5sZXQgYml0czMyICgpID0gU3RhdGUuYml0czMyIGRlZmF1bHRcbmxldCBiaXRzNjQgKCkgPSBTdGF0ZS5iaXRzNjQgZGVmYXVsdFxubGV0IG5hdGl2ZWJpdHMgKCkgPSBTdGF0ZS5uYXRpdmViaXRzIGRlZmF1bHRcblxubGV0IGZ1bGxfaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgc2VlZFxubGV0IGluaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IFt8IHNlZWQgfF1cbmxldCBzZWxmX2luaXQgKCkgPSBmdWxsX2luaXQgKHJhbmRvbV9zZWVkKCkpXG5cbigqIE1hbmlwdWxhdGluZyB0aGUgY3VycmVudCBzdGF0ZS4gKilcblxubGV0IGdldF9zdGF0ZSAoKSA9IFN0YXRlLmNvcHkgZGVmYXVsdFxubGV0IHNldF9zdGF0ZSBzID0gU3RhdGUuYXNzaWduIGRlZmF1bHQgc1xuXG4oKioqKioqKioqKioqKioqKioqKipcblxuKCogVGVzdCBmdW5jdGlvbnMuICBOb3QgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICBUaGUgW2NoaXNxdWFyZV0gZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG4gPiAxMHIuXG4gICBJdCByZXR1cm5zIGEgdHJpcGxlIChsb3csIGFjdHVhbCwgaGlnaCkuXG4gICBJZiBsb3cgPD0gYWN0dWFsIDw9IGhpZ2gsIHRoZSBbZ10gZnVuY3Rpb24gcGFzc2VkIHRoZSB0ZXN0LFxuICAgb3RoZXJ3aXNlIGl0IGZhaWxlZC5cblxuICBTb21lIHJlc3VsdHM6XG5cbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgNTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAwIDEwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjk5NzkyNjQzOyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDE0MTQyMTM2OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAyNDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDA7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAyNDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMTQxNDIxMzY7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAyOTk3OTI2NDM7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5OTcuNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg5Ljc0MDAwMDAwMDAwNTIzODcsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoNDg1OC41Nzg2NDM3NjI2OSwgNTA0NS41LCA1MTQxLjQyMTM1NjIzNzMxKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID1cbig5MzYuNzU0NDQ2Nzk2NjMyNDY1LCA5NDQuODA1OTk5OTk5OTgyMzA1LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMTkuMTk3NDQwMDAwMDAzNTUsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTkuMzE3NzYwMDAwMDA1MzYsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwMzkuOTg0NjM5OTk5OTk1MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNTQuMzgyMDc5OTk5OTk1NzcsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgOTAuMDk2MDAwMDAwMDA1LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDk2MC4sIDEwNzYuNzg3MjAwMDAwMDA2MTIsIDEwODguKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMTc2MDAwMDAwMDA2NzUyMSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjIxNjAwMDAwMDAwMDM0OTIsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4MC42MjIwMDAwMDAwMDMwMjY4LCAxMjAuKVxuXG4qKVxuXG4oKiBSZXR1cm4gdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB2W2kwLGkxWyAqKVxubGV0IHJlYyBzdW1zcSB2IGkwIGkxID1cbiAgaWYgaTAgPj0gaTEgdGhlbiAwLjBcbiAgZWxzZSBpZiBpMSA9IGkwICsgMSB0aGVuIFN0ZGxpYi5mbG9hdCB2LihpMCkgKi4gU3RkbGliLmZsb2F0IHYuKGkwKVxuICBlbHNlIHN1bXNxIHYgaTAgKChpMCtpMSkvMikgKy4gc3Vtc3EgdiAoKGkwK2kxKS8yKSBpMVxuXG5cbmxldCBjaGlzcXVhcmUgZyBuIHIgPVxuICBpZiBuIDw9IDEwICogciB0aGVuIGludmFsaWRfYXJnIFwiY2hpc3F1YXJlXCI7XG4gIGxldCBmID0gQXJyYXkubWFrZSByIDAgaW5cbiAgZm9yIGkgPSAxIHRvIG4gZG9cbiAgICBsZXQgdCA9IGcgciBpblxuICAgIGYuKHQpIDwtIGYuKHQpICsgMVxuICBkb25lO1xuICBsZXQgdCA9IHN1bXNxIGYgMCByXG4gIGFuZCByID0gU3RkbGliLmZsb2F0IHJcbiAgYW5kIG4gPSBTdGRsaWIuZmxvYXQgbiBpblxuICBsZXQgc3IgPSAyLjAgKi4gc3FydCByIGluXG4gIChyIC0uIHNyLCAgIChyICouIHQgLy4gbikgLS4gbiwgICByICsuIHNyKVxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgbGluZWFyIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tIG51bWJlcnMuXG4qKVxubGV0IHN0ID0gcmVmIDBcbmxldCBpbml0X2RpZmYgciA9IHN0IDo9IGludCByXG5sZXQgZGlmZiByID1cbiAgbGV0IHgxID0gIXN0XG4gIGFuZCB4MiA9IGludCByXG4gIGluXG4gIHN0IDo9IHgyO1xuICBpZiB4MSA+PSB4MiB0aGVuXG4gICAgeDEgLSB4MlxuICBlbHNlXG4gICAgciArIHgxIC0geDJcblxuXG5sZXQgc3QxID0gcmVmIDBcbmFuZCBzdDIgPSByZWYgMFxuXG5cbigqIFRoaXMgaXMgdG8gdGVzdCBmb3IgcXVhZHJhdGljIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgcmFuZG9tXG4gICBudW1iZXJzLlxuKilcbmxldCBpbml0X2RpZmYyIHIgPSBzdDEgOj0gaW50IHI7IHN0MiA6PSBpbnQgclxubGV0IGRpZmYyIHIgPVxuICBsZXQgeDEgPSAhc3QxXG4gIGFuZCB4MiA9ICFzdDJcbiAgYW5kIHgzID0gaW50IHJcbiAgaW5cbiAgc3QxIDo9IHgyO1xuICBzdDIgOj0geDM7XG4gICh4MyAtIHgyIC0geDIgKyB4MSArIDIqcikgbW9kIHJcblxuXG4qKioqKioqKioqKioqKioqKioqKilcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbmluY2x1ZGUgSW50XG5cbnR5cGUgdCA9IGludFxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5sZXQgYWRkID0gKCArIClcbmxldCBzdWIgPSAoIC0gKVxubGV0IG11bCA9ICggKiApXG5sZXQgZGl2ID0gKCAvIClcbmxldCBzdWNjID0gc3VjY1xubGV0IHByZWQgPSBwcmVkXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxubGV0IGVxdWFsIChhIDogaW50KSBiID0gU3RkbGliLiggPSApIGEgYlxubGV0IGNvbXBhcmUgKGEgOiBpbnQpIGIgPSBjb21wYXJlIGEgYlxuXG4oKiB1c2UgRk5WOlxuICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRm93bGVyJUUyJTgwJTkzTm9sbCVFMiU4MCU5M1ZvX2hhc2hfZnVuY3Rpb24gKilcbmxldCBoYXNoIChuIDogaW50KSA6IGludCA9XG4gIGxldCBvZmZzZXRfYmFzaXMgPSAweGNiZjI5Y2U0ODQyMjIzMjVMIGluXG4gIGxldCBwcmltZSA9IDB4MTAwMDAwMDAxYjNMIGluXG5cbiAgbGV0IGggPSByZWYgb2Zmc2V0X2Jhc2lzIGluXG4gIGZvciBrID0gMCB0byA3IGRvXG4gICAgKGggOj0gSW50NjQuKG11bCAhaCBwcmltZSkpO1xuICAgICgqIGggOj0gaCB4b3IgKGstdGggYnl0ZSBvZiBuKSAqKVxuICAgIGggOj0gSW50NjQuKGxvZ3hvciAhaCAob2ZfaW50ICgobiBsc3IgKGsgKiA4KSkgbGFuZCAweGZmKSkpXG4gIGRvbmU7XG4gICgqIHRydW5jYXRlIGJhY2sgdG8gaW50IGFuZCByZW1vdmUgc2lnbiAqKVxuICBJbnQ2NC50b19pbnQgIWggbGFuZCBtYXhfaW50XG5cbmxldCByYW5nZSBpIGogeWllbGQgPVxuICBsZXQgcmVjIHVwIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHVwIChpICsgMSkgaiB5aWVsZFxuICAgIClcbiAgYW5kIGRvd24gaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgZG93biAoaSAtIDEpIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIHlpZWxkXG4gIGVsc2VcbiAgICBkb3duIGkgaiB5aWVsZFxuXG5sZXQgcmFuZ2UnIGkgaiB5aWVsZCA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSkgeWllbGRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKSB5aWVsZFxuXG5sZXQgc2lnbiBpID0gY29tcGFyZSBpIDBcbmxldCBuZWcgaSA9IC1pXG5cbmxldCBwb3cgYSBiID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IDEgLT4gYWNjXG4gICAgfCBuIC0+XG4gICAgICBpZiBuIG1vZCAyID0gMCB0aGVuXG4gICAgICAgIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gICAgICBlbHNlXG4gICAgICAgIGFjYyAqIGF1eCAoYWNjICogYWNjKSAobiAvIDIpXG4gIGluXG4gIG1hdGNoIGIgd2l0aFxuICB8IDAgLT5cbiAgICBpZiBhID0gMCB0aGVuXG4gICAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogdW5kZWZpbmVkIHZhbHVlIDBeMFwiKVxuICAgIGVsc2VcbiAgICAgIDFcbiAgfCBiIHdoZW4gYiA8IDAgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcInBvdzogY2FuJ3QgcmFpc2UgaW50IHRvIG5lZ2F0aXZlIHBvd2VyXCIpXG4gIHwgYiAtPiBhdXggYSBiXG5cbm1vZHVsZSBJbmZpeCA6IHNpZ1xuICB2YWwgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPCApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPiApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCAtLSApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCAtLV4gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggKyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLSApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggfi0gKSA6IHQgLT4gdFxuICB2YWwgKCAqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAvICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAqKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbW9kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsYW5kICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBsb3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGx4b3IgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCBsbm90IDogdCAtPiB0XG4gIHZhbCAoIGxzbCApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBsc3IgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggYXNyICkgOiB0IC0+IGludCAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdGRsaWJcblxuICBsZXQgKCAtLSApID0gcmFuZ2VcbiAgbGV0ICggLS1eICkgPSByYW5nZSdcbiAgbGV0ICggKiogKSA9IHBvd1xuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxubGV0IG1pbiA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1pblxubGV0IG1heCA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLm1heFxuXG5sZXQgZmxvb3JfZGl2IGEgbiA9XG4gIGlmIGEgPCAwICYmIG4gPj0gMCB0aGVuXG4gICAgKChhICsgMSkgLyBuKSAtIDFcbiAgZWxzZSBpZiBhID4gMCAmJiBuIDwgMCB0aGVuXG4gICAgKChhIC0gMSkgLyBuKSAtIDFcbiAgZWxzZVxuICAgIGEgLyBuXG5cbmxldCBib29sX25lcSAoYSA6IGJvb2wpIGIgPSBTdGRsaWIuKCA8PiApIGEgYlxuXG5sZXQgcmVtIGEgbiA9XG4gIGxldCB5ID0gYSBtb2QgbiBpblxuICBpZiBib29sX25lcSAoeSA8IDApIChuIDwgMCkgJiYgeSA8PiAwIHRoZW5cbiAgICB5ICsgblxuICBlbHNlXG4gICAgeVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgblxubGV0IHJhbmRvbV9zbWFsbCA9IHJhbmRvbSAxMDBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArIHJhbmRvbSAoaiAtIGkpIHN0XG5sZXQgcHAgZm10ID0gRm9ybWF0LnBwX3ByaW50X2ludCBmbXRcbmxldCBtb3N0X3NpZ25pZmljYW50X2JpdCA9IC0xIGx4b3IgKC0xIGxzciAxKVxubGV0IHRvX3N0cmluZyA9IHN0cmluZ19vZl9pbnRcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbmxldCBvZl9zdHJpbmdfZXhuID0gU3RkbGliLmludF9vZl9zdHJpbmdcbmxldCB0b19mbG9hdCA9IGZsb2F0X29mX2ludFxubGV0IG9mX2Zsb2F0ID0gaW50X29mX2Zsb2F0XG5cbnR5cGUgb3V0cHV0ID0gY2hhciAtPiB1bml0XG5cbigqIGFic3RyYWN0IHByaW50ZXIgKilcbmxldCB0b19iaW5hcnlfZ2VuIChvdXQgOiBvdXRwdXQpIG4gPVxuICBsZXQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiAoXG4gICAgICBvdXQgJy0nO1xuICAgICAgLW5cbiAgICApIGVsc2VcbiAgICAgIG5cbiAgaW5cbiAgb3V0ICcwJztcbiAgb3V0ICdiJztcbiAgbGV0IHJlYyBsb29wIHN0YXJ0ZWQgYml0IG4gPVxuICAgIGlmIGJpdCA9IDAgdGhlbiAoXG4gICAgICBpZiBub3Qgc3RhcnRlZCB0aGVuIG91dCAnMCdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGIgPSBuIGxhbmQgYml0IGluXG4gICAgICBpZiBiID0gMCB0aGVuIChcbiAgICAgICAgaWYgc3RhcnRlZCB0aGVuIG91dCAnMCc7XG4gICAgICAgIGxvb3Agc3RhcnRlZCAoYml0IGxzciAxKSBuXG4gICAgICApIGVsc2UgKFxuICAgICAgICBvdXQgJzEnO1xuICAgICAgICBsb29wIHRydWUgKGJpdCBsc3IgMSkgblxuICAgICAgKVxuICAgIClcbiAgaW5cbiAgbG9vcCBmYWxzZSBtb3N0X3NpZ25pZmljYW50X2JpdCBuXG5cbmxldCBwcF9iaW5hcnkgb3V0IG4gPSB0b19iaW5hcnlfZ2VuIChGb3JtYXQucHBfcHJpbnRfY2hhciBvdXQpIG5cblxubGV0IHRvX3N0cmluZ19iaW5hcnkgbiA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIHRvX2JpbmFyeV9nZW4gKEJ1ZmZlci5hZGRfY2hhciBidWYpIG47XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgcmFuZ2UgKGkgKyBzdGVwKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0ludC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgKClcbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgeWllbGRcblxuKCpcbiAgZnJvbSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IYW1taW5nX3dlaWdodFxuXG4gIC8vVGhpcyB1c2VzIGZld2VyIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0aGFuIGFueSBvdGhlciBrbm93blxuICAvL2ltcGxlbWVudGF0aW9uIG9uIG1hY2hpbmVzIHdpdGggc2xvdyBtdWx0aXBsaWNhdGlvbi5cbiAgLy9JdCB1c2VzIDE3IGFyaXRobWV0aWMgb3BlcmF0aW9ucy5cbiAgaW50IHBvcGNvdW50XzIodWludDY0X3QgeCkge1xuICAgIHggLT0gKHggPj4gMSkgJiBtMTsgICAgICAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCAyIGJpdHMgaW50byB0aG9zZSAyIGJpdHNcbiAgICB4ID0gKHggJiBtMikgKyAoKHggPj4gMikgJiBtMik7IC8vcHV0IGNvdW50IG9mIGVhY2ggNCBiaXRzIGludG8gdGhvc2UgNCBiaXRzXG4gICAgeCA9ICh4ICsgKHggPj4gNCkpICYgbTQ7ICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDggYml0cyBpbnRvIHRob3NlIDggYml0c1xuICAgIHggKz0geCA+PiAgODsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMTYgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMTY7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDMyIGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDMyOyAgLy9wdXQgY291bnQgb2YgZWFjaCA2NCBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHJldHVybiB4ICYgMHg3ZjtcbiAgfVxuXG4gICBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NVxuICAgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNcbiAgIG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmXG4qKVxubGV0IHBvcGNvdW50IChiIDogaW50KSA6IGludCA9XG4gIGxldCBtMSA9IDB4NTU1NTU1NTU1NTU1NTU1NUwgaW5cbiAgbGV0IG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzTCBpblxuICBsZXQgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZMIGluXG4gIGxldCBvcGVuIEludDY0IGluXG4gIGxldCBiID0gb2ZfaW50IGIgaW5cbiAgKCogaW50LT5pbnQ2NCAqKVxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZmZmZmZmZmZmZmZmZmZkwgaW5cblxuICAoKiByZW1vdmUgc2lnbiBiaXQsIHdlIGRlYWwgd2l0aCB1aW50NjQgaGVyZSAqKVxuICBsZXQgYiA9IHN1YiBiIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxKSBtMSkgaW5cbiAgbGV0IGIgPSBhZGQgKGxvZ2FuZCBiIG0yKSAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMikgbTIpIGluXG4gIGxldCBiID0gbG9nYW5kIChhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDQpKSBtNCBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgOCkgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDE2KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMzIpIGluXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZkwgaW5cbiAgdG9faW50IGJcblxubGV0IGxvZ2FuZCA9ICggbGFuZCApXG5sZXQgbG9nb3IgPSAoIGxvciApXG5sZXQgbG9neG9yID0gKCBseG9yIClcbmxldCBsb2dub3QgPSBsbm90XG5sZXQgc2hpZnRfbGVmdCA9ICggbHNsIClcbmxldCBzaGlmdF9yaWdodCA9ICggYXNyIClcbmxldCBzaGlmdF9yaWdodF9sb2dpY2FsID0gKCBsc3IgKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJpIHAgbCA9XG4gIGxldCByZWMgYXV4IGkgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjXG4gIHwgeDo6bCAtPiBhdXggKGkgKyAxKSAoaWYgcCBpIHggdGhlbiB4OjphY2MgZWxzZSBhY2MpIGxcbiAgaW5cbiAgYXV4IDAgW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmID1cbiAgbGV0IHJlYyBhdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhdXggYWNjdSBsXG4gICAgICAgIHwgU29tZSB2IC0+IGF1eCAodiA6OiBhY2N1KSBsXG4gIGluXG4gIGF1eCBbXVxuXG5sZXQgY29uY2F0X21hcCBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjXG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICBsZXQgeHMgPSBmIHggaW5cbiAgICAgICBhdXggZiAocmV2X2FwcGVuZCB4cyBhY2MpIGxcbiAgaW4gYXV4IGYgW10gbFxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjY3UgbCA9XG4gIGxldCByZWMgYXV4IGFjY3UgbF9hY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3UsIHJldiBsX2FjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBsZXQgYWNjdSwgeCA9IGYgYWNjdSB4IGluXG4gICAgICAgIGF1eCBhY2N1ICh4IDo6IGxfYWNjdSkgbCBpblxuICBhdXggYWNjdSBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgcCBsID1cbiAgbGV0IHJlYyBwYXJ0IGxlZnQgcmlnaHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgbGVmdCwgcmV2IHJpZ2h0KVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBwIHggd2l0aFxuICAgICAgIHwgRWl0aGVyLkxlZnQgdiAtPiBwYXJ0ICh2IDo6IGxlZnQpIHJpZ2h0IGxcbiAgICAgICB8IEVpdGhlci5SaWdodCB2IC0+IHBhcnQgbGVmdCAodiA6OiByaWdodCkgbFxuICAgICBlbmRcbiAgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCByZWMgc3BsaXQgPSBmdW5jdGlvblxuICAgIFtdIC0+IChbXSwgW10pXG4gIHwgKHgseSk6OmwgLT5cbiAgICAgIGxldCAocngsIHJ5KSA9IHNwbGl0IGwgaW4gKHg6OnJ4LCB5OjpyeSlcblxubGV0IHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiAoYTEsIGEyKSA6OiBjb21iaW5lIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5jb21iaW5lXCJcblxuKCoqIHNvcnRpbmcgKilcblxubGV0IHJlYyBtZXJnZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBsMiAtPiBsMlxuICB8IGwxLCBbXSAtPiBsMVxuICB8IGgxIDo6IHQxLCBoMiA6OiB0MiAtPlxuICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgIHRoZW4gaDEgOjogbWVyZ2UgY21wIHQxIGwyXG4gICAgICBlbHNlIGgyIDo6IG1lcmdlIGNtcCBsMSB0MlxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA8PSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA+IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCBzb3J0ID0gc3RhYmxlX3NvcnRcbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiBOb3RlOiBvbiBhIGxpc3Qgb2YgbGVuZ3RoIGJldHdlZW4gYWJvdXQgMTAwMDAwIChkZXBlbmRpbmcgb24gdGhlIG1pbm9yXG4gICBoZWFwIHNpemUgYW5kIHRoZSB0eXBlIG9mIHRoZSBsaXN0KSBhbmQgU3lzLm1heF9hcnJheV9zaXplLCBpdCBpc1xuICAgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgZm9sbG93aW5nLCBidXQgaXQgbWlnaHQgYWxzbyB1c2UgbW9yZSBtZW1vcnlcbiAgIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGxpc3QgY2Fubm90IGJlIGRlYWxsb2NhdGVkIGluY3JlbWVudGFsbHkuXG5cbiAgIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoaXMgY29kZSBvciBpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIG9ial90cnVuY2F0ZS5cblxuZXh0ZXJuYWwgb2JqX3RydW5jYXRlIDogJ2EgYXJyYXkgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcblxubGV0IGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYSA9XG4gIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGFjY3UgbiBwID1cbiAgICBpZiBwIDw9IDAgdGhlbiBhY2N1IGVsc2UgYmVnaW5cbiAgICAgIGlmIHAgPSBuIHRoZW4gYmVnaW5cbiAgICAgICAgb2JqX3RydW5jYXRlIGEgcDtcbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSAobi0xMDAwKSAocC0xKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSBuIChwLTEpXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBbXSAobC0xMDAwKSBsXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgQXJyYXkuc3RhYmxlX3NvcnQgY21wIGE7XG4gIGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYVxuXG4qKVxuXG5cbigqKiBzb3J0aW5nICsgcmVtb3ZpbmcgZHVwbGljYXRlcyAqKVxuXG5sZXQgc29ydF91bmlxIGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlIHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjIDwgMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZV9yZXYgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8sIFtdIC0+IDFcbiAgfCBfIDo6IGwxLCBfIDo6IGwyIC0+IGNvbXBhcmVfbGVuZ3RocyBsMSBsMlxuOztcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcbjs7XG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCByZWMgZGlyZWN0IGRlcHRoIHNlcSA6IF8gbGlzdCA9XG4gICAgaWYgZGVwdGg9MFxuICAgIHRoZW5cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIHNlcVxuICAgICAgfD4gcmV2ICgqIHRhaWxyZWMgKilcbiAgICBlbHNlIG1hdGNoIHNlcSgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgbmV4dCkgLT4geCA6OiBkaXJlY3QgKGRlcHRoLTEpIG5leHRcbiAgaW5cbiAgZGlyZWN0IDUwMCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogT3BlcmF0aW9ucyBvbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgdmFsdWVzICopXG5cbnR5cGUgdFxuXG50eXBlIHJhd19kYXRhID0gbmF0aXZlaW50XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIHJhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhID0gXCJjYW1sX29ial9yYXdfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X3Jhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX29ial9zZXRfcmF3X2ZpZWxkXCJcblxuZXh0ZXJuYWwgbmV3X2Jsb2NrIDogaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX29ial9ibG9ja1wiXG5leHRlcm5hbCBkdXAgOiB0IC0+IHQgPSBcImNhbWxfb2JqX2R1cFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQ1XG5cbmxldCBsYXp5X3RhZyA9IDI0NlxubGV0IGNsb3N1cmVfdGFnID0gMjQ3XG5sZXQgb2JqZWN0X3RhZyA9IDI0OFxubGV0IGluZml4X3RhZyA9IDI0OVxubGV0IGZvcndhcmRfdGFnID0gMjUwXG5cbmxldCBub19zY2FuX3RhZyA9IDI1MVxuXG5sZXQgYWJzdHJhY3RfdGFnID0gMjUxXG5sZXQgc3RyaW5nX3RhZyA9IDI1MlxubGV0IGRvdWJsZV90YWcgPSAyNTNcbmxldCBkb3VibGVfYXJyYXlfdGFnID0gMjU0XG5sZXQgY3VzdG9tX3RhZyA9IDI1NVxubGV0IGZpbmFsX3RhZyA9IGN1c3RvbV90YWdcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIENsb3N1cmUgPSBzdHJ1Y3RcbiAgdHlwZSBpbmZvID0ge1xuICAgIGFyaXR5OiBpbnQ7XG4gICAgc3RhcnRfZW52OiBpbnQ7XG4gIH1cblxuICBsZXQgaW5mb19vZl9yYXcgKGluZm8gOiBuYXRpdmVpbnQpID1cbiAgICBsZXQgb3BlbiBOYXRpdmVpbnQgaW5cbiAgICBsZXQgYXJpdHkgPVxuICAgICAgKCogc2lnbmVkOiBuZWdhdGl2ZSBmb3IgdHVwbGVkIGZ1bmN0aW9ucyAqKVxuICAgICAgaWYgU3lzLndvcmRfc2l6ZSA9IDY0IHRoZW5cbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDU2KVxuICAgICAgZWxzZVxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gMjQpXG4gICAgaW5cbiAgICBsZXQgc3RhcnRfZW52ID1cbiAgICAgICgqIHN0YXJ0X2VudiBpcyB1bnNpZ25lZCwgYnV0IHdlIGtub3cgaXQgY2FuIGFsd2F5cyBmaXQgYW4gT0NhbWxcbiAgICAgICAgIGludGVnZXIgc28gd2UgdXNlIFt0b19pbnRdIGluc3RlYWQgb2YgW3Vuc2lnbmVkX3RvX2ludF0uICopXG4gICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKHNoaWZ0X2xlZnQgaW5mbyA4KSA5KSBpblxuICAgIHsgYXJpdHk7IHN0YXJ0X2VudiB9XG5cbiAgKCogbm90ZTogd2UgZXhwZWN0IGEgY2xvc3VyZSwgbm90IGFuIGluZml4IHBvaW50ZXIgKilcbiAgbGV0IGluZm8gKG9iaiA6IHQpID1cbiAgICBhc3NlcnQgKHRhZyBvYmogPSBjbG9zdXJlX3RhZyk7XG4gICAgaW5mb19vZl9yYXcgKHJhd19maWVsZCBvYmogMSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5zaW9uX2NvbnN0cnVjdG9yID1cbnN0cnVjdFxuICB0eXBlIHQgPSBleHRlbnNpb25fY29uc3RydWN0b3JcbiAgbGV0IG9mX3ZhbCB4ID1cbiAgICBsZXQgeCA9IHJlcHIgeCBpblxuICAgIGxldCBzbG90ID1cbiAgICAgIGlmIChpc19ibG9jayB4KSAmJiAodGFnIHgpIDw+IG9iamVjdF90YWcgJiYgKHNpemUgeCkgPj0gMSB0aGVuIGZpZWxkIHggMFxuICAgICAgZWxzZSB4XG4gICAgaW5cbiAgICBsZXQgbmFtZSA9XG4gICAgICBpZiAoaXNfYmxvY2sgc2xvdCkgJiYgKHRhZyBzbG90KSA9IG9iamVjdF90YWcgdGhlbiBmaWVsZCBzbG90IDBcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcbiAgICBpblxuICAgICAgaWYgKHRhZyBuYW1lKSA9IHN0cmluZ190YWcgdGhlbiAob2JqIHNsb3QgOiB0KVxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIG5hbWUgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMCkgOiBzdHJpbmcpXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gaWQgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMSkgOiBpbnQpXG5lbmRcblxubGV0IGV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5vZl92YWxcbmxldCBleHRlbnNpb25fbmFtZSA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5uYW1lXG5sZXQgZXh0ZW5zaW9uX2lkID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLmlkXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCI7O1xuICBsZXQgY3JlYXRlIGwgPVxuICAgIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gbWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uY3JlYXRlXCI7XG4gICAgY3JlYXRlIGxcblxuICBsZXQgbGVuZ3RoIHggPSBzaXplKHJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGV4dGVybmFsIGdldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlcIlxuICBsZXQgZ2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleVwiO1xuICAgIGdldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleV9jb3B5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5X2NvcHlcIlxuICBsZXQgZ2V0X2tleV9jb3B5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5X2NvcHlcIjtcbiAgICBnZXRfa2V5X2NvcHkgZSBvXG5cbiAgZXh0ZXJuYWwgc2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuICBsZXQgc2V0X2tleSBlIG8geCA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5zZXRfa2V5XCI7XG4gICAgc2V0X2tleSBlIG8geFxuXG4gIGV4dGVybmFsIHVuc2V0X2tleTogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG4gIGxldCB1bnNldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnVuc2V0X2tleVwiO1xuICAgIHVuc2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBjaGVja19rZXk6IHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19rZXlcIlxuICBsZXQgY2hlY2tfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5jaGVja19rZXlcIjtcbiAgICBjaGVja19rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgYmxpdF9rZXkgOiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgID0gXCJjYW1sX2VwaGVfYmxpdF9rZXlcIlxuXG4gIGxldCBibGl0X2tleSBlMSBvMSBlMiBvMiBsID1cbiAgICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmJsaXRfa2V5XCJcbiAgICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXRfa2V5IGUxIG8xIGUyIG8yIGxcblxuICBleHRlcm5hbCBnZXRfZGF0YTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YVwiXG4gIGV4dGVybmFsIGdldF9kYXRhX2NvcHk6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVwiXG4gIGV4dGVybmFsIHNldF9kYXRhOiB0IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfZGF0YVwiXG4gIGV4dGVybmFsIHVuc2V0X2RhdGE6IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2RhdGFcIlxuICBleHRlcm5hbCBjaGVja19kYXRhOiB0IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19kYXRhXCJcbiAgZXh0ZXJuYWwgYmxpdF9kYXRhIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9ibGl0X2RhdGFcIlxuXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbmxldCByYWlzZV91bmRlZmluZWQgPSBPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIFVuZGVmaW5lZClcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogT2JqLnQgLT4gT2JqLnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkXCJcblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCAoT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBlKSk7XG4gICAgcmFpc2UgZVxuXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV92YWxfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gIHJlc3VsdFxuXG5cbigqIFtmb3JjZV0gaXMgbm90IHVzZWQsIHNpbmNlIFtMYXp5LmZvcmNlXSBpcyBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZVxuICAgd2hvc2UgY29kZSBpbmxpbmVzIHRoZSB0YWcgdGVzdHMgb2YgaXRzIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmxcbiAgIGluc3RydW1lbnRhdGlvbiBpcyB0dXJuZWQgb24uICopXG5cbmxldCBmb3JjZSAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgKCogVXNpbmcgW1N5cy5vcGFxdWVfaWRlbnRpdHldIHByZXZlbnRzIHR3byBwb3RlbnRpYWwgcHJvYmxlbXM6XG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcsIHRoZW4gaXRzIHRhZyBjb3VsZCBoYXZlXG4gICAgICAgY2hhbmdlZCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKVxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBpbW11dGFibGUsIHRoZW4gaWYgdGhlIGNvbXBpbGVyXG4gICAgICAgY2Fubm90IHByb3ZlIHRoYXQgdGhlIGxhc3QgYnJhbmNoIGlzIG5vdCB0YWtlbiBpdCB3aWxsIGlzc3VlIGFcbiAgICAgICB3YXJuaW5nIDU5IChtb2RpZmljYXRpb24gb2YgYW4gaW1tdXRhYmxlIHZhbHVlKSAqKVxuICBsZXQgbHp2ID0gU3lzLm9wYXF1ZV9pZGVudGl0eSBsenYgaW5cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV9sYXp5X2Jsb2NrIGx6dlxuXG5cbmxldCBmb3JjZV92YWwgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfdmFsX2xhenlfYmxvY2sgbHp2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IGRlZmF1bHRcbmxldCBnZXQgPSBmdW5jdGlvbiBTb21lIHYgLT4gdiB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJvcHRpb24gaXMgTm9uZVwiXG5sZXQgYmluZCBvIGYgPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IGYgdlxubGV0IGpvaW4gPSBmdW5jdGlvbiBTb21lIG8gLT4gbyB8IE5vbmUgLT4gTm9uZVxubGV0IG1hcCBmIG8gPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IFNvbWUgKGYgdilcbmxldCBmb2xkIH5ub25lIH5zb21lID0gZnVuY3Rpb24gU29tZSB2IC0+IHNvbWUgdiB8IE5vbmUgLT4gbm9uZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBmIHYgfCBOb25lIC0+ICgpXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gdHJ1ZSB8IFNvbWUgXyAtPiBmYWxzZVxubGV0IGlzX3NvbWUgPSBmdW5jdGlvbiBOb25lIC0+IGZhbHNlIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGVxdWFsIGVxIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBlcSB2MCB2MVxufCBOb25lLCBOb25lIC0+IHRydWVcbnwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBjbXAgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGNtcCB2MCB2MVxufCBOb25lLCBOb25lIC0+IDBcbnwgTm9uZSwgU29tZSBfIC0+IC0xXG58IFNvbWUgXywgTm9uZSAtPiAxXG5cbmxldCB0b19yZXN1bHQgfm5vbmUgPSBmdW5jdGlvbiBOb25lIC0+IEVycm9yIG5vbmUgfCBTb21lIHYgLT4gT2sgdlxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB2IC0+IFt2XVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE5vbmUgLT4gU2VxLmVtcHR5IHwgU29tZSB2IC0+IFNlcS5yZXR1cm4gdlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2UpIHQgPSAoJ2EsICdlKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdlXG5cbmxldCBvayB2ID0gT2sgdlxubGV0IGVycm9yIGUgPSBFcnJvciBlXG5sZXQgdmFsdWUgciB+ZGVmYXVsdCA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGRlZmF1bHRcbmxldCBnZXRfb2sgPSBmdW5jdGlvbiBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIEVycm9yIF9cIlxubGV0IGdldF9lcnJvciA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZSB8IE9rIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgT2sgX1wiXG5sZXQgYmluZCByIGYgPSBtYXRjaCByIHdpdGggT2sgdiAtPiBmIHYgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IGpvaW4gPSBmdW5jdGlvbiBPayByIC0+IHIgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcCBmID0gZnVuY3Rpb24gT2sgdiAtPiBPayAoZiB2KSB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IEVycm9yIChmIGUpIHwgT2sgXyBhcyB2IC0+IHZcbmxldCBmb2xkIH5vayB+ZXJyb3IgPSBmdW5jdGlvbiBPayB2IC0+IG9rIHYgfCBFcnJvciBlIC0+IGVycm9yIGVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBPayB2IC0+IGYgdiB8IEVycm9yIF8gLT4gKClcbmxldCBpdGVyX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGYgZSB8IE9rIF8gLT4gKClcbmxldCBpc19vayA9IGZ1bmN0aW9uIE9rIF8gLT4gdHJ1ZSB8IEVycm9yIF8gLT4gZmFsc2VcbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uIEVycm9yIF8gLT4gdHJ1ZSB8IE9rIF8gLT4gZmFsc2VcblxubGV0IGVxdWFsIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IF8sIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgT2sgXywgRXJyb3IgXyAtPiAtMVxufCBFcnJvciBfLCBPayBfIC0+IDFcblxubGV0IHRvX29wdGlvbiA9IGZ1bmN0aW9uIE9rIHYgLT4gU29tZSB2IHwgRXJyb3IgXyAtPiBOb25lXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE9rIHYgLT4gW3ZdIHwgRXJyb3IgXyAtPiBbXVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE9rIHYgLT4gU2VxLnJldHVybiB2IHwgRXJyb3IgXyAtPiBTZXEuZW1wdHlcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBVdGlscyBhcm91bmQgY2hhcn1cblxuICAgIEBzaW5jZSAwLjE0ICopXG5cbmluY2x1ZGUgQ2hhclxuXG5sZXQgcHBfYnVmID0gQnVmZmVyLmFkZF9jaGFyXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfY2hhclxubGV0IG9mX2ludF9leG4gPSBDaGFyLmNoclxubGV0IG9mX2ludCBjID0gdHJ5IFNvbWUgKG9mX2ludF9leG4gYykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxubGV0IHRvX2ludCA9IENoYXIuY29kZVxubGV0IHRvX3N0cmluZyBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID0gKVxuICBsZXQgKCA8PiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PiApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGNociBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiQ2hhci5jaHJcIiBlbHNlIHVuc2FmZV9jaHIgblxuXG5leHRlcm5hbCBieXRlc19jcmVhdGU6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0IGVzY2FwZWQgPSBmdW5jdGlvblxuICB8ICdcXCcnIC0+IFwiXFxcXCdcIlxuICB8ICdcXFxcJyAtPiBcIlxcXFxcXFxcXCJcbiAgfCAnXFxuJyAtPiBcIlxcXFxuXCJcbiAgfCAnXFx0JyAtPiBcIlxcXFx0XCJcbiAgfCAnXFxyJyAtPiBcIlxcXFxyXCJcbiAgfCAnXFxiJyAtPiBcIlxcXFxiXCJcbiAgfCAnICcgLi4gJ34nIGFzIGMgLT5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDEgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwIGM7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcbiAgfCBjIC0+XG4gICAgICBsZXQgbiA9IGNvZGUgYyBpblxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgNCBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgJ1xcXFwnO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDEgKHVuc2FmZV9jaHIgKDQ4ICsgbiAvIDEwMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDIgKHVuc2FmZV9jaHIgKDQ4ICsgKG4gLyAxMCkgbW9kIDEwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMyAodW5zYWZlX2NociAoNDggKyBuIG1vZCAxMCkpO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG5cbmxldCBsb3dlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWidcbiAgfCAnXFwxOTInIC4uICdcXDIxNCdcbiAgfCAnXFwyMTYnIC4uICdcXDIyMicgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneidcbiAgfCAnXFwyMjQnIC4uICdcXDI0NidcbiAgfCAnXFwyNDgnIC4uICdcXDI1NCcgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbmxldCBsb3dlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxudHlwZSB0ID0gY2hhclxuXG5sZXQgY29tcGFyZSBjMSBjMiA9IGNvZGUgYzEgLSBjb2RlIGMyXG5sZXQgZXF1YWwgKGMxOiB0KSAoYzI6IHQpID0gY29tcGFyZSBjMSBjMiA9IDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gaW50XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxuZXh0ZXJuYWwgbmVnIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCBhZGQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBzdWIgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCBtdWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCBkaXYgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCByZW0gOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCBsb2dvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxubGV0IGxvZ25vdCB4ID0gbG9neG9yIHggKC0xKVxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5cbigqXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmxldCB0b19zdHJpbmcgeCA9IGZvcm1hdF9pbnQgXCIlZFwiIHhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gc3RyaW5nLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gYnl0ZXMgPSBcIiVieXRlc19vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2JsaXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubGV0IG1ha2UgbiBjID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICB1bnNhZmVfZmlsbCBzIDAgbiBjO1xuICBzXG5cbmxldCBpbml0IG4gZiA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgdW5zYWZlX3NldCBzIGkgKGYgaSlcbiAgZG9uZTtcbiAgc1xuXG5sZXQgZW1wdHkgPSBjcmVhdGUgMFxuXG5sZXQgY29weSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICB1bnNhZmVfYmxpdCBzIDAgciAwIGxlbjtcbiAgclxuXG5sZXQgdG9fc3RyaW5nIGIgPSB1bnNhZmVfdG9fc3RyaW5nIChjb3B5IGIpXG5sZXQgb2Zfc3RyaW5nIHMgPSBjb3B5ICh1bnNhZmVfb2Zfc3RyaW5nIHMpXG5cbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuc3ViIC8gQnl0ZXMuc3ViXCJcbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGxlbiBpblxuICAgIHVuc2FmZV9ibGl0IHMgb2ZzIHIgMCBsZW47XG4gICAgclxuICBlbmRcblxubGV0IHN1Yl9zdHJpbmcgYiBvZnMgbGVuID0gdW5zYWZlX3RvX3N0cmluZyAoc3ViIGIgb2ZzIGxlbilcblxuKCogYWRkaXRpb24gd2l0aCBhbiBvdmVyZmxvdyBjaGVjayAqKVxubGV0ICgrKykgYSBiID1cbiAgbGV0IGMgPSBhICsgYiBpblxuICBtYXRjaCBhIDwgMCwgYiA8IDAsIGMgPCAwIHdpdGhcbiAgfCB0cnVlICwgdHJ1ZSAsIGZhbHNlXG4gIHwgZmFsc2UsIGZhbHNlLCB0cnVlICAtPiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmV4dGVuZFwiICgqIG92ZXJmbG93ICopXG4gIHwgXyAtPiBjXG5cbmxldCBleHRlbmQgcyBsZWZ0IHJpZ2h0ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzICsrIGxlZnQgKysgcmlnaHQgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIGxldCAoc3Jjb2ZmLCBkc3RvZmYpID0gaWYgbGVmdCA8IDAgdGhlbiAtbGVmdCwgMCBlbHNlIDAsIGxlZnQgaW5cbiAgbGV0IGNweWxlbiA9IEludC5taW4gKGxlbmd0aCBzIC0gc3Jjb2ZmKSAobGVuIC0gZHN0b2ZmKSBpblxuICBpZiBjcHlsZW4gPiAwIHRoZW4gdW5zYWZlX2JsaXQgcyBzcmNvZmYgciBkc3RvZmYgY3B5bGVuO1xuICByXG5cbmxldCBmaWxsIHMgb2ZzIGxlbiBjID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuZmlsbCAvIEJ5dGVzLmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIHMgb2ZzIGxlbiBjXG5cbmxldCBibGl0IHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCeXRlcy5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbmxldCBibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gc3RyaW5nX2xlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5ibGl0IC8gQnl0ZXMuYmxpdF9zdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9ibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJCeXRlcy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGVtcHR5XG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpblxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKGNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0IHMxIHMyID1cbiAgbGV0IGwxID0gbGVuZ3RoIHMxIGluXG4gIGxldCBsMiA9IGxlbmd0aCBzMiBpblxuICBsZXQgciA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgdW5zYWZlX2JsaXQgczEgMCByIDAgbDE7XG4gIHVuc2FmZV9ibGl0IHMyIDAgciBsMSBsMjtcbiAgclxuXG5cbmV4dGVybmFsIGNoYXJfY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBjaGFyX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgbGV0IGogPSByZWYgKGxlbiAtIDEpIGluXG4gIHdoaWxlICFqID49ICFpICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWopIGRvXG4gICAgZGVjciBqXG4gIGRvbmU7XG4gIGlmICFqID49ICFpIHRoZW5cbiAgICBzdWIgcyAhaSAoIWogLSAhaSArIDEpXG4gIGVsc2VcbiAgICBlbXB0eVxuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbiA6PSAhbiArXG4gICAgICAobWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcbicgfCAnXFx0JyB8ICdcXHInIHwgJ1xcYicgLT4gMlxuICAgICAgIHwgJyAnIC4uICd+JyAtPiAxXG4gICAgICAgfCBfIC0+IDQpXG4gIGRvbmU7XG4gIGlmICFuID0gbGVuZ3RoIHMgdGhlbiBjb3B5IHMgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBtYXAgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwaSBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbmxldCBhcHBseTEgZiBzID1cbiAgaWYgbGVuZ3RoIHMgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjb3B5IHMgaW5cbiAgICB1bnNhZmVfc2V0IHIgMCAoZih1bnNhZmVfZ2V0IHMgMCkpO1xuICAgIHJcbiAgZW5kXG5cbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxudHlwZSB0ID0gYnl0ZXNcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9ieXRlc19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPSBtYXAgQ2hhci51cHBlcmNhc2Ugc1xubGV0IGxvd2VyY2FzZSBzID0gbWFwIENoYXIubG93ZXJjYXNlIHNcblxubGV0IGNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgdW5jYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2Ugc1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZWRpbmdcbiAgIHRoZSBlcnJvcmluZyBieXRlLlxuXG4gICBUaGlzIG1lYW5zIHRoYXQgaWYgYSBjbGllbnQgdXNlcyBkZWNvZGVzIHdpdGhvdXQgY2FyaW5nIGFib3V0XG4gICB2YWxpZGl0eSBpdCBuYXR1cmFsbHkgcmVwbGFjZSBib2d1cyBkYXRhIHdpdGggVWNoYXIucmVwIGFjY29yZGluZ1xuICAgdG8gdGhlIFdIQVRXRyBFbmNvZGluZyBzdGFuZGFyZC4gT3RoZXIgc2NoZW1lcyBhcmUgcG9zc2libGUgYnlcbiAgIGNvbnN1bHRpbmcgdGhlIG51bWJlciBvZiB1c2VkIGJ5dGVzIG9uIGludmFsaWQgZGVjb2Rlcy4gRm9yIG1vcmVcbiAgIGRldGFpbHMgc2VlIGh0dHBzOi8vaHNpdm9uZW4uZmkvYnJva2VuLXV0Zi04L1xuXG4gICBGb3IgdGhpcyByZWFzb24gaW4gW2dldF91dGZfOF91Y2hhcl0gd2UgZ3JhZHVhbGx5IGNoZWNrIHRoZSBuZXh0XG4gICBieXRlIGlzIGF2YWlsYWJsZSByYXRoZXIgdGhhbiBkb2luZyBpdCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgIGZpcnN0IGJ5dGUuIENvbnRyYXN0IHdpdGggW2lzX3ZhbGlkX3V0Zl84XS4gKilcblxuKCogVVRGLTggKilcblxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feEJGIGIgPSBiIGxzciA2IDw+IDBiMTBcbmxldFtAaW5saW5lXSBub3RfaW5feEEwX3RvX3hCRiBiID0gYiBsc3IgNSA8PiAwYjEwMVxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDlGIGIgPSBiIGxzciA1IDw+IDBiMTAwXG5sZXRbQGlubGluZV0gbm90X2luX3g5MF90b194QkYgYiA9IGIgPCAweDkwIHx8IDB4QkYgPCBiXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OEYgYiA9IGIgbHNyIDQgPD4gMHg4XG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8yIGIwIGIxID1cbiAgKChiMCBsYW5kIDB4MUYpIGxzbCA2KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMyBiMCBiMSBiMiA9XG4gICgoYjAgbGFuZCAweDBGKSBsc2wgMTIpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIyIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzID1cbiAgKChiMCBsYW5kIDB4MDcpIGxzbCAxOCkgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgMTIpIGxvclxuICAoKGIyIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIzIGxhbmQgMHgzRikpXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgYiBpID1cbiAgbGV0IGIwID0gZ2V0X3VpbnQ4IGIgaSBpbiAoKiByYWlzZXMgaWYgW2ldIGlzIG5vdCBhIHZhbGlkIGluZGV4LiAqKVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIENoYXIudW5zYWZlX2NociBiMCB3aXRoICgqIFNlZSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgVGFibGUgMy43ICopXG4gIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGRlY19yZXQgMSBiMFxuICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBkZWNfcmV0IDIgKHV0Zl84X3VjaGFyXzIgYjAgYjEpXG4gIHwgJ1xceEUwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94QTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEVEJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDlGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RjAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g5MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEY0JyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDhGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8IF8gLT4gZGVjX2ludmFsaWQgMVxuXG5sZXQgc2V0X3V0Zl84X3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4MDA3RiAtPlxuICAgICAgc2V0X3VpbnQ4IGIgaSB1O1xuICAgICAgMVxuICB8IHUgd2hlbiB1IDw9IDB4MDdGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4QzAgbG9yICh1IGxzciA2KSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMilcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEUwIGxvciAodSBsc3IgMTIpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDMpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEYwIGxvciAodSBsc3IgMTgpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiAoaSArIDIpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDQpXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl84IGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gICAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIChnZXQgYiBpKSB3aXRoXG4gICAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gbG9vcCBtYXggYiAoaSArIDEpXG4gICAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feEEwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RUQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g5RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94OTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEY0JyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OEYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZCRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZiZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZMRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZsZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+ICBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubW9kdWxlIEIgPSBCeXRlc1xuXG5sZXQgYnRzID0gQi51bnNhZmVfdG9fc3RyaW5nXG5sZXQgYm9zID0gQi51bnNhZmVfb2Zfc3RyaW5nXG5cbmxldCBtYWtlIG4gYyA9XG4gIEIubWFrZSBuIGMgfD4gYnRzXG5sZXQgaW5pdCBuIGYgPVxuICBCLmluaXQgbiBmIHw+IGJ0c1xubGV0IGVtcHR5ID0gXCJcIlxubGV0IGNvcHkgcyA9XG4gIEIuY29weSAoYm9zIHMpIHw+IGJ0c1xubGV0IG9mX2J5dGVzID0gQi50b19zdHJpbmdcbmxldCB0b19ieXRlcyA9IEIub2Zfc3RyaW5nXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIEIuc3ViIChib3Mgcykgb2ZzIGxlbiB8PiBidHNcbmxldCBmaWxsID1cbiAgQi5maWxsXG5sZXQgYmxpdCA9XG4gIEIuYmxpdF9zdHJpbmdcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBcIlwiXG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpbiBidHMgQEBcbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChCLmNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0ID0gKCBeIClcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXIgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlcmkgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbmxldCBtYXAgZiBzID1cbiAgQi5tYXAgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IG1hcGkgZiBzID1cbiAgQi5tYXBpIGYgKGJvcyBzKSB8PiBidHNcbmxldCBmb2xkX3JpZ2h0IGYgeCBhID1cbiAgQi5mb2xkX3JpZ2h0IGYgKGJvcyB4KSBhXG5sZXQgZm9sZF9sZWZ0IGYgYSB4ID1cbiAgQi5mb2xkX2xlZnQgZiBhIChib3MgeClcbmxldCBleGlzdHMgZiBzID1cbiAgQi5leGlzdHMgZiAoYm9zIHMpXG5sZXQgZm9yX2FsbCBmIHMgPVxuICBCLmZvcl9hbGwgZiAoYm9zIHMpXG5cbigqIEJld2FyZTogd2UgY2Fubm90IHVzZSBCLnRyaW0gb3IgQi5lc2NhcGUgYmVjYXVzZSB0aGV5IGFsd2F5cyBtYWtlIGFcbiAgIGNvcHksIGJ1dCBTdHJpbmcubWxpIHNwZWxscyBvdXQgc29tZSBjYXNlcyB3aGVyZSB3ZSBhcmUgbm90IGFsbG93ZWRcbiAgIHRvIG1ha2UgYSBjb3B5LiAqKVxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGlmIHMgPSBcIlwiIHRoZW4gc1xuICBlbHNlIGlmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgMCkgfHwgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAobGVuZ3RoIHMgLSAxKSlcbiAgICB0aGVuIGJ0cyAoQi50cmltIChib3MgcykpXG4gIGVsc2Ugc1xuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IHJlYyBlc2NhcGVfaWZfbmVlZGVkIHMgbiBpID1cbiAgICBpZiBpID49IG4gdGhlbiBzIGVsc2VcbiAgICAgIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcMDAwJy4uJ1xcMDMxJyB8ICdcXDEyNycuLiAnXFwyNTUnIC0+XG4gICAgICAgICAgYnRzIChCLmVzY2FwZWQgKGJvcyBzKSlcbiAgICAgIHwgXyAtPiBlc2NhcGVfaWZfbmVlZGVkIHMgbiAoaSsxKVxuICBpblxuICBlc2NhcGVfaWZfbmVlZGVkIHMgKGxlbmd0aCBzKSAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID1cbiAgQi51cHBlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2UgcyA9XG4gIEIubG93ZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZSBzID1cbiAgQi5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplIHMgPVxuICBCLnVuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGFycmF5cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbigqIEFycmF5IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogJ2EgYXJyYXkgLT4gaW50ID0gXCIlYXJyYXlfbGVuZ3RoXCJcbmV4dGVybmFsIGdldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3NhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV91bnNhZmVfc2V0XCJcbmV4dGVybmFsIG1ha2U6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgY3JlYXRlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIHVuc2FmZV9zdWIgOiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X3N1YlwiXG5leHRlcm5hbCBhcHBlbmRfcHJpbSA6ICdhIGFycmF5IC0+ICdhIGFycmF5IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2FwcGVuZFwiXG5leHRlcm5hbCBjb25jYXQgOiAnYSBhcnJheSBsaXN0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2NvbmNhdFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6XG4gICdhIGFycmF5IC0+IGludCAtPiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfYmxpdFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6XG4gICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9maWxsXCJcbmV4dGVybmFsIGNyZWF0ZV9mbG9hdDogaW50IC0+IGZsb2F0IGFycmF5ID0gXCJjYW1sX21ha2VfZmxvYXRfdmVjdFwiXG5sZXQgbWFrZV9mbG9hdCA9IGNyZWF0ZV9mbG9hdFxuXG5tb2R1bGUgRmxvYXRhcnJheSA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gZmxvYXRhcnJheSA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIGxlbmd0aCA6IGZsb2F0YXJyYXkgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0XG4gICAgICA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5lbmRcblxubGV0IGluaXQgbCBmID1cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2VcbiAgaWYgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmluaXRcIlxuICAoKiBTZWUgIzY1NzUuIFdlIGNvdWxkIGFsc28gY2hlY2sgZm9yIG1heGltdW0gYXJyYXkgc2l6ZSwgYnV0IHRoaXMgZGVwZW5kc1xuICAgICBvbiB3aGV0aGVyIHdlIGNyZWF0ZSBhIGZsb2F0IGFycmF5IG9yIGEgcmVndWxhciBvbmUuLi4gKilcbiAgZWxzZVxuICAgbGV0IHJlcyA9IGNyZWF0ZSBsIChmIDApIGluXG4gICBmb3IgaSA9IDEgdG8gcHJlZCBsIGRvXG4gICAgIHVuc2FmZV9zZXQgcmVzIGkgKGYgaSlcbiAgIGRvbmU7XG4gICByZXNcblxubGV0IG1ha2VfbWF0cml4IHN4IHN5IGluaXQgPVxuICBsZXQgcmVzID0gY3JlYXRlIHN4IFt8fF0gaW5cbiAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICB1bnNhZmVfc2V0IHJlcyB4IChjcmVhdGUgc3kgaW5pdClcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBjcmVhdGVfbWF0cml4ID0gbWFrZV9tYXRyaXhcblxubGV0IGNvcHkgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW4gaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgdW5zYWZlX3N1YiBhIDAgbFxuXG5sZXQgYXBwZW5kIGExIGEyID1cbiAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gIGlmIGwxID0gMCB0aGVuIGNvcHkgYTJcbiAgZWxzZSBpZiBsZW5ndGggYTIgPSAwIHRoZW4gdW5zYWZlX3N1YiBhMSAwIGwxXG4gIGVsc2UgYXBwZW5kX3ByaW0gYTEgYTJcblxubGV0IHN1YiBhIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnN1YlwiXG4gIGVsc2UgdW5zYWZlX3N1YiBhIG9mcyBsZW5cblxubGV0IGZpbGwgYSBvZnMgbGVuIHYgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbmxldCBibGl0IGExIG9mczEgYTIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggYTEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIGEyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuXG5cbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgaXRlcjIgZiBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5pdGVyMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSBkb25lXG5cbmxldCBtYXAgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcDIgZiBhIGIgPVxuICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICBsZXQgbGIgPSBsZW5ndGggYiBpblxuICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2UgYmVnaW5cbiAgICBpZiBsYSA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gY3JlYXRlIGxhIChmICh1bnNhZmVfZ2V0IGEgMCkgKHVuc2FmZV9nZXQgYiAwKSkgaW5cbiAgICAgIGZvciBpID0gMSB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcbiAgZW5kXG5cbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IG1hcGkgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYgMCAodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IHRvX2xpc3QgYSA9XG4gIGxldCByZWMgdG9saXN0IGkgcmVzID1cbiAgICBpZiBpIDwgMCB0aGVuIHJlcyBlbHNlIHRvbGlzdCAoaSAtIDEpICh1bnNhZmVfZ2V0IGEgaSA6OiByZXMpIGluXG4gIHRvbGlzdCAobGVuZ3RoIGEgLSAxKSBbXVxuXG4oKiBDYW5ub3QgdXNlIExpc3QubGVuZ3RoIGhlcmUgYmVjYXVzZSB0aGUgTGlzdCBtb2R1bGUgZGVwZW5kcyBvbiBBcnJheS4gKilcbmxldCByZWMgbGlzdF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjdVxuICB8IF86OnQgLT4gbGlzdF9sZW5ndGggKHN1Y2MgYWNjdSkgdFxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgYSA9IGNyZWF0ZSAobGlzdF9sZW5ndGggMCBsKSBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGkrMSkgdGwgaW5cbiAgICAgIGZpbGwgMSB0bFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2MgaW5wdXRfYXJyYXkgPVxuICBsZXQgbGVuID0gbGVuZ3RoIGlucHV0X2FycmF5IGluXG4gIGlmIGxlbiA9IDAgdGhlbiAoYWNjLCBbfHxdKSBlbHNlIGJlZ2luXG4gICAgbGV0IGFjYywgZWx0ID0gZiBhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgMCkgaW5cbiAgICBsZXQgb3V0cHV0X2FycmF5ID0gY3JlYXRlIGxlbiBlbHQgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgYWNjJywgZWx0ID0gZiAhYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IGkpIGluXG4gICAgICBhY2MgOj0gYWNjJztcbiAgICAgIHVuc2FmZV9zZXQgb3V0cHV0X2FycmF5IGkgZWx0O1xuICAgIGRvbmU7XG4gICAgIWFjYywgb3V0cHV0X2FycmF5XG4gIGVuZFxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZm9yX2FsbDJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBleGlzdHMyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5leGlzdHMyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW1xIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHggPT0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX29wdCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBpZiBwIHggdGhlbiBTb21lIHhcbiAgICAgIGVsc2UgbG9vcCAoc3VjYyBpKVxuICBpblxuICBsb29wIDBcblxubGV0IGZpbmRfbWFwIGYgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGYgKHVuc2FmZV9nZXQgYSBpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gbG9vcCAoc3VjYyBpKVxuICAgICAgfCBTb21lIF8gYXMgciAtPiByXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3BsaXQgeCA9XG4gIGlmIHggPSBbfHxdIHRoZW4gW3x8XSwgW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGEwLCBiMCA9IHVuc2FmZV9nZXQgeCAwIGluXG4gICAgbGV0IG4gPSBsZW5ndGggeCBpblxuICAgIGxldCBhID0gY3JlYXRlIG4gYTAgaW5cbiAgICBsZXQgYiA9IGNyZWF0ZSBuIGIwIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgYWksIGJpID0gdW5zYWZlX2dldCB4IGkgaW5cbiAgICAgIHVuc2FmZV9zZXQgYSBpIGFpO1xuICAgICAgdW5zYWZlX3NldCBiIGkgYmlcbiAgICBkb25lO1xuICAgIGEsIGJcbiAgZW5kXG5cbmxldCBjb21iaW5lIGEgYiA9XG4gIGxldCBuYSA9IGxlbmd0aCBhIGluXG4gIGxldCBuYiA9IGxlbmd0aCBiIGluXG4gIGlmIG5hIDw+IG5iIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5jb21iaW5lXCI7XG4gIGlmIG5hID0gMCB0aGVuIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCB4ID0gY3JlYXRlIG5hICh1bnNhZmVfZ2V0IGEgMCwgdW5zYWZlX2dldCBiIDApIGluXG4gICAgZm9yIGkgPSAxIHRvIG5hIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCB4IGkgKHVuc2FmZV9nZXQgYSBpLCB1bnNhZmVfZ2V0IGIgaSlcbiAgICBkb25lO1xuICAgIHhcbiAgZW5kXG5cbmV4Y2VwdGlvbiBCb3R0b20gb2YgaW50XG5sZXQgc29ydCBjbXAgYSA9XG4gIGxldCBtYXhzb24gbCBpID1cbiAgICBsZXQgaTMxID0gaStpK2krMSBpblxuICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICBpZiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMCB0aGVuIHggOj0gaTMxKzE7XG4gICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICF4XG4gICAgZW5kIGVsc2VcbiAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgdGhlbiBpMzErMVxuICAgICAgZWxzZSBpZiBpMzEgPCBsIHRoZW4gaTMxIGVsc2UgcmFpc2UgKEJvdHRvbSBpKVxuICBpblxuICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgdHJpY2tsZWRvd24gbCBqIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gIGxldCByZWMgYnViYmxlZG93biBsIGkgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgIGJ1YmJsZWRvd24gbCBqXG4gIGluXG4gIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICBsZXQgcmVjIHRyaWNrbGV1cCBpIGUgPVxuICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgIGlmIGNtcCAoZ2V0IGEgZmF0aGVyKSBlIDwgMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gIGZvciBpID0gbCAtIDEgZG93bnRvIDIgZG9cbiAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgIHRyaWNrbGV1cCAoYnViYmxlIGkgMCkgZTtcbiAgZG9uZTtcbiAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuXG5sZXQgY3V0b2ZmID0gNVxubGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgbGV0IG1lcmdlIHNyYzFvZnMgc3JjMWxlbiBzcmMyIHNyYzJvZnMgc3JjMmxlbiBkc3QgZHN0b2ZzID1cbiAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgIGlmIGNtcCBzMSBzMiA8PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgaWYgaTEgPCBzcmMxciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgc3JjMiBpMiBkc3QgKGQgKyAxKSAoc3JjMnIgLSBpMilcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgbGV0IGkyID0gaTIgKyAxIGluXG4gICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICBlbmRcbiAgICBpbiBsb29wIHNyYzFvZnMgKGdldCBhIHNyYzFvZnMpIHNyYzJvZnMgKGdldCBzcmMyIHNyYzJvZnMpIGRzdG9mcztcbiAgaW5cbiAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgd2hpbGUgKCFqID49IGRzdG9mcyAmJiBjbXAgKGdldCBkc3QgIWopIGUgPiAwKSBkb1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgZGVjciBqO1xuICAgICAgZG9uZTtcbiAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICBkb25lO1xuICBpblxuICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsZW4gLyAyIGluXG4gICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICBzb3J0dG8gc3Jjb2ZzIGEgKHNyY29mcyArIGwyKSBsMTtcbiAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgIGxldCBsMSA9IGwgLyAyIGluXG4gICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgbGV0IHQgPSBtYWtlIGwyIChnZXQgYSAwKSBpblxuICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgc29ydHRvIDAgYSBsMiBsMTtcbiAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICBlbmRcblxuXG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgb2ZfcmV2X2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGxlbiA9IGxpc3RfbGVuZ3RoIDAgbCBpblxuICAgICAgbGV0IGEgPSBjcmVhdGUgbGVuIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaS0xKSB0bFxuICAgICAgaW5cbiAgICAgIGZpbGwgKGxlbi0yKSB0bFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIGkgaW5cbiAgb2ZfcmV2X2xpc3QgbFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTZXRzIG92ZXIgb3JkZXJlZCB0eXBlcyAqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBlbHRcbiAgICB0eXBlIHRcbiAgICB2YWwgZW1wdHk6IHRcbiAgICB2YWwgaXNfZW1wdHk6IHQgLT4gYm9vbFxuICAgIHZhbCBtZW06IGVsdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHNpbmdsZXRvbjogZWx0IC0+IHRcbiAgICB2YWwgcmVtb3ZlOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHVuaW9uOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBpbnRlcjogdCAtPiB0IC0+IHRcbiAgICB2YWwgZGlzam9pbnQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGRpZmY6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgbWFwOiAoZWx0IC0+IGVsdCkgLT4gdCAtPiB0XG4gICAgdmFsIGZvbGQ6IChlbHQgLT4gJ2EgLT4gJ2EpIC0+IHQgLT4gJ2EgLT4gJ2FcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChlbHQgLT4gZWx0IG9wdGlvbikgLT4gdCAtPiB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHQgKiB0XG4gICAgdmFsIGNhcmRpbmFsOiB0IC0+IGludFxuICAgIHZhbCBlbGVtZW50czogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBtaW5fZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtaW5fZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG1heF9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1heF9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiB0IC0+IGVsdFxuICAgIHZhbCBjaG9vc2Vfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGVsdCAtPiB0IC0+IHQgKiBib29sICogdFxuICAgIHZhbCBmaW5kOiBlbHQgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9vcHQ6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2ZpcnN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfbGFzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG9mX2xpc3Q6IGVsdCBsaXN0IC0+IHRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBlbHQgLT4gdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fcmV2X3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiBlbHQgU2VxLnQgLT4gdCAtPiB0XG4gICAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9XG4gIHN0cnVjdFxuICAgIHR5cGUgZWx0ID0gT3JkLnRcbiAgICB0eXBlIHQgPSBFbXB0eSB8IE5vZGUgb2Yge2w6dDsgdjplbHQ7IHI6dDsgaDppbnR9XG5cbiAgICAoKiBTZXRzIGFyZSByZXByZXNlbnRlZCBieSBiYWxhbmNlZCBiaW5hcnkgdHJlZXMgKHRoZSBoZWlnaHRzIG9mIHRoZVxuICAgICAgIGNoaWxkcmVuIGRpZmZlciBieSBhdCBtb3N0IDIgKilcblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgICgqIENyZWF0ZXMgYSBuZXcgbm9kZSB3aXRoIGxlZnQgc29uIGwsIHZhbHVlIHYgYW5kIHJpZ2h0IHNvbiByLlxuICAgICAgIFdlIG11c3QgaGF2ZSBhbGwgZWxlbWVudHMgb2YgbCA8IHYgPCBhbGwgZWxlbWVudHMgb2Ygci5cbiAgICAgICBsIGFuZCByIG11c3QgYmUgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBoZWlnaHQgZm9yIGJldHRlciBzcGVlZC4gKilcblxuICAgIGxldCBjcmVhdGUgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUsIGJ1dCBwZXJmb3JtcyBvbmUgc3RlcCBvZiByZWJhbGFuY2luZyBpZiBuZWNlc3NhcnkuXG4gICAgICAgQXNzdW1lcyBsIGFuZCByIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAzLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgY3JlYXRlIGZvciBiZXR0ZXIgc3BlZWQgaW4gdGhlIG1vc3QgZnJlcXVlbnQgY2FzZVxuICAgICAgIHdoZXJlIG5vIHJlYmFsYW5jaW5nIGlzIHJlcXVpcmVkLiAqKVxuXG4gICAgbGV0IGJhbCBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgKGNyZWF0ZSBsciB2IHIpXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIGxyIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1scmw7IHY9bHJ2OyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbHJsKSBscnYgKGNyZWF0ZSBscnIgdiByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybCkgcnYgcnJcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPXJsbDsgdj1ybHY7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsbCkgcmx2IChjcmVhdGUgcmxyIHJ2IHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIEluc2VydGlvbiBvZiBvbmUgZWxlbWVudCAqKVxuXG4gICAgbGV0IHJlYyBhZGQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB0IGVsc2VcbiAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdCBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdCBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCBzaW5nbGV0b24geCA9IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIHYgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQgZWxlbWVudHMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkgZWxlbWVudC5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIChhZGRfbWluX2VsZW1lbnQgeCBsKSB2IHJcblxuICAgIGxldCByZWMgYWRkX21heF9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgbCB2IChhZGRfbWF4X2VsZW1lbnQgeCByKVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUgYW5kIGJhbCwgYnV0IG5vIGFzc3VtcHRpb25zIGFyZSBtYWRlIG9uIHRoZVxuICAgICAgIHJlbGF0aXZlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCByZWMgam9pbiBsIHYgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fZWxlbWVudCB2IHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2VsZW1lbnQgdiBsXG4gICAgICB8IChOb2Rle2w9bGw7IHY9bHY7IHI9bHI7IGg9bGh9LCBOb2Rle2w9cmw7IHY9cnY7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IChqb2luIGxyIHYgcikgZWxzZVxuICAgICAgICAgIGlmIHJoID4gbGggKyAyIHRoZW4gYmFsIChqb2luIGwgdiBybCkgcnYgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgclxuXG4gICAgKCogU21hbGxlc3QgYW5kIGdyZWF0ZXN0IGVsZW1lbnQgb2YgYSBzZXQgKilcblxuICAgIGxldCByZWMgbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0IGxcblxuICAgIGxldCByZWMgbWluX2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdF9vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHQgclxuXG4gICAgbGV0IHJlYyBtYXhfZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0X29wdCByXG5cbiAgICAoKiBSZW1vdmUgdGhlIHNtYWxsZXN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNldCAqKVxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyByfSAtPiByXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2VsdCBsKSB2IHJcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBBc3N1bWUgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi4gKilcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGJhbCB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBqb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBTcGxpdHRpbmcuICBzcGxpdCB4IHMgcmV0dXJucyBhIHRyaXBsZSAobCwgcHJlc2VudCwgcikgd2hlcmVcbiAgICAgICAgLSBsIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA8IHhcbiAgICAgICAgLSByIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA+IHhcbiAgICAgICAgLSBwcmVzZW50IGlzIGZhbHNlIGlmIHMgY29udGFpbnMgbm8gZWxlbWVudCBlcXVhbCB0byB4LFxuICAgICAgICAgIG9yIHRydWUgaWYgcyBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIHguICopXG5cbiAgICBsZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIChFbXB0eSwgZmFsc2UsIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCB0cnVlLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBsciwgcHJlcywgcnIpXG5cbiAgICAoKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0IG9wZXJhdGlvbnMgKilcblxuICAgIGxldCBlbXB0eSA9IEVtcHR5XG5cbiAgICBsZXQgaXNfZW1wdHkgPSBmdW5jdGlvbiBFbXB0eSAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9IGFzIHQpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpblxuICAgICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpblxuICAgICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCByZWMgdW5pb24gczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIHQyKSAtPiB0MlxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxOyBoPWgxfSwgTm9kZXtsPWwyOyB2PXYyOyByPXIyOyBoPWgyfSkgLT5cbiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuXG4gICAgICAgICAgICBpZiBoMiA9IDEgdGhlbiBhZGQgdjIgczEgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwyLCBfLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjEgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgaDEgPSAxIHRoZW4gYWRkIHYxIHMyIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMSwgXywgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYyICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuXG4gICAgbGV0IHJlYyBpbnRlciBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoaW50ZXIgbDEgbDIpIChpbnRlciByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGludGVyIGwxIGwyKSB2MSAoaW50ZXIgcjEgcjIpXG5cbiAgICAoKiBTYW1lIGFzIHNwbGl0LCBidXQgY29tcHV0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZXNcbiAgICAgICBvbmx5IGlmIHRoZSBwaXZvdCBlbGVtZW50IGlzIG5vdCBpbiB0aGUgc2V0LiAgVGhlIHJpZ2h0IHN1YnRyZWVcbiAgICAgICBpcyBjb21wdXRlZCBvbiBkZW1hbmQuICopXG5cbiAgICB0eXBlIHNwbGl0X2JpcyA9XG4gICAgICB8IEZvdW5kXG4gICAgICB8IE5vdEZvdW5kIG9mIHQgKiAodW5pdCAtPiB0KVxuXG4gICAgbGV0IHJlYyBzcGxpdF9iaXMgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm90Rm91bmQgKEVtcHR5LCAoZnVuICgpIC0+IEVtcHR5KSlcbiAgICAgIHwgTm9kZXtsOyB2OyByOyBffSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBGb3VuZFxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggbCB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsbCwgcmwpIC0+IE5vdEZvdW5kIChsbCwgKGZ1biAoKSAtPiBqb2luIChybCAoKSkgdiByKSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCByIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxyLCBycikgLT4gTm90Rm91bmQgKGpvaW4gbCB2IGxyLCBycilcblxuICAgIGxldCByZWMgZGlzam9pbnQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIHwgKF8sIEVtcHR5KSAtPiB0cnVlXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBpZiBzMSA9PSBzMiB0aGVuIGZhbHNlXG4gICAgICAgICAgZWxzZSBtYXRjaCBzcGxpdF9iaXMgdjEgdDIgd2l0aFxuICAgICAgICAgICAgICBOb3RGb3VuZChsMiwgcjIpIC0+IGRpc2pvaW50IGwxIGwyICYmIGRpc2pvaW50IHIxIChyMiAoKSlcbiAgICAgICAgICAgIHwgRm91bmQgLT4gZmFsc2VcblxuICAgIGxldCByZWMgZGlmZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChkaWZmIGwxIGwyKSB2MSAoZGlmZiByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoZGlmZiBsMSBsMikgKGRpZmYgcjEgcjIpXG5cbiAgICB0eXBlIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBlbHQgKiB0ICogZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIHIsIGUpKVxuXG4gICAgbGV0IHJlYyBjb21wYXJlX2F1eCBlMSBlMiA9XG4gICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICB8IChFbmQsIF8pICAtPiAtMVxuICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICB8IChNb3JlKHYxLCByMSwgZTEpLCBNb3JlKHYyLCByMiwgZTIpKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjIDw+IDBcbiAgICAgICAgICB0aGVuIGNcbiAgICAgICAgICBlbHNlIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG5cbiAgICBsZXQgY29tcGFyZSBzMSBzMiA9XG4gICAgICBjb21wYXJlX2F1eCAoY29uc19lbnVtIHMxIEVuZCkgKGNvbnNfZW51bSBzMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgczEgczIgPVxuICAgICAgY29tcGFyZSBzMSBzMiA9IDBcblxuICAgIGxldCByZWMgc3Vic2V0IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgRW1wdHksIF8gLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IF8sIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bD1sMTsgdj12MTsgcj1yMX0sIChOb2RlIHtsPWwyOyB2PXYyOyByPXIyfSBhcyB0MikgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IGwxIGwyICYmIHN1YnNldCByMSByMlxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPWwxOyB2PXYxOyByPUVtcHR5OyBoPTB9KSBsMiAmJiBzdWJzZXQgcjEgdDJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9RW1wdHk7IHY9djE7IHI9cjE7IGg9MH0pIHIyICYmIHN1YnNldCBsMSB0MlxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGl0ZXIgZiBsOyBmIHY7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIGZvbGQgZiBzIGFjY3UgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBmb2xkIGYgciAoZiB2IChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2IHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9KSBhcyB0IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXIgcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyIHAgciBpblxuICAgICAgICAgIGlmIHB2IHRoZW5cbiAgICAgICAgICAgIGlmIGw9PWwnICYmIHI9PXInIHRoZW4gdCBlbHNlIGpvaW4gbCcgdiByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdlxuICAgICAgICAgIHRoZW4gKGpvaW4gbHQgdiBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IHJmKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZXtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgZWxlbWVudHNfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZWxlbWVudHNfYXV4ICh2IDo6IGVsZW1lbnRzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBlbGVtZW50cyBzID1cbiAgICAgIGVsZW1lbnRzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2VsdFxuXG4gICAgbGV0IGNob29zZV9vcHQgPSBtaW5fZWx0X29wdFxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB2XG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSB2XG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHRyeV9qb2luIGwgdiByID1cbiAgICAgICgqIFtqb2luIGwgdiByXSBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiAoZWxlbWVudHMgb2YgbCA8IHYgPFxuICAgICAgICAgZWxlbWVudHMgb2Ygcik7IHVzZSBbdHJ5X2pvaW4gbCB2IHJdIHdoZW4gdGhpcyBwcm9wZXJ0eSBtYXlcbiAgICAgICAgIG5vdCBob2xkLCBidXQgeW91IGhvcGUgaXQgZG9lcyBob2xkIGluIHRoZSBjb21tb24gY2FzZSAqKVxuICAgICAgaWYgKGwgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSAobWF4X2VsdCBsKSB2IDwgMClcbiAgICAgICYmIChyID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgdiAobWluX2VsdCByKSA8IDApXG4gICAgICB0aGVuIGpvaW4gbCB2IHJcbiAgICAgIGVsc2UgdW5pb24gbCAoYWRkIHYgcilcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBtYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuXG4gICAgbGV0IHRyeV9jb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiB0cnlfam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggdicgd2l0aFxuICAgICAgICAgICB8IFNvbWUgdicgLT5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcbiAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIHRyeV9jb25jYXQgbCcgcidcbiAgICAgICAgIGVuZFxuXG4gICAgbGV0IG9mX3NvcnRlZF9saXN0IGwgPVxuICAgICAgbGV0IHJlYyBzdWIgbiBsID1cbiAgICAgICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgICAgIHwgMCwgbCAtPiBFbXB0eSwgbFxuICAgICAgICB8IDEsIHgwIDo6IGwgLT4gTm9kZSB7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfSwgbFxuICAgICAgICB8IDIsIHgwIDo6IHgxIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7IHI9RW1wdHk7IGg9Mn0sIGxcbiAgICAgICAgfCAzLCB4MCA6OiB4MSA6OiB4MiA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxO1xuICAgICAgICAgICAgICAgICByPU5vZGV7bD1FbXB0eTsgdj14Mjsgcj1FbXB0eTsgaD0xfTsgaD0yfSwgbFxuICAgICAgICB8IG4sIGwgLT5cbiAgICAgICAgICBsZXQgbmwgPSBuIC8gMiBpblxuICAgICAgICAgIGxldCBsZWZ0LCBsID0gc3ViIG5sIGwgaW5cbiAgICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgbWlkIDo6IGwgLT5cbiAgICAgICAgICAgIGxldCByaWdodCwgbCA9IHN1YiAobiAtIG5sIC0gMSkgbCBpblxuICAgICAgICAgICAgY3JlYXRlIGxlZnQgbWlkIHJpZ2h0LCBsXG4gICAgICBpblxuICAgICAgZnN0IChzdWIgKExpc3QubGVuZ3RoIGwpIGwpXG5cbiAgICBsZXQgb2ZfbGlzdCBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBlbXB0eVxuICAgICAgfCBbeDBdIC0+IHNpbmdsZXRvbiB4MFxuICAgICAgfCBbeDA7IHgxXSAtPiBhZGQgeDEgKHNpbmdsZXRvbiB4MClcbiAgICAgIHwgW3gwOyB4MTsgeDJdIC0+IGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDNdIC0+IGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDM7IHg0XSAtPiBhZGQgeDQgKGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKSlcbiAgICAgIHwgXyAtPiBvZl9zb3J0ZWRfbGlzdCAoTGlzdC5zb3J0X3VuaXEgT3JkLmNvbXBhcmUgbClcblxuICAgIGxldCBhZGRfc2VxIGkgbSA9XG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gcyB4IC0+IGFkZCB4IHMpIG0gaVxuXG4gICAgbGV0IG9mX3NlcSBpID0gYWRkX3NlcSBpIGVtcHR5XG5cbiAgICBsZXQgcmVjIHNlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBjID0gc2VxX29mX2VudW1fIChjb25zX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPSByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgdG9fc2VxX2Zyb20gbG93IHMgPVxuICAgICAgbGV0IHJlYyBhdXggbG93IHMgYyA9IG1hdGNoIHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGNcbiAgICAgICAgfCBOb2RlIHtsOyByOyB2OyBffSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggT3JkLmNvbXBhcmUgdiBsb3cgd2l0aFxuICAgICAgICAgICAgICB8IDAgLT4gTW9yZSAodiwgciwgYylcbiAgICAgICAgICAgICAgfCBuIHdoZW4gbjwwIC0+IGF1eCBsb3cgciBjXG4gICAgICAgICAgICAgIHwgXyAtPiBhdXggbG93IGwgKE1vcmUgKHYsIHIsIGMpKVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgc2VxX29mX2VudW1fIChhdXggbG93IHMgRW5kKVxuICBlbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgdG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IGhkXG4gIHwgW10gICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gU29tZSBoZFxuICB8IFtdICAgIC0+IE5vbmVcblxubGV0IGlzX2VtcHR5IHMgPSAocy5jID0gW10pXG5cbmxldCBsZW5ndGggcyA9IHMubGVuXG5cbmxldCBpdGVyIGYgcyA9IExpc3QuaXRlciBmIHMuY1xuXG5sZXQgZm9sZCBmIGFjYyBzID0gTGlzdC5mb2xkX2xlZnQgZiBhY2Mgcy5jXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IExpc3QudG9fc2VxIHMuY1xuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHMgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHMgZztcbiAgc1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBGcmFuY29pcyBQb3R0aWVyLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICBKZXJlbWllIERpbWlubywgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leGNlcHRpb24gRW1wdHlcblxudHlwZSAnYSBjZWxsID1cbiAgfCBOaWxcbiAgfCBDb25zIG9mIHsgY29udGVudDogJ2E7IG11dGFibGUgbmV4dDogJ2EgY2VsbCB9XG5cbnR5cGUgJ2EgdCA9IHtcbiAgbXV0YWJsZSBsZW5ndGg6IGludDtcbiAgbXV0YWJsZSBmaXJzdDogJ2EgY2VsbDtcbiAgbXV0YWJsZSBsYXN0OiAnYSBjZWxsXG59XG5cbmxldCBjcmVhdGUgKCkgPSB7XG4gIGxlbmd0aCA9IDA7XG4gIGZpcnN0ID0gTmlsO1xuICBsYXN0ID0gTmlsXG59XG5cbmxldCBjbGVhciBxID1cbiAgcS5sZW5ndGggPC0gMDtcbiAgcS5maXJzdCA8LSBOaWw7XG4gIHEubGFzdCA8LSBOaWxcblxubGV0IGFkZCB4IHEgPVxuICBsZXQgY2VsbCA9IENvbnMge1xuICAgIGNvbnRlbnQgPSB4O1xuICAgIG5leHQgPSBOaWxcbiAgfSBpblxuICBtYXRjaCBxLmxhc3Qgd2l0aFxuICB8IE5pbCAtPlxuICAgIHEubGVuZ3RoIDwtIDE7XG4gICAgcS5maXJzdCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG4gIHwgQ29ucyBsYXN0IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggKyAxO1xuICAgIGxhc3QubmV4dCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG5cbmxldCBwdXNoID1cbiAgYWRkXG5cbmxldCBwZWVrIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IGNvbnRlbnRcblxubGV0IHBlZWtfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gU29tZSBjb250ZW50XG5cbmxldCB0b3AgPVxuICBwZWVrXG5cbmxldCB0YWtlIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgY29udGVudFxuXG5sZXQgdGFrZV9vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgU29tZSBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgU29tZSBjb250ZW50XG5cbmxldCBwb3AgPVxuICB0YWtlXG5cbmxldCBjb3B5ID1cbiAgbGV0IHJlYyBjb3B5IHFfcmVzIHByZXYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gcV9yZXMubGFzdCA8LSBwcmV2OyBxX3Jlc1xuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IHJlcyA9IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gaW5cbiAgICAgIGJlZ2luIG1hdGNoIHByZXYgd2l0aFxuICAgICAgfCBOaWwgLT4gcV9yZXMuZmlyc3QgPC0gcmVzXG4gICAgICB8IENvbnMgcCAtPiBwLm5leHQgPC0gcmVzXG4gICAgICBlbmQ7XG4gICAgICBjb3B5IHFfcmVzIHJlcyBuZXh0XG4gIGluXG4gIGZ1biBxIC0+IGNvcHkgeyBsZW5ndGggPSBxLmxlbmd0aDsgZmlyc3QgPSBOaWw7IGxhc3QgPSBOaWwgfSBOaWwgcS5maXJzdFxuXG5sZXQgaXNfZW1wdHkgcSA9XG4gIHEubGVuZ3RoID0gMFxuXG5sZXQgbGVuZ3RoIHEgPVxuICBxLmxlbmd0aFxuXG5sZXQgaXRlciA9XG4gIGxldCByZWMgaXRlciBmIGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBmIGNvbnRlbnQ7XG4gICAgICBpdGVyIGYgbmV4dFxuICBpblxuICBmdW4gZiBxIC0+IGl0ZXIgZiBxLmZpcnN0XG5cbmxldCBmb2xkID1cbiAgbGV0IHJlYyBmb2xkIGYgYWNjdSBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBhY2N1XG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgYWNjdSA9IGYgYWNjdSBjb250ZW50IGluXG4gICAgICBmb2xkIGYgYWNjdSBuZXh0XG4gIGluXG4gIGZ1biBmIGFjY3UgcSAtPiBmb2xkIGYgYWNjdSBxLmZpcnN0XG5cbmxldCB0cmFuc2ZlciBxMSBxMiA9XG4gIGlmIHExLmxlbmd0aCA+IDAgdGhlblxuICAgIG1hdGNoIHEyLmxhc3Qgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTEubGVuZ3RoO1xuICAgICAgcTIuZmlyc3QgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuICAgIHwgQ29ucyBsYXN0IC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTIubGVuZ3RoICsgcTEubGVuZ3RoO1xuICAgICAgbGFzdC5uZXh0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBxID1cbiAgbGV0IHJlYyBhdXggYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgIHwgTmlsIC0+IFNlcS5OaWxcbiAgICB8IENvbnMgeyBjb250ZW50PXg7IG5leHQ7IH0gLT4gU2VxLkNvbnMgKHgsIGF1eCBuZXh0KVxuICBpblxuICBhdXggcS5maXJzdFxuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHEgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHEgZztcbiAgcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBEYW5pZWwgZGUgUmF1Z2xhdWRyZSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBjZWxsIG9wdGlvblxuYW5kICdhIGNlbGwgPSB7IG11dGFibGUgY291bnQgOiBpbnQ7IG11dGFibGUgZGF0YSA6ICdhIGRhdGEgfVxuYW5kICdhIGRhdGEgPVxuICAgIFNlbXB0eVxuICB8IFNjb25zIG9mICdhICogJ2EgZGF0YVxuICB8IFNhcHAgb2YgJ2EgZGF0YSAqICdhIGRhdGFcbiAgfCBTbGF6eSBvZiAnYSBkYXRhIExhenkudFxuICB8IFNnZW4gb2YgJ2EgZ2VuXG4gIHwgU2J1ZmZpbyA6IGJ1ZmZpbyAtPiBjaGFyIGRhdGFcbmFuZCAnYSBnZW4gPSB7IG11dGFibGUgY3VyciA6ICdhIG9wdGlvbiBvcHRpb247IGZ1bmMgOiBpbnQgLT4gJ2Egb3B0aW9uIH1cbmFuZCBidWZmaW8gPVxuICB7IGljIDogaW5fY2hhbm5lbDsgYnVmZiA6IGJ5dGVzOyBtdXRhYmxlIGxlbiA6IGludDsgbXV0YWJsZSBpbmQgOiBpbnQgfVxuXG5leGNlcHRpb24gRmFpbHVyZVxuZXhjZXB0aW9uIEVycm9yIG9mIHN0cmluZ1xuXG5sZXQgY291bnQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gMFxuICB8IFNvbWUgeyBjb3VudCB9IC0+IGNvdW50XG5sZXQgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBTZW1wdHlcbiAgfCBTb21lIHsgZGF0YSB9IC0+IGRhdGFcblxubGV0IGZpbGxfYnVmZiBiID1cbiAgYi5sZW4gPC0gaW5wdXQgYi5pYyBiLmJ1ZmYgMCAoQnl0ZXMubGVuZ3RoIGIuYnVmZik7IGIuaW5kIDwtIDBcblxuXG5sZXQgcmVjIGdldF9kYXRhIDogdHlwZSB2LiBpbnQgLT4gdiBkYXRhIC0+IHYgZGF0YSA9IGZ1biBjb3VudCBkIC0+IG1hdGNoIGQgd2l0aFxuICgqIFJldHVybnMgZWl0aGVyIFNlbXB0eSBvciBTY29ucyhhLCBfKSBldmVuIHdoZW4gZCBpcyBhIGdlbmVyYXRvclxuICAgIG9yIGEgYnVmZmVyLiBJbiB0aG9zZSBjYXNlcywgdGhlIGl0ZW0gYSBpcyBzZWVuIGFzIGV4dHJhY3RlZCBmcm9tXG4gdGhlIGdlbmVyYXRvci9idWZmZXIuXG4gVGhlIGNvdW50IHBhcmFtZXRlciBpcyB1c2VkIGZvciBjYWxsaW5nIGBTZ2VuLWZ1bmN0aW9ucycuICAqKVxuICAgU2VtcHR5IHwgU2NvbnMgKF8sIF8pIC0+IGRcbiB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgY291bnQgZDEgd2l0aFxuICAgICAgIFNjb25zIChhLCBkMTEpIC0+IFNjb25zIChhLCBTYXBwIChkMTEsIGQyKSlcbiAgICAgfCBTZW1wdHkgLT4gZ2V0X2RhdGEgY291bnQgZDJcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNnZW4ge2N1cnIgPSBTb21lIE5vbmV9IC0+IFNlbXB0eVxuIHwgU2dlbiAoe2N1cnIgPSBTb21lKFNvbWUgYSl9IGFzIGcpIC0+XG4gICAgIGcuY3VyciA8LSBOb25lOyBTY29ucyhhLCBkKVxuIHwgU2dlbiBnIC0+XG4gICAgIGJlZ2luIG1hdGNoIGcuZnVuYyBjb3VudCB3aXRoXG4gICAgICAgTm9uZSAtPiBnLmN1cnIgPC0gU29tZShOb25lKTsgU2VtcHR5XG4gICAgIHwgU29tZSBhIC0+IFNjb25zKGEsIGQpXG4gICAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgZW5kXG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIFNlbXB0eSBlbHNlXG4gICAgICAgbGV0IHIgPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZCBpblxuICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICAgIGIuaW5kIDwtIHN1Y2MgYi5pbmQ7IFNjb25zKHIsIGQpXG4gfCBTbGF6eSBmIC0+IGdldF9kYXRhIGNvdW50IChMYXp5LmZvcmNlIGYpXG5cblxubGV0IHJlYyBwZWVrX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB2IG9wdGlvbiA9IGZ1biBzIC0+XG4gKCogY29uc3VsdCB0aGUgZmlyc3QgaXRlbSBvZiBzICopXG4gbWF0Y2ggcy5kYXRhIHdpdGhcbiAgIFNlbXB0eSAtPiBOb25lXG4gfCBTY29ucyAoYSwgXykgLT4gU29tZSBhXG4gfCBTYXBwIChfLCBfKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBzLmNvdW50IHMuZGF0YSB3aXRoXG4gICAgICAgU2NvbnMoYSwgXykgYXMgZCAtPiBzLmRhdGEgPC0gZDsgU29tZSBhXG4gICAgIHwgU2VtcHR5IC0+IE5vbmVcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNsYXp5IGYgLT4gcy5kYXRhIDwtIChMYXp5LmZvcmNlIGYpOyBwZWVrX2RhdGEgc1xuIHwgU2dlbiB7Y3VyciA9IFNvbWUgYX0gLT4gYVxuIHwgU2dlbiBnIC0+IGxldCB4ID0gZy5mdW5jIHMuY291bnQgaW4gZy5jdXJyIDwtIFNvbWUgeDsgeFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBiZWdpbiBzLmRhdGEgPC0gU2VtcHR5OyBOb25lIGVuZFxuICAgICBlbHNlIFNvbWUgKEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kKVxuXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHMgLT4gcGVla19kYXRhIHNcblxuXG5sZXQgcmVjIGp1bmtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHVuaXQgPSBmdW4gcyAtPlxuICBtYXRjaCBzLmRhdGEgd2l0aFxuICAgIFNjb25zIChfLCBkKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBzLmRhdGEgPC0gZFxuICB8IFNnZW4gKHtjdXJyID0gU29tZSBffSBhcyBnKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBnLmN1cnIgPC0gTm9uZVxuICB8IFNidWZmaW8gYiAtPlxuICAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgIGlmIGIubGVuID09IDAgdGhlbiBzLmRhdGEgPC0gU2VtcHR5XG4gICAgICBlbHNlIChzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBiLmluZCA8LSBzdWNjIGIuaW5kKVxuICB8IF8gLT5cbiAgICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgICAgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIF8gLT4ganVua19kYXRhIHNcblxuXG5sZXQganVuayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgZGF0YSAtPiBqdW5rX2RhdGEgZGF0YVxuXG5sZXQgcmVjIG5nZXRfZGF0YSBuIHMgPVxuICBpZiBuIDw9IDAgdGhlbiBbXSwgcy5kYXRhLCAwXG4gIGVsc2VcbiAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICBTb21lIGEgLT5cbiAgICAgICAganVua19kYXRhIHM7XG4gICAgICAgIGxldCAoYWwsIGQsIGspID0gbmdldF9kYXRhIChwcmVkIG4pIHMgaW4gYSA6OiBhbCwgU2NvbnMgKGEsIGQpLCBzdWNjIGtcbiAgICB8IE5vbmUgLT4gW10sIHMuZGF0YSwgMFxuXG5cbmxldCBucGVla19kYXRhIG4gcyA9XG4gIGxldCAoYWwsIGQsIGxlbikgPSBuZ2V0X2RhdGEgbiBzIGluXG4gIHMuY291bnQgPC0gKHMuY291bnQgLSBsZW4pO1xuICBzLmRhdGEgPC0gZDtcbiAgYWxcblxuXG5sZXQgbnBlZWsgbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgZCAtPiBucGVla19kYXRhIG4gZFxuXG5sZXQgbmV4dCBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIGEgLT4ganVuayBzOyBhXG4gIHwgTm9uZSAtPiByYWlzZSBGYWlsdXJlXG5cblxubGV0IGVtcHR5IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgXyAtPiByYWlzZSBGYWlsdXJlXG4gIHwgTm9uZSAtPiAoKVxuXG5cbmxldCBpdGVyIGYgc3RybSA9XG4gIGxldCByZWMgZG9fcmVjICgpID1cbiAgICBtYXRjaCBwZWVrIHN0cm0gd2l0aFxuICAgICAgU29tZSBhIC0+IGp1bmsgc3RybTsgaWdub3JlKGYgYSk7IGRvX3JlYyAoKVxuICAgIHwgTm9uZSAtPiAoKVxuICBpblxuICBkb19yZWMgKClcblxuXG4oKiBTdHJlYW0gYnVpbGRpbmcgZnVuY3Rpb25zICopXG5cbmxldCBmcm9tIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTZ2VuIHtjdXJyID0gTm9uZTsgZnVuYyA9IGZ9fVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gTGlzdC5mb2xkX3JpZ2h0IChmdW4geCBsIC0+IFNjb25zICh4LCBsKSkgbCBTZW1wdHl9XG5cblxubGV0IG9mX3N0cmluZyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICAoKiBXZSBjYW5ub3QgdXNlIHRoZSBpbmRleCBwYXNzZWQgYnkgdGhlIFtmcm9tXSBmdW5jdGlvbiBkaXJlY3RseVxuICAgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0gY291bnQsIHdpdGggYWJzb2x1dGVseSBub1xuICAgICAgIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgc3RhcnQgZnJvbSAwLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2VcbiAgICAgICBvZiBbU3RyZWFtLmljb25zICdjJyAoU3RyZWFtLmZyb21fc3RyaW5nIFwiYWJcIildLCB0aGUgZmlyc3RcbiAgICAgICBhY2Nlc3MgdG8gdGhlIHN0cmluZyB3aWxsIGJlIG1hZGUgd2l0aCBjb3VudCBbMV0gYWxyZWFkeS5cbiAgICAqKVxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IFN0cmluZy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgcy5bY10pXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9ieXRlcyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBCeXRlcy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgKEJ5dGVzLmdldCBzIGMpKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfY2hhbm5lbCBpYyA9XG4gIFNvbWUge2NvdW50ID0gMDtcbiAgICAgICAgZGF0YSA9IFNidWZmaW8ge2ljID0gaWM7IGJ1ZmYgPSBCeXRlcy5jcmVhdGUgNDA5NjsgbGVuID0gMDsgaW5kID0gMH19XG5cblxuKCogU3RyZWFtIGV4cHJlc3Npb25zIGJ1aWxkZXJzICopXG5cbmxldCBpYXBwIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNhcHAgKGRhdGEgaSwgZGF0YSBzKX1cbmxldCBpY29ucyBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgZGF0YSBzKX1cbmxldCBpc2luZyBpID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIFNlbXB0eSl9XG5cbmxldCBsYXBwIGYgcyA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNhcHAgKGRhdGEgKGYgKCkpLCBkYXRhIHMpKSl9XG5cbmxldCBsY29ucyBmIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgZGF0YSBzKSkpfVxubGV0IGxzaW5nIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgU2VtcHR5KSkpfVxuXG5sZXQgc2VtcHR5ID0gTm9uZVxubGV0IHNsYXp5IGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShkYXRhIChmICgpKSkpfVxuXG4oKiBGb3IgZGVidWdnaW5nIHVzZSAqKVxuXG5sZXQgcmVjIGR1bXAgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgdCAtPiB1bml0ID0gZnVuIGYgcyAtPlxuICBwcmludF9zdHJpbmcgXCJ7Y291bnQgPSBcIjtcbiAgcHJpbnRfaW50IChjb3VudCBzKTtcbiAgcHJpbnRfc3RyaW5nIFwiOyBkYXRhID0gXCI7XG4gIGR1bXBfZGF0YSBmIChkYXRhIHMpO1xuICBwcmludF9zdHJpbmcgXCJ9XCI7XG4gIHByaW50X25ld2xpbmUgKClcbmFuZCBkdW1wX2RhdGEgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgZGF0YSAtPiB1bml0ID0gZnVuIGYgLT5cbiAgZnVuY3Rpb25cbiAgICBTZW1wdHkgLT4gcHJpbnRfc3RyaW5nIFwiU2VtcHR5XCJcbiAgfCBTY29ucyAoYSwgZCkgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNjb25zIChcIjtcbiAgICAgIGYgYTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2FwcCAoXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMjtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNsYXp5IF8gLT4gcHJpbnRfc3RyaW5nIFwiU2xhenlcIlxuICB8IFNnZW4gXyAtPiBwcmludF9zdHJpbmcgXCJTZ2VuXCJcbiAgfCBTYnVmZmlvIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2J1ZmZpb1wiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICBQaWVycmUgV2VpcyBhbmQgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk5IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4dGVuc2libGUgYnVmZmVycyAqKVxuXG50eXBlIHQgPVxuIHttdXRhYmxlIGJ1ZmZlciA6IGJ5dGVzO1xuICBtdXRhYmxlIHBvc2l0aW9uIDogaW50O1xuICBtdXRhYmxlIGxlbmd0aCA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIubGVuZ3RoXVxuICAgLSBbYi5sZW5ndGggPSBCeXRlcy5sZW5ndGggYi5idWZmZXJdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4ge2J1ZmZlciA9IHM7IHBvc2l0aW9uID0gMDsgbGVuZ3RoID0gbjsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX2JsaXQgc3JjLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPj0gYi5wb3NpdGlvbiB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgYi5idWZmZXIgPC0gYi5pbml0aWFsX2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXG5cbigqIFtyZXNpemUgYiBtb3JlXSBlbnN1cmVzIHRoYXQgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkc1xuICAgYnkgZHluYW1pY2FsbHkgZXh0ZW5kaW5nIFtiLmJ1ZmZlcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmxlbmd0aF0uXG5cbiAgIEluIHBhcnRpY3VsYXIsIGFmdGVyIFtyZXNpemUgYiBtb3JlXSBpcyBjYWxsZWQsIGEgZGlyZWN0IGFjY2VzcyBvZlxuICAgc2l6ZSBbbW9yZV0gYXQgW2IucG9zaXRpb25dIHdpbGwgYWx3YXlzIGJlIGluLWJvdW5kcywgc28gdGhhdFxuICAgKHVuc2FmZV97Z2V0LHNldH0pIG1heSBiZSB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbiopXG5sZXQgcmVzaXplIGIgbW9yZSA9XG4gIGxldCBvbGRfcG9zID0gYi5wb3NpdGlvbiBpblxuICBsZXQgb2xkX2xlbiA9IGIubGVuZ3RoIGluXG4gIGxldCBuZXdfbGVuID0gcmVmIG9sZF9sZW4gaW5cbiAgd2hpbGUgb2xkX3BvcyArIG1vcmUgPiAhbmV3X2xlbiBkbyBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiBkb25lO1xuICBpZiAhbmV3X2xlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgaWYgb2xkX3BvcyArIG1vcmUgPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgdGhlbiBuZXdfbGVuIDo9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIGVsc2UgZmFpbHdpdGggXCJCdWZmZXIuYWRkOiBjYW5ub3QgZ3JvdyBidWZmZXJcIlxuICBlbmQ7XG4gIGxldCBuZXdfYnVmZmVyID0gQnl0ZXMuY3JlYXRlICFuZXdfbGVuIGluXG4gICgqIFBSIzYxNDg6IGxldCdzIGtlZXAgdXNpbmcgW2JsaXRdIHJhdGhlciB0aGFuIFt1bnNhZmVfYmxpdF0gaW5cbiAgICAgdGhpcyB0cmlja3kgZnVuY3Rpb24gdGhhdCBpcyBzbG93IGFueXdheS4gKilcbiAgQnl0ZXMuYmxpdCBiLmJ1ZmZlciAwIG5ld19idWZmZXIgMCBiLnBvc2l0aW9uO1xuICBiLmJ1ZmZlciA8LSBuZXdfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSAhbmV3X2xlbjtcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gIGFzc2VydCAob2xkX3BvcyArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICAoKVxuICAoKiBOb3RlOiB0aGVyZSBhcmUgdmFyaW91cyBzaXR1YXRpb25zIChwcmVlbXB0aXZlIHRocmVhZHMsIHNpZ25hbHMgYW5kXG4gICAgIGdjIGZpbmFsaXplcnMpIHdoZXJlIE9DYW1sIGNvZGUgbWF5IGJlIHJ1biBhc3luY2hyb25vdXNseTsgaW5cbiAgICAgcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIGEgcmFjZSB3aXRoIGFub3RoZXIgdXNlciBvZiBbYl0sIGNoYW5naW5nXG4gICAgIGl0cyBtdXRhYmxlIGZpZWxkcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBbcmVzaXplXSBjYWxsLiBUaGUgQnVmZmVyXG4gICAgIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBjb3JyZWN0bmVzcyBndWFyYW50ZWUgaWYgdGhhdCBoYXBwZW5zLFxuICAgICBidXQgd2UgbXVzdCBzdGlsbCBlbnN1cmUgdGhhdCB0aGUgZGF0YXN0cnVjdHVyZSBpbnZhcmlhbnRzIGhvbGQgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgLS0gYXMgd2UgcGxhbiB0byB1c2UgW3Vuc2FmZV97Z2V0LHNldH1dLlxuXG4gICAgIFRoZXJlIGFyZSB0d28gcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzIGluIHRoaXMgZnVuY3Rpb24sXG4gICAgIFtyZWZdIGFuZCBbQnl0ZXMuY3JlYXRlXSwgYnV0IGFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBmaWVsZHNcbiAgICAgb2YgW2JdIGhhcHBlbiBiZWZvcmUgYm90aCBvZiB0aGVtIG9yIGFmdGVyIGJvdGggb2YgdGhlbS5cblxuICAgICBXZSB0aGVyZWZvcmUgYXNzdW1lIHRoYXQgW2IucG9zaXRpb25dIG1heSBjaGFuZ2UgYXQgdGhlc2UgYWxsb2NhdGlvbnMsXG4gICAgIGFuZCBjaGVjayB0aGF0IHRoZSBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIHBvc3Rjb25kaXRpb25cbiAgICAgaG9sZHMgZm9yIGJvdGggdmFsdWVzIG9mIFtiLnBvc2l0aW9uXSwgYmVmb3JlIG9yIGFmdGVyIHRoZSBmdW5jdGlvblxuICAgICBpcyBjYWxsZWQuIE1vcmUgcHJlY2lzZWx5LCB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgbXVzdCBob2xkIGlmIHRoZVxuICAgICBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3RseSwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGJ1ZmZlciBpbnZhcmlhbnRzOlxuICAgICAtIFtvbGQoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW25ldyhiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbb2xkKGIubGVuZ3RoKSA8PSBuZXcoYi5sZW5ndGgpXVxuXG4gICAgIE5vdGU6IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBvbGQoYi5sZW5ndGgpXSBkb2VzICpub3QqXG4gICAgIGhvbGQgaW4gZ2VuZXJhbCwgYXMgaXQgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIHdoZXJlIHlvdSBuZWVkXG4gICAgIHRvIGNhbGwgW3Jlc2l6ZV0gdG8gaW5jcmVhc2UgW2IubGVuZ3RoXS5cblxuICAgICBOb3RlOiBbYXNzZXJ0XSBhYm92ZSBkb2VzIG5vdCBtZWFuIHRoYXQgd2Uga25vdyB0aGUgY29uZGl0aW9uc1xuICAgICBhbHdheXMgaG9sZCwgYnV0IHRoYXQgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gY29ycmVjdGx5XG4gICAgIG9ubHkgaWYgdGhleSBob2xkLlxuXG4gICAgIE5vdGU6IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG9lcyBub3QgbmVlZFxuICAgICB0byBiZSBjaGVja2VkIHdpdGggdGhpcyBsZXZlbCBvZiBzY3J1dGlueSwgZ2l2ZW4gdGhhdCB0aGV5XG4gICAgIHJlYWQvd3JpdGUgdGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBjaGVja2luZyB0aGF0XG4gICAgIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZCBvciBjYWxsaW5nIFtyZXNpemVdLlxuICAqKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciBwb3MgYztcbiAgYi5wb3NpdGlvbiA8LSBwb3MgKyAxXG5cbmxldCB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXggPSA0XG5sZXQgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heCA9IDRcblxubGV0IHJlYyBhZGRfdXRmXzhfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfOF91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfOF91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2YmVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZsZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZsZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCBhZGRfc3Vic3RyaW5nIGIgcyBvZmZzZXQgbGVuID1cbiAgaWYgb2Zmc2V0IDwgMCB8fCBsZW4gPCAwIHx8IG9mZnNldCA+IFN0cmluZy5sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9zdWJzdHJpbmcvYWRkX3N1YmJ5dGVzXCI7XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfc3ViYnl0ZXMgYiBzIG9mZnNldCBsZW4gPVxuICBhZGRfc3Vic3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcykgb2Zmc2V0IGxlblxuXG5sZXQgYWRkX3N0cmluZyBiIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2J5dGVzIGIgcyA9IGFkZF9zdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKVxuXG5sZXQgYWRkX2J1ZmZlciBiIGJzID1cbiAgYWRkX3N1YmJ5dGVzIGIgYnMuYnVmZmVyIDAgYnMucG9zaXRpb25cblxuKCogdGhpcyAocHJpdmF0ZSkgZnVuY3Rpb24gY291bGQgbW92ZSBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG5sZXQgcmVhbGx5X2lucHV0X3VwX3RvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWQgPVxuICAgIGlmIHRvX3JlYWQgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBpbnB1dCBpYyBidWYgb2ZzIHRvX3JlYWQgaW5cbiAgICAgIGlmIHIgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBhbHJlYWR5X3JlYWQgPSBhbHJlYWR5X3JlYWQgKyByIGluXG4gICAgICAgIGxldCBvZnMgPSBvZnMgKyByIGluXG4gICAgICAgIGxldCB0b19yZWFkID0gdG9fcmVhZCAtIHIgaW5cbiAgICAgICAgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW4gbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZDowIH5vZnMgfnRvX3JlYWQ6bGVuXG5cblxubGV0IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiA9XG4gIGlmIGIucG9zaXRpb24gKyBsZW4gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgbGV0IG4gPSByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW4gaW5cbiAgKCogVGhlIGFzc2VydGlvbiBiZWxvdyBtYXkgZmFpbCBpbiB3ZWlyZCBzY2VuYXJpbyB3aGVyZVxuICAgICB0aHJlYWRlZC9maW5hbGl6ZXIgY29kZSwgcnVuIGFzeW5jaHJvbm91c2x5IGR1cmluZyB0aGVcbiAgICAgW3JlYWxseV9pbnB1dF91cF90b10gY2FsbCwgcmFjZXMgb24gdGhlIGJ1ZmZlcjsgd2UgZG9uJ3QgZW5zdXJlXG4gICAgIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwgYnV0IG5lZWQgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudHMgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgKHNlZSBkaXNjdXNzaW9uIG9mIFtyZXNpemVdKS4gKilcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbiA8PSBiLmxlbmd0aCk7XG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIChzdGFydCArIDEpIGluXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgbGV0IGlkZW50LCBuZXh0X2kgPSBmaW5kX2lkZW50IHMgaiBsaW0gaW5cbiAgICAgICAgIGFkZF9zdHJpbmcgYiAoZiBpZGVudCk7XG4gICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICB8IGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9PSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgJ1xcXFwnO1xuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJ1xcXFwnIGFzIGN1cnJlbnQgLT5cbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgICAgfCBjdXJyZW50IC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IGFkZF9zZXEgYiBzZXEgPSBTZXEuaXRlciAoYWRkX2NoYXIgYikgc2VxXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBiID0gY3JlYXRlIDMyIGluXG4gIGFkZF9zZXEgYiBpO1xuICBiXG5cbigqKiB7NiBCaW5hcnkgZW5jb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MzIgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjR1XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMSBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIHVuc2FmZV9zZXRfaW50OCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgdW5zYWZlX3NldF9pbnQxNiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgdW5zYWZlX3NldF9pbnQzMiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgODtcbiAgdW5zYWZlX3NldF9pbnQ2NCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAoKiBUb29scyB0byBtYW5pcHVsYXRlIHNjYW5uaW5nIHNldCBvZiBjaGFycyAoc2VlICVbLi4uXSkgKilcblxudHlwZSBtdXRhYmxlX2NoYXJfc2V0ID0gYnl0ZXNcblxuKCogQ3JlYXRlIGEgZnJlc2gsIGVtcHR5LCBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGNyZWF0ZV9jaGFyX3NldCAoKSA9IEJ5dGVzLm1ha2UgMzIgJ1xcMDAwJ1xuXG4oKiBBZGQgYSBjaGFyIGluIGEgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICBCeXRlcy5zZXQgY2hhcl9zZXQgc3RyX2luZFxuICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKEJ5dGVzLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsb3IgbWFzaykpXG5cbmxldCBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBCeXRlcy50b19zdHJpbmcgY2hhcl9zZXRcblxuKCogQ29tcHV0ZSB0aGUgY29tcGxlbWVudCBvZiBhIGNoYXIgc2V0LiAqKVxubGV0IHJldl9jaGFyX3NldCBjaGFyX3NldCA9XG4gIGxldCBjaGFyX3NldCcgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgZm9yIGkgPSAwIHRvIDMxIGRvXG4gICAgQnl0ZXMuc2V0IGNoYXJfc2V0JyBpXG4gICAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IGkpIGx4b3IgMHhGRikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGNoYXJfc2V0J1xuXG4oKiBSZXR1cm4gdHJ1ZSBpZiBhIGBjJyBpcyBpbiBgY2hhcl9zZXQnLiAqKVxubGV0IGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxhbmQgbWFzaykgPD4gMFxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogSWdub3JlZCBwYXJhbSBjb252ZXJzaW9uICopXG5cbigqIEdBRFQgdXNlZCB0byBhYnN0cmFjdCBhbiBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlci4gKilcbigqIFNlZSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiID0gUGFyYW1fZm9ybWF0X0VCQiA6XG4gICAgKCd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiXG5cbigqIENvbXB1dGUgYSBwYWRkaW5nIGFzc29jaWF0ZWQgdG8gYSBwYWRfb3B0aW9uIChzZWUgXCIlXzQyZFwiKS4gKilcbmxldCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wYWRkaW5nXG4gIHwgU29tZSB3aWR0aCAtPiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuXG4oKiBDb21wdXRlIGEgcHJlY2lzaW9uIGFzc29jaWF0ZWQgdG8gYSBwcmVjX29wdGlvbiAoc2VlIFwiJV8uNDJmXCIpLiAqKVxubGV0IHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQgPSBtYXRjaCBwcmVjX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wcmVjaXNpb25cbiAgfCBTb21lIG5kZWMgLT4gTGl0X3ByZWNpc2lvbiBuZGVjXG5cbigqIFR1cm4gYW4gaWdub3JlZCBwYXJhbSBpbnRvIGl0cyBlcXVpdmFsZW50IG5vdC1pZ25vcmVkIGZvcm1hdCBub2RlLiAqKVxuKCogVXNlZCBmb3IgZm9ybWF0IHByZXR0eS1wcmludGluZyBhbmQgU2NhbmYuICopXG5sZXQgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+ICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYXJhbV9mb3JtYXRfZWJiID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2hhciBmbXQpXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX2NoYXIgZm10KVxuICB8IElnbm9yZWRfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDMyIChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50MzIgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChOYXRpdmVpbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQ2NCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDY0IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfZmxvYXQgKHBhZF9vcHQsIHByZWNfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGbG9hdCAoKEZsb2F0X2ZsYWdfLCBGbG9hdF9mKSxcbiAgICAgICAgICAgICAgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Jvb2wgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEJvb2wgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChSZWFkZXIgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10KVxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlcyAqKVxuXG50eXBlICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlbiA9XG4gIHwgQWNjX29wZW5fdGFnIG9mICgnYiwgJ2MpIGFjY1xuICB8IEFjY19vcGVuX2JveCBvZiAoJ2IsICdjKSBhY2NcblxuKCogUmV2ZXJzZWQgbGlzdCBvZiBwcmludGluZyBhdG9tcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBwcmludGYgYXJndW1lbnRzLiAqKVxuYW5kICgnYiwgJ2MpIGFjYyA9XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IG9mICgnYiwgJ2MpIGFjYyAqIGZvcm1hdHRpbmdfbGl0XG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gb2YgKCdiLCAnYykgYWNjICogKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuXG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBMaXRlcmFsIHN0cmluZyAqKVxuICB8IEFjY19jaGFyX2xpdGVyYWwgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIExpdGVyYWwgY2hhciAqKVxuICB8IEFjY19kYXRhX3N0cmluZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIEdlbmVyYXRlZCBzdHJpbmcgKilcbiAgfCBBY2NfZGF0YV9jaGFyICAgICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBHZW5lcmF0ZWQgY2hhciAqKVxuICB8IEFjY19kZWxheSAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IgLT4gJ2MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBEZWxheWVkIHByaW50aW5nICglYSwgJXQpICopXG4gIHwgQWNjX2ZsdXNoICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAgICAgICAgICAgICAgKCogRmx1c2ggKilcbiAgfCBBY2NfaW52YWxpZF9hcmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nXG4gICAgICAoKiBSYWlzZSBJbnZhbGlkX2FyZ3VtZW50IG1zZyAqKVxuICB8IEVuZF9vZl9hY2NcblxuKCogTGlzdCBvZiBoZXRlcm9nZW5lb3VzIHZhbHVlcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBzY2FuZiBjYWxsYmFjayBhcmd1bWVudHMuICopXG50eXBlICgnYSwgJ2IpIGhldGVyX2xpc3QgPVxuICB8IENvbnMgOiAnYyAqICgnYSwgJ2IpIGhldGVyX2xpc3QgLT4gKCdjIC0+ICdhLCAnYikgaGV0ZXJfbGlzdFxuICB8IE5pbCA6ICgnYiwgJ2IpIGhldGVyX2xpc3RcblxuKCogRXhpc3RlbnRpYWwgQmxhY2sgQm94ZXMuICopXG4oKiBVc2VkIHRvIGFic3RyYWN0IHNvbWUgZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRkaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmIgPSBQYWRkaW5nX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRwcmVjIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmIgPSBQYWRwcmVjX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICd6KSBwcmVjaXNpb24gKiAoJ3osICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZGRpbmdfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiID0gUGFkZGluZ19mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwYWRkaW5nICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wcmVjaXNpb25fZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmIgPSBQcmVjaXNpb25fZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkcHJlY19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmIgPSBQYWRwcmVjX2ZtdF9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAncCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgdGhlICdhIGFuZCAnZCBwYXJhbWV0ZXJzIG9mIGFuIGZtdC4gKilcbigqIE91dHB1dCB0eXBlIG9mIHRoZSBmb3JtYXQgcGFyc2luZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiID0gRm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2Zvcm1hdF9nZW4gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiID0gRm10X2ZtdHR5X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXQgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYiA9IEZtdHR5X2ZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10dHkgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10X2ZtdHR5X2ViYiAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgZm10dHkgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIGZvcm1hdCB0eXBlcy4gKilcbnR5cGUgZm10dHlfZWJiID0gRm10dHlfRUJCIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+IGZtdHR5X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcGFkZGluZyB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcGFkZGluZ3MuICopXG50eXBlIHBhZGRpbmdfZWJiID0gUGFkZGluZ19FQkIgOiAoJ2EsICdiKSBwYWRkaW5nIC0+IHBhZGRpbmdfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwcmVjaXNpb24gdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHByZWNpc2lvbnMuICopXG50eXBlIHByZWNpc2lvbl9lYmIgPSBQcmVjaXNpb25fRUJCIDogKCdhLCAnYikgcHJlY2lzaW9uIC0+IHByZWNpc2lvbl9lYmJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb25zdGFudHMgKilcblxuKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IHByaW50aW5nLiAqKVxubGV0IGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252ID1cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyB8IEZsb2F0X2ggfCBGbG9hdF9IXG4gIHwgRmxvYXRfQ0YgLT4gLTZcbiAgKCogRm9yICVoICVIIGFuZCAlI0YgZm9ybWF0cywgYSBuZWdhdGl2ZSBwcmVjaXNpb24gbWVhbnMgXCJhcyBtYW55IGRpZ2l0cyBhc1xuICAgICBuZWNlc3NhcnlcIi4gIEZvciB0aGUgb3RoZXIgRlAgZm9ybWF0cywgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgb2YgdGhlIHByZWNpc2lvbiwgaGVuY2UgNiBkaWdpdHMgYnkgZGVmYXVsdC4gKilcbiAgfCBGbG9hdF9GIC0+IDEyXG4gICgqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBPQ2FtbCBmbG9hdCBwcmludGluZyAoJUYpLiAqKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEV4dGVybmFscyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQ6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDMyOiBzdHJpbmcgLT4gaW50MzIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDMyX2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfbmF0aXZlaW50OiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ2NDogc3RyaW5nIC0+IGludDY0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQ2NF9mb3JtYXRcIlxuZXh0ZXJuYWwgaGV4c3RyaW5nX29mX2Zsb2F0OiBmbG9hdCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0XCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICgqIFRvb2xzIHRvIHByZXR0eS1wcmludCBmb3JtYXRzICopXG5cbigqIFR5cGUgb2YgZXh0ZW5zaWJsZSBjaGFyYWN0ZXIgYnVmZmVycy4gKilcbnR5cGUgYnVmZmVyID0ge1xuICBtdXRhYmxlIGluZCA6IGludDtcbiAgbXV0YWJsZSBieXRlcyA6IGJ5dGVzO1xufVxuXG4oKiBDcmVhdGUgYSBmcmVzaCBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NyZWF0ZSBpbml0X3NpemUgPSB7IGluZCA9IDA7IGJ5dGVzID0gQnl0ZXMuY3JlYXRlIGluaXRfc2l6ZSB9XG5cbigqIENoZWNrIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgZ3JvdyBpdCBpZiBuZWVkZWQuICopXG5sZXQgYnVmZmVyX2NoZWNrX3NpemUgYnVmIG92ZXJoZWFkID1cbiAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBidWYuYnl0ZXMgaW5cbiAgbGV0IG1pbl9sZW4gPSBidWYuaW5kICsgb3ZlcmhlYWQgaW5cbiAgaWYgbWluX2xlbiA+IGxlbiB0aGVuIChcbiAgICBsZXQgbmV3X2xlbiA9IEludC5tYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaW5lXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXQuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgWGF2aWVyIExlcm95IGFuZCBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbmxldCBrZnByaW50ZiBrIG8gKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIG8gYWNjOyBrIG8pIEVuZF9vZl9hY2MgZm10XG5sZXQga2JwcmludGYgayBiIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gYnVmcHV0X2FjYyBiIGFjYzsgayBiKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGlrZnByaW50ZiBrIG9jIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgb2MgZm10XG5sZXQgaWticHJpbnRmID0gaWtmcHJpbnRmXG5cbmxldCBmcHJpbnRmIG9jIGZtdCA9IGtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBicHJpbnRmIGIgZm10ID0ga2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgaWZwcmludGYgb2MgZm10ID0gaWtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBpYnByaW50ZiBiIGZtdCA9IGlrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRvdXQgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZGVyciBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgaycgYWNjID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICAgIHN0cnB1dF9hY2MgYnVmIGFjYztcbiAgICBrIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiAoZnVuIHMgLT4gcykgZm10XG5cbmxldCBrcHJpbnRmID0ga3NwcmludGZcbiIsIigqIENvbnZfZXJyb3I6IE1vZHVsZSBmb3IgSGFuZGxpbmcgRXJyb3JzIGR1cmluZyBBdXRvbWF0ZWQgWW9qc29uXG4gICBDb252ZXJzaW9ucyAqKVxuXG5vcGVuISBTdGRMYWJlbHNcbm9wZW4gWW9qc29uX2NvbnZcblxubGV0IHNwcmludGYgPSBQcmludGYuc3ByaW50ZlxuXG4oKiBFcnJvcnMgY29uY2VybmluZyB0dXBsZXMgKilcblxubGV0IHR1cGxlX29mX3NpemVfbl9leHBlY3RlZCBsb2MgbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKHNwcmludGYgXCIlc19vZl95b2pzb246IHR1cGxlIG9mIHNpemUgJWQgZXhwZWN0ZWRcIiBsb2MgbikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBzdW0gdHlwZXMgKilcblxubGV0IHN0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgc3RhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyB0YWcgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogc3VtIHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIiBsb2MgdGFnXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgc3RhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGEgbmVzdGVkIGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYW4gZW1wdHkgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCB1bmV4cGVjdGVkX3N0YWcgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB1bmV4cGVjdGVkIHZhcmlhbnQgY29uc3RydWN0b3JcIikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyByZWNvcmRzICopXG5cbmxldCByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0IH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICBsZXQgZmxkX25hbWVzX3N0ciA9IFN0cmluZy5jb25jYXQgKExpc3QucmV2IHJldl9mbGRfbmFtZXMpIH5zZXA6XCIgXCIgaW5cbiAgbGV0IG1zZyA9IHNwcmludGYgXCIlc19vZl95b2pzb246ICVzOiAlc1wiIGxvYyB3aGF0IGZsZF9uYW1lc19zdHIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZHVwbGljYXRlIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZXh0cmFfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJleHRyYSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjIHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBTdHJpbmcuY29uY2F0IChMaXN0LnJldiBmaWVsZHMpIH5zZXA6XCIgXCJcbiAgfCAodHJ1ZSwgZmllbGQpIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCAoZmllbGQgOjogZmllbGRzKSByZXN0XG4gIHwgXyA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzIHJlc3Rcbjs7XG5cbmxldCByZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIGxvYyB5b2pzb24gbHN0ID1cbiAgbGV0IHVuZGVmaW5lZCA9IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgW10gbHN0IGluXG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHRoZSBmb2xsb3dpbmcgcmVjb3JkIGVsZW1lbnRzIHdlcmUgdW5kZWZpbmVkOiAlc1wiIGxvYyB1bmRlZmluZWRcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20gbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPSBsb2MgXiBcIl9vZl95b2pzb246IGxpc3QgaW5zdGVhZCBvZiBhdG9tIGZvciByZWNvcmQgZXhwZWN0ZWRcIiBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9wb2x5X2ZpZWxkX3ZhbHVlIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBsb2NcbiAgICBeIFwiX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgdmFsdWVzIG9mIHR5cGVzIHJlc3VsdGluZyBmcm9tIHBvbHltb3JwaGljIHJlY29yZCBcXFxuICAgICAgIGZpZWxkc1wiXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBwb2x5bW9ycGhpYyB2YXJpYW50cyAqKVxuXG5leGNlcHRpb24gTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fdmFyaWFudF9tYXRjaCAoKSA9IHJhaXNlIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX21hdGNoaW5nX3ZhcmlhbnRfZm91bmQgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBubyBtYXRjaGluZyB2YXJpYW50IGZvdW5kXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyBjbnN0ciB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmXG4gICAgICBcIiVzX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCJcbiAgICAgIGxvY1xuICAgICAgY25zdHJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBwdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyB0YWtlcyBhbiBhcmd1bWVudFwiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiBhIG5lc3RlZCBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogdGhlIGVtcHR5IGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfdHlwZSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRyeWluZyB0byBjb252ZXJ0IGFuIGVtcHR5IHR5cGVcIikgeW9qc29uXG47O1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNZXNzYWdlIGRpZ2VzdCAoTUQ1KSAqKVxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGVxdWFsID0gU3RyaW5nLmVxdWFsXG5cbmV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG5leHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxubGV0IHN0cmluZyBzdHIgPVxuICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxubGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxubGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX3N0cmluZyBzdHIgb2ZzIGxlblxuXG5sZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxubGV0IGZpbGUgZmlsZW5hbWUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlbmFtZSBpblxuICBtYXRjaCBjaGFubmVsIGljICgtMSkgd2l0aFxuICAgIHwgZCAtPiBjbG9zZV9pbiBpYzsgZFxuICAgIHwgZXhjZXB0aW9uIGUgLT4gY2xvc2VfaW4gaWM7IHJhaXNlIGVcblxubGV0IG91dHB1dCBjaGFuIGRpZ2VzdCA9XG4gIG91dHB1dF9zdHJpbmcgY2hhbiBkaWdlc3RcblxubGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxubGV0IGNoYXJfaGV4IG4gPVxuICBDaGFyLnVuc2FmZV9jaHIgKG4gKyBpZiBuIDwgMTAgdGhlbiBDaGFyLmNvZGUgJzAnIGVsc2UgKENoYXIuY29kZSAnYScgLSAxMCkpXG5cbmxldCB0b19oZXggZCA9XG4gIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDMyIGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBmcm9tX2hleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJEaWdlc3QuZnJvbV9oZXhcIilcbiAgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDE2IGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIEJ5dGVzLnNldCByZXN1bHQgaSAoQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSByZWYgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSByYW5kb21pemVkIDo9IHRydWVcbmxldCBpc19yYW5kb21pemVkICgpID0gIXJhbmRvbWl6ZWRcblxubGV0IHBybmcgPSBsYXp5IChSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQoKSlcblxuKCogRnVuY3Rpb25zIHdoaWNoIGFwcGVhciBiZWZvcmUgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIG11c3QgZWl0aGVyIGJlXG4gICBpbmRlcGVuZGVudCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBvciB0YWtlIGl0IGFzIGEgcGFyYW1ldGVyIChzZWUgIzIyMDIgYW5kXG4gICBjb2RlIGJlbG93IHRoZSBmdW5jdG9yIGRlZmluaXRpb25zLiAqKVxuXG4oKiBDcmVhdGluZyBhIGZyZXNoLCBlbXB0eSB0YWJsZSAqKVxuXG5sZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgaWYgeCA+PSBuIHRoZW4geFxuICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxubGV0IGNyZWF0ZSA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID0gaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykgZWxzZSAwIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlOiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5OiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZTogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZSA6ID9yYW5kb206Ym9vbCAtPiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZCA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQgOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aCA6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlU2VlZGVkKEg6IFNlZWRlZEhhc2hlZFR5cGUpOiAoU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIHR5cGUga2V5ID0gSC50XG4gICAgdHlwZSAnYSBoYXNodGJsID0gKGtleSwgJ2EpIHRcbiAgICB0eXBlICdhIHQgPSAnYSBoYXNodGJsXG4gICAgbGV0IGNyZWF0ZSA9IGNyZWF0ZVxuICAgIGxldCBjbGVhciA9IGNsZWFyXG4gICAgbGV0IHJlc2V0ID0gcmVzZXRcbiAgICBsZXQgY29weSA9IGNvcHlcblxuICAgIGxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAgICAgKEguaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCBtZW0gaCBrZXkgPVxuICAgICAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuKCogUG9seW1vcnBoaWMgaGFzaCBmdW5jdGlvbi1iYXNlZCB0YWJsZXMgKilcbigqIENvZGUgaW5jbHVkZWQgYmVsb3cgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIHRvIGd1YXJkIGFnYWluc3QgYWNjaWRlbnRhbFxuICAgdXNlIC0gc2VlICMyMjAyICopXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxuXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxubGV0IGhhc2hfcGFyYW0gbjEgbjIgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIG4xIG4yIDAgeFxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcblxubGV0IGtleV9pbmRleCBoIGtleSA9XG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0XG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkhhc2h0Ymw6IHVuc3VwcG9ydGVkIGhhc2ggdGFibGUgZm9ybWF0XCJcblxubGV0IGFkZCBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG5sZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgKClcbiAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBiZWdpblxuICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICBlbmRcbiAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG5sZXQgcmVtb3ZlIGgga2V5ID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxubGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxubGV0IGZpbmQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbmxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxubGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiBOb25lXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxubGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IG1lbSBoIGtleSA9XG4gIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQSBwcmV0dHktcHJpbnRpbmcgZmFjaWxpdHkgYW5kIGRlZmluaXRpb24gb2YgZm9ybWF0dGVycyBmb3IgJ3BhcmFsbGVsJ1xuICAgKGkuZS4gdW5yZWxhdGVkIG9yIGluZGVwZW5kZW50KSBwcmV0dHktcHJpbnRpbmcgb24gbXVsdGlwbGUgb3V0IGNoYW5uZWxzLiAqKVxuXG4oKlxuICAgVGhlIHByZXR0eS1wcmludGluZyBlbmdpbmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuKilcblxubGV0IGlkIHggPSB4XG5cbigqIEEgZGV2b3RlZCB0eXBlIGZvciBzaXplcyB0byBhdm9pZCBjb25mdXNpb25cbiAgIGJldHdlZW4gc2l6ZXMgYW5kIG1lcmUgaW50ZWdlcnMuICopXG5tb2R1bGUgU2l6ZSA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgdG9faW50IDogdCAtPiBpbnRcbiAgdmFsIG9mX2ludCA6IGludCAtPiB0XG4gIHZhbCB6ZXJvIDogdFxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIGlzX2tub3duIDogdCAtPiBib29sXG5lbmQgID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCB0b19pbnQgPSBpZFxuICBsZXQgb2ZfaW50ID0gaWRcbiAgbGV0IHplcm8gPSAwXG4gIGxldCB1bmtub3duID0gLTFcbiAgbGV0IGlzX2tub3duIG4gPSBuID49IDBcbmVuZFxuXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyBib3hlcyBkZWZpbml0aW9uOlxuICAgYSBwcmV0dHktcHJpbnRpbmcgYm94IGlzIGVpdGhlclxuICAgLSBoYm94OiBob3Jpem9udGFsIGJveCAobm8gbGluZSBzcGxpdHRpbmcpXG4gICAtIHZib3g6IHZlcnRpY2FsIGJveCAoZXZlcnkgYnJlYWsgaGludCBzcGxpdHMgdGhlIGxpbmUpXG4gICAtIGh2Ym94OiBob3Jpem9udGFsL3ZlcnRpY2FsIGJveFxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgYm94IGlmIGl0IGZpdHMgb25cbiAgICAgIHRoZSBjdXJyZW50IGxpbmUsIG90aGVyd2lzZSB0aGUgYm94IGJlaGF2ZXMgYXMgYSB2ZXJ0aWNhbCBib3gpXG4gICAtIGhvdmJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveFxuICAgICAodGhlIGJveCBpcyBjb21wYWN0aW5nIG1hdGVyaWFsLCBwcmludGluZyBhcyBtdWNoIG1hdGVyaWFsIGFzIHBvc3NpYmxlXG4gICAgICBvbiBldmVyeSBsaW5lcylcbiAgIC0gYm94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94IHdpdGggZW5oYW5jZWQgYm94IHN0cnVjdHVyZVxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgb3IgdmVydGljYWwgYm94IGJ1dCBicmVhayBoaW50cyBzcGxpdFxuICAgICAgdGhlIGxpbmUgaWYgc3BsaXR0aW5nIHdvdWxkIG1vdmUgdG8gdGhlIGxlZnQpXG4qKVxudHlwZSBib3hfdHlwZSA9IENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5ibG9ja190eXBlID1cbiAgfCBQcF9oYm94IHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0c1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgdG9rZW5zIGRlZmluaXRpb246XG4gICBhcmUgZWl0aGVyIHRleHQgdG8gcHJpbnQgb3IgcHJldHR5IHByaW50aW5nXG4gICBlbGVtZW50cyB0aGF0IGRyaXZlIGluZGVudGF0aW9uIGFuZCBsaW5lIHNwbGl0dGluZy4gKilcbnR5cGUgcHBfdG9rZW4gPVxuICB8IFBwX3RleHQgb2Ygc3RyaW5nICAgICAgICAgICgqIG5vcm1hbCB0ZXh0ICopXG4gIHwgUHBfYnJlYWsgb2YgeyAgICAgICAgICAgICAgKCogY29tcGxldGUgYnJlYWsgKilcbiAgICAgIGZpdHM6IHN0cmluZyAqIGludCAqIHN0cmluZzsgICAoKiBsaW5lIGlzIG5vdCBzcGxpdCAqKVxuICAgICAgYnJlYWtzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICgqIGxpbmUgaXMgc3BsaXQgKilcbiAgICB9XG4gIHwgUHBfdGJyZWFrIG9mIGludCAqIGludCAgICAgKCogZ28gdG8gbmV4dCB0YWJ1bGF0aW9uICopXG4gIHwgUHBfc3RhYiAgICAgICAgICAgICAgICAgICAgKCogc2V0IGEgdGFidWxhdGlvbiAqKVxuICB8IFBwX2JlZ2luIG9mIGludCAqIGJveF90eXBlICgqIGJlZ2lubmluZyBvZiBhIGJveCAqKVxuICB8IFBwX2VuZCAgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIGJveCAqKVxuICB8IFBwX3RiZWdpbiBvZiB0Ym94ICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfdGVuZCAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF9uZXdsaW5lICAgICAgICAgICAgICAgICAoKiB0byBmb3JjZSBhIG5ld2xpbmUgaW5zaWRlIGEgYm94ICopXG4gIHwgUHBfaWZfbmV3bGluZSAgICAgICAgICAgICAgKCogdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgdGhpcyB2ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSBoYXMgYmVlbiBicm9rZW4gKilcbiAgfCBQcF9vcGVuX3RhZyBvZiBzdGFnICAgICAgICAgKCogb3BlbmluZyBhIHRhZyBuYW1lICopXG4gIHwgUHBfY2xvc2VfdGFnICAgICAgICAgICAgICAgKCogY2xvc2luZyB0aGUgbW9zdCByZWNlbnRseSBvcGVuIHRhZyAqKVxuXG5hbmQgc3RhZyA9IC4uXG5cbmFuZCB0Ym94ID0gUHBfdGJveCBvZiBpbnQgbGlzdCByZWYgICgqIFRhYnVsYXRpb24gYm94ICopXG5cbnR5cGUgdGFnID0gc3RyaW5nXG50eXBlIHN0YWcgKz0gU3RyaW5nX3RhZyBvZiB0YWdcblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWU6XG4gICBwcmV0dHktcHJpbnRpbmcgbWF0ZXJpYWwgaXMgbm90IHdyaXR0ZW4gaW4gdGhlIG91dHB1dCBhcyBzb29uIGFzIGVtaXR0ZWQ7XG4gICBpbnN0ZWFkLCB0aGUgbWF0ZXJpYWwgaXMgc2ltcGx5IHJlY29yZGVkIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSxcbiAgIHVudGlsIHRoZSBlbmNsb3NpbmcgYm94IGhhcyBhIGtub3duIGNvbXB1dGVkIHNpemUgYW5kIHByb3BlciBzcGxpdHRpbmdcbiAgIGRlY2lzaW9ucyBjYW4gYmUgbWFkZS5cblxuICAgVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGNvbnRhaW5zIGZvcm1hdHRpbmcgZWxlbWVudHMgdG8gYmUgcHJpbnRlZC5cbiAgIEVhY2ggZm9ybWF0dGluZyBlbGVtZW50IGlzIGEgdHVwbGUgKHNpemUsIHRva2VuLCBsZW5ndGgpLCB3aGVyZVxuICAgLSBsZW5ndGggaXMgdGhlIGRlY2xhcmVkIGxlbmd0aCBvZiB0aGUgdG9rZW4sXG4gICAtIHNpemUgaXMgZWZmZWN0aXZlIHNpemUgb2YgdGhlIHRva2VuIHdoZW4gaXQgaXMgcHJpbnRlZFxuICAgICAoc2l6ZSBpcyBzZXQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgYm94IGlzIGtub3duLCBzbyB0aGF0IHNpemUgb2YgYnJlYWtcbiAgICAgIGhpbnRzIGFyZSBkZWZpbml0aXZlKS4gKilcbnR5cGUgcHBfcXVldWVfZWxlbSA9IHtcbiAgbXV0YWJsZSBzaXplIDogU2l6ZS50O1xuICB0b2tlbiA6IHBwX3Rva2VuO1xuICBsZW5ndGggOiBpbnQ7XG59XG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGRlZmluaXRpb24uICopXG50eXBlIHBwX3F1ZXVlID0gcHBfcXVldWVfZWxlbSBRdWV1ZS50XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrOiBzY2FubmluZyBlbGVtZW50IGRlZmluaXRpb24uICopXG50eXBlIHBwX3NjYW5fZWxlbSA9IHtcbiAgbGVmdF90b3RhbCA6IGludDsgKCogVmFsdWUgb2YgcHBfbGVmdF90b3RhbCB3aGVuIHRoZSBlbGVtZW50IHdhcyBlbnF1ZXVlZC4gKilcbiAgcXVldWVfZWxlbSA6IHBwX3F1ZXVlX2VsZW1cbn1cblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6XG4gICB0aGUgZm9ybWF0dGluZyBzdGFjayBjb250YWlucyB0aGUgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBjdXJyZW50bHkgYWN0aXZlXG4gICBib3hlczsgdGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2sgaXMgdXNlZCB0byBzcGxpdCB0aGUgbGluZXNcbiAgIHdoaWxlIHByaW50aW5nIHRva2Vucy4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6IGZvcm1hdHRpbmcgc3RhY2sgZWxlbWVudCBkZWZpbml0aW9uLlxuICAgRWFjaCBzdGFjayBlbGVtZW50IGRlc2NyaWJlcyBhIHByZXR0eS1wcmludGluZyBib3guICopXG50eXBlIHBwX2Zvcm1hdF9lbGVtID0geyBib3hfdHlwZSA6IGJveF90eXBlOyB3aWR0aCA6IGludCB9XG5cbigqIFRoZSBmb3JtYXR0ZXIgZGVmaW5pdGlvbi5cbiAgIEVhY2ggZm9ybWF0dGVyIHZhbHVlIGlzIGEgcHJldHR5LXByaW50ZXIgaW5zdGFuY2Ugd2l0aCBhbGwgaXRzXG4gICBtYWNoaW5lcnkuICopXG50eXBlIGZvcm1hdHRlciA9IHtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuICBwcF9zY2FuX3N0YWNrIDogcHBfc2Nhbl9lbGVtIFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrLiAqKVxuICBwcF9mb3JtYXRfc3RhY2sgOiBwcF9mb3JtYXRfZWxlbSBTdGFjay50O1xuICBwcF90Ym94X3N0YWNrIDogdGJveCBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2VtYW50aWNzIHRhZyBzdGFjay4gKilcbiAgcHBfdGFnX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICBwcF9tYXJrX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICAoKiBWYWx1ZSBvZiByaWdodCBtYXJnaW4uICopXG4gIG11dGFibGUgcHBfbWFyZ2luIDogaW50O1xuICAoKiBNaW5pbWFsIHNwYWNlIGxlZnQgYmVmb3JlIG1hcmdpbiwgd2hlbiBvcGVuaW5nIGEgYm94LiAqKVxuICBtdXRhYmxlIHBwX21pbl9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBNYXhpbXVtIHZhbHVlIG9mIGluZGVudGF0aW9uOlxuICAgICBubyBib3ggY2FuIGJlIG9wZW5lZCBmdXJ0aGVyLiAqKVxuICBtdXRhYmxlIHBwX21heF9pbmRlbnQgOiBpbnQ7XG4gICgqIFNwYWNlIHJlbWFpbmluZyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxuICBtdXRhYmxlIHBwX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIEN1cnJlbnQgdmFsdWUgb2YgaW5kZW50YXRpb24uICopXG4gIG11dGFibGUgcHBfY3VycmVudF9pbmRlbnQgOiBpbnQ7XG4gICgqIFRydWUgd2hlbiB0aGUgbGluZSBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIHByZXR0eS1wcmludGVyLiAqKVxuICBtdXRhYmxlIHBwX2lzX25ld19saW5lIDogYm9vbDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGFscmVhZHkgcHJpbnRlZC4gKilcbiAgbXV0YWJsZSBwcF9sZWZ0X3RvdGFsIDogaW50O1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgZXZlciBwdXQgaW4gcXVldWUuICopXG4gIG11dGFibGUgcHBfcmlnaHRfdG90YWwgOiBpbnQ7XG4gICgqIEN1cnJlbnQgbnVtYmVyIG9mIG9wZW4gYm94ZXMuICopXG4gIG11dGFibGUgcHBfY3Vycl9kZXB0aCA6IGludDtcbiAgKCogTWF4aW11bSBudW1iZXIgb2YgYm94ZXMgd2hpY2ggY2FuIGJlIHNpbXVsdGFuZW91c2x5IG9wZW4uICopXG4gIG11dGFibGUgcHBfbWF4X2JveGVzIDogaW50O1xuICAoKiBFbGxpcHNpcyBzdHJpbmcuICopXG4gIG11dGFibGUgcHBfZWxsaXBzaXMgOiBzdHJpbmc7XG4gICgqIE91dHB1dCBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgKCogRmx1c2hpbmcgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgYnJlYWsgaGludHMgc3BhY2VzLiAqKVxuICBtdXRhYmxlIHBwX291dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG4gICgqIEFyZSB0YWdzIHByaW50ZWQgPyAqKVxuICBtdXRhYmxlIHBwX3ByaW50X3RhZ3MgOiBib29sO1xuICAoKiBBcmUgdGFncyBtYXJrZWQgPyAqKVxuICBtdXRhYmxlIHBwX21hcmtfdGFncyA6IGJvb2w7XG4gICgqIEZpbmQgb3BlbmluZyBhbmQgY2xvc2luZyBtYXJrZXJzIG9mIHRhZ3MuICopXG4gIG11dGFibGUgcHBfbWFya19vcGVuX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX21hcmtfY2xvc2VfdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfcHJpbnRfb3Blbl90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIG11dGFibGUgcHBfcHJpbnRfY2xvc2VfdGFnIDogc3RhZyAtPiB1bml0O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG4gIHBwX3F1ZXVlIDogcHBfcXVldWU7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBzcGVjaWZpYyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zLiAqKVxudHlwZSBmb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBmdW5jdGlvbnMgdG8gb3V0cHV0IG1hdGVyaWFsLiAqKVxudHlwZSBmb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9IHtcbiAgb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gIG91dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xufVxuXG5cbigqXG5cbiAgQXV4aWxpYXJpZXMgYW5kIGJhc2ljIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRW50ZXIgYSB0b2tlbiBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbiA9XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgdG9rZW4ubGVuZ3RoO1xuICBRdWV1ZS5hZGQgdG9rZW4gc3RhdGUucHBfcXVldWVcblxuXG5sZXQgcHBfY2xlYXJfcXVldWUgc3RhdGUgPVxuICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIDE7IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIDE7XG4gIFF1ZXVlLmNsZWFyIHN0YXRlLnBwX3F1ZXVlXG5cblxuKCogUHBfaW5maW5pdHk6IGxhcmdlIHZhbHVlIGZvciBkZWZhdWx0IHRva2VucyBzaXplLlxuXG4gICBQcF9pbmZpbml0eSBpcyBkb2N1bWVudGVkIGFzIGJlaW5nIGdyZWF0ZXIgdGhhbiAxZTEwOyB0byBhdm9pZFxuICAgY29uZnVzaW9uIGFib3V0IHRoZSB3b3JkICdncmVhdGVyJywgd2UgY2hvb3NlIHBwX2luZmluaXR5IGdyZWF0ZXJcbiAgIHRoYW4gMWUxMCArIDE7IGZvciBjb3JyZWN0IGhhbmRsaW5nIG9mIHRlc3RzIGluIHRoZSBhbGdvcml0aG0sXG4gICBwcF9pbmZpbml0eSBtdXN0IGJlIGV2ZW4gb25lIG1vcmUgdGhhbiAxZTEwICsgMTsgbGV0J3Mgc3RhbmQgb24gdGhlXG4gICBzYWZlIHNpZGUgYnkgY2hvb3NpbmcgMS5lMTArMTAuXG5cbiAgIFBwX2luZmluaXR5IGNvdWxkIHByb2JhYmx5IGJlIDEwNzM3NDE4MjMgdGhhdCBpcyAyXjMwIC0gMSwgdGhhdCBpc1xuICAgdGhlIG1pbmltYWwgdXBwZXIgYm91bmQgZm9yIGludGVnZXJzOyBub3cgdGhhdCBtYXhfaW50IGlzIGRlZmluZWQsXG4gICB0aGlzIGxpbWl0IGNvdWxkIGFsc28gYmUgZGVmaW5lZCBhcyBtYXhfaW50IC0gMS5cblxuICAgSG93ZXZlciwgYmVmb3JlIHNldHRpbmcgcHBfaW5maW5pdHkgdG8gc29tZXRoaW5nIGFyb3VuZCBtYXhfaW50LCB3ZVxuICAgbXVzdCBjYXJlZnVsbHkgZG91YmxlLWNoZWNrIGFsbCB0aGUgaW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnNcbiAgIHRoYXQgaW52b2x2ZSBwcF9pbmZpbml0eSwgc2luY2UgYW55IG92ZXJmbG93IHdvdWxkIHdyZWNrIGhhdm9jIHRoZVxuICAgcHJldHR5LXByaW50aW5nIGFsZ29yaXRobSdzIGludmFyaWFudHMuIEdpdmVuIHRoYXQgdGhpcyBhcml0aG1ldGljXG4gICBjb3JyZWN0bmVzcyBjaGVjayBpcyBkaWZmaWN1bHQgYW5kIGVycm9yIHByb25lIGFuZCBnaXZlbiB0aGF0IDFlMTBcbiAgICsgMSBpcyBpbiBwcmFjdGljZSBsYXJnZSBlbm91Z2gsIHRoZXJlIGlzIG5vIG5lZWQgdG8gYXR0ZW1wdCB0byBzZXRcbiAgIHBwX2luZmluaXR5IHRvIHRoZSB0aGVvcmV0aWNhbGx5IG1heGltdW0gbGltaXQuIEl0IGlzIG5vdCB3b3J0aCB0aGVcbiAgIGJ1cmRlbiAhICopXG5sZXQgcHBfaW5maW5pdHkgPSAxMDAwMDAwMDEwXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgZm9yIHRoZSBmb3JtYXR0ZXIuICopXG5sZXQgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBzID0gc3RhdGUucHBfb3V0X3N0cmluZyBzIDAgKFN0cmluZy5sZW5ndGggcylcbmFuZCBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lICgpXG5hbmQgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X3NwYWNlcyBuXG5hbmQgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X2luZGVudCBuXG5cbigqIEZvcm1hdCBhIHRleHR1YWwgdG9rZW4gKilcbmxldCBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHRleHQgPVxuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBzaXplO1xuICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHRleHQ7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIGZhbHNlXG5cbigqIEZvcm1hdCBhIHN0cmluZyBieSBpdHMgbGVuZ3RoLCBpZiBub3QgZW1wdHkgKilcbmxldCBmb3JtYXRfc3RyaW5nIHN0YXRlIHMgPVxuICBpZiBzIDw+IFwiXCIgdGhlbiBmb3JtYXRfcHBfdGV4dCBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrLCBpbmRlbnRpbmcgYSBuZXcgbGluZS4gKilcbmxldCBicmVha19uZXdfbGluZSBzdGF0ZSAoYmVmb3JlLCBvZmZzZXQsIGFmdGVyKSB3aWR0aCA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gdHJ1ZTtcbiAgbGV0IGluZGVudCA9IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2Zmc2V0IGluXG4gICgqIERvbid0IGluZGVudCBtb3JlIHRoYW4gcHBfbWF4X2luZGVudC4gKilcbiAgbGV0IHJlYWxfaW5kZW50ID0gSW50Lm1pbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGluZGVudCBpblxuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSByZWFsX2luZGVudDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGZvcmNlIGEgbGluZSBicmVhayBpbnNpZGUgYSBib3g6IG5vIG9mZnNldCBpcyBhZGRlZC4gKilcbmxldCBicmVha19saW5lIHN0YXRlIHdpZHRoID0gYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIDAsIFwiXCIpIHdpZHRoXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrIHRoYXQgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoYmVmb3JlLCB3aWR0aCwgYWZ0ZXIpID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHdpZHRoO1xuICBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIHdpZHRoO1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gaW5kZW50IG5vIG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LCBpZiBvbmUgdHJpZXMgdG8gb3BlbiBhIGJveFxuICAgYmV5b25kIHBwX21heF9pbmRlbnQsIHRoZW4gdGhlIGJveCBpcyByZWplY3RlZCBvbiB0aGUgbGVmdFxuICAgYnkgc2ltdWxhdGluZyBhIGJyZWFrLiAqKVxubGV0IHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZVxuICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgIGlmIHdpZHRoID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuXG4gICAgICBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2ZpdHMgfCBQcF9oYm94IC0+ICgpXG4gICAgICB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG5cblxuKCogVG8gc2tpcCBhIHRva2VuLCBpZiB0aGUgcHJldmlvdXMgbGluZSBoYXMgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfc2tpcF90b2tlbiBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHByaW50X2lmX25ld2xpbmUgbXVzdCBoYXZlIGJlZW4gdGhlIGxhc3QgcHJpbnRpbmcgY29tbWFuZCAqKVxuICB8IFNvbWUgeyBzaXplOyBsZW5ndGg7IF8gfSAtPlxuICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gc3RhdGUucHBfbGVmdF90b3RhbCAtIGxlbmd0aDtcbiAgICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgKyBTaXplLnRvX2ludCBzaXplXG5cblxuKCpcblxuICBUaGUgbWFpbiBwcmV0dHkgcHJpbnRpbmcgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBGb3JtYXR0aW5nIGEgdG9rZW4gd2l0aCBhIGdpdmVuIHNpemUuICopXG5sZXQgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgPSBmdW5jdGlvblxuXG4gIHwgUHBfdGV4dCBzIC0+XG4gICAgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSBzXG5cbiAgfCBQcF9iZWdpbiAob2ZmLCB0eSkgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGlmIGluc2VydGlvbl9wb2ludCA+IHN0YXRlLnBwX21heF9pbmRlbnQgdGhlblxuICAgICAgKCogY2FuIG5vdCBvcGVuIGEgYm94IHJpZ2h0IHRoZXJlLiAqKVxuICAgICAgYmVnaW4gcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSBlbmQ7XG4gICAgbGV0IHdpZHRoID0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIG9mZiBpblxuICAgIGxldCBib3hfdHlwZSA9XG4gICAgICBtYXRjaCB0eSB3aXRoXG4gICAgICB8IFBwX3Zib3ggLT4gUHBfdmJveFxuICAgICAgfCBQcF9oYm94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzIC0+XG4gICAgICAgIGlmIHNpemUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gdHkgZWxzZSBQcF9maXRzIGluXG4gICAgU3RhY2sucHVzaCB7IGJveF90eXBlOyB3aWR0aCB9IHN0YXRlLnBwX2Zvcm1hdF9zdGFja1xuXG4gIHwgUHBfZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF90YmVnaW4gKFBwX3Rib3ggXyBhcyB0Ym94KSAtPlxuICAgIFN0YWNrLnB1c2ggdGJveCBzdGF0ZS5wcF90Ym94X3N0YWNrXG5cbiAgfCBQcF90ZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfc3RhYiAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgcmVjIGFkZF90YWIgbiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW25dXG4gICAgICAgIHwgeCA6OiBsIGFzIGxzIC0+IGlmIG4gPCB4IHRoZW4gbiA6OiBscyBlbHNlIHggOjogYWRkX3RhYiBuIGwgaW5cbiAgICAgIHRhYnMgOj0gYWRkX3RhYiAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCkgIXRhYnNcbiAgICBlbmRcblxuICB8IFBwX3RicmVhayAobiwgb2ZmKSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCB0YWIgPVxuICAgICAgICBtYXRjaCAhdGFicyB3aXRoXG4gICAgICAgIHwgW10gLT4gaW5zZXJ0aW9uX3BvaW50XG4gICAgICAgIHwgZmlyc3QgOjogXyAtPlxuICAgICAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGhlYWQgOjogdGFpbCAtPlxuICAgICAgICAgICAgICBpZiBoZWFkID49IGluc2VydGlvbl9wb2ludCB0aGVuIGhlYWQgZWxzZSBmaW5kIHRhaWxcbiAgICAgICAgICAgIHwgW10gLT4gZmlyc3QgaW5cbiAgICAgICAgICBmaW5kICF0YWJzIGluXG4gICAgICBsZXQgb2Zmc2V0ID0gdGFiIC0gaW5zZXJ0aW9uX3BvaW50IGluXG4gICAgICBpZiBvZmZzZXQgPj0gMFxuICAgICAgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgKFwiXCIsIG9mZnNldCArIG4sIFwiXCIpXG4gICAgICBlbHNlIGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCB0YWIgKyBvZmYsIFwiXCIpIHN0YXRlLnBwX21hcmdpblxuICAgIGVuZFxuXG4gIHwgUHBfbmV3bGluZSAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgd2lkdGg7IF99IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcbiAgICBlbmRcblxuICB8IFBwX2lmX25ld2xpbmUgLT5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCAhPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgdGhlbiBwcF9za2lwX3Rva2VuIHN0YXRlXG5cbiAgfCBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IC0+XG4gICAgbGV0IGJlZm9yZSwgb2ZmLCBfID0gYnJlYWtzIGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9ob3Zib3ggLT5cbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2JveCAtPlxuICAgICAgICAoKiBIYXZlIHRoZSBsaW5lIGp1c3QgYmVlbiBicm9rZW4gaGVyZSA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2lzX25ld19saW5lIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHMgZWxzZVxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGggZWxzZVxuICAgICAgICAoKiBicmVhayB0aGUgbGluZSBoZXJlIGxlYWRzIHRvIG5ldyBpbmRlbnRhdGlvbiA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ID4gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9odmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfZml0cyAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF92Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9oYm94IC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICBlbmRcbiAgICBlbmRcblxuICAgfCBQcF9vcGVuX3RhZyB0YWdfbmFtZSAtPlxuICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlcjtcbiAgICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF9tYXJrX3N0YWNrXG5cbiAgIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgIGJlZ2luIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfbWFya19zdGFjayB3aXRoXG4gICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIHRhZ19uYW1lIGluXG4gICAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXJcbiAgICAgZW5kXG5cblxuKCogUHJpbnQgaWYgdG9rZW4gc2l6ZSBpcyBrbm93biBlbHNlIHByaW50aW5nIGlzIGRlbGF5ZWQuXG4gICBQcmludGluZyBpcyBkZWxheWVkIHdoZW4gdGhlIHRleHQgd2FpdGluZyBpbiB0aGUgcXVldWUgcmVxdWlyZXNcbiAgIG1vcmUgcm9vbSB0byBmb3JtYXQgdGhhbiBleGlzdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCByZWMgYWR2YW5jZV9sZWZ0IHN0YXRlID1cbiAgbWF0Y2ggUXVldWUucGVla19vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogTm8gdG9rZW5zIHRvIHByaW50ICopXG4gIHwgU29tZSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSAtPlxuICAgIGxldCBwZW5kaW5nX2NvdW50ID0gc3RhdGUucHBfcmlnaHRfdG90YWwgLSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIGluXG4gICAgaWYgU2l6ZS5pc19rbm93biBzaXplIHx8IHBlbmRpbmdfY291bnQgPj0gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIGJlZ2luXG4gICAgICBRdWV1ZS50YWtlIHN0YXRlLnBwX3F1ZXVlIHw+IGlnbm9yZTsgKCogTm90IGVtcHR5OiB3ZSBwZWVrIGludG8gaXQgKilcbiAgICAgIGxldCBzaXplID0gaWYgU2l6ZS5pc19rbm93biBzaXplIHRoZW4gU2l6ZS50b19pbnQgc2l6ZSBlbHNlIHBwX2luZmluaXR5IGluXG4gICAgICBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSB0b2tlbjtcbiAgICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gbGVuZ3RoICsgc3RhdGUucHBfbGVmdF90b3RhbDtcbiAgICAgIChhZHZhbmNlX2xlZnQgW0B0YWlsY2FsbF0pIHN0YXRlXG4gICAgZW5kXG5cblxuKCogVG8gZW5xdWV1ZSBhIHRva2VuIDogdHJ5IHRvIGFkdmFuY2UuICopXG5sZXQgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHRvayA9IHBwX2VucXVldWUgc3RhdGUgdG9rOyBhZHZhbmNlX2xlZnQgc3RhdGVcblxuXG4oKiBUbyBlbnF1ZXVlIHN0cmluZ3MuICopXG5sZXQgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzID1cbiAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZTsgdG9rZW4gPSBQcF90ZXh0IHM7IGxlbmd0aCA9IFNpemUudG9faW50IHNpemUgfVxuXG5cbmxldCBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzID1cbiAgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgKFNpemUub2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKSBzXG5cblxuKCogUm91dGluZXMgZm9yIHNjYW4gc3RhY2tcbiAgIGRldGVybWluZSBzaXplIG9mIGJveGVzLiAqKVxuXG4oKiBUaGUgc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbmxldCBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhY2sgPVxuICBTdGFjay5jbGVhciBzdGFjaztcbiAgbGV0IHF1ZXVlX2VsZW0gPSB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfdGV4dCBcIlwiOyBsZW5ndGggPSAwIH0gaW5cbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAtMTsgcXVldWVfZWxlbSB9IHN0YWNrXG5cbigqIFNldHRpbmcgdGhlIHNpemUgb2YgYm94ZXMgb24gc2NhbiBzdGFjazpcbiAgIGlmIHR5ID0gdHJ1ZSB0aGVuIHNpemUgb2YgYnJlYWsgaXMgc2V0IGVsc2Ugc2l6ZSBvZiBib3ggaXMgc2V0O1xuICAgaW4gZWFjaCBjYXNlIHBwX3NjYW5fc3RhY2sgaXMgcG9wcGVkLlxuXG4gICBOb3RlOlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiBzY2FuIHN0YWNrIGlzIGV4aGF1c3RpdmUsIHNpbmNlIHNjYW5fc3RhY2sgaXMgbmV2ZXJcbiAgIGVtcHR5LlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiB0b2tlbiBpbiBzY2FuIHN0YWNrIGlzIGFsc28gZXhoYXVzdGl2ZSxcbiAgIHNpbmNlIHNjYW5fcHVzaCBpcyB1c2VkIG9uIGJyZWFrcyBhbmQgb3BlbmluZyBvZiBib3hlcy4gKilcbmxldCBzZXRfc2l6ZSBzdGF0ZSB0eSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxuICB8IFNvbWUgeyBsZWZ0X3RvdGFsOyBxdWV1ZV9lbGVtIH0gLT5cbiAgICBsZXQgc2l6ZSA9IFNpemUudG9faW50IHF1ZXVlX2VsZW0uc2l6ZSBpblxuICAgICgqIHRlc3QgaWYgc2NhbiBzdGFjayBjb250YWlucyBhbnkgZGF0YSB0aGF0IGlzIG5vdCBvYnNvbGV0ZS4gKilcbiAgICBpZiBsZWZ0X3RvdGFsIDwgc3RhdGUucHBfbGVmdF90b3RhbCB0aGVuXG4gICAgICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFja1xuICAgIGVsc2VcbiAgICAgIG1hdGNoIHF1ZXVlX2VsZW0udG9rZW4gd2l0aFxuICAgICAgfCBQcF9icmVhayBfIHwgUHBfdGJyZWFrIChfLCBfKSAtPlxuICAgICAgICBpZiB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX2JlZ2luIChfLCBfKSAtPlxuICAgICAgICBpZiBub3QgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF90ZXh0IF8gfCBQcF9zdGFiIHwgUHBfdGJlZ2luIF8gfCBQcF90ZW5kIHwgUHBfZW5kXG4gICAgICB8IFBwX25ld2xpbmUgfCBQcF9pZl9uZXdsaW5lIHwgUHBfb3Blbl90YWcgXyB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICAgICAoKSAoKiBzY2FuX3B1c2ggaXMgb25seSB1c2VkIGZvciBicmVha3MgYW5kIGJveGVzLiAqKVxuXG5cbigqIFB1c2ggYSB0b2tlbiBvbiBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay5cbiAgIElmIGIgaXMgdHJ1ZSBzZXRfc2l6ZSBpcyBjYWxsZWQuICopXG5sZXQgc2Nhbl9wdXNoIHN0YXRlIGIgdG9rZW4gPVxuICBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuO1xuICBpZiBiIHRoZW4gc2V0X3NpemUgc3RhdGUgdHJ1ZTtcbiAgbGV0IGVsZW0gPSB7IGxlZnRfdG90YWwgPSBzdGF0ZS5wcF9yaWdodF90b3RhbDsgcXVldWVfZWxlbSA9IHRva2VuIH0gaW5cbiAgU3RhY2sucHVzaCBlbGVtIHN0YXRlLnBwX3NjYW5fc3RhY2tcblxuXG4oKiBUbyBvcGVuIGEgbmV3IGJveCA6XG4gICB0aGUgdXNlciBtYXkgc2V0IHRoZSBkZXB0aCBib3VuZCBwcF9tYXhfYm94ZXNcbiAgIGFueSB0ZXh0IG5lc3RlZCBkZWVwZXIgaXMgcHJpbnRlZCBhcyB0aGUgZWxsaXBzaXMgc3RyaW5nLiAqKVxubGV0IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgYnJfdHkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX2JlZ2luIChpbmRlbnQsIGJyX3R5KTsgbGVuZ3RoID0gMCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIGZhbHNlIGVsZW0gZWxzZVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmcgc3RhdGUgc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUaGUgYm94IHdoaWNoIGlzIGFsd2F5cyBvcGVuLiAqKVxubGV0IHBwX29wZW5fc3lzX2JveCBzdGF0ZSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hvdmJveFxuXG4oKiBDbG9zZSBhIGJveCwgc2V0dGluZyBzaXplcyBvZiBpdHMgc3ViIGJveGVzLiAqKVxubGV0IHBwX2Nsb3NlX2JveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBiZWdpblxuICAgICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfZW5kOyBsZW5ndGggPSAwIH07XG4gICAgICBzZXRfc2l6ZSBzdGF0ZSB0cnVlOyBzZXRfc2l6ZSBzdGF0ZSBmYWxzZVxuICAgIGVuZDtcbiAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxO1xuICBlbmRcblxuXG4oKiBPcGVuIGEgdGFnLCBwdXNoaW5nIGl0IG9uIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfb3Blbl9zdGFnIHN0YXRlIHRhZ19uYW1lID1cbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gIGJlZ2luXG4gICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gICAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgdGFnX25hbWVcbiAgZW5kO1xuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIGxldCB0b2tlbiA9IFBwX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuOyBsZW5ndGggPSAwIH1cblxuXG4oKiBDbG9zZSBhIHRhZywgcG9wcGluZyBpdCBmcm9tIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfY2xvc2VfdGFnOyBsZW5ndGggPSAwIH07XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICAgIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGFnX3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgdGFnX25hbWVcblxubGV0IHBwX29wZW5fdGFnIHN0YXRlIHMgPSBwcF9vcGVuX3N0YWcgc3RhdGUgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgc3RhdGUgKCkgPSBwcF9jbG9zZV9zdGFnIHN0YXRlICgpXG5cbmxldCBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfcHJpbnRfdGFncyA8LSBiXG5sZXQgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfbWFya190YWdzIDwtIGJcbmxldCBwcF9nZXRfcHJpbnRfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX3ByaW50X3RhZ3NcbmxldCBwcF9nZXRfbWFya190YWdzIHN0YXRlICgpID0gc3RhdGUucHBfbWFya190YWdzXG5sZXQgcHBfc2V0X3RhZ3Mgc3RhdGUgYiA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0YXRlIGI7IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYlxuXG5cbigqIEhhbmRsaW5nIHRhZyBoYW5kbGluZyBmdW5jdGlvbnM6IGdldC9zZXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG1hcmtfb3Blbl9zdGFnID0gc3RhdGUucHBfbWFya19vcGVuX3RhZztcbiAgbWFya19jbG9zZV9zdGFnID0gc3RhdGUucHBfbWFya19jbG9zZV90YWc7XG4gIHByaW50X29wZW5fc3RhZyA9IHN0YXRlLnBwX3ByaW50X29wZW5fdGFnO1xuICBwcmludF9jbG9zZV9zdGFnID0gc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnO1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3N0YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl9zdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV9zdGFnID0gcGN0O1xuICB9ID1cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBtb3Q7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIG1jdDtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gcG90O1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gcGN0XG5cblxuKCogSW5pdGlhbGl6ZSBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9yaW5pdCBzdGF0ZSA9XG4gIHBwX2NsZWFyX3F1ZXVlIHN0YXRlO1xuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfZm9ybWF0X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90Ym94X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX21hcmtfc3RhY2s7XG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIDA7XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gMDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW47XG4gIHBwX29wZW5fc3lzX2JveCBzdGF0ZVxuXG5sZXQgY2xlYXJfdGFnX3N0YWNrIHN0YXRlID1cbiAgU3RhY2suaXRlciAoZnVuIF8gLT4gcHBfY2xvc2VfdGFnIHN0YXRlICgpKSBzdGF0ZS5wcF90YWdfc3RhY2tcblxuXG4oKiBGbHVzaGluZyBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBiID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBiIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuXG4oKiBGbHVzaCBbc3RyX2Zvcm1hdHRlcl0gYW5kIGdldCB0aGUgY29udGVudHMgb2YgW3N0ZGJ1Zl0uICopXG5sZXQgZmx1c2hfc3RyX2Zvcm1hdHRlciAoKSA9IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgc3RkYnVmIHN0cl9mb3JtYXR0ZXJcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nXG4qKVxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmcgaXMgcHJldHR5LXByaW50aW5nIHdpdGggbm8gbG93IGxldmVsIG91dHB1dC5cblxuICBXaGVuIHVzaW5nIGEgc3ltYm9saWMgZm9ybWF0dGVyLCBhbGwgcmVndWxhciBwcmV0dHktcHJpbnRpbmcgYWN0aXZpdGllc1xuICBvY2N1ciBidXQgb3V0cHV0IG1hdGVyaWFsIGlzIHN5bWJvbGljIGFuZCBzdG9yZWQgaW4gYSBidWZmZXIgb2Ygb3V0cHV0XG4gIGl0ZW1zLiBBdCB0aGUgZW5kIG9mIHByZXR0eS1wcmludGluZywgZmx1c2hpbmcgdGhlIG91dHB1dCBidWZmZXIgYWxsb3dzXG4gIHBvc3QtcHJvY2Vzc2luZyBvZiBzeW1ib2xpYyBvdXRwdXQgYmVmb3JlIGxvdyBsZXZlbCBvdXRwdXQgb3BlcmF0aW9ucy5cbiopXG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2l0ZW0gPVxuICB8IE91dHB1dF9mbHVzaFxuICB8IE91dHB1dF9uZXdsaW5lXG4gIHwgT3V0cHV0X3N0cmluZyBvZiBzdHJpbmdcbiAgfCBPdXRwdXRfc3BhY2VzIG9mIGludFxuICB8IE91dHB1dF9pbmRlbnQgb2YgaW50XG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2J1ZmZlciA9IHtcbiAgbXV0YWJsZSBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgOiBzeW1ib2xpY19vdXRwdXRfaXRlbSBsaXN0O1xufVxuXG5sZXQgbWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyICgpID1cbiAgeyBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgPSBbXSB9XG5cbmxldCBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gW11cblxubGV0IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIExpc3QucmV2IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZsdXNoX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IGl0ZW1zID0gZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iIGluXG4gIGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iO1xuICBpdGVtc1xuXG5sZXQgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBpdGVtID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBpdGVtIDo6IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBzeW1ib2xpY19mbHVzaCBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X2ZsdXNoXG4gIGFuZCBzeW1ib2xpY19uZXdsaW5lIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfbmV3bGluZVxuICBhbmQgc3ltYm9saWNfc3RyaW5nIHNvYiBzIGkgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3N0cmluZyAoU3RyaW5nLnN1YiBzIGkgbikpXG4gIGFuZCBzeW1ib2xpY19zcGFjZXMgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zcGFjZXMgbilcbiAgYW5kIHN5bWJvbGljX2luZGVudCBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X2luZGVudCBuKSBpblxuXG4gIGxldCBmID0gc3ltYm9saWNfc3RyaW5nIHNvYlxuICBhbmQgZyA9IHN5bWJvbGljX2ZsdXNoIHNvYlxuICBhbmQgaCA9IHN5bWJvbGljX25ld2xpbmUgc29iXG4gIGFuZCBpID0gc3ltYm9saWNfc3BhY2VzIHNvYlxuICBhbmQgaiA9IHN5bWJvbGljX2luZGVudCBzb2IgaW5cbiAgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqXG5cbigqXG5cbiAgQmFzaWMgZnVuY3Rpb25zIG9uIHRoZSAnc3RhbmRhcmQnIGZvcm1hdHRlclxuICAodGhlIGZvcm1hdHRlciB0aGF0IHByaW50cyB0byBbU3RkbGliLnN0ZG91dF0pLlxuXG4qKVxuXG5sZXQgb3Blbl9oYm94ID0gcHBfb3Blbl9oYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3Zib3ggPSBwcF9vcGVuX3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faHZib3ggPSBwcF9vcGVuX2h2Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2hvdmJveCA9IHBwX29wZW5faG92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2JveCA9IHBwX29wZW5fYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9ib3ggPSBwcF9jbG9zZV9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdGFnID0gcHBfb3Blbl90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3RhZyA9IHBwX2Nsb3NlX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9zdGFnID0gcHBfb3Blbl9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9zdGFnID0gcHBfY2xvc2Vfc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYXMgPSBwcF9wcmludF9hcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3RyaW5nID0gcHBfcHJpbnRfc3RyaW5nIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ieXRlcyA9IHBwX3ByaW50X2J5dGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pbnQgPSBwcF9wcmludF9pbnQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Zsb2F0ID0gcHBfcHJpbnRfZmxvYXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2NoYXIgPSBwcF9wcmludF9jaGFyIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ib29sID0gcHBfcHJpbnRfYm9vbCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnJlYWsgPSBwcF9wcmludF9icmVhayBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY3V0ID0gcHBfcHJpbnRfY3V0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zcGFjZSA9IHBwX3ByaW50X3NwYWNlIHN0ZF9mb3JtYXR0ZXJcbmFuZCBmb3JjZV9uZXdsaW5lID0gcHBfZm9yY2VfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmx1c2ggPSBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfbmV3bGluZSA9IHBwX3ByaW50X25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2lmX25ld2xpbmUgPSBwcF9wcmludF9pZl9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIG9wZW5fdGJveCA9IHBwX29wZW5fdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGJveCA9IHBwX2Nsb3NlX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RicmVhayA9IHBwX3ByaW50X3RicmVhayBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfdGFiID0gcHBfc2V0X3RhYiBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGFiID0gcHBfcHJpbnRfdGFiIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXJnaW4gPSBwcF9zZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2luZGVudCA9IHBwX3NldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9nZW9tZXRyeSA9IHBwX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgc2FmZV9zZXRfZ2VvbWV0cnkgPSBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2dlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCB1cGRhdGVfZ2VvbWV0cnkgPSBwcF91cGRhdGVfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9ib3hlcyA9IHBwX3NldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfYm94ZXMgPSBwcF9nZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvdmVyX21heF9ib3hlcyA9IHBwX292ZXJfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9lbGxpcHNpc190ZXh0ID0gcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9lbGxpcHNpc190ZXh0ID0gcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfcHJpbnRfdGFncyA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfcHJpbnRfdGFncyA9XG4gIHBwX2dldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfbWFya190YWdzID1cbiAgcHBfc2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmtfdGFncyA9XG4gIHBwX2dldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF90YWdzID1cbiAgcHBfc2V0X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG4oKiBUbyBmb3JtYXQgYSBsaXN0ICopXG5sZXQgcmVjIHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAoKVxuICB8IFt2XSAtPiBwcF92IHBwZiB2XG4gIHwgdiA6OiB2cyAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF9wcmludF9saXN0IH5wcF9zZXAgcHBfdiBwcGYgdnNcblxuKCogVG8gZm9ybWF0IGEgc2VxdWVuY2UgKilcbmxldCByZWMgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbmxldCBwcF9wcmludF9zZXEgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxuKCogVG8gZm9ybWF0IGZyZWUtZmxvd2luZyB0ZXh0ICopXG5sZXQgcHBfcHJpbnRfdGV4dCBwcGYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGxlZnQgPSByZWYgMCBpblxuICBsZXQgcmlnaHQgPSByZWYgMCBpblxuICBsZXQgZmx1c2ggKCkgPVxuICAgIHBwX3ByaW50X3N0cmluZyBwcGYgKFN0cmluZy5zdWIgcyAhbGVmdCAoIXJpZ2h0IC0gIWxlZnQpKTtcbiAgICBpbmNyIHJpZ2h0OyBsZWZ0IDo9ICFyaWdodDtcbiAgaW5cbiAgd2hpbGUgKCFyaWdodCA8PiBsZW4pIGRvXG4gICAgbWF0Y2ggcy5bIXJpZ2h0XSB3aXRoXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGZsdXNoICgpO1xuICAgICAgICBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgZmx1c2ggKCk7IHBwX3ByaW50X3NwYWNlIHBwZiAoKVxuICAgICAgKCogdGhlcmUgaXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgJ1xcdCdcbiAgICAgICAgIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBhIHJpZ2h0IHNlbWFudGljcyB3b3VsZCBiZSAqKVxuICAgICAgfCBfIC0+IGluY3IgcmlnaHRcbiAgZG9uZTtcbiAgaWYgIWxlZnQgPD4gbGVuIHRoZW4gZmx1c2ggKClcblxubGV0IHBwX3ByaW50X29wdGlvbiA/KG5vbmUgPSBmdW4gXyAoKSAtPiAoKSkgcHBfdiBwcGYgPSBmdW5jdGlvblxufCBOb25lIC0+IG5vbmUgcHBmICgpXG58IFNvbWUgdiAtPiBwcF92IHBwZiB2XG5cbmxldCBwcF9wcmludF9yZXN1bHQgfm9rIH5lcnJvciBwcGYgPSBmdW5jdGlvblxufCBPayB2IC0+IG9rIHBwZiB2XG58IEVycm9yIGUgLT4gZXJyb3IgcHBmIGVcblxubGV0IHBwX3ByaW50X2VpdGhlciB+bGVmdCB+cmlnaHQgcHBmID0gZnVuY3Rpb25cbnwgRWl0aGVyLkxlZnQgbCAtPiBsZWZ0IHBwZiBsXG58IEVpdGhlci5SaWdodCByIC0+IHJpZ2h0IHBwZiByXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBjb21wdXRlX3RhZyBvdXRwdXQgdGFnX2FjYyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBvdXRwdXQgcHBmIHRhZ19hY2M7XG4gIHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgbGV0IGxlbiA9IEJ1ZmZlci5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gIGVsc2UgQnVmZmVyLnN1YiBidWYgMSAobGVuIC0gMilcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIERlZmluaW5nIGNvbnRpbnVhdGlvbnMgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZlxuICBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuXG5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG4oKiBJbnRlcnByZXQgYSBmb3JtYXR0aW5nIGVudGl0eSBvbiBhIGZvcm1hdHRlci4gKilcbmxldCBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGZtdGluZ19saXQgPSBtYXRjaCBmbXRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX2JveCBwcGYgKClcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX3RhZyBwcGYgKClcbiAgfCBCcmVhayAoXywgd2lkdGgsIG9mZnNldCkgIC0+IHBwX3ByaW50X2JyZWFrIHBwZiB3aWR0aCBvZmZzZXRcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2ZsdXNoIHBwZiAoKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX3ByaW50X25ld2xpbmUgcHBmICgpXG4gIHwgTWFnaWNfc2l6ZSAoXywgXykgICAgICAgICAtPiAoKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnJSdcbiAgfCBTY2FuX2luZGljIGMgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJzsgcHBfcHJpbnRfY2hhciBwcGYgY1xuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYub3V0cHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBmIHBwZjtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYuYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19kZWxheSAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKGYgKCkpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIChmICgpKTtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqXG5cbiAgRGVmaW5pbmcgW2ZwcmludGZdIGFuZCB2YXJpb3VzIGZsYXZvcnMgb2YgW2ZwcmludGZdLlxuXG4qKVxuXG5sZXQga2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgcHBmIGFjYzsgayBwcGYpXG4gICAgRW5kX29mX2FjYyBmbXRcblxuYW5kIGlrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIHBwZiBmbXRcblxubGV0IGlmcHJpbnRmIF9wcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgaWdub3JlICgpIGZtdFxuXG5sZXQgZnByaW50ZiBwcGYgPSBrZnByaW50ZiBpZ25vcmUgcHBmXG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkX2Zvcm1hdHRlciBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgZXJyX2Zvcm1hdHRlciBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlciAoKTtcbiAgcHBfcHJpbnRfZmx1c2ggZXJyX2Zvcm1hdHRlciAoKVxuXG5sZXQgKCkgPSBhdF9leGl0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnNcblxuKCpcblxuICBEZXByZWNhdGVkIHN0dWZmLlxuXG4qKVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZVxuICAgIH5vdXQ6ZiB+Zmx1c2g6ZyB+bmV3bGluZTpoIH5zcGFjZXM6aSA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gsXG4gICBzdGF0ZS5wcF9vdXRfbmV3bGluZSwgc3RhdGUucHBfb3V0X3NwYWNlcylcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBnZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IGVycm9yIHByb25lIGZ1bmN0aW9uLCBkbyBub3QgdXNlIGl0LlxuICAgVGhpcyBmdW5jdGlvbiBpcyBuZWl0aGVyIGNvbXBvc2l0aW9uYWwgbm9yIGluY3JlbWVudGFsLCBzaW5jZSBpdCBmbHVzaGVzXG4gICB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYXQgZWFjaCBjYWxsLlxuICAgVG8gZ2V0IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIGRlZmluZSBhIGZvcm1hdHRlciBvZiB5b3VyIG93biB3cml0aW5nIHRvXG4gICB0aGUgYnVmZmVyIGFyZ3VtZW50LCBhcyBpblxuICAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYlxuICAgdGhlbiB1c2UgeyFmcHJpbnRmIHBwZn0gYXMgdXN1YWwuICopXG5sZXQgYnByaW50ZiBiIChGb3JtYXQgKGZtdCwgXykgOiAoJ2EsIGZvcm1hdHRlciwgdW5pdCkgZm9ybWF0KSA9XG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID0gb3V0cHV0X2FjYyBwcGYgYWNjOyBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2UgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbigqIERlcHJlY2F0ZWQgOiBhbGlhcyBmb3Iga3NwcmludGYuICopXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG5cblxuXG4oKiBEZXByZWNhdGVkIHRhZyBmdW5jdGlvbnMgKilcblxudHlwZSBmb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2VfdGFnIDogdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl90YWcgOiB0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2VfdGFnIDogdGFnIC0+IHVuaXQ7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl90YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2VfdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2VfdGFnID0gcGN0O1xuICAgfSA9XG4gIGxldCBzdHJpbmdpZnkgZiBlID0gZnVuY3Rpb24gU3RyaW5nX3RhZyBzIC0+IGYgcyB8IF8gLT4gZSBpblxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIHN0cmluZ2lmeSBtb3QgXCJcIjtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gc3RyaW5naWZ5IG1jdCBcIlwiO1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBzdHJpbmdpZnkgcG90ICgpO1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gc3RyaW5naWZ5IHBjdCAoKVxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIGZtdCAoKSA9XG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBmbXQgKCkgaW5cbiAgbGV0IG1hcmtfb3Blbl90YWcgcyA9IGZ1bnMubWFya19vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IG1hcmtfY2xvc2VfdGFnIHMgPSBmdW5zLm1hcmtfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfb3Blbl90YWcgcyA9IGZ1bnMucHJpbnRfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9jbG9zZV90YWcgcyA9IGZ1bnMucHJpbnRfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICB7bWFya19vcGVuX3RhZzsgbWFya19jbG9zZV90YWc7IHByaW50X29wZW5fdGFnOyBwcmludF9jbG9zZV90YWd9XG5cbmxldCBzZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgSGVscGVycyBmb3IgRm9ybWF0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5pbmNsdWRlIEZvcm1hdFxuXG50eXBlIHQgPSBGb3JtYXQuZm9ybWF0dGVyXG50eXBlIC0nYSBwcmludGVyID0gdCAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBDb21iaW5hdG9yc30gKilcblxubGV0IHNpbGVudCBfZm10IF8gPSAoKVxubGV0IHJldHVybiBmbXRfc3RyIG91dCAoKSA9IEZvcm1hdC5mcHJpbnRmIG91dCBcIiUoJSlcIiBmbXRfc3RyXG5sZXQgdW5pdCBmbXQgKCkgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCBcIigpXCJcbmxldCBpbnQgZm10IGkgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHN0cmluZyA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmdcbmxldCBib29sID0gRm9ybWF0LnBwX3ByaW50X2Jvb2xcbmxldCBmbG9hdDMgZm10IGYgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlLjNmXCIgZlxubGV0IGZsb2F0IGZtdCBmID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IGNoYXIgPSBGb3JtYXQucHBfcHJpbnRfY2hhclxubGV0IGludDMyIGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJWxkXCIgblxubGV0IGludDY0IGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJUxkXCIgblxubGV0IG5hdGl2ZWludCBmbXQgbiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVuZFwiIG5cbmxldCBzdHJpbmdfcXVvdGVkIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiXFxcIiVzXFxcIlwiIHNcbmxldCBmbHVzaCA9IEZvcm1hdC5wcF9wcmludF9mbHVzaFxubGV0IHNwYWNlID0gRm9ybWF0LnBwX3ByaW50X3NwYWNlXG5sZXQgY3V0ID0gRm9ybWF0LnBwX3ByaW50X2N1dFxubGV0IGJyZWFrIGZtdCAobSwgbikgPSBGb3JtYXQucHBfcHJpbnRfYnJlYWsgZm10IG0gblxubGV0IG5ld2xpbmUgPSBGb3JtYXQucHBfZm9yY2VfbmV3bGluZVxubGV0IHN1YnN0cmluZyBvdXQgKHMsIGksIGxlbikgOiB1bml0ID0gc3RyaW5nIG91dCAoU3RyaW5nLnN1YiBzIGkgbGVuKVxubGV0IHRleHQgPSBGb3JtYXQucHBfcHJpbnRfdGV4dFxuXG5sZXQgc3RyaW5nX2xpbmVzIG91dCAocyA6IHN0cmluZykgOiB1bml0ID1cbiAgZnByaW50ZiBvdXQgXCJAWzx2PlwiO1xuICBsZXQgaSA9IHJlZiAwIGluXG4gIGxldCBuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIHdoaWxlICFpIDwgbiBkb1xuICAgIGxldCBqID0gdHJ5IFN0cmluZy5pbmRleF9mcm9tIHMgIWkgJ1xcbicgd2l0aCBOb3RfZm91bmQgLT4gbiBpblxuICAgIGlmICFpID4gMCB0aGVuIGZwcmludGYgb3V0IFwiQCxcIjtcbiAgICBzdWJzdHJpbmcgb3V0IChzLCAhaSwgaiAtICFpKTtcbiAgICBpIDo9IGogKyAxXG4gIGRvbmU7XG4gIGZwcmludGYgb3V0IFwiQF1cIlxuXG5sZXQgbGlzdCA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgbCA9XG4gIGxldCByZWMgcHBfbGlzdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHAgZm10IHg7XG4gICAgICBzZXAgZm10ICgpO1xuICAgICAgcHBfbGlzdCBsXG4gICAgfCBbIHggXSAtPiBwcCBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfbGlzdCBsXG5cbmxldCBhcnJheSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgYSA9XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBpID4gMCB0aGVuIHNlcCBmbXQgKCk7XG4gICAgcHAgZm10IGEuKGkpXG4gIGRvbmVcblxubGV0IGFycmF5aSA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcCBmbXQgYSA9XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBpID4gMCB0aGVuIHNlcCBmbXQgKCk7XG4gICAgcHAgZm10IChpLCBhLihpKSlcbiAgZG9uZVxuXG5sZXQgc2VxID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBzZXEgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBDQ1NlcS5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBzZXAgZm10ICgpO1xuICAgICAgcHAgZm10IHgpXG4gICAgc2VxXG5cbmxldCBpdGVyID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBzZXEgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBzZXEgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBzZXAgZm10ICgpO1xuICAgICAgcHAgZm10IHgpXG5cbmxldCBvcHQgcHAgZm10IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwibm9uZVwiXG4gIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcInNvbWUgJWFcIiBwcCB4XG5cbmxldCBwYWlyID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgZm10IChhLCBiKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYVwiIHBwYSBhIHNlcCAoKSBwcGIgYlxuXG5sZXQgdHJpcGxlID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgcHBjIGZtdCAoYSwgYiwgYykgPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYSVhJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiIHNlcCAoKSBwcGMgY1xuXG5sZXQgcXVhZCA/KHNlcCA9IHJldHVybiBcIixAIFwiKSBwcGEgcHBiIHBwYyBwcGQgZm10IChhLCBiLCBjLCBkKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYSVhJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiIHNlcCAoKSBwcGMgYyBzZXAgKCkgcHBkXG4gICAgZFxuXG5sZXQgYXBwZW5kIHBwYSBwcGIgZm10ICgpID1cbiAgcHBhIGZtdCAoKTtcbiAgcHBiIGZtdCAoKVxuXG5sZXQgYXBwZW5kX2wgcHBsIGZtdCAoKSA9IExpc3QuaXRlciAoZnVuIHBwIC0+IHBwIGZtdCAoKSkgcHBsXG5cbmxldCB3aXRoaW4gYSBiIHAgb3V0IHggPVxuICBzdHJpbmcgb3V0IGE7XG4gIHAgb3V0IHg7XG4gIHN0cmluZyBvdXQgYlxuXG5sZXQgbWFwIGYgcHAgZm10IHggPVxuICBwcCBmbXQgKGYgeCk7XG4gICgpXG5cbmxldCB2Ym94ID8oaSA9IDApIHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5fdmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBob3Zib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9ob3Zib3ggb3V0IGk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgaHZib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9odmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBoYm94IHBwIG91dCB4ID1cbiAgRm9ybWF0LnBwX29wZW5faGJveCBvdXQgKCk7XG4gIHBwIG91dCB4O1xuICBGb3JtYXQucHBfY2xvc2VfYm94IG91dCAoKVxuXG5sZXQgb2ZfdG9fc3RyaW5nIGYgb3V0IHggPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoZiB4KVxubGV0IGV4biA9IG9mX3RvX3N0cmluZyBQcmludGV4Yy50b19zdHJpbmdcbmxldCBjb25zdCBwcCB4IG91dCAoKSA9IHBwIG91dCB4XG5cbmxldCBzb21lIHBwIG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBwcCBvdXQgeFxuXG5sZXQgY29uc3Rfc3RyaW5nIHMgb3V0IF8gPSBzdHJpbmcgb3V0IHNcbmxldCBvcGFxdWUgb3V0IF8gPSBzdHJpbmcgb3V0IFwib3BhcXVlXCJcbmxldCBsYXp5X2ZvcmNlIHBwIG91dCAobGF6eSB4KSA9IHBwIG91dCB4XG5cbmxldCBsYXp5X29yID8oZGVmYXVsdCA9IHJldHVybiBcIjxsYXp5PlwiKSBwcCBvdXQgeCA9XG4gIGlmIExhenkuaXNfdmFsIHggdGhlblxuICAgIHBwIG91dCAoTGF6eS5mb3JjZSB4KVxuICBlbHNlXG4gICAgZGVmYXVsdCBvdXQgKClcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgb3V0cHV0IGZtdCBwcCB4ID0gcHAgZm10IHhcblxubGV0IHRvX3N0cmluZyBwcCB4ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBwcCBmbXQgeDtcbiAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgZnByaW50ZiA9IEZvcm1hdC5mcHJpbnRmXG5sZXQgc3Rkb3V0ID0gRm9ybWF0LnN0ZF9mb3JtYXR0ZXJcbmxldCBzdGRlcnIgPSBGb3JtYXQuZXJyX2Zvcm1hdHRlclxubGV0IG9mX2NoYW4gPSBGb3JtYXQuZm9ybWF0dGVyX29mX291dF9jaGFubmVsXG5cbmxldCB3aXRoX291dF9jaGFuIG9jIGYgPVxuICBsZXQgZm10ID0gb2ZfY2hhbiBvYyBpblxuICB0cnlcbiAgICBsZXQgeCA9IGYgZm10IGluXG4gICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICB4XG4gIHdpdGggZSAtPlxuICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgcmFpc2UgZVxuXG5sZXQgdGVlIGEgYiA9XG4gIGxldCBmYSA9IEZvcm1hdC5wcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgYSAoKSBpblxuICBsZXQgZmIgPSBGb3JtYXQucHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIGIgKCkgaW5cbiAgRm9ybWF0Lm1ha2VfZm9ybWF0dGVyXG4gICAgKGZ1biBzdHIgaSBsZW4gLT5cbiAgICAgIGZhLkZvcm1hdC5vdXRfc3RyaW5nIHN0ciBpIGxlbjtcbiAgICAgIGZiLkZvcm1hdC5vdXRfc3RyaW5nIHN0ciBpIGxlbilcbiAgICAoZnVuICgpIC0+XG4gICAgICBmYS5Gb3JtYXQub3V0X2ZsdXNoICgpO1xuICAgICAgZmIuRm9ybWF0Lm91dF9mbHVzaCAoKSlcblxubGV0IHRvX2ZpbGUgZmlsZW5hbWUgZm9ybWF0ID1cbiAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZW5hbWUgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBmbXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgICBjbG9zZV9vdXRfbm9lcnIgb2MpXG4gICAgZm10IGZvcm1hdFxuXG5tb2R1bGUgQU5TSV9jb2RlcyA9IHN0cnVjdFxuICB0eXBlIGNvbG9yID1cbiAgICBbIGBCbGFjayB8IGBSZWQgfCBgWWVsbG93IHwgYEdyZWVuIHwgYEJsdWUgfCBgTWFnZW50YSB8IGBDeWFuIHwgYFdoaXRlIF1cblxuICBsZXQgaW50X29mX2NvbG9yXyA9IGZ1bmN0aW9uXG4gICAgfCBgQmxhY2sgLT4gMFxuICAgIHwgYFJlZCAtPiAxXG4gICAgfCBgR3JlZW4gLT4gMlxuICAgIHwgYFllbGxvdyAtPiAzXG4gICAgfCBgQmx1ZSAtPiA0XG4gICAgfCBgTWFnZW50YSAtPiA1XG4gICAgfCBgQ3lhbiAtPiA2XG4gICAgfCBgV2hpdGUgLT4gN1xuXG4gIHR5cGUgc3R5bGUgPVxuICAgIFsgYEZHIG9mIGNvbG9yICgqIGZvcmVncm91bmQgKilcbiAgICB8IGBCRyBvZiBjb2xvciAoKiBiYWNrZ3JvdW5kICopXG4gICAgfCBgQm9sZFxuICAgIHwgYFJlc2V0IF1cblxuICBsZXQgY29kZV9vZl9zdHlsZSA6IHN0eWxlIC0+IGludCA9IGZ1bmN0aW9uXG4gICAgfCBgRkcgYyAtPiAzMCArIGludF9vZl9jb2xvcl8gY1xuICAgIHwgYEJHIGMgLT4gNDAgKyBpbnRfb2ZfY29sb3JfIGNcbiAgICB8IGBCb2xkIC0+IDFcbiAgICB8IGBSZXNldCAtPiAwXG5cbiAgbGV0IHN0cmluZ19vZl9zdHlsZSBhID0gUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZG1cIiAoY29kZV9vZl9zdHlsZSBhKVxuICBsZXQgY2xlYXJfbGluZSA9IFwiXFx4MWJbMktcXHJcIlxuICBsZXQgcmVzZXQgPSBzdHJpbmdfb2Zfc3R5bGUgYFJlc2V0XG5cbiAgbGV0IHN0cmluZ19vZl9zdHlsZV9saXN0ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJlc2V0XG4gICAgfCBbIGEgXSAtPiBzdHJpbmdfb2Zfc3R5bGUgYVxuICAgIHwgWyBhOyBiIF0gLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWQ7JWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSkgKGNvZGVfb2Zfc3R5bGUgYilcbiAgICB8IFsgYTsgYjsgYyBdIC0+XG4gICAgICBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkOyVkOyVkbVwiIChjb2RlX29mX3N0eWxlIGEpIChjb2RlX29mX3N0eWxlIGIpXG4gICAgICAgIChjb2RlX29mX3N0eWxlIGMpXG4gICAgfCBsIC0+XG4gICAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICAgICAgbGV0IHBwX251bSBjID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChzdHJpbmdfb2ZfaW50IChjb2RlX29mX3N0eWxlIGMpKSBpblxuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwiXFx4MWJbXCI7XG4gICAgICBMaXN0Lml0ZXJpXG4gICAgICAgIChmdW4gaSBjIC0+XG4gICAgICAgICAgaWYgaSA+IDAgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmICc7JztcbiAgICAgICAgICBwcF9udW0gYylcbiAgICAgICAgbDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBcIm1cIjtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBleGNlcHRpb24gTm9fc3VjaF9zdHlsZVxuXG4gICgqIHBhcnNlIGEgc3RyaW5nIHRhZy4gKilcbiAgbGV0IHN0eWxlX29mX3RhZ18gcyA9XG4gICAgbWF0Y2ggU3RyaW5nLnRyaW0gcyB3aXRoXG4gICAgfCBcInJlc2V0XCIgLT4gWyBgUmVzZXQgXVxuICAgIHwgXCJibGFja1wiIC0+IFsgYEZHIGBCbGFjayBdXG4gICAgfCBcInJlZFwiIC0+IFsgYEZHIGBSZWQgXVxuICAgIHwgXCJncmVlblwiIC0+IFsgYEZHIGBHcmVlbiBdXG4gICAgfCBcInllbGxvd1wiIC0+IFsgYEZHIGBZZWxsb3cgXVxuICAgIHwgXCJibHVlXCIgLT4gWyBgRkcgYEJsdWUgXVxuICAgIHwgXCJtYWdlbnRhXCIgLT4gWyBgRkcgYE1hZ2VudGEgXVxuICAgIHwgXCJjeWFuXCIgLT4gWyBgRkcgYEN5YW4gXVxuICAgIHwgXCJ3aGl0ZVwiIC0+IFsgYEZHIGBXaGl0ZSBdXG4gICAgfCBcImJvbGRcIiAtPiBbIGBCb2xkIF1cbiAgICB8IFwiQmxhY2tcIiAtPiBbIGBGRyBgQmxhY2s7IGBCb2xkIF1cbiAgICB8IFwiUmVkXCIgLT4gWyBgRkcgYFJlZDsgYEJvbGQgXVxuICAgIHwgXCJHcmVlblwiIC0+IFsgYEZHIGBHcmVlbjsgYEJvbGQgXVxuICAgIHwgXCJZZWxsb3dcIiAtPiBbIGBGRyBgWWVsbG93OyBgQm9sZCBdXG4gICAgfCBcIkJsdWVcIiAtPiBbIGBGRyBgQmx1ZTsgYEJvbGQgXVxuICAgIHwgXCJNYWdlbnRhXCIgLT4gWyBgRkcgYE1hZ2VudGE7IGBCb2xkIF1cbiAgICB8IFwiQ3lhblwiIC0+IFsgYEZHIGBDeWFuOyBgQm9sZCBdXG4gICAgfCBcIldoaXRlXCIgLT4gWyBgRkcgYFdoaXRlOyBgQm9sZCBdXG4gICAgfCBfIC0+IHJhaXNlIE5vX3N1Y2hfc3R5bGVcbmVuZFxuXG5sZXQgY29sb3JfZW5hYmxlZCA9IHJlZiBmYWxzZVxuXG5sZXQgbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlID1cbiAgU3RhY2sucHVzaCBzdHlsZSBzdDtcbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlblxuICAgIEFOU0lfY29kZXMuc3RyaW5nX29mX3N0eWxlX2xpc3Qgc3R5bGVcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IG1hcmtfY2xvc2Vfc3R5bGUgc3QgOiBzdHJpbmcgPVxuICBsZXQgc3R5bGUgPVxuICAgIHRyeVxuICAgICAgaWdub3JlIChTdGFjay5wb3Agc3QpO1xuICAgICAgKCogcG9wIGN1cnJlbnQgc3R5bGUgKGlmIHdlbGwtc2NvcGVkIOKApikgKilcbiAgICAgIFN0YWNrLnRvcCBzdFxuICAgICAgKCogbG9vayBhdCBwcmV2aW91cyBzdHlsZSAqKVxuICAgIHdpdGggU3RhY2suRW1wdHkgLT4gWyBgUmVzZXQgXVxuICBpblxuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgQU5TSV9jb2Rlcy5zdHJpbmdfb2Zfc3R5bGVfbGlzdCBzdHlsZVxuICBlbHNlXG4gICAgXCJcIlxuXG50eXBlIHN0YWcgKz0gU3R5bGUgb2YgQU5TSV9jb2Rlcy5zdHlsZSBsaXN0XG5cbmxldCBwcF9vcGVuX3RhZyBvdXQgcyA9IHBwX29wZW5fc3RhZyBvdXQgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgb3V0ICgpID0gcHBfY2xvc2Vfc3RhZyBvdXQgKClcblxuKCogZWl0aGVyIHByaW50cyB0aGUgdGFnIG9mIFtzXSBvciBkZWxlZ2F0ZSB0byBbb3JfZWxzZV0gKilcbmxldCBtYXJrX29wZW5fc3RhZyBzdCB+b3JfZWxzZSAodGFnIDogc3RhZykgOiBzdHJpbmcgPVxuICBtYXRjaCB0YWcgd2l0aFxuICB8IFN0eWxlIHN0eWxlIC0+IG1hcmtfb3Blbl9zdHlsZSBzdCBzdHlsZVxuICB8IFN0cmluZ190YWcgcyAtPlxuICAgIGxldCBvcGVuIEFOU0lfY29kZXMgaW5cbiAgICAodHJ5XG4gICAgICAgbGV0IHN0eWxlID0gc3R5bGVfb2ZfdGFnXyBzIGluXG4gICAgICAgbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlXG4gICAgIHdpdGggTm9fc3VjaF9zdHlsZSAtPiBvcl9lbHNlIHRhZylcbiAgfCBfIC0+IG9yX2Vsc2UgdGFnXG5cbmxldCBtYXJrX2Nsb3NlX3N0YWcgc3Qgfm9yX2Vsc2UgKHRhZyA6IHN0YWcpIDogc3RyaW5nID1cbiAgbWF0Y2ggdGFnIHdpdGhcbiAgfCBTdHlsZSBfIC0+IG1hcmtfY2xvc2Vfc3R5bGUgc3RcbiAgfCBTdHJpbmdfdGFnIHMgLT5cbiAgICBsZXQgb3BlbiBBTlNJX2NvZGVzIGluXG4gICAgKCogY2hlY2sgaWYgaXQncyBpbmRlZWQgYWJvdXQgY29sb3IgKilcbiAgICAobWF0Y2ggc3R5bGVfb2ZfdGFnXyBzIHdpdGhcbiAgICB8IF8gLT4gbWFya19jbG9zZV9zdHlsZSBzdFxuICAgIHwgZXhjZXB0aW9uIE5vX3N1Y2hfc3R5bGUgLT4gb3JfZWxzZSB0YWcpXG4gIHwgXyAtPiBvcl9lbHNlIHRhZ1xuXG5sZXQgd2l0aF9zdHlsaW5nIHN0bCBvdXQgZiA9XG4gIHBwX29wZW5fc3RhZyBvdXQgKFN0eWxlIHN0bCk7XG4gIHRyeVxuICAgIGxldCB4ID0gZiAoKSBpblxuICAgIHBwX2Nsb3NlX3N0YWcgb3V0ICgpO1xuICAgIHhcbiAgd2l0aCBlIC0+XG4gICAgcHBfY2xvc2Vfc3RhZyBvdXQgKCk7XG4gICAgcmFpc2UgZVxuXG5sZXQgc3R5bGluZyBzdGwgcHAgb3V0IHggPSB3aXRoX3N0eWxpbmcgc3RsIG91dCBAQCBmdW4gKCkgLT4gcHAgb3V0IHhcblxuKCogYWRkIGNvbG9yIGhhbmRsaW5nIHRvIGZvcm1hdHRlciBbcHBmXSAqKVxubGV0IHNldF9jb2xvcl90YWdfaGFuZGxpbmcgcHBmID1cbiAgbGV0IHN0ID0gU3RhY2suY3JlYXRlICgpIGluXG4gICgqIHN0YWNrIG9mIHN0eWxlcyAqKVxuICBwcF9zZXRfbWFya190YWdzIHBwZiB0cnVlO1xuICAoKiBlbmFibGUgdGFncyAqKVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgcHBmICgpIGluXG4gIGxldCBmdW5zJyA9XG4gICAge1xuICAgICAgZnVucyB3aXRoXG4gICAgICBtYXJrX29wZW5fc3RhZyA9IG1hcmtfb3Blbl9zdGFnIHN0IH5vcl9lbHNlOmZ1bnMubWFya19vcGVuX3N0YWc7XG4gICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtYXJrX2Nsb3NlX3N0YWcgc3Qgfm9yX2Vsc2U6ZnVucy5tYXJrX2Nsb3NlX3N0YWc7XG4gICAgfVxuICBpblxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHBwZiBmdW5zJ1xuXG5sZXQgc2V0X2NvbG9yX2RlZmF1bHQgPVxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBmdW4gYiAtPlxuICAgIGlmIGIgJiYgbm90ICFjb2xvcl9lbmFibGVkIHRoZW4gKFxuICAgICAgY29sb3JfZW5hYmxlZCA6PSB0cnVlO1xuICAgICAgaWYgIWZpcnN0IHRoZW4gKFxuICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBzdGRvdXQ7XG4gICAgICAgIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgc3RkZXJyXG4gICAgICApXG4gICAgKSBlbHNlIGlmIChub3QgYikgJiYgIWNvbG9yX2VuYWJsZWQgdGhlblxuICAgICAgY29sb3JfZW5hYmxlZCA6PSBmYWxzZVxuXG5sZXQgd2l0aF9jb2xvciBzIHBwIG91dCB4ID1cbiAgcHBfb3Blbl90YWcgb3V0IHM7XG4gIHBwIG91dCB4O1xuICBwcF9jbG9zZV90YWcgb3V0ICgpXG5cbmxldCB3aXRoX2NvbG9yZiBzIG91dCBmbXQgPVxuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgRm9ybWF0LmtmcHJpbnRmIChmdW4gb3V0IC0+IHBwX2Nsb3NlX3RhZyBvdXQgKCkpIG91dCBmbXRcblxuKCogYzogd2hldGhlciBjb2xvcnMgYXJlIGVuYWJsZWQgKilcbmxldCBzcHJpbnRmXyBjIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgYyAmJiAhY29sb3JfZW5hYmxlZCB0aGVuIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgZm10O1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIF9mbXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBmbXQgKCk7XG4gICAgICBCdWZmZXIuY29udGVudHMgYnVmKVxuICAgIGZtdCBmb3JtYXRcblxubGV0IHdpdGhfY29sb3Jfa3NmIH5mIHMgZm10ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuIHNldF9jb2xvcl90YWdfaGFuZGxpbmcgb3V0O1xuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgLT5cbiAgICAgIHBwX2Nsb3NlX3RhZyBvdXQgKCk7XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZiAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZtdFxuXG5sZXQgd2l0aF9jb2xvcl9zZiBzIGZtdCA9IHdpdGhfY29sb3Jfa3NmIH5mOihmdW4gcyAtPiBzKSBzIGZtdFxubGV0IHNwcmludGYgZm10ID0gc3ByaW50Zl8gdHJ1ZSBmbXRcbmxldCBzcHJpbnRmX25vX2NvbG9yIGZtdCA9IHNwcmludGZfIGZhbHNlIGZtdFxubGV0IHNwcmludGZfZHluX2NvbG9yIH5jb2xvcnMgZm10ID0gc3ByaW50Zl8gY29sb3JzIGZtdFxuXG5sZXQgZnByaW50Zl9keW5fY29sb3IgfmNvbG9ycyBvdXQgZm10ID1cbiAgbGV0IG9sZF90YWdzID0gRm9ybWF0LnBwX2dldF9tYXJrX3RhZ3Mgb3V0ICgpIGluXG4gIEZvcm1hdC5wcF9zZXRfbWFya190YWdzIG91dCBjb2xvcnM7XG4gICgqIGVuYWJsZS9kaXNhYmxlIHRhZ3MgKilcbiAgRm9ybWF0LmtmcHJpbnRmIChmdW4gb3V0IC0+IEZvcm1hdC5wcF9zZXRfbWFya190YWdzIG91dCBvbGRfdGFncykgb3V0IGZtdFxuXG5sZXQga3NwcmludGYgP21hcmdpbiB+ZiBmbXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBvdXQ7XG4gIChtYXRjaCBtYXJnaW4gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIG0gLT4gcHBfc2V0X21hcmdpbiBvdXQgbSk7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gXyAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGYgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmbXRcblxubW9kdWxlIER1bXAgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgcHJpbnRlclxuXG4gIGxldCB1bml0ID0gdW5pdFxuICBsZXQgaW50ID0gaW50XG4gIGxldCBzdHJpbmcgPSBzdHJpbmdfcXVvdGVkXG4gIGxldCBib29sID0gYm9vbFxuICBsZXQgZmxvYXQgPSBmbG9hdFxuICBsZXQgY2hhciA9IGNoYXJcbiAgbGV0IGludDMyID0gaW50MzJcbiAgbGV0IGludDY0ID0gaW50NjRcbiAgbGV0IG5hdGl2ZWludCA9IG5hdGl2ZWludFxuICBsZXQgbGlzdCBwcCA9IHdpdGhpbiBcIltcIiBcIl1cIiAoaG92Ym94IChsaXN0IH5zZXA6KHJldHVybiBcIjtALFwiKSBwcCkpXG4gIGxldCBhcnJheSBwcCA9IHdpdGhpbiBcIlt8XCIgXCJ8XVwiIChob3Zib3ggKGFycmF5IH5zZXA6KHJldHVybiBcIjtALFwiKSBwcCkpXG5cbiAgbGV0IG9wdGlvbiBwcCBvdXQgeCA9XG4gICAgbWF0Y2ggeCB3aXRoXG4gICAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiTm9uZVwiXG4gICAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiU29tZSAlYVwiIHBwIHhcblxuICBsZXQgcGFpciBwMSBwMiA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94IChwYWlyIHAxIHAyKSlcbiAgbGV0IHRyaXBsZSBwMSBwMiBwMyA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94ICh0cmlwbGUgcDEgcDIgcDMpKVxuICBsZXQgcXVhZCBwMSBwMiBwMyBwNCA9IHdpdGhpbiBcIihcIiBcIilcIiAoaG92Ym94IChxdWFkIHAxIHAyIHAzIHA0KSlcblxuICBsZXQgcmVzdWx0JyBwb2sgcGVycm9yIG91dCA9IGZ1bmN0aW9uXG4gICAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIihAW09rICVhQF0pXCIgcG9rIHhcbiAgICB8IEVycm9yIGUgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiKEBbRXJyb3IgJWFAXSlcIiBwZXJyb3IgZVxuXG4gIGxldCByZXN1bHQgcG9rID0gcmVzdWx0JyBwb2sgc3RyaW5nXG4gIGxldCB0b19zdHJpbmcgPSB0b19zdHJpbmdcbmVuZFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggKysgKSA9IGFwcGVuZFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUmVnaXN0ZXJpbmcgT0NhbWwgdmFsdWVzIHdpdGggdGhlIEMgcnVudGltZSBmb3IgbGF0ZXIgY2FsbGJhY2tzICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+IE9iai50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0IHJlZ2lzdGVyIG5hbWUgdiA9XG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgKE9iai5yZXByIHYpXG5cbmxldCByZWdpc3Rlcl9leGNlcHRpb24gbmFtZSAoZXhuIDogZXhuKSA9XG4gIGxldCBleG4gPSBPYmoucmVwciBleG4gaW5cbiAgbGV0IHNsb3QgPSBpZiBPYmoudGFnIGV4biA9IE9iai5vYmplY3RfdGFnIHRoZW4gZXhuIGVsc2UgT2JqLmZpZWxkIGV4biAwIGluXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIG5hbWUgc2xvdFxuIiwibW9kdWxlIEpzID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIHR5cGUgJ2EganNfYXJyYXkgPSB0XG5cbiAgdHlwZSAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrID0gdFxuXG4gIGV4dGVybmFsIHN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXCJcblxuICBleHRlcm5hbCBieXRlc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNieXRlc19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX2J5dGVzdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNieXRlc1wiXG5cbiAgZXh0ZXJuYWwgYm9vbCA6IGJvb2wgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Jvb2xcIlxuXG4gIGV4dGVybmFsIHRvX2Jvb2wgOiB0IC0+IGJvb2wgPSBcImNhbWxfanNfdG9fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgYXJyYXkgOiAnYSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2FycmF5IDogdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9qc190b19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2Zsb2F0IDogZmxvYXQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2Zsb2F0XCJcblxuICBleHRlcm5hbCBmbG9hdF9vZl9udW1iZXIgOiB0IC0+IGZsb2F0ID0gXCJjYW1sX2pzX3RvX2Zsb2F0XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfaW50MzIgOiBpbnQzMiAtPiB0ID0gXCJjYW1sX2pzX2Zyb21faW50MzJcIlxuXG4gIGV4dGVybmFsIGludDMyX29mX251bWJlciA6IHQgLT4gaW50MzIgPSBcImNhbWxfanNfdG9faW50MzJcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gdCA9IFwiY2FtbF9qc19mcm9tX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgbmF0aXZlaW50X29mX251bWJlciA6IHQgLT4gbmF0aXZlaW50ID0gXCJjYW1sX2pzX3RvX25hdGl2ZWludFwiXG5cbiAgZXh0ZXJuYWwgdHlwZW9mIDogdCAtPiB0ID0gXCJjYW1sX2pzX3R5cGVvZlwiXG5cbiAgZXh0ZXJuYWwgaW5zdGFuY2VvZiA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2luc3RhbmNlb2ZcIlxuXG4gIGV4dGVybmFsIGRlYnVnZ2VyIDogdW5pdCAtPiB1bml0ID0gXCJkZWJ1Z2dlclwiXG5cbiAgZXh0ZXJuYWwgZ2V0IDogdCAtPiB0IC0+IHQgPSBcImNhbWxfanNfZ2V0XCJcblxuICBleHRlcm5hbCBzZXQgOiB0IC0+IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX3NldFwiXG5cbiAgZXh0ZXJuYWwgZGVsZXRlIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfZGVsZXRlXCJcblxuICBleHRlcm5hbCBjYWxsIDogdCAtPiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19jYWxsXCJcblxuICBleHRlcm5hbCBmdW5fY2FsbCA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2Z1bl9jYWxsXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGwgOiB0IC0+IHN0cmluZyAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbWV0aF9jYWxsXCJcblxuICBleHRlcm5hbCBuZXdfb2JqIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfbmV3XCJcblxuICBleHRlcm5hbCBuZXdfb2JqX2FyciA6IHQgLT4gdCBqc19hcnJheSAtPiB0ID0gXCJjYW1sX29qc19uZXdfYXJyXCJcblxuICBleHRlcm5hbCBvYmogOiAoc3RyaW5nICogdCkgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19vYmplY3RcIlxuXG4gIGV4dGVybmFsIGVxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgc3RyaWN0X2VxdWFscyA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2pzX3N0cmljdF9lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHB1cmVfZXhwciA6ICh1bml0IC0+ICdhKSAtPiAnYSA9IFwiY2FtbF9qc19wdXJlX2V4cHJcIlxuXG4gIGV4dGVybmFsIGV2YWxfc3RyaW5nIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V2YWxfc3RyaW5nXCJcblxuICBleHRlcm5hbCBqc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIHB1cmVfanNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9wdXJlX2pzX2V4cHJcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAodCBqc19hcnJheSAtPiAnYikgLT4gKCdjLCB0IGpzX2FycmF5IC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIGNhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJpdHkgOiBpbnQgLT4gKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKCdiIC0+IHQganNfYXJyYXkgLT4gJ2EpIC0+ICgnYiwgdCBqc19hcnJheSAtPiAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHNcIlxuXG4gIGV4dGVybmFsIHdyYXBfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrXCJcblxuICBleHRlcm5hbCB3cmFwX21ldGhfY2FsbGJhY2sgOiAoJ2EgLT4gJ2IpIC0+ICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tcIlxuZW5kXG5cbm1vZHVsZSBTeXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBjYWxsYmFjayA9ICdhXG5cbiAgZXh0ZXJuYWwgY3JlYXRlX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBjb250ZW50OnN0cmluZyAtPiB1bml0ID0gXCJjYW1sX2NyZWF0ZV9maWxlXCJcblxuICBleHRlcm5hbCByZWFkX2ZpbGUgOiBuYW1lOnN0cmluZyAtPiBzdHJpbmcgPSBcImNhbWxfcmVhZF9maWxlX2NvbnRlbnRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX291dHB1dCcgOiBvdXRfY2hhbm5lbCAtPiAoanNfc3RyaW5nOkpzLnQgLT4gdW5pdCkgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfaW5wdXQnIDogaW5fY2hhbm5lbCAtPiAodW5pdCAtPiBzdHJpbmcpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcIlxuXG4gIGV4dGVybmFsIG1vdW50X3BvaW50IDogdW5pdCAtPiBzdHJpbmcgbGlzdCA9IFwiY2FtbF9saXN0X21vdW50X3BvaW50XCJcblxuICBleHRlcm5hbCBtb3VudF9hdXRvbG9hZCA6IHN0cmluZyAtPiAoc3RyaW5nIC0+IHN0cmluZyAtPiBzdHJpbmcgb3B0aW9uKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbW91bnRfYXV0b2xvYWRcIlxuXG4gIGV4dGVybmFsIHVubW91bnQgOiBzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF91bm1vdW50XCJcblxuICB0eXBlIHJlZGlyZWN0aW9uXG5cbiAgZXh0ZXJuYWwgcmVkaXJlY3RfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IGludG86b3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb25cbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0XCJcblxuICBleHRlcm5hbCByZXN0b3JlX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvbiAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXCJcblxuICBtb2R1bGUgQ29uZmlnID0gc3RydWN0XG4gICAgZXh0ZXJuYWwgdXNlX2pzX3N0cmluZyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcIlxuXG4gICAgZXh0ZXJuYWwgZWZmZWN0cyA6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcIlxuICBlbmRcblxuICBsZXQgdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5zXG5cbiAgbGV0IGdpdF92ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLmdpdF92ZXJzaW9uXG5lbmRcblxubW9kdWxlIEVycm9yIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCByYWlzZV8gOiB0IC0+ICdhXG5cbiAgdmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG5cbiAgKCoqIEF0dGFjaCBhIEphdmFzU2NyaXB0IGVycm9yIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbi4gIGlmIFtmb3JjZSA9IGZhbHNlXSBhbmQgYVxuICAgIEphdmFzU2NyaXB0IGVycm9yIGlzIGFscmVhZHkgYXR0YWNoZWQsIGl0IHdpbGwgZG8gbm90aGluZy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgdG9cbiAgICBzdG9yZSBhbmQgcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgSmF2YVNjcmlwdCBzdGFjayB0cmFjZXMuXG5cbiAgICBBdHRhY2hpbmcgSmF2YXNTY3JpcHQgZXJyb3JzIHdpbGwgaGFwcGVuIGF1dG9tYXRpY2FsbHkgd2hlbiBjb21waWxpbmcgd2l0aFxuICAgIFstLWVuYWJsZSB3aXRoLWpzLWVycm9yXS4gKilcblxuICB2YWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uXG4gICgqKiBFeHRyYWN0IGEgSmF2YVNjcmlwdCBlcnJvciBhdHRhY2hlZCB0byBhbiBPQ2FtbCBleGNlcHRpb24sIGlmIGFueS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICAgICBpbnNwZWN0IGFuIGV2ZW50dWFsIHN0YWNrIHN0cmFjZSwgZXNwZWNpYWxseSB3aGVuIHNvdXJjZW1hcCBpcyBlbmFibGVkLiAqKVxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuICAoKiogVGhlIFtFcnJvcl0gZXhjZXB0aW9uIHdyYXAgamF2YXNjcmlwdCBleGNlcHRpb25zIHdoZW4gY2F1Z2h0IGJ5IE9DYW1sIGNvZGUuXG4gICAgICBJbiBjYXNlIHRoZSBqYXZhc2NyaXB0IGV4Y2VwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgamF2YXNjcmlwdCBbRXJyb3JdLFxuICAgICAgaXQgd2lsbCBiZSBzZXJpYWxpemVkIGFuZCB3cmFwcGVkIGludG8gYSBbRmFpbHVyZV0gZXhjZXB0aW9uLlxuICAqKVxuZW5kID0gc3RydWN0XG4gIHR5cGUgdFxuXG4gIGV4Y2VwdGlvbiBFeG4gb2YgdFxuXG4gIGxldCBfID0gQ2FsbGJhY2sucmVnaXN0ZXJfZXhjZXB0aW9uIFwianNFcnJvclwiIChFeG4gKE9iai5tYWdpYyBbfHxdKSlcblxuICBsZXQgcmFpc2VfIDogdCAtPiAnYSA9IEpzLmpzX2V4cHIgXCIoZnVuY3Rpb24gKGV4bikgeyB0aHJvdyBleG4gfSlcIlxuXG4gIGV4dGVybmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvbiA9IFwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXCJcblxuICBleHRlcm5hbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuID0gXCJjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZVwiXG5lbmRcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzItNjBcIl1cblxubW9kdWxlIEZvcl9jb21wYXRpYmlsaXR5X29ubHkgPSBzdHJ1Y3RcbiAgKCogQWRkIHByaW1pdGl2ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gRXhpc3RpbmcgdXNlcnMgbWlnaHRcbiAgICAgZGVwZW5kIG9uIGl0IChlLmcuIGdlbl9qc19hcGkpLCB3ZSBkb250IHdhbnQgdGhlIG9jYW1sIGNvbXBpbGVyXG4gICAgIHRvIGNvbXBsYWluIGFib3V0IHRoZXNlcyBtaXNzaW5nIHByaW1pdGl2ZXMuICopXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc19mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBKcy50ID0gXCJjYW1sX2pzX2Zyb21fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fYnl0ZV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fc3RyaW5nIDogSnMudCAtPiBzdHJpbmcgPSBcImNhbWxfanNfdG9fc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkgOiAnYSBKcy5qc19hcnJheSAtPiAnYSBsaXN0ID0gXCJjYW1sX2xpc3Rfb2ZfanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF90b19qc19hcnJheSA6ICdhIGxpc3QgLT4gJ2EgSnMuanNfYXJyYXkgPSBcImNhbWxfbGlzdF90b19qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdmFyaWFibGUgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfdmFyXCJcbmVuZFxuXG5tb2R1bGUgVHlwZWRfYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0eXBlZEFycmF5ID0gSnMudFxuXG4gIHR5cGUgYXJyYXlCdWZmZXIgPSBKcy50XG5cbiAgdHlwZSB1aW50OEFycmF5ID0gSnMudFxuXG4gIGV4dGVybmFsIGtpbmQgOiAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IpIEJpZ2FycmF5LmtpbmRcbiAgICA9IFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCBmcm9tX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudCAtPiAoJ2EsICdiKSB0eXBlZEFycmF5XG4gICAgPSBcImNhbWxfYmFfdG9fdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHRvX2dlbmFycmF5IDpcbiAgICAoJ2EsICdiKSB0eXBlZEFycmF5IC0+ICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50XG4gICAgPSBcImNhbWxfYmFfZnJvbV90eXBlZF9hcnJheVwiXG5cbiAgbW9kdWxlIEJpZ3N0cmluZyA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IChjaGFyLCBCaWdhcnJheS5pbnQ4X3Vuc2lnbmVkX2VsdCwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkFycmF5MS50XG5cbiAgICBleHRlcm5hbCB0b19hcnJheUJ1ZmZlciA6IHQgLT4gYXJyYXlCdWZmZXIgPSBcImJpZ3N0cmluZ190b19hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgdG9fdWludDhBcnJheSA6IHQgLT4gdWludDhBcnJheSA9IFwiYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5XCJcblxuICAgIGV4dGVybmFsIG9mX2FycmF5QnVmZmVyIDogYXJyYXlCdWZmZXIgLT4gdCA9IFwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXlcIlxuICBlbmRcblxuICBleHRlcm5hbCBvZl91aW50OEFycmF5IDogdWludDhBcnJheSAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2FycmF5XCJcbmVuZFxuXG5tb2R1bGUgSW50NjQgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlX2ludDY0X2xvX21pX2hpIDogaW50IC0+IGludCAtPiBpbnQgLT4gSW50NjQudFxuICAgID0gXCJjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaVwiXG5lbmRcbiIsIm9wZW4gQnJyXG5cbm1vZHVsZSBLZXlfcGF0aCA9IHN0cnVjdFxuICB0eXBlIHQgPSBJZCBvZiBzdHJpbmcgfCBTIG9mIHQgYXJyYXlcblxuICBsZXQgcmVjIHRvX2p2ID0gZnVuY3Rpb25cbiAgICB8IElkIHAgLT4gSnYub2Zfc3RyaW5nIHBcbiAgICB8IFMga2V5cyAtPiBKdi5vZl9hcnJheSB0b19qdiBrZXlzXG5lbmRcblxubW9kdWxlIEtleV9yYW5nZSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuXG4gIGxldCBib3VuZCB+bG93ZXIgfnVwcGVyID8obG93ZXJfb3BlbiA9IGZhbHNlKSA/KHVwcGVyX29wZW4gPSBmYWxzZSkgKCkgPVxuICAgIGxldCBjID0gSnYuZ2V0IEp2Lmdsb2JhbCBcIklEQktleVJhbmdlXCIgaW5cbiAgICBKdi5jYWxsIGMgXCJib3VuZFwiXG4gICAgICBbfCBsb3dlcjsgdXBwZXI7IEp2Lm9mX2Jvb2wgbG93ZXJfb3BlbjsgSnYub2ZfYm9vbCB1cHBlcl9vcGVuIHxdXG5lbmRcblxubW9kdWxlIEV2ZW50cyA9IHN0cnVjdFxuICBtb2R1bGUgVmVyc2lvbl9jaGFuZ2UgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBsZXQgb2xkX3ZlcnNpb24gdCA9IEp2LnRvX2ludCBAQCBKdi5nZXQgdCBcIm9sZFZlcnNpb25cIlxuICAgIGxldCBuZXdfdmVyc2lvbiB0ID0gSnYudG9faW50IEBAIEp2LmdldCB0IFwibmV3VmVyc2lvblwiXG4gIGVuZFxuXG4gIGxldCB1cGdyYWRlX25lZWRlZCA6IFZlcnNpb25fY2hhbmdlLnQgRXYudHlwZScgPVxuICAgIEV2LlR5cGUuY3JlYXRlIChKc3RyLnYgXCJ1cGdyYWRlbmVlZGVkXCIpXG5cbiAgbGV0IHN1Y2Nlc3MgOiBFdi5UeXBlLnZvaWQgRXYudHlwZScgPSBFdi5UeXBlLnZvaWQgKEpzdHIudiBcInN1Y2Nlc3NcIilcbiAgbGV0IGVycm9yIDogRXYuVHlwZS52b2lkIEV2LnR5cGUnID0gRXYuVHlwZS52b2lkIChKc3RyLnYgXCJlcnJvclwiKVxuZW5kXG5cbm1vZHVsZSBSZXF1ZXN0ID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9IHsganYgOiBKdi50OyBvZl9qdiA6IEp2LnQgLT4gJ2EgfVxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgb2ZfanYgfmYgaiA9IHsganYgPSBvZl9qdiBqOyBvZl9qdiA9IGYgfVxuICBsZXQgZXJyb3IgdCA9IEp2LmdldCB0Lmp2IFwiZXJyb3JcIiB8PiBKdi50b19lcnJvclxuXG4gIGxldCByZXN1bHQgKHR5cGUgYSkgKHQgOiBhIHQpIDogYSA9XG4gICAgKCogdG9kbyB0aGlzIGlzIHdyb25nICopXG4gICAgSnYuZ2V0IHQuanYgXCJyZXN1bHRcIiB8PiB0Lm9mX2p2XG5cbiAgbGV0IG9uX3N1Y2Nlc3MgKHR5cGUgYSkgfihmIDogRXYuVHlwZS52b2lkIEV2LnQgLT4gYSB0IC0+IHVuaXQpICh0IDogYSB0KSA9XG4gICAgbGV0IGYgZXYgPSBmIGV2IHQgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy5zdWNjZXNzIGYgKEV2LnRhcmdldF9vZl9qdiB0Lmp2KTtcbiAgICB0XG5cbiAgbGV0IG9uX2Vycm9yICh0eXBlIGEpIH4oZiA6IEV2LlR5cGUudm9pZCBFdi50IC0+IGEgdCAtPiB1bml0KSAodCA6IGEgdCkgPVxuICAgIGxldCBmIGV2ID0gZiBldiB0IGluXG4gICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdmVudHMuZXJyb3IgZiAoRXYudGFyZ2V0X29mX2p2IHQuanYpO1xuICAgIHRcblxuICBsZXQgZnV0IHQgPVxuICAgIGxldCByZXN1bHRfZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgbGV0IF8gPSBvbl9zdWNjZXNzIH5mOihmdW4gXyB0IC0+IHNldCAoT2sgKHJlc3VsdCB0KSkpIHQgaW5cbiAgICBsZXQgXyA9IG9uX2Vycm9yIH5mOihmdW4gXyB0IC0+IHNldCAoRXJyb3IgKGVycm9yIHQpKSkgdCBpblxuICAgIHJlc3VsdF9mdXRcbmVuZFxuXG5tb2R1bGUgdHlwZSBLZXkgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHBhdGggOiBLZXlfcGF0aC50XG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbmVuZFxuXG5tb2R1bGUgdHlwZSBTdG9yZV9jb250ZW50X2ludGYgPSBzaWdcbiAgdHlwZSB0XG5cbiAgbW9kdWxlIEtleSA6IEtleVxuXG4gIHZhbCBuYW1lIDogc3RyaW5nXG4gIHZhbCB0b19qdiA6IHQgLT4gSnYudFxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIGdldF9rZXkgOiB0IC0+IEtleS50XG5lbmRcblxubW9kdWxlIERpcmVjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBOZXh0IHwgTmV4dF91bmlxdWUgfCBQcmV2IHwgUHJldl91bmlxdWVcblxuICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IE5leHQgLT4gXCJuZXh0XCJcbiAgICB8IE5leHRfdW5pcXVlIC0+IFwibmV4dFVuaXF1ZVwiXG4gICAgfCBQcmV2IC0+IFwicHJldlwiXG4gICAgfCBQcmV2X3VuaXF1ZSAtPiBcInByZXZVbmlxdWVcIlxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJuZXh0XCIgLT4gTmV4dFxuICAgIHwgXCJuZXh0VW5pcXVlXCIgLT4gTmV4dF91bmlxdWVcbiAgICB8IFwicHJldlwiIC0+IFByZXZcbiAgICB8IFwicHJldlVuaXF1ZVwiIC0+IFByZXZfdW5pcXVlXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IHRvX2p2IGQgPSBKdi5vZl9zdHJpbmcgKHRvX3N0cmluZyBkKVxuICBsZXQgb2ZfanYgaiA9IG9mX3N0cmluZyAoSnYudG9fc3RyaW5nIGopXG5lbmRcblxubW9kdWxlIENvbnRlbnRfYWNjZXNzIChDb250ZW50IDogU3RvcmVfY29udGVudF9pbnRmKSAoS2V5IDogS2V5KSA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgbGV0IGNvdW50ICgpIHQgPSBKdi5jYWxsIHQgXCJjb3VudFwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjpKdi50b19pbnRcblxuICBsZXQgZ2V0IGtleSB0ID1cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiAoZnVuIGogLT4gQ29udGVudC5vZl9qdiBqKSBqdiBpblxuICAgIEp2LmNhbGwgdCBcImdldFwiIFt8IEtleS50b19qdiBrZXkgfF0gfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIGxldCBnZXRfYWxsIHQgPVxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQub2ZfanYgYykganYgaW5cbiAgICBKdi5jYWxsIHQgXCJnZXRBbGxcIiBbfHxdIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgZ2V0X2FsbF9rZXlzID9xdWVyeSB0ID1cbiAgICBsZXQgYXJncyA9IG1hdGNoIHF1ZXJ5IHdpdGggTm9uZSAtPiBbfHxdIHwgU29tZSBxdWVyeSAtPiBbfCBxdWVyeSB8XSBpblxuICAgIGxldCBmIGp2ID0gSnYudG9fYXJyYXkgKGZ1biBjIC0+IENvbnRlbnQuS2V5Lm9mX2p2IGMpIGp2IGluXG4gICAgSnYuY2FsbCB0IFwiZ2V0QWxsS2V5c1wiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gIG1vZHVsZSBDdXJzb3IgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBKdi50XG5cbiAgICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICAgIGxldCBrZXkgdCA9IEp2LmdldCB0IFwia2V5XCIgfD4gSnYudG9fb3B0aW9uIEtleS5vZl9qdlxuICAgIGxldCBwcmltYXJ5X2tleSB0ID0gSnYuZ2V0IHQgXCJwcmltYXJ5S2V5XCIgfD4gSnYudG9fb3B0aW9uIENvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgICBsZXQgYWR2YW5jZSBjb3VudCB0ID1cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJhZHZhbmNlXCIgW3wgSnYub2ZfaW50IGNvdW50IHxdO1xuICAgICAgdFxuXG4gICAgbGV0IGNvbnRpbnVlID9rZXkgdCA9XG4gICAgICBsZXQgYXJncyA9XG4gICAgICAgIG1hdGNoIGtleSB3aXRoIE5vbmUgLT4gW3x8XSB8IFNvbWUga2V5IC0+IFt8IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJjb250aW51ZVwiIGFyZ3NcbiAgZW5kXG5cbiAgbW9kdWxlIEN1cnNvcl93aXRoX3ZhbHVlID0gc3RydWN0XG4gICAgaW5jbHVkZSBDdXJzb3JcblxuICAgIGxldCB2YWx1ZSB0ID1cbiAgICAgIGxldCBvZl9qdiBqID0gQ29udGVudC5vZl9qdiBqIGluXG4gICAgICBsZXQgdiA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgSnYudG9fb3B0aW9uIG9mX2p2IHZcblxuICAgIGxldCBkZWxldGUgdCA9IEp2LmNhbGwgdCBcImRlbGV0ZVwiIFt8fF0gfD4gUmVxdWVzdC5vZl9qdiB+ZjooZnVuIF8gLT4gKCkpXG5cbiAgICBsZXQgdXBkYXRlIHYgdCA9XG4gICAgICBKdi5jYWxsIHQgXCJ1cGRhdGVcIiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6Q29udGVudC5LZXkub2ZfanZcbiAgZW5kXG5cbiAgbGV0IG9wZW5fY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnQgPVxuICAgIGxldCBkaXJlY3Rpb24gPSBPcHRpb24ubWFwIERpcmVjdGlvbi50b19qdiBkaXJlY3Rpb24gaW5cbiAgICBsZXQgYXJncyA9XG4gICAgICAoKiB0b2RvOiBxdWVyeSAhKilcbiAgICAgIG1hdGNoIChxdWVyeSwgZGlyZWN0aW9uKSB3aXRoXG4gICAgICB8IFNvbWUgcSwgU29tZSBkIC0+IFt8IHE7IGQgfF1cbiAgICAgIHwgTm9uZSwgU29tZSBkIC0+IFt8IEp2Lm51bGw7IGQgfF1cbiAgICAgIHwgU29tZSBxLCBOb25lIC0+IFt8IHEgfF1cbiAgICAgIHwgTm9uZSwgTm9uZSAtPiBbfHxdXG4gICAgaW5cbiAgICBsZXQgZiBqdiA9IEp2LnRvX29wdGlvbiBDdXJzb3Jfd2l0aF92YWx1ZS5vZl9qdiBqdiBpblxuICAgIEp2LmNhbGwgdCBcIm9wZW5DdXJzb3JcIiBhcmdzIHw+IFJlcXVlc3Qub2ZfanYgfmZcblxuICBsZXQgb3Blbl9rZXlfY3Vyc29yID9xdWVyeSA/ZGlyZWN0aW9uIHQgOiBDdXJzb3Jfd2l0aF92YWx1ZS50IG9wdGlvbiBSZXF1ZXN0LnRcbiAgICAgID1cbiAgICBsZXQgZGlyZWN0aW9uID0gT3B0aW9uLm1hcCBEaXJlY3Rpb24udG9fanYgZGlyZWN0aW9uIGluXG4gICAgbGV0IGFyZ3MgPVxuICAgICAgKCogdG9kbzogcXVlcnkgISopXG4gICAgICBtYXRjaCAocXVlcnksIGRpcmVjdGlvbikgd2l0aFxuICAgICAgfCBTb21lIHEsIFNvbWUgZCAtPiBbfCBxOyBkIHxdXG4gICAgICB8IE5vbmUsIFNvbWUgZCAtPiBbfCBKdi5udWxsOyBkIHxdXG4gICAgICB8IFNvbWUgcSwgTm9uZSAtPiBbfCBxIHxdXG4gICAgICB8IE5vbmUsIE5vbmUgLT4gW3x8XVxuICAgIGluXG4gICAgbGV0IGYganYgPSBKdi50b19vcHRpb24gQ3Vyc29yLm9mX2p2IGp2IGluXG4gICAgSnYuY2FsbCB0IFwib3BlbktleUN1cnNvclwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZlxuXG4gICgqIFtmb2xkX2tleV0gd2lsbCBmb2xkIG92ZXIgYWxsIGtleXMgcmV0dXJuZWQgYnkgdGhlIGdpdmVuIGN1cnNvci5cbiAgICAgTm90ZSB0aGF0IGl0IGlzIGxlc3MgZWZmaWNpZW50IHRoYW4gW2dldF9hbGxfa2V5c10gdG8gYnVpbGQgYW4gYXJyYXlcbiAgICAgb2YgZXZlcnkga2V5cy4gSXQncyBtb3N0IHByb2JhYmx5IGR1ZSB0byBhIGNhY2hpbmctYmFzZWQgb3B0aW1pemF0aW9uXG4gICAgIG9mIHRoZSBbZ2V0X2FsbF9rZXlzXSByZXN1bHRzIChhdCBsZWFzdCBpbiBGaXJlZm94KS4gKilcbiAgbGV0IGZvbGRfa2V5cyB+aW5pdCB+ZiBjdXJzb3JfcmVxID1cbiAgICBsZXQgcmVzdWx0LCBzZXRfcmVzdWx0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBhY2MgPSByZWYgaW5pdCBpblxuICAgIGxldCBfID1cbiAgICAgIFJlcXVlc3Qub25fc3VjY2VzcyBjdXJzb3JfcmVxIH5mOihmdW4gX2V2IHIgLT5cbiAgICAgICAgICBtYXRjaCBSZXF1ZXN0LnJlc3VsdCByIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gc2V0X3Jlc3VsdCAoT2sgIWFjYylcbiAgICAgICAgICB8IFNvbWUgY3Vyc29yIC0+XG4gICAgICAgICAgICAgICgqIFRoZSBjdXJzb3Igc2hvdWxkIG5vdCBiZSBvdXQgb2YgcmFuZ2UgYXQgdGhhdCBwb2ludCBzbyB0aGUga2V5c1xuICAgICAgICAgICAgICAgICBzaG91bGQgaGF2ZSBhIHZhbHVlLiAqKVxuICAgICAgICAgICAgICBsZXQga2V5ID0gQ3Vyc29yLmtleSBjdXJzb3IgfD4gT3B0aW9uLmdldCBpblxuICAgICAgICAgICAgICBsZXQgcHJpbWFyeV9rZXkgPSBDdXJzb3IucHJpbWFyeV9rZXkgY3Vyc29yIHw+IE9wdGlvbi5nZXQgaW5cbiAgICAgICAgICAgICAgYWNjIDo9IGYgIWFjYyBrZXkgcHJpbWFyeV9rZXk7XG4gICAgICAgICAgICAgIEN1cnNvci5jb250aW51ZSBjdXJzb3IpXG4gICAgICB8PiBSZXF1ZXN0Lm9uX2Vycm9yIH5mOihmdW4gX2V2IHJlcSAtPlxuICAgICAgICAgICAgIHNldF9yZXN1bHQgKEVycm9yIChSZXF1ZXN0LmVycm9yIHJlcSkpKVxuICAgIGluXG4gICAgcmVzdWx0XG5lbmRcblxubW9kdWxlIHR5cGUgU3RvcmUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIG9mX2p2IDogSnYudCAtPiB0XG5cbiAgbW9kdWxlIENvbnRlbnQgOiBTdG9yZV9jb250ZW50X2ludGZcbmVuZFxuXG5tb2R1bGUgdHlwZSBJbmRleCA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgb2ZfanYgOiBKdi50IC0+IHRcbiAgdmFsIG5hbWUgOiBzdHJpbmdcblxuICBtb2R1bGUgS2V5IDogS2V5XG5lbmRcblxubW9kdWxlIE1ha2VfaW5kZXhcbiAgICAoUCA6IHNpZ1xuICAgICAgdmFsIG5hbWUgOiBzdHJpbmdcbiAgICBlbmQpXG4gICAgKEMgOiBTdG9yZV9jb250ZW50X2ludGYpXG4gICAgKEsgOiBLZXkpID1cbnN0cnVjdFxuICBtb2R1bGUgQ29udGVudCA9IENcbiAgbW9kdWxlIEtleSA9IEtcbiAgaW5jbHVkZSBDb250ZW50X2FjY2VzcyAoQ29udGVudCkgKEspXG4gIGluY2x1ZGUgUFxuZW5kXG5cbm1vZHVsZSBNYWtlX29iamVjdF9zdG9yZSAoQyA6IFN0b3JlX2NvbnRlbnRfaW50ZikgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbnRlbnQgPSBDXG4gIGluY2x1ZGUgQ29udGVudF9hY2Nlc3MgKENvbnRlbnQpIChDb250ZW50LktleSlcblxuICBsZXQgYWRkIHYgPyhrZXkgOiBDb250ZW50LktleS50IG9wdGlvbikgdCA6IENvbnRlbnQuS2V5LnQgUmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCBrZXkgd2l0aFxuICAgICAgfCBTb21lIGtleSAtPiBbfCBDb250ZW50LnRvX2p2IHY7IENvbnRlbnQuS2V5LnRvX2p2IGtleSB8XVxuICAgICAgfCBOb25lIC0+IFt8IENvbnRlbnQudG9fanYgdiB8XVxuICAgIGluXG4gICAgSnYuY2FsbCB0IFwiYWRkXCIgYXJncyB8PiBSZXF1ZXN0Lm9mX2p2IH5mOkNvbnRlbnQuS2V5Lm9mX2p2XG5cbiAgbGV0IGNyZWF0ZV9pbmRleCAodHlwZSB0JykgKG1vZHVsZSBJIDogSW5kZXggd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBsZXQga2V5X3BhdGggPSBLZXlfcGF0aC50b19qdiBJLktleS5wYXRoIGluXG4gICAgSnYuY2FsbCB0IFwiY3JlYXRlSW5kZXhcIiBbfCBKdi5vZl9zdHJpbmcgSS5uYW1lOyBrZXlfcGF0aCB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IGluZGV4ICh0eXBlIHQnKSAobW9kdWxlIEkgOiBJbmRleCB3aXRoIHR5cGUgdCA9IHQnKSB0IDogdCcgPVxuICAgIEp2LmNhbGwgdCBcImluZGV4XCIgW3wgSnYub2Zfc3RyaW5nIEkubmFtZSB8XSB8PiBJLm9mX2p2XG5cbiAgbGV0IHB1dCB2ID8oa2V5IDogQ29udGVudC5LZXkudCBvcHRpb24pIHQgOiBDb250ZW50LktleS50IFJlcXVlc3QudCA9XG4gICAgbGV0IGFyZ3MgPVxuICAgICAgbWF0Y2gga2V5IHdpdGhcbiAgICAgIHwgU29tZSBrZXkgLT4gW3wgQ29udGVudC50b19qdiB2OyBDb250ZW50LktleS50b19qdiBrZXkgfF1cbiAgICAgIHwgTm9uZSAtPiBbfCBDb250ZW50LnRvX2p2IHYgfF1cbiAgICBpblxuICAgIEp2LmNhbGwgdCBcInB1dFwiIGFyZ3MgfD4gUmVxdWVzdC5vZl9qdiB+ZjpDb250ZW50LktleS5vZl9qdlxuZW5kXG5cbm1vZHVsZSBUcmFuc2FjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKdi50XG5cbiAgZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbiAgdHlwZSBtb2RlID0gUmVhZG9ubHkgfCBSZWFkd3JpdGUgfCBSZWFkd3JpdGVmbHVzaFxuXG4gIGxldCBzdHJpbmdfb2ZfbW9kZSA9IGZ1bmN0aW9uXG4gICAgfCBSZWFkb25seSAtPiBcInJlYWRvbmx5XCJcbiAgICB8IFJlYWR3cml0ZSAtPiBcInJlYWR3cml0ZVwiXG4gICAgfCBSZWFkd3JpdGVmbHVzaCAtPiBcInJlYWR3cml0ZWZsdXNoXCJcblxuICBsZXQgbW9kZV9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJyZWFkb25seVwiIC0+IFJlYWRvbmx5XG4gICAgfCBcInJlYWR3cml0ZVwiIC0+IFJlYWR3cml0ZVxuICAgIHwgXCJyZWFkd3JpdGVmbHVzaFwiIC0+IFJlYWR3cml0ZWZsdXNoXG4gICAgfCBzIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbiAgbGV0IG9iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JykgdCA6IHQnID1cbiAgICBKdi5jYWxsIHQgXCJvYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZSB8XSB8PiBTLm9mX2p2XG5lbmRcblxubW9kdWxlIERhdGFiYXNlID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICBsZXQgY3JlYXRlX29iamVjdF9zdG9yZSAodHlwZSB0JykgKG1vZHVsZSBTIDogU3RvcmUgd2l0aCB0eXBlIHQgPSB0JylcbiAgICAgID8oYXV0b19pbmNyZW1lbnQgPSBmYWxzZSkgKGRiIDogdCkgOiB0JyA9XG4gICAgbGV0IG9wdHMgPSBbIChcImF1dG9JbmNyZW1lbnRcIiwgSnYub2ZfYm9vbCBhdXRvX2luY3JlbWVudCkgXSBpblxuICAgICgqIFRPRE86IG1vdmUgYXV0b2luY3JlbWVudCB0byBzdG9yZV9jb250ZW50ICopXG4gICAgbGV0IGtleV9wYXRoID0gS2V5X3BhdGgudG9fanYgUy5Db250ZW50LktleS5wYXRoIGluXG4gICAgbGV0IG9wdHMgPSAoXCJrZXlQYXRoXCIsIGtleV9wYXRoKSA6OiBvcHRzIGluXG4gICAgbGV0IG9wdGlvbnMgPSBKdi5vYmogQEAgQXJyYXkub2ZfbGlzdCBvcHRzIGluXG4gICAgQ29uc29sZS5pbmZvIFsgXCJuZXcgb2JqZWN0IHN0b3JlIHdpdGggb3B0aW9uczpcIjsgb3B0aW9ucyBdO1xuICAgICgqIFRPRE86IGtleXBhdGggc2hvdWxkIGJlIG9wdGlvbm5hbCAqKVxuICAgIEp2LmNhbGwgZGIgXCJjcmVhdGVPYmplY3RTdG9yZVwiIFt8IEp2Lm9mX3N0cmluZyBTLkNvbnRlbnQubmFtZTsgb3B0aW9ucyB8XVxuICAgIHw+IFMub2ZfanZcblxuICBsZXQgZGVsZXRlX29iamVjdF9zdG9yZSB0IG5hbWUgPVxuICAgIEp2LmNhbGwgdCBcImRlbGV0ZU9iamVjdFN0b3JlXCIgW3wgSnYub2Zfc3RyaW5nIG5hbWUgfF0gfD4gaWdub3JlXG5cbiAgbGV0IHRyYW5zYWN0aW9uIHN0b3JlcyA/KG1vZGUgPSBUcmFuc2FjdGlvbi5SZWFkb25seSkgdCA9XG4gICAgbGV0IG1vZGUgPSBUcmFuc2FjdGlvbi5zdHJpbmdfb2ZfbW9kZSBtb2RlIHw+IEp2Lm9mX3N0cmluZyBpblxuICAgIGxldCBqdl9vZl9zdG9yZSAobW9kdWxlIFMgOiBTdG9yZSkgPSBKdi5vZl9zdHJpbmcgUy5Db250ZW50Lm5hbWUgaW5cbiAgICBKdi5jYWxsIHQgXCJ0cmFuc2FjdGlvblwiIFt8IEp2Lm9mX2xpc3QganZfb2Zfc3RvcmUgc3RvcmVzOyBtb2RlIHxdXG4gICAgfD4gVHJhbnNhY3Rpb24ub2ZfanZcblxuICBsZXQgb2JqZWN0X3N0b3JlX25hbWVzIHQgPVxuICAgIEp2LmdldCB0IFwib2JqZWN0U3RvcmVOYW1lc1wiIHw+IEp2LnRvX2FycmF5IEp2LnRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBPcGVuX2RiX3JlcXVlc3QgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0YWJhc2UudCBSZXF1ZXN0LnRcblxuICBsZXQgb25fdXBncmFkZV9uZWVkZWQgfihmIDogRXZlbnRzLlZlcnNpb25fY2hhbmdlLnQgRXYudCAtPiB0IC0+IHVuaXQpICh0IDogdClcbiAgICAgIDogdCA9XG4gICAgbGV0IGYgZXYgPVxuICAgICAgbGV0IHJlcSA6IHQgPVxuICAgICAgICBFdi5jdXJyZW50X3RhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanZcbiAgICAgICAgfD4gUmVxdWVzdC5vZl9qdiB+ZjpEYXRhYmFzZS5vZl9qdlxuICAgICAgaW5cbiAgICAgIGYgZXYgcmVxXG4gICAgaW5cbiAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2ZW50cy51cGdyYWRlX25lZWRlZCBmIChFdi50YXJnZXRfb2ZfanYgdC5qdik7XG4gICAgdFxuXG4gIGV4dGVybmFsIGFzX3JlcXVlc3QgOiB0IC0+IERhdGFiYXNlLnQgUmVxdWVzdC50ID0gXCIlaWRlbnRpdHlcIlxuZW5kXG5cbm1vZHVsZSBGYWN0b3J5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBsZXQgb3Blbicgfm5hbWUgP3ZlcnNpb24gdCA6IE9wZW5fZGJfcmVxdWVzdC50ID1cbiAgICBsZXQgYXJncyA9XG4gICAgICBtYXRjaCB2ZXJzaW9uIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IFt8IG5hbWU7IHN0cmluZ19vZl9pbnQgdiB8XVxuICAgICAgfCBOb25lIC0+IFt8IG5hbWUgfF1cbiAgICBpblxuXG4gICAgSnYuY2FsbCB0IFwib3BlblwiIEBAIEFycmF5Lm1hcCBKdi5vZl9zdHJpbmcgYXJnc1xuICAgIHw+IFJlcXVlc3Qub2ZfanYgfmY6RGF0YWJhc2Uub2ZfanZcbmVuZFxuXG5sZXQgZ2V0X2ZhY3RvcnkgPyhnbG9iYWwgPSBKdi5nbG9iYWwpICgpIDogRmFjdG9yeS50ID0gSnYuZ2V0IGdsb2JhbCBcImluZGV4ZWREQlwiXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBiYWNrcG9ydCBuZXcgZnVuY3Rpb25zIGZyb20gc3RkbGliIGhlcmUgKilcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aHMgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF8gOjogXyAtPiAtMVxuICB8IF8gOjogXywgW10gLT4gMVxuICB8IF8gOjogdGFpbDEsIF8gOjogdGFpbDIgLT4gY29tcGFyZV9sZW5ndGhzIHRhaWwxIHRhaWwyXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhfd2l0aCBsIG4gPVxuICBtYXRjaCBsLCBuIHdpdGhcbiAgfCBfIHdoZW4gbiA8IDAgLT4gMVxuICB8IFtdLCAwIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8gOjogdGFpbCwgXyAtPiBjb21wYXJlX2xlbmd0aF93aXRoIHRhaWwgKG4gLSAxKVxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NvY19vcHQgeCB0YWlsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPT0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc3Ffb3B0IHggdGFpbFxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4oKiBlbmQgb2YgYmFja3BvcnQgKilcblxuaW5jbHVkZSBMaXN0XG5cbmxldCBlbXB0eSA9IFtdXG5cbmxldCBpc19lbXB0eSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gdHJ1ZVxuICB8IF8gOjogXyAtPiBmYWxzZVxuXG5sZXQgbWd1YXJkIGMgPVxuICBpZiBjIHRoZW5cbiAgICBbICgpIF1cbiAgZWxzZVxuICAgIFtdXG5cbigqKiBtYXggZGVwdGggZm9yIGRpcmVjdCByZWN1cnNpb24gKilcbmxldCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gPSAxMDAwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWlsX21hcCBmIGwgPVxuICAoKiBVbndpbmQgdGhlIGxpc3Qgb2YgdHVwbGVzLCByZWNvbnN0cnVjdGluZyB0aGUgZnVsbCBsaXN0IGZyb250LXRvLWJhY2suXG4gICAgIEBwYXJhbSB0YWlsX2FjYyBhIHN1ZmZpeCBvZiB0aGUgZmluYWwgbGlzdDsgd2UgYXBwZW5kIHR1cGxlcycgY29udGVudFxuICAgICBhdCB0aGUgZnJvbnQgb2YgaXQgKilcbiAgbGV0IHJlYyByZWJ1aWxkIHRhaWxfYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHRhaWxfYWNjXG4gICAgfCAoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogYnMgLT5cbiAgICAgIHJlYnVpbGRcbiAgICAgICAgKHkwIDo6IHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHk2IDo6IHk3IDo6IHk4IDo6IHRhaWxfYWNjKVxuICAgICAgICBic1xuICBpblxuICAoKiBDcmVhdGUgYSBjb21wcmVzc2VkIHJldmVyc2UtbGlzdCByZXByZXNlbnRhdGlvbiB1c2luZyB0dXBsZXNcbiAgICAgQHBhcmFtIHR1cGxlX2FjYyBhIHJldmVyc2UgbGlzdCBvZiBjaHVua3MgbWFwcGVkIHdpdGggW2ZdICopXG4gIGxldCByZWMgZGl2ZSB0dXBsZV9hY2MgPSBmdW5jdGlvblxuICAgIHwgeDAgOjogeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogeDYgOjogeDcgOjogeDggOjogeHMgLT5cbiAgICAgIGxldCB5MCA9IGYgeDAgaW5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIGxldCB5NSA9IGYgeDUgaW5cbiAgICAgIGxldCB5NiA9IGYgeDYgaW5cbiAgICAgIGxldCB5NyA9IGYgeDcgaW5cbiAgICAgIGxldCB5OCA9IGYgeDggaW5cbiAgICAgIGRpdmUgKCh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiB0dXBsZV9hY2MpIHhzXG4gICAgfCB4cyAtPlxuICAgICAgKCogUmV2ZXJzZSBkaXJlY3Rpb24sIGZpbmlzaGluZyBvZmYgd2l0aCBhIGRpcmVjdCBtYXAgKilcbiAgICAgIGxldCB0YWlsID0gTGlzdC5tYXAgZiB4cyBpblxuICAgICAgcmVidWlsZCB0YWlsIHR1cGxlX2FjY1xuICBpblxuICBkaXZlIFtdIGxcblxubGV0IG1hcCBmIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyB4IF0gLT4gWyBmIHggXVxuICAgIHwgWyB4MTsgeDIgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgWyB5MTsgZiB4MiBdXG4gICAgfCBbIHgxOyB4MjsgeDMgXSAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgWyB5MTsgeTI7IGYgeDMgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHRhaWxfbWFwIGYgbFxuICAgIHwgeDEgOjogeDIgOjogeDMgOjogeDQgOjogbCcgLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIGxldCB5MyA9IGYgeDMgaW5cbiAgICAgIGxldCB5NCA9IGYgeDQgaW5cbiAgICAgIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IGRpcmVjdCBmIChpIC0gMSkgbCdcbiAgaW5cbiAgZGlyZWN0IGYgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IGFwcGVuZCBsMSBsMiA9XG4gIGxldFtAaW5saW5lXSBzYWZlIGwxIGwyID0gTGlzdC5yZXZfYXBwZW5kIChMaXN0LnJldiBsMSkgbDIgaW5cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gbDJcbiAgICB8IFsgeCBdIC0+IHggOjogbDJcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyXG4gICAgfCB4IDo6IHkgOjogdGwxIC0+IHggOjogeSA6OiBkaXJlY3QgKGkgLSAxKSB0bDEgbDJcbiAgaW5cbiAgZGlyZWN0IDEwMDAgbDEgbDJcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG1hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIHggOjogbWFwIGYgdGxcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICB8IFtdIC0+IGwyXG4gIHwgeCA6OiB0bDEgLT4geCA6OiBhcHBlbmQgdGwxIGwyXG5cbltAQEBlbHNlX11cblxuKCogVFJNQyBmdW5jdGlvbnMgb24gPj0gNS4xLCBubyBuZWVkIHRvIGJyaW5nIG91ciBvd24gKilcblxuW0BAQGVuZGlmXVxuXG4oKiBXcmFwcGVyIGFyb3VuZCBbYXBwZW5kXSB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugb2Ygc2hvcnQgW2wxXSxcbiAgIGFuZCBmb3IgdGhlIGNhc2Ugb2YgW2wyID0gW11dIChzYXZlcyB0aGUgd2hvbGUgY29weSBvZiBbbDFdISkgKilcbmxldFtAaW5saW5lXSBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBfIC0+IGwyXG4gIHwgXywgW10gLT4gbDFcbiAgfCBbIHggXSwgXyAtPiB4IDo6IGwyXG4gIHwgeCA6OiB5IDo6IHRsMSwgXyAtPiB4IDo6IHkgOjogYXBwZW5kIHRsMSBsMlxuXG5sZXQgKCBAICkgPSBhcHBlbmRcbmxldFtAaW5saW5lXSBjb25zJyBsIHggPSB4IDo6IGxcblxubGV0IGNvbnNfbWF5YmUgbyBsID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgU29tZSB4IC0+IHggOjogbFxuICB8IE5vbmUgLT4gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gPSAxMF8wMDBcblxubGV0IGZpbHRlciBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBsIFtdXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IGRpcmVjdCBpIHAgbCdcbiAgICB8IHggOjogbCcgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gIGFuZCBzYWZlIHAgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIHdoZW4gbm90IChwIHgpIC0+IHNhZmUgcCBsJyBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSBwIGwnICh4IDo6IGFjYylcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9maWx0ZXJfIHAgbFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgZmlsdGVyIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCBrZWVwID0gZiB4IGluXG4gICAgaWYga2VlcCB0aGVuXG4gICAgICB4IDo6IGZpbHRlciBmIHRsXG4gICAgZWxzZVxuICAgICAgZmlsdGVyIGYgdGxcblxuW0BAQGVsc2VfXVxuKCogc3RkbGliJ3MgZmlsdGVyIHVzZXMgVFJNQyBhZnRlciA1LjEgKilcblxuW0BAQGVuZGlmXVxuXG5sZXQgZm9sZF9yaWdodCBmIGwgYWNjID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgZiAoTGlzdC5yZXYgbCkgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZGlyZWN0IChpIC0gMSkgZiBsJyBhY2MgaW5cbiAgICAgIGYgeCBhY2NcbiAgYW5kIHNhZmUgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIHggYWNjIGluXG4gICAgICBzYWZlIGYgbCcgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZiBsIGFjY1xuXG5sZXQgcmVjIGZvbGRfd2hpbGUgZiBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGUgOjogbCAtPlxuICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBlIGluXG4gICAgKG1hdGNoIGNvbnQgd2l0aFxuICAgIHwgYFN0b3AgLT4gYWNjXG4gICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZSBmIGFjYyBsKVxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKHkgOjogbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9vbl9tYXAgfmYgfnJlZHVjZSBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IHJlZHVjZSBhY2MgKGYgeCkgaW5cbiAgICAgIGF1eCBhY2MgbCdcbiAgaW5cbiAgYXV4IGFjYyBsXG5cbmxldCBzY2FuX2xlZnQgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGxfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbF9hY2NcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgIGxldCBsX2FjYyA9IGFjYyA6OiBsX2FjYyBpblxuICAgICAgYXV4IGYgYWNjIGxfYWNjIHRhaWxcbiAgaW5cbiAgYXV4IGYgYWNjIFsgYWNjIF0gbFxuXG5sZXQgcmVkdWNlIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT4gU29tZSAoZm9sZF9sZWZ0IGYgeCBsKVxuXG5sZXQgcmVkdWNlX2V4biBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yZWR1Y2VfZXhuXCIpXG4gIHwgeCA6OiBsIC0+IGZvbGRfbGVmdCBmIHggbFxuXG5sZXQgZm9sZF9tYXAyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkX21hcDJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4MSB4MiBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGwxIGwyXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKGNvbnNfbWF5YmUgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChMaXN0LnJldl9hcHBlbmQgeSBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbigqIGtlZXAgdGhpcyBiZWNhdXNlIGl0J3MgdGFpbHJlYyBmb3IgPCA1LjEgKilcbmxldCBpbml0IGxlbiBmID1cbiAgbGV0IHJlYyBpbmRpcmVjdF8gaSBhY2MgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgaW5kaXJlY3RfIChpICsgMSkgKHggOjogYWNjKVxuICAgIClcbiAgaW5cbiAgbGV0IHJlYyBkaXJlY3RfIGkgPVxuICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIGlmIGkgPCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gdGhlbiAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBkaXJlY3RfIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGluZGlyZWN0XyBpIFtdXG4gIGluXG4gIGlmIGxlbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwiaW5pdFwiXG4gIGVsc2UgaWYgbGVuID0gMCB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIGRpcmVjdF8gMFxuXG5sZXQgcmVjIHVuZm9sZF9rb250IGYgc2VlZCBrID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IGsgW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPlxuICAgIGxldCBrJyB0bCA9IGsgKHYgOjogdGwpIGluXG4gICAgdW5mb2xkX2tvbnQgZiBuZXh0IGsnXG5cbmxldFtAaW5saW5lXSB1bmZvbGQgZiBzZWVkID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBmIHNlZWQgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHVuZm9sZF9rb250IGYgc2VlZCAoZnVuIHggLT4geClcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGYgc2VlZCB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiBkaXJlY3QgKGkgLSAxKSBmIG5leHRcbiAgICApXG4gIGluXG4gIGRpcmVjdCAxMDAgZiBzZWVkXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXQgaW5pdCBuIGYgPVxuICBsZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBpbml0XyBpIG4gZiA9XG4gICAgaWYgaSA9IG4gdGhlblxuICAgICAgW11cbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGluaXRfIChpICsgMSkgbiBmXG4gICAgKVxuICBpblxuICBpbml0XyAwIG4gZlxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgY29tcGFyZSBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IF8sIFtdIC0+IDFcbiAgfCBbXSwgXyAtPiAtMVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgbGV0IGMgPSBmIHgxIHgyIGluXG4gICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgIGNcbiAgICBlbHNlXG4gICAgICBjb21wYXJlIGYgbDEnIGwyJ1xuXG5sZXQgcmVjIGVxdWFsIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF8gfCBfLCBbXSAtPiBmYWxzZVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IGYgeDEgeDIgJiYgZXF1YWwgZiBsMScgbDInXG5cbltAQEBpZmx0IDUuMV1cblxubGV0IHJlYyBmbGF0X21hcF9rb250IGYgbCBrb250ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4ga29udCBbXVxuICB8IFsgeCBdIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBrb250IHhcbiAgfCB4IDo6IGwnIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICBsZXQga29udCcgdGFpbCA9IGtvbnQgKGFwcGVuZCB4IHRhaWwpIGluXG4gICAgZmxhdF9tYXBfa29udCBmIGwnIGtvbnQnXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IFsgeCBdIC0+IGYgeFxuICB8IF8gOjogXyAtPiBmbGF0X21hcF9rb250IGYgbCBGdW4uaWRcblxuW0BAQGVsc2VfXVxuXG5sZXQgZmxhdF9tYXAgPSBjb25jYXRfbWFwXG5cbltAQEBlbmRpZl1cblxubGV0IGZsYXRfbWFwX2kgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwga29udCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBrb250IFtdXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgeSA9IGYgaSB4IGluXG4gICAgICBsZXQga29udCcgdGFpbCA9XG4gICAgICAgIG1hdGNoIHkgd2l0aFxuICAgICAgICB8IFtdIC0+IGtvbnQgdGFpbFxuICAgICAgICB8IFsgeCBdIC0+IGtvbnQgKHggOjogdGFpbClcbiAgICAgICAgfCBbIHg7IHkgXSAtPiBrb250ICh4IDo6IHkgOjogdGFpbClcbiAgICAgICAgfCBsIC0+IGtvbnQgKGFwcGVuZCBsIHRhaWwpXG4gICAgICBpblxuICAgICAgYXV4IGYgKGkgKyAxKSBsJyBrb250J1xuICBpblxuICBhdXggZiAwIGwgKGZ1biBsIC0+IGwpXG5cbmxldCBmbGF0dGVuIGwgPSBmb2xkX3JpZ2h0IGFwcGVuZCBsIFtdXG5cbmxldCBjb3VudCBmIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIG4geCAtPlxuICAgICAgaWYgZiB4IHRoZW5cbiAgICAgICAgc3VjYyBuXG4gICAgICBlbHNlXG4gICAgICAgIG4pXG4gICAgMCBsXG5cbmxldCBjb3VudF90cnVlX2ZhbHNlIHAgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gKG9rLCBrbykgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgb2sgKyAxLCBrb1xuICAgICAgZWxzZVxuICAgICAgICBvaywga28gKyAxKVxuICAgICgwLCAwKSBsXG5cbmxldFtAaW5saW5lXSBwcm9kdWN0IGYgbDEgbDIgPSBmbGF0X21hcCAoZnVuIHggLT4gbWFwIChmdW4geSAtPiBmIHggeSkgbDIpIGwxXG5cbmxldCBmb2xkX3Byb2R1Y3QgZiBhY2MgbDEgbDIgPVxuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gYWNjIHgxIC0+IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHgyIC0+IGYgYWNjIHgxIHgyKSBhY2MgbDIpXG4gICAgYWNjIGwxXG5cbmxldCBkaWFnb25hbCBsID1cbiAgbGV0IHJlYyBnZW4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeSAtPiAoeCwgeSkgOjogYWNjKSBhY2MgbCcgaW5cbiAgICAgIGdlbiBhY2MgbCdcbiAgaW5cbiAgZ2VuIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXBfZWl0aGVyIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgQ0NFaXRoZXIuTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgQ0NFaXRoZXIuUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX2ZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBgTGVmdCB5IC0+IGl0ZXIgZiAoeSA6OiBsMSkgbDIgdGxcbiAgICAgIHwgYFJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bFxuICAgICAgfCBgRHJvcCAtPiBpdGVyIGYgbDEgbDIgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwID0gcGFydGl0aW9uX2ZpbHRlcl9tYXBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmUgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gc2FmZSBsMScgbDInIEBAICgoeDEsIHgyKSA6OiBhY2MpXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZSBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZSBsMScgbDInXG4gIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcblxuW0BAQGVuZGlmXVxuXG5sZXQgY29tYmluZV9nZW4gbDEgbDIgPVxuICBsZXQgbDEgPSByZWYgbDEgaW5cbiAgbGV0IGwyID0gcmVmIGwyIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsMSwgIWwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTm9uZVxuICAgIHwgeDEgOjogdGFpbDEsIHgyIDo6IHRhaWwyIC0+XG4gICAgICBsMSA6PSB0YWlsMTtcbiAgICAgIGwyIDo9IHRhaWwyO1xuICAgICAgU29tZSAoeDEsIHgyKVxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMiBbXVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogZGlyZWN0IChpIC0gMSkgbDEnIGwyJ1xuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSAoeDEsIHgyKSA6OiBhY2MgaW5cbiAgICAgIHNhZmUgbDEnIGwyJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lX3Nob3J0ZXN0IGwxJyBsMidcblxuW0BAQGVuZGlmXVxuXG5sZXQgc3BsaXQgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IFsgKHgxLCB5MSkgXSAtPiBbIHgxIF0sIFsgeTEgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5MikgXSAtPiBbIHgxOyB4MiBdLCBbIHkxOyB5MiBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5MykgXSAtPiBbIHgxOyB4MjsgeDMgXSwgWyB5MTsgeTI7IHkzIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKTsgKHg0LCB5NCkgXSAtPlxuICAgICAgWyB4MTsgeDI7IHgzOyB4NCBdLCBbIHkxOyB5MjsgeTM7IHk0IF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzcGxpdF9zbG93IFtdIFtdIGxcbiAgICB8ICh4MSwgeTEpIDo6ICh4MiwgeTIpIDo6ICh4MywgeTMpIDo6ICh4NCwgeTQpIDo6ICh4NSwgeTUpIDo6IGwnIC0+XG4gICAgICBsZXQgcngsIHJ5ID0gZGlyZWN0IChpIC0gMSkgbCcgaW5cbiAgICAgIHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHJ4LCB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiByeVxuICBhbmQgc3BsaXRfc2xvdyBhY2MxIGFjYzIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MxLCBMaXN0LnJldiBhY2MyXG4gICAgfCAoeDEsIHgyKSA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjMSA9IHgxIDo6IGFjYzEgYW5kIGFjYzIgPSB4MiA6OiBhY2MyIGluXG4gICAgICBzcGxpdF9zbG93IGFjYzEgYWNjMiB0YWlsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgcmV0dXJuIHggPSBbIHggXVxubGV0IHB1cmUgPSByZXR1cm5cbmxldCAoIDwqPiApIGZ1bnMgbCA9IHByb2R1Y3QgKGZ1biBmIHggLT4gZiB4KSBmdW5zIGxcblxubGV0IGNhcnRlc2lhbl9wcm9kdWN0IGwgPVxuICAoKiBbbGVmdF06IGVsZW1lbnRzIHBpY2tlZCBzbyBmYXJcbiAgICAgW3JpZ2h0XTogc2V0cyB0byBwaWNrIGVsZW1lbnRzIGZyb21cbiAgICAgW2FjY106IGFjY3VtdWxhdG9yIGZvciB0aGUgcmVzdWx0LCB0byBwYXNzIHRvIGNvbnRpbnVhdGlvblxuICAgICBba106IGNvbnRpbnVhdGlvbiAqKVxuICBsZXQgcmVjIHByb2RfcmVjIGxlZnQgcmlnaHQgayBhY2MgPVxuICAgIG1hdGNoIHJpZ2h0IHdpdGhcbiAgICB8IFtdIC0+IGsgYWNjIChMaXN0LnJldiBsZWZ0KVxuICAgIHwgbDEgOjogdGFpbCAtPlxuICAgICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiBwcm9kX3JlYyAoeCA6OiBsZWZ0KSB0YWlsIGsgYWNjKSBhY2MgbDFcbiAgaW5cbiAgcHJvZF9yZWMgW10gbCAoZnVuIGFjYyBsJyAtPiBsJyA6OiBhY2MpIFtdXG5cbigqIGNhcnRlc2lhbiBwcm9kdWN0IG9mIGxpc3RzIG9mIGxpc3RzICopXG5sZXQgbWFwX3Byb2R1Y3RfbCBmIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGYgbCBpblxuICBjYXJ0ZXNpYW5fcHJvZHVjdCBsXG5cbmxldCByZWMgc29ydGVkX21lbSB+Y21wIHggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGZhbHNlXG4gIHwgeSA6OiB0YWlsIC0+XG4gICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgIHwgMCAtPiB0cnVlXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gZmFsc2VcbiAgICB8IF8gLT4gKHNvcnRlZF9tZW0gW0B0YWlsY2FsbF0pIH5jbXAgeCB0YWlsKVxuXG5sZXQgc29ydGVkX21lcmdlIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDIgOjogYWNjKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IHgyIDo6IGFjYykgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmYgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIGNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydF91bmlxIH5jbXAgbCA9IExpc3Quc29ydF91bmlxIGNtcCBsXG5cbmxldCBpc19zb3J0ZWQgfmNtcCBsID1cbiAgbGV0IHJlYyBhdXggY21wID0gZnVuY3Rpb25cbiAgICB8IFtdIHwgWyBfIF0gLT4gdHJ1ZVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIC0+IGNtcCB4IHkgPD0gMCAmJiBhdXggY21wIHRhaWxcbiAgaW5cbiAgYXV4IGNtcCBsXG5cbmxldCBzb3J0ZWRfaW5zZXJ0IH5jbXAgPyh1bmlxID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCB1bmlxIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IFsgeCBdXG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBsZXQgbCcgPVxuICAgICAgICAgIGlmIHVuaXEgdGhlblxuICAgICAgICAgICAgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHggOjogbFxuICAgICAgICBpblxuICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCBsJ1xuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgKHggOjogbClcbiAgICAgIHwgXyAtPiBhdXggY21wIHVuaXEgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIHVuaXEgeCBbXSBsXG5cbmxldCBzb3J0ZWRfcmVtb3ZlIH5jbXAgPyhhbGwgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIGFsbCB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsZWZ0XG4gICAgfCB5IDo6IHRhaWwgLT5cbiAgICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICAgIHwgMCAtPlxuICAgICAgICBpZiBhbGwgdGhlblxuICAgICAgICAgIGF1eCBjbXAgYWxsIHggbGVmdCB0YWlsXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBMaXN0LnJldl9hcHBlbmQgbGVmdCB0YWlsXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBsXG4gICAgICB8IF8gLT4gYXV4IGNtcCBhbGwgeCAoeSA6OiBsZWZ0KSB0YWlsKVxuICBpblxuICBhdXggY21wIGFsbCB4IFtdIGxcblxubGV0IHVuaXFfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeCBdIC0+IExpc3QucmV2ICh4IDo6IGFjYylcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSB3aGVuIGVxIHggeSAtPiBmIGFjYyB0YWlsXG4gICAgfCB4IDo6IHRhaWwgLT4gZiAoeCA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgZiBbXSBsXG5cbmxldCBncm91cF9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIH5lcSBhY2MgY3VyIGwgPVxuICAgIG1hdGNoIGN1ciwgbCB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIDo6IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldiBjdXIgOjogYWNjKVxuICAgIHwgW10sIHggOjogdGwgLT4gZiB+ZXEgYWNjIFsgeCBdIHRsXG4gICAgfCB5IDo6IF8sIHggOjogdGwgd2hlbiBlcSB4IHkgLT4gZiB+ZXEgYWNjICh4IDo6IGN1cikgdGxcbiAgICB8IF8sIHggOjogdGwgLT4gZiB+ZXEgKExpc3QucmV2IGN1ciA6OiBhY2MpIFsgeCBdIHRsXG4gIGluXG4gIGYgfmVxIFtdIFtdIGxcblxubGV0IHNvcnRlZF9tZXJnZV91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDIpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICgqIGRyb3Agb25lIG9mIHRoZSBbeF0gKilcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZl91bmlxIH5jbXAgbDEgbDIgPVxuICBsZXQgcHVzaCB+Y21wIGFjYyB4ID1cbiAgICBtYXRjaCBhY2Mgd2l0aFxuICAgIHwgW10gLT4gWyB4IF1cbiAgICB8IHkgOjogXyB3aGVuIGNtcCB4IHkgPiAwIC0+IHggOjogYWNjXG4gICAgfCBfIC0+IGFjY1xuICAgICgqIGR1cGxpY2F0ZSwgZG8gbm90IHlpZWxkICopXG4gIGluXG4gIGxldCByZWMgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgbCwgW10gLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAocHVzaCB+Y21wKSBhY2MgbCBpblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgxKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIH5jbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSB+Y21wIFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlIG4gbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgbiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBuIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSAobiAtIDEpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIG4gYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBfIHdoZW4gbiA9IDAgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgKG4gLSAxKSAoeCA6OiBhY2MpIGwnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbiBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZSBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBuID4gMCB0aGVuXG4gICAgICB4IDo6IHRha2UgKG4gLSAxKSBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgXyB3aGVuIG4gPSAwIC0+IGxcbiAgfCBfIDo6IGwnIC0+IGRyb3AgKG4gLSAxKSBsJ1xuXG5sZXQgaGRfdGwgPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhaWx3aXRoIFwiaGRfdGxcIlxuICB8IHggOjogbCAtPiB4LCBsXG5cbmxldCB0YWtlX2Ryb3AgbiBsID0gdGFrZSBuIGwsIGRyb3AgbiBsXG5cbmxldCBzdWJsaXN0c19vZl9sZW4gPyhsYXN0ID0gZnVuIF8gLT4gTm9uZSkgP29mZnNldCBuIGwgPVxuICBpZiBuIDwgMSB0aGVuIGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBuIG11c3QgYmUgPiAwXCI7XG4gIGxldCBvZmZzZXQgPVxuICAgIG1hdGNoIG9mZnNldCB3aXRoXG4gICAgfCBOb25lIC0+IG5cbiAgICB8IFNvbWUgbyB3aGVuIG8gPCAxIC0+IGludmFsaWRfYXJnIFwic3VibGlzdHNfb2ZfbGVuOiBvZmZzZXQgbXVzdCBiZSA+IDBcIlxuICAgIHwgU29tZSBvIC0+IG9cbiAgaW5cbiAgKCogYWRkIHN1Yi1saXN0cyBvZiBbbF0gdG8gW2FjY10gKilcbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIGxldCBncm91cCA9IHRha2UgbiBsIGluXG4gICAgaWYgaXNfZW1wdHkgZ3JvdXAgdGhlblxuICAgICAgYWNjXG4gICAgKCogdGhpcyB3YXMgdGhlIGxhc3QgZ3JvdXAsIHdlIGFyZSBkb25lICopXG4gICAgZWxzZSBpZiBMaXN0Lmxlbmd0aCBncm91cCA8IG4gKCogbGFzdCBncm91cCwgd2l0aCBtaXNzaW5nIGVsZW1lbnRzICopIHRoZW4gKFxuICAgICAgbWF0Y2ggbGFzdCBncm91cCB3aXRoXG4gICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICB8IFNvbWUgZ3JvdXAnIC0+IGdyb3VwJyA6OiBhY2NcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGwnID0gZHJvcCBvZmZzZXQgbCBpblxuICAgICAgYXV4IChncm91cCA6OiBhY2MpIGwnICgqIGNvbnRpbnVlICopXG4gICAgKVxuICBpblxuICBMaXN0LnJldiAoYXV4IFtdIGwpXG5cbmxldCBjaHVua3MgbiBsID0gc3VibGlzdHNfb2ZfbGVuIH5sYXN0OihmdW4geCAtPiBTb21lIHgpIG4gbFxuXG5sZXQgaW50ZXJzcGVyc2UgeCBsID1cbiAgbGV0IHJlYyBhdXhfZGlyZWN0IGkgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIF8gXSAtPiBsXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gYXV4X3RhaWxyZWMgW10geCBsXG4gICAgfCB5IDo6IHRhaWwgLT4geSA6OiB4IDo6IGF1eF9kaXJlY3QgKGkgLSAxKSB4IHRhaWxcbiAgYW5kIGF1eF90YWlscmVjIGFjYyB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHkgXSAtPiBMaXN0LnJldiAoeSA6OiBhY2MpXG4gICAgfCB5IDo6IHRhaWwgLT4gYXV4X3RhaWxyZWMgKHggOjogeSA6OiBhY2MpIHggdGFpbFxuICBpblxuICBhdXhfZGlyZWN0IDFfMDAwIHggbFxuXG5sZXQgaW50ZXJsZWF2ZSBsMSBsMiA6IF8gbGlzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKVxuICAgIHwgXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMSBhY2MpXG4gICAgfCB4MSA6OiB0bDEsIHgyIDo6IHRsMiAtPiBhdXggKHgyIDo6IHgxIDo6IGFjYykgdGwxIHRsMlxuICBpblxuICBhdXggW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2Vfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgeCA6OiBkaXJlY3QgKGkgLSAxKSBwIGwnXG4gICAgICBlbHNlXG4gICAgICAgIFtdXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICB4IDo6IHRha2Vfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIFtdXG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBkcm9wX3doaWxlIHAgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIHAgeCB0aGVuXG4gICAgICBkcm9wX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBsXG5cbmxldCB0YWtlX2Ryb3Bfd2hpbGUgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW4gKFxuICAgICAgICBsZXQgbDEsIGwyID0gZGlyZWN0IChpIC0gMSkgcCB0YWlsIGluXG4gICAgICAgIHggOjogbDEsIGwyXG4gICAgICApIGVsc2VcbiAgICAgICAgW10sIGxcbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2MsIFtdXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIHRhaWxcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBsXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbmxldCBsYXN0IG4gbCA9XG4gIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IG4gdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIGRyb3AgKGxlbiAtIG4pIGxcblxubGV0IGhlYWRfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuXG5sZXQgdGFpbF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBfIDo6IHRhaWwgLT4gU29tZSB0YWlsXG5cbmxldCByZWMgbGFzdF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCBbIHggXSAtPiBTb21lIHhcbiAgfCBfIDo6IHRhaWwgLT4gbGFzdF9vcHQgdGFpbFxuXG5sZXQgZmluZF9wcmVkID0gZmluZF9vcHRcblxubGV0IGZpbmRfcHJlZF9leG4gcCBsID1cbiAgbWF0Y2ggZmluZF9wcmVkIHAgbCB3aXRoXG4gIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBTb21lIHggLT4geFxuXG5sZXQgZmluZF9tYXBpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiBpIHggd2l0aFxuICAgICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBOb25lIC0+IGF1eCBmIChpICsgMSkgbCcpXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgZmluZF9tYXAgZiBsID0gZmluZF9tYXBpIChmdW4gXyAtPiBmKSBsXG5cbmxldCBmaW5kX2lkeCBwIGwgPVxuICBmaW5kX21hcGlcbiAgICAoZnVuIGkgeCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSAoaSwgeClcbiAgICAgIGVsc2VcbiAgICAgICAgTm9uZSlcbiAgICBsXG5cbmxldCByZW1vdmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlJyBlcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeSA6OiB0YWlsIHdoZW4gZXEgeCB5IC0+IHJlbW92ZScgZXEgeCBhY2MgdGFpbFxuICAgIHwgeSA6OiB0YWlsIC0+IHJlbW92ZScgZXEgeCAoeSA6OiBhY2MpIHRhaWxcbiAgaW5cbiAgcmVtb3ZlJyBlcSB4IFtdIGxcblxubGV0IGZpbHRlcl9tYXAgZiBsID1cbiAgbGV0IHJlYyByZWN1cnNlIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYycgPVxuICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICB8IE5vbmUgLT4gYWNjXG4gICAgICAgIHwgU29tZSB5IC0+IHkgOjogYWNjXG4gICAgICBpblxuICAgICAgcmVjdXJzZSBhY2MnIGwnXG4gIGluXG4gIHJlY3Vyc2UgW10gbFxuXG5sZXQga2VlcF9zb21lIGwgPSBmaWx0ZXJfbWFwIChmdW4geCAtPiB4KSBsXG5cbmxldCBrZWVwX29rIGwgPVxuICBmaWx0ZXJfbWFwXG4gICAgKGZ1bmN0aW9uXG4gICAgICB8IE9rIHggLT4gU29tZSB4XG4gICAgICB8IEVycm9yIF8gLT4gTm9uZSlcbiAgICBsXG5cbmxldCBhbGxfc29tZSBsID1cbiAgdHJ5XG4gICAgU29tZVxuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgU29tZSB4IC0+IHhcbiAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgYWxsX29rIGwgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgT2tcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IE9rIHggLT4geFxuICAgICAgICAgICB8IEVycm9yIGUgLT5cbiAgICAgICAgICAgICBlcnIgOj0gU29tZSBlO1xuICAgICAgICAgICAgIHJhaXNlIEV4aXQpXG4gICAgICAgICBsKVxuICB3aXRoIEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBlIC0+IEVycm9yIGUpXG5cbmxldCBncm91cF9ieSAodHlwZSBrKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpID8oZXEgPSBTdGRsaWIuKCA9ICkpIGwgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0ga1xuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICAoKiBjb21wdXRlIGdyb3VwIHRhYmxlICopXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGwgPSB0cnkgVGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICAgIFRibC5yZXBsYWNlIHRibCB4ICh4IDo6IGwpKVxuICAgIGw7XG4gIFRibC5mb2xkIChmdW4gXyB4IGFjYyAtPiB4IDo6IGFjYykgdGJsIFtdXG5cbmxldCBqb2luIH5qb2luX3JvdyBzMSBzMiA6IF8gdCA9XG4gIGZsYXRfbWFwIChmdW4gYSAtPiBmaWx0ZXJfbWFwIChqb2luX3JvdyBhKSBzMikgczFcblxubGV0IGpvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMiB+bWVyZ2UgYzFcbiAgICBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIFRibC5hZGQgdGJsIGtleSB4KVxuICAgIGMxO1xuICBsZXQgcmVzID0gcmVmIFtdIGluXG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIGxldCB4cyA9IFRibC5maW5kX2FsbCB0Ymwga2V5IGluXG4gICAgICBMaXN0Lml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggbWVyZ2Uga2V5IHggeSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHogLT4gcmVzIDo9IHogOjogIXJlcylcbiAgICAgICAgeHMpXG4gICAgYzI7XG4gICFyZXNcblxudHlwZSAoJ2EsICdiKSBqb2luX2FsbF9jZWxsID0ge1xuICBtdXRhYmxlIGphX2xlZnQ6ICdhIGxpc3Q7XG4gIG11dGFibGUgamFfcmlnaHQ6ICdiIGxpc3Q7XG59XG5cbmxldCBqb2luX2FsbF9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyXG4gICAgfm1lcmdlIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgKCogYnVpbGQgdGhlIG1hcCBba2V5IC0+IGNlbGxdICopXG4gIExpc3QuaXRlclxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IGtleSA9IGYxIHggaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9sZWZ0IDwtIHggOjogYy5qYV9sZWZ0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gWyB4IF07IGphX3JpZ2h0ID0gW10gfSlcbiAgICBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX3JpZ2h0IDwtIHkgOjogYy5qYV9yaWdodFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFtdOyBqYV9yaWdodCA9IFsgeSBdIH0pXG4gICAgYzI7XG4gIFRibC5mb2xkXG4gICAgKGZ1biBrZXkgY2VsbCByZXMgLT5cbiAgICAgIG1hdGNoIG1lcmdlIGtleSBjZWxsLmphX2xlZnQgY2VsbC5qYV9yaWdodCB3aXRoXG4gICAgICB8IE5vbmUgLT4gcmVzXG4gICAgICB8IFNvbWUgeiAtPiB6IDo6IHJlcylcbiAgICB0YmwgW11cblxubGV0IGdyb3VwX2pvaW5fYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmIGMxIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyIChmdW4geCAtPiBUYmwucmVwbGFjZSB0YmwgeCBbXSkgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgKCogcHJvamVjdCBbeV0gaW50byBzb21lIGVsZW1lbnQgb2YgW2MxXSAqKVxuICAgICAgbGV0IGtleSA9IGYgeSBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBUYmwucmVwbGFjZSB0Ymwga2V5ICh5IDo6IGwpXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKSlcbiAgICBjMjtcbiAgVGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbmxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgbGV0IHJlYyBzZWFyY2ggZXEgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGZhbHNlXG4gICAgfCB5IDo6IGwnIC0+IGVxIHggeSB8fCBzZWFyY2ggZXEgeCBsJ1xuICBpblxuICBzZWFyY2ggZXEgeCBsXG5cbmxldCBhZGRfbm9kdXAgfmVxIHggbCA9XG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICB4IDo6IGxcblxubGV0IHJlbW92ZV9vbmUgfmVxIHggbCA9XG4gIGxldCByZWMgcmVtb3ZlX29uZSB+ZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IHkgOjogdGwgd2hlbiBlcSB4IHkgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyB0bFxuICAgIHwgeSA6OiB0bCAtPiByZW1vdmVfb25lIH5lcSB4ICh5IDo6IGFjYykgdGxcbiAgaW5cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIHJlbW92ZV9vbmUgfmVxIHggW10gbFxuICBlbHNlXG4gICAgbFxuXG5sZXQgc3Vic2V0IH5lcSBsMSBsMiA9IExpc3QuZm9yX2FsbCAoZnVuIHQgLT4gbWVtIH5lcSB0IGwyKSBsMVxuXG5sZXQgdW5pcSB+ZXEgbCA9XG4gIGxldCByZWMgdW5pcSBlcSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBMaXN0LmV4aXN0cyAoZXEgeCkgeHMgLT4gdW5pcSBlcSBhY2MgeHNcbiAgICB8IHggOjogeHMgLT4gdW5pcSBlcSAoeCA6OiBhY2MpIHhzXG4gIGluXG4gIHVuaXEgZXEgW10gbFxuXG5sZXQgdW5pb24gfmVxIGwxIGwyID1cbiAgbGV0IHJlYyB1bmlvbiBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDJcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gdW5pb24gZXEgYWNjIHhzIGwyXG4gICAgfCB4IDo6IHhzIC0+IHVuaW9uIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgaW5cbiAgdW5pb24gZXEgW10gbDEgbDJcblxubGV0IGludGVyIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgaW50ZXIgZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogeHMgd2hlbiBtZW0gfmVxIHggbDIgLT4gaW50ZXIgZXEgKHggOjogYWNjKSB4cyBsMlxuICAgIHwgXyA6OiB4cyAtPiBpbnRlciBlcSBhY2MgeHMgbDJcbiAgaW5cbiAgaW50ZXIgZXEgW10gbDEgbDJcblxubGV0IG1hcGkgZiBsID1cbiAgbGV0IHIgPSByZWYgMCBpblxuICBtYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCB5ID0gZiAhciB4IGluXG4gICAgICBpbmNyIHI7XG4gICAgICB5KVxuICAgIGxcblxubGV0IGl0ZXJpIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+ICgpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBmIGkgeDtcbiAgICAgIGF1eCBmIChpICsgMSkgbCdcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBpdGVyaTIgZiBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiAoKVxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcIml0ZXJpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgZiBpIHgxIHgyO1xuICAgICAgYXV4IGYgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIDAgbDEgbDJcblxubGV0IGZvbGRpIGYgYWNjIGwgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHggaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbCdcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsXG5cbmxldCBmb2xkaTIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGZvbGRpIGYgYWNjIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZGkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4MSB4MiBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsMScgbDInXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbDEgbDJcblxubGV0IHJlYyBnZXRfYXRfaWR4X3JlYyBpIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IF8gd2hlbiBpID0gMCAtPiB4XG4gIHwgXyA6OiBsJyAtPiBnZXRfYXRfaWR4X3JlYyAoaSAtIDEpIGwnXG5cbmxldCBnZXRfYXRfaWR4X2V4biBpIGwgPVxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBnZXRfYXRfaWR4X3JlYyBpIGxcblxubGV0IGdldF9hdF9pZHggaSBsID0gdHJ5IFNvbWUgKGdldF9hdF9pZHhfZXhuIGkgbCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG5sZXQgc2V0X2F0X2lkeCBpIHggbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IGluc2VydF9hdF9pZHggaSB4IGwgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBbIHggXVxuICAgIHwgeSA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogeSA6OiBsJylcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKSB4XG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsIFtdIGkgeFxuXG5sZXQgcmVtb3ZlX2F0X2lkeCBpIGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbCdcbiAgICB8IHkgOjogbCcgLT4gYXV4IGwnICh5IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwwICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwwIFtdIGlcblxubGV0IHJhbmdlX2J5IH5zdGVwIGkgaiA9XG4gIGxldCByZWMgcmFuZ2UgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICByYW5nZSBpIChqIC0gc3RlcCkgKGogOjogYWNjKVxuICBpblxuICBpZiBzdGVwID0gMCB0aGVuXG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIFtdXG5cbmxldCByYW5nZSBpIGogPVxuICBsZXQgcmVjIHVwIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgdXAgaSAoaiAtIDEpIChqIDo6IGFjYylcbiAgYW5kIGRvd24gaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICBkb3duIGkgKGogKyAxKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgdXAgaSBqIFtdXG4gIGVsc2VcbiAgICBkb3duIGkgaiBbXVxuXG5sZXQgcmFuZ2UnIGkgaiA9XG4gIGlmIGkgPCBqIHRoZW5cbiAgICByYW5nZSBpIChqIC0gMSlcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKGogKyAxKVxuXG5sZXQgKCAtLSApID0gcmFuZ2VcbmxldCAoIC0tXiApID0gcmFuZ2UnXG5cbmxldCByZXBsaWNhdGUgaSB4ID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoeCA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubGV0IHJlcGVhdCBpIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChMaXN0LnJldl9hcHBlbmQgbCBhY2MpIChpIC0gMSlcbiAgaW5cbiAgYXV4IFtdIGlcblxubW9kdWxlIEFzc29jID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdCA9ICgnYSAqICdiKSBsaXN0XG5cbiAgbGV0IHJlYyBzZWFyY2hfZXhuIGVxIGwgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8ICh5LCB6KSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB5IHRoZW5cbiAgICAgICAgelxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfZXhuIGVxIGwnIHhcblxuICBsZXQgZ2V0X2V4biB+ZXEgeCBsID0gc2VhcmNoX2V4biBlcSBsIHhcbiAgbGV0IGdldCB+ZXEgeCBsID0gdHJ5IFNvbWUgKHNlYXJjaF9leG4gZXEgbCB4KSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgKCogc2VhcmNoIGZvciBhIGJpbmRpbmcgZm9yIFt4XSBpbiBbbF0sIGFuZCBjYWxscyBbZiB4IChTb21lIHYpIHJlc3RdXG4gICAgIG9yIFtmIHggTm9uZSByZXN0XSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBmaW5kcyB0aGUgYmluZGluZy5cbiAgICAgW3Jlc3RdIGlzIHRoZSBsaXN0IG9mIHRoZSBvdGhlciBiaW5kaW5ncyAqKVxuICBsZXQgcmVjIHNlYXJjaF9zZXQgZXEgYWNjIGwgeCB+ZiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmIHggTm9uZSBhY2NcbiAgICB8ICh4JywgeScpIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHgnIHRoZW5cbiAgICAgICAgZiB4IChTb21lIHknKSAoTGlzdC5yZXZfYXBwZW5kIGFjYyBsJylcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX3NldCBlcSAoKHgnLCB5JykgOjogYWNjKSBsJyB4IH5mXG5cbiAgbGV0IHNldCB+ZXEgeCB5IGwgPSBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggXyBsIC0+ICh4LCB5KSA6OiBsKVxuXG4gIGxldCBtZW0gPyhlcSA9IFN0ZGxpYi4oID0gKSkgeCBsID1cbiAgICB0cnlcbiAgICAgIGlnbm9yZSAoc2VhcmNoX2V4biBlcSBsIHgpO1xuICAgICAgdHJ1ZVxuICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbiAgbGV0IHVwZGF0ZSB+ZXEgZiB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIGYgb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmVzdCAoKiBkcm9wICopXG4gICAgICAgIHwgU29tZSB5JyAtPiAoeCwgeScpIDo6IHJlc3QpXG5cbiAgbGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIF8gb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBsICgqIGtlZXAgYXMgaXMgKilcbiAgICAgICAgfCBTb21lIF8gLT4gcmVzdClcblxuICBsZXQga2V5cyBsID0gbWFwIChmdW4gKGssIF8pIC0+IGspIGxcbiAgbGV0IHZhbHVlcyBsID0gbWFwIChmdW4gKF8sIHYpIC0+IHYpIGxcbiAgbGV0IG1hcF92YWx1ZXMgZiBsID0gbWFwIChmdW4gKGssIHYpIC0+IGssIGYgdikgbFxuZW5kXG5cbmxldCBhc3NvYyA9IEFzc29jLmdldF9leG5cbmxldCBhc3NvY19vcHQgPSBBc3NvYy5nZXRcbmxldCBtZW1fYXNzb2MgPSBBc3NvYy5tZW1cbmxldCByZW1vdmVfYXNzb2MgPSBBc3NvYy5yZW1vdmVcblxuKCoqIHsyIFJlZmVyZW5jZXMgb24gTGlzdHN9ICopXG5cbm1vZHVsZSBSZWYgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2EgbGlzdCByZWZcblxuICBsZXQgcHVzaCBsIHggPSBsIDo9IHggOjogIWxcblxuICBsZXQgcG9wIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgU29tZSB4XG5cbiAgbGV0IHBvcF9leG4gbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJDQ0xpc3QuUmVmLnBvcF9leG5cIlxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICB4XG5cbiAgbGV0IGNyZWF0ZSAoKSA9IHJlZiBbXVxuICBsZXQgY2xlYXIgbCA9IGwgOj0gW11cbiAgbGV0IGxpZnQgZiBsID0gZiAhbFxuICBsZXQgcHVzaF9saXN0IHIgbCA9IHIgOj0gTGlzdC5yZXZfYXBwZW5kIGwgIXJcbmVuZFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIG9wZW4gTVxuXG4gIGxldCBtYXBfbSBmIGwgPVxuICAgIGxldCByZWMgYXV4IGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJldHVybiAoTGlzdC5yZXYgYWNjKVxuICAgICAgfCB4IDo6IHRhaWwgLT4gZiB4ID4+PSBmdW4geCcgLT4gYXV4IGYgKHgnIDo6IGFjYykgdGFpbFxuICAgIGluXG4gICAgYXV4IGYgW10gbFxuXG4gIGxldCByZWMgbWFwX21fcGFyIGYgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBNLnJldHVybiBbXVxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgbGV0IHgnID0gZiB4IGluXG4gICAgICBsZXQgdGwnID0gbWFwX21fcGFyIGYgdGwgaW5cbiAgICAgIHgnID4+PSBmdW4geCcgLT5cbiAgICAgIHRsJyA+Pj0gZnVuIHRsJyAtPiBNLnJldHVybiAoeCcgOjogdGwnKVxuXG4gIGxldCBzZXF1ZW5jZV9tIGwgPSBtYXBfbSAoZnVuIHggLT4geCkgbFxuXG4gIGxldCByZWMgZm9sZF9tIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmV0dXJuIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBmIGFjYyB4ID4+PSBmdW4gYWNjJyAtPiBmb2xkX20gZiBhY2MnIGwnXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tX2xlbiBsZW4gZyBzdCA9IGluaXQgbGVuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbGVuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fbm9uX2VtcHR5IGcgc3QgPVxuICBsZXQgbGVuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX2Nob29zZSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgXyA6OiBfIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBmdW4gc3QgLT5cbiAgICAgIGxldCBpID0gUmFuZG9tLlN0YXRlLmludCBzdCBsZW4gaW5cbiAgICAgIExpc3QubnRoIGwgaVxuXG5sZXQgcmFuZG9tX3NlcXVlbmNlIGwgc3QgPSBtYXAgKGZ1biBnIC0+IGcgc3QpIGxcblxubGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIiwgXCIpIGl0ZW1fdG9fc3RyaW5nIGwgPVxuICBsZXQgbCA9IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIGwgaW5cbiAgc3RhcnQgXiBTdHJpbmcuY29uY2F0IHNlcCBsIF4gc3RvcFxuXG5sZXQgdG9faXRlciBsIGsgPSBMaXN0Lml0ZXIgayBsXG5cbmxldCByZWMgdG9fc2VxIGwgKCkgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBTZXEuTmlsXG4gIHwgeCA6OiB0bCAtPiBTZXEuQ29ucyAoeCwgdG9fc2VxIHRsKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgaSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5yZXYgIWxcblxubGV0IG9mX3NlcV9yZXYgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgcyA9XG4gICAgbWF0Y2ggcyAoKSB3aXRoXG4gICAgfCBTZXEuTmlsIC0+IGFjY1xuICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiBsb29wICh4IDo6IGFjYykgdGxcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9zZXEgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgc2VxID1cbiAgICBpZiBpIDw9IDAgdGhlblxuICAgICAgTGlzdC5yZXYgKG9mX3NlcV9yZXYgc2VxKVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IHggOjogZGlyZWN0IChpIC0gMSkgdGxcbiAgICApXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5bQEBAZW5kaWZdXG5cbmxldCB0b19nZW4gbCA9XG4gIGxldCBsID0gcmVmIGwgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbCA6PSBsJztcbiAgICAgIFNvbWUgeFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGcgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIHNhZmUgW10gZ1xuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSB4IC0+IHggOjogZGlyZWN0IChpIC0gMSkgZ1xuICAgIClcbiAgYW5kIHNhZmUgYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgeCAtPiBzYWZlICh4IDo6IGFjYykgZ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGdcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBvZl9nZW4gZyA9XG4gIG1hdGNoIGcgKCkgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4geCA6OiBvZl9nZW4gZ1xuXG5bQEBAZW5kaWZdXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXRbQGlubGluZV0gKCA+fD0gKSBsIGYgPSBtYXAgZiBsXG4gIGxldFtAaW5saW5lXSAoID4+PSApIGwgZiA9IGZsYXRfbWFwIGYgbFxuICBsZXQgKCBAICkgPSAoIEAgKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBsMSBsMiA9IHByb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgbDEgbDJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbiAgbGV0ICggYW5kJiApID0gY29tYmluZV9zaG9ydGVzdFxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX2l0ZW0gZm10IGwgPVxuICBsZXQgcmVjIHByaW50IGZtdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IHggOjogKF8gOjogXyBhcyBsKSAtPlxuICAgICAgcHBfaXRlbSBmbXQgeDtcbiAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICBwcmludCBmbXQgbFxuICAgIHwgWyB4IF0gLT4gcHBfaXRlbSBmbXQgeFxuICAgIHwgW10gLT4gKClcbiAgaW5cbiAgcHBfc3RhcnQgZm10ICgpO1xuICBwcmludCBmbXQgbDtcbiAgcHBfc3RvcCBmbXQgKClcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBPcHRpb25zfSAqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb25cblxubGV0W0BpbmxpbmVdIG1hcCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgbWFwX29yIH5kZWZhdWx0IGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IG1hcF9sYXp5IGRlZmF1bHRfZm4gZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBpc19ub25lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiAwXG4gIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgZXF1YWwgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfLCBOb25lIHwgTm9uZSwgU29tZSBfIC0+IGZhbHNlXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IHJldHVybiB4ID0gU29tZSB4XG5sZXQgc29tZSA9IHJldHVyblxubGV0IG5vbmUgPSBOb25lXG5cbmxldFtAaW5saW5lXSBmbGF0X21hcCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBmbGF0X21hcF9sIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldFtAaW5saW5lXSBiaW5kIG8gZiA9IGZsYXRfbWFwIGYgb1xubGV0ICggPj49ICkgPSBiaW5kXG5sZXQgcHVyZSB4ID0gU29tZSB4XG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYsIHggd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIGYsIFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBvcl8gfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfXG4gIHwgU29tZSBfIC0+IGFcblxubGV0IG9yX2xhenkgfmVsc2VfIGEgPVxuICBtYXRjaCBhIHdpdGhcbiAgfCBOb25lIC0+IGVsc2VfICgpXG4gIHwgU29tZSBfIC0+IGFcblxubGV0ICggPCs+ICkgYSBiID0gb3JfIH5lbHNlXzpiIGFcbmxldCBjaG9pY2UgbCA9IExpc3QuZm9sZF9sZWZ0ICggPCs+ICkgTm9uZSBsXG5cbmxldCBtYXAyIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lIChmIHggeSlcblxubGV0IGZpbHRlciBwID0gZnVuY3Rpb25cbiAgfCBTb21lIHggYXMgbyB3aGVuIHAgeCAtPiBvXG4gIHwgXyAtPiBOb25lXG5cbmxldCBpZl8gcCB4ID1cbiAgaWYgcCB4IHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IHRydWVcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBpdGVyIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBmb2xkIGYgYWNjIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGFjY1xuICB8IFNvbWUgeCAtPiBmIGFjYyB4XG5cbmxldCBnZXRfb3IgfmRlZmF1bHQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCB2YWx1ZSB4IH5kZWZhdWx0ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDT3B0aW9uLmdldF9leG5cIlxuXG5sZXQgZ2V0X2V4bl9vciBtc2cgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBtc2dcblxubGV0IGdldF9sYXp5IGRlZmF1bHRfZm4geCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBzZXF1ZW5jZV9sIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTb21lIChMaXN0LnJldiBhY2MpXG4gICAgfCBTb21lIHggOjogbCcgLT4gYXV4ICh4IDo6IGFjYykgbCdcbiAgICB8IE5vbmUgOjogXyAtPiByYWlzZSBFeGl0XG4gIGluXG4gIHRyeSBhdXggW10gbCB3aXRoIEV4aXQgLT4gTm9uZVxuXG5sZXQgd3JhcCA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggPVxuICB0cnkgU29tZSAoZiB4KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHdyYXAyID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCB5ID1cbiAgdHJ5IFNvbWUgKGYgeCB5KVxuICB3aXRoIGUgLT5cbiAgICBpZiBoYW5kbGVyIGUgdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2VcbiAgICAgIHJhaXNlIGVcblxubGV0IHRvX2xpc3QgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lIHggLT4gWyB4IF1cblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICB8IHggOjogXyAtPiBTb21lIHhcbiAgfCBbXSAtPiBOb25lXG5cbmxldCB0b19yZXN1bHQgZXJyID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIGVyclxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19yZXN1bHRfbGF6eSBlcnJfZm4gPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgKGVycl9mbiAoKSlcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgb2ZfcmVzdWx0ID0gZnVuY3Rpb25cbiAgfCBFcnJvciBfIC0+IE5vbmVcbiAgfCBPayB4IC0+IFNvbWUgeFxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPnw9ICkgeCBmID0gbWFwIGYgeFxuICBsZXQgKCA+Pj0gKSA9ICggPj49IClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIDwrPiApID0gKCA8Kz4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbzEgbzIgPVxuICAgIG1hdGNoIG8xLCBvMiB3aXRoXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPiBTb21lICh4LCB5KVxuICAgIHwgXyAtPiBOb25lXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGlmIFJhbmRvbS5TdGF0ZS5ib29sIHN0IHRoZW5cbiAgICBTb21lIChnIHN0KVxuICBlbHNlXG4gICAgTm9uZVxuXG5leGNlcHRpb24gRXhpdENob2ljZVxuXG5sZXQgY2hvaWNlX2l0ZXIgcyA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzIChmdW5jdGlvblxuICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgIHwgU29tZSBfIGFzIG8gLT5cbiAgICAgICAgIHIgOj0gbztcbiAgICAgICAgIHJhaXNlIEV4aXRDaG9pY2UpXG4gICB3aXRoIEV4aXRDaG9pY2UgLT4gKCkpO1xuICAhclxuXG5sZXQgcmVjIGNob2ljZV9zZXEgcyA9XG4gIG1hdGNoIHMgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gTm9uZVxuICB8IFNlcS5Db25zIChTb21lIHgsIF8pIC0+IFNvbWUgeFxuICB8IFNlcS5Db25zIChOb25lLCB0bCkgLT4gY2hvaWNlX3NlcSB0bFxuXG5sZXQgdG9fZ2VuIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IGZ1biAoKSAtPiBOb25lXG4gIHwgU29tZSBfIC0+XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgIG9cbiAgICAgICkgZWxzZVxuICAgICAgICBOb25lXG5cbmxldCB0b19pdGVyIG8gayA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHggLT4gayB4XG5cbmxldCB0b19zZXEgbyAoKSA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gU2VxLk5pbFxuICB8IFNvbWUgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuXG5sZXQgcHAgcHB4IG91dCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIk5vbmVcIlxuICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJAW1NvbWUgJWFAXVwiIHBweCB4XG5cbmxldCBmbGF0dGVuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gTm9uZVxuXG5sZXQgcmV0dXJuX2lmIGIgeCA9XG4gIGlmIGIgdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFJhbmRvbSBHZW5lcmF0b3JzfSAqKVxuXG5pbmNsdWRlIFJhbmRvbVxuXG50eXBlIHN0YXRlID0gUmFuZG9tLlN0YXRlLnRcbnR5cGUgJ2EgdCA9IHN0YXRlIC0+ICdhXG50eXBlICdhIHJhbmRvbV9nZW4gPSAnYSB0XG5cbmxldCByZXR1cm4geCBfc3QgPSB4XG5sZXQgZmxhdF9tYXAgZiBnIHN0ID0gZiAoZyBzdCkgc3RcbmxldCAoID4+PSApIGcgZiBzdCA9IGZsYXRfbWFwIGYgZyBzdFxubGV0IG1hcCBmIGcgc3QgPSBmIChnIHN0KVxubGV0ICggPnw9ICkgZyBmIHN0ID0gbWFwIGYgZyBzdFxubGV0IGRlbGF5IGYgc3QgPSBmICgpIHN0XG5cbmxldCBfY2hvb3NlX2FycmF5IGEgc3QgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkNDUmFuZG9tLmNob29zZV9hcnJheVwiO1xuICBhLihSYW5kb20uU3RhdGUuaW50IHN0IChBcnJheS5sZW5ndGggYSkpXG5cbmxldCBjaG9vc2VfYXJyYXkgYSBzdCA9XG4gIHRyeSBTb21lIChfY2hvb3NlX2FycmF5IGEgc3Qgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGNob29zZSBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgY2hvb3NlX2FycmF5IGFcblxubGV0IGNob29zZV9leG4gbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGZ1biBzdCAtPiBfY2hvb3NlX2FycmF5IGEgc3Qgc3RcblxubGV0IGNob29zZV9yZXR1cm4gbCA9IF9jaG9vc2VfYXJyYXkgKEFycmF5Lm9mX2xpc3QgbClcblxuZXhjZXB0aW9uIFBpY2tfZnJvbV9lbXB0eVxuXG5sZXQgcGlja19saXN0IGwgPVxuICBsZXQgbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBMaXN0Lm50aCBsIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBwaWNrX2FycmF5IGEgPVxuICBsZXQgbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gQXJyYXkuZ2V0IGEgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IGludCBpIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBpXG5sZXQgc21hbGxfaW50ID0gaW50IDEwMFxubGV0IGludF9yYW5nZSBpIGogc3QgPSBpICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaiAtIGkgKyAxKVxubGV0IGZsb2F0IGYgc3QgPSBSYW5kb20uU3RhdGUuZmxvYXQgc3QgZlxubGV0IHNtYWxsX2Zsb2F0ID0gZmxvYXQgMTAwLjBcbmxldCBmbG9hdF9yYW5nZSBpIGogc3QgPSBpICsuIFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCAoaiAtLiBpKVxuXG4oKiBUT0RPOiBzYW1wbGUgZnVuY3Rpb25zICopXG5cbmxldCByZXBsaWNhdGUgbiBnIHN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIG4gPVxuICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZyBzdCA6OiBhY2MpIChuIC0gMSlcbiAgaW5cbiAgYXV4IFtdIG5cblxuKCogU2FtcGxlIHdpdGhvdXQgcmVwbGFjZW1lbnQgdXNpbmcgcmVqZWN0aW9uIHNhbXBsaW5nLiAqKVxubGV0IHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgKHR5cGUgZWx0KSB+Y21wIGsgKHJuZyA6IGVsdCB0KSBzdCA9XG4gIGxldCBtb2R1bGUgUyA9IFNldC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBlbHRcblxuICAgIGxldCBjb21wYXJlID0gY21wXG4gIGVuZCkgaW5cbiAgbGV0IHJlYyBhdXggcyBrID1cbiAgICBpZiBrIDw9IDAgdGhlblxuICAgICAgUy5lbGVtZW50cyBzXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IHJuZyBzdCBpblxuICAgICAgaWYgUy5tZW0geCBzIHRoZW5cbiAgICAgICAgYXV4IHMga1xuICAgICAgZWxzZVxuICAgICAgICBhdXggKFMuYWRkIHggcykgKGsgLSAxKVxuICAgIClcbiAgaW5cbiAgaWYgayA8PSAwIHRoZW4gaW52YWxpZF9hcmcgXCJzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzXCI7XG4gIGF1eCBTLmVtcHR5IGtcblxubGV0IGxpc3Rfc2VxIGwgc3QgPSBMaXN0Lm1hcCAoZnVuIGYgLT4gZiBzdCkgbFxuXG5sZXQgc3BsaXQgaSBzdCA9XG4gIGlmIGkgPCAyIHRoZW5cbiAgICBOb25lXG4gIGVsc2UgKFxuICAgIGxldCBqID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGkgLSAxKSBpblxuICAgIFNvbWUgKGosIGkgLSBqKVxuICApXG5cbmxldCBfZGlmZl9saXN0IH5sYXN0IGwgPVxuICBsZXQgcmVjIGRpZmZfbGlzdCBhY2MgPSBmdW5jdGlvblxuICAgIHwgWyBhIF0gLT4gU29tZSAoKGxhc3QgLSBhKSA6OiBhY2MpXG4gICAgfCBhIDo6IChiIDo6IF8gYXMgcikgLT4gZGlmZl9saXN0ICgoYiAtIGEpIDo6IGFjYykgclxuICAgIHwgW10gLT4gTm9uZVxuICBpblxuICBkaWZmX2xpc3QgW10gbFxuXG4oKiBQYXJ0aXRpb24gb2YgYW4gaW50IGludG8gW2xlbl0gaW50ZWdlcnMgdW5pZm9ybWx5LlxuICAgV2UgZmlyc3Qgc2FtcGxlIChsZW4tMSkgcG9pbnRzIGZyb20gdGhlIHNldCB7MSwuLmktMX0gd2l0aG91dCByZXBsYWNlbWVudC5cbiAgIFdlIHNvcnQgdGhlc2UgcG9pbnRzIGFuZCBhZGQgYmFjayAwIGFuZCBpLCB3ZSBoYXZlIHRodXNcbiAgIHhfMCA9IDAgPCB4XzEgPCB4XzIgPCDigKYgPCB4X3tsZW4tMX0gPCBpID0geF97bGVufS5cbiAgIElmIHdlIGRlZmluZSwgeV9rID0geF97aysxfSAtIHhfe2t9IGZvciBrIGluIDAg4oCmIChsZW4tMSksIHRoZW4gYnkgY29uc3RydWN0aW9uXG4gICDiiJFfayB5X2sgPSDiiJFfayAoeF97aysxfSAtIHhfayApID0geF97bGVufSAtIHhfMCA9IGkuICopXG5sZXQgc3BsaXRfbGlzdCBpIH5sZW4gc3QgPVxuICBpZiBsZW4gPD0gMSB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLnNwbGl0X2xpc3RcIjtcbiAgaWYgaSA+PSBsZW4gdGhlbiAoXG4gICAgbGV0IHhzID1cbiAgICAgIHNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXMgfmNtcDpjb21wYXJlIChsZW4gLSAxKSAoaW50X3JhbmdlIDEgKGkgLSAxKSkgc3RcbiAgICBpblxuICAgIF9kaWZmX2xpc3Qgfmxhc3Q6aSAoMCA6OiB4cylcbiAgKSBlbHNlXG4gICAgTm9uZVxuXG5sZXQgcmV0cnkgPyhtYXggPSAxMCkgZyBzdCA9XG4gIGxldCByZWMgYXV4IG4gPVxuICAgIG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSB3aGVuIG4gPSAwIC0+IE5vbmVcbiAgICB8IE5vbmUgLT4gYXV4IChuIC0gMSkgKCogcmV0cnkgKilcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gIGluXG4gIGF1eCBtYXhcblxubGV0IHJlYyB0cnlfc3VjY2Vzc2l2ZWx5IGwgc3QgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBOb25lXG4gIHwgZyA6OiBsJyAtPlxuICAgIChtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgLT4gdHJ5X3N1Y2Nlc3NpdmVseSBsJyBzdFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXMpXG5cbmxldCAoIDw/PiApIGEgYiA9IHRyeV9zdWNjZXNzaXZlbHkgWyBhOyBiIF1cblxuZXhjZXB0aW9uIEJhY2t0cmFja1xuXG5sZXQgX2Nob29zZV9hcnJheV9jYWxsIGEgZiBzdCA9XG4gIHRyeSBmIChfY2hvb3NlX2FycmF5IGEgc3QpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IHJhaXNlIEJhY2t0cmFja1xuXG5sZXQgZml4ID8oc3ViMSA9IFtdKSA/KHN1YjIgPSBbXSkgPyhzdWJuID0gW10pIH5iYXNlIGZ1ZWwgc3QgPVxuICBsZXQgc3ViMSA9IEFycmF5Lm9mX2xpc3Qgc3ViMVxuICBhbmQgc3ViMiA9IEFycmF5Lm9mX2xpc3Qgc3ViMlxuICBhbmQgc3VibiA9IEFycmF5Lm9mX2xpc3Qgc3VibiBpblxuICAoKiByZWN1cnNpdmUgZnVuY3Rpb24gd2l0aCBmdWVsICopXG4gIGxldCByZWMgbWFrZSBmdWVsIHN0ID1cbiAgICBpZiBmdWVsID0gMCB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIGlmIGZ1ZWwgPSAxIHRoZW5cbiAgICAgIGJhc2Ugc3RcbiAgICBlbHNlXG4gICAgICBfdHJ5X290aGVyd2lzZSAwXG4gICAgICAgIFt8XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjEgKGZ1biBmIC0+IGYgKG1ha2UgKGZ1ZWwgLSAxKSkgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIyIChmdW4gZiAtPlxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdCBmdWVsIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgKGksIGopIC0+IGYgKG1ha2UgaSkgKG1ha2Ugaikgc3QpO1xuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWJuIChmdW4gKGxlbiwgZikgLT5cbiAgICAgICAgICAgICAgbGV0IGxlbiA9IGxlbiBzdCBpblxuICAgICAgICAgICAgICBtYXRjaCBzcGxpdF9saXN0IGZ1ZWwgfmxlbiBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIGwnIC0+IGYgKGZ1biBzdCAtPiBMaXN0Lm1hcCAoZnVuIHggLT4gbWFrZSB4IHN0KSBsJykgc3QpO1xuICAgICAgICAgIGJhc2UgKCogYmFzZSBjYXNlIHRoZW4gKik7XG4gICAgICAgIHxdXG4gIGFuZCBfdHJ5X290aGVyd2lzZSBpIGEgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICByYWlzZSBCYWNrdHJhY2tcbiAgICBlbHNlIChcbiAgICAgIHRyeSBhLihpKSBzdCB3aXRoIEJhY2t0cmFjayAtPiBfdHJ5X290aGVyd2lzZSAoaSArIDEpIGFcbiAgICApXG4gIGluXG4gIG1ha2UgKGZ1ZWwgc3QpIHN0XG5cbmxldCBwdXJlIHggX3N0ID0geFxubGV0ICggPCo+ICkgZiBnIHN0ID0gZiBzdCAoZyBzdClcbmxldCAoIGxldCsgKSA9ICggPnw9IClcbmxldCAoIGxldCogKSA9ICggPj49IClcbmxldFtAaW5saW5lXSAoIGFuZCsgKSBhMSBhMiBzdCA9IGExIHN0LCBhMiBzdFxubGV0ICggYW5kKiApID0gKCBhbmQrIClcbmxldCBfX2RlZmF1bHRfc3RhdGUgPSBSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKClcbmxldCBydW4gPyhzdCA9IF9fZGVmYXVsdF9zdGF0ZSkgZyA9IGcgc3RcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBFcnJvciBNb25hZH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbigqKiB7MiBCYXNpY3N9ICopXG5cbnR5cGUgbm9ucmVjICgrJ2dvb2QsICsnYmFkKSByZXN1bHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9XG4gIHwgT2sgb2YgJ2dvb2RcbiAgfCBFcnJvciBvZiAnYmFkXG5cbnR5cGUgKCsnZ29vZCwgKydiYWQpIHQgPSAoJ2dvb2QsICdiYWQpIHJlc3VsdCA9IE9rIG9mICdnb29kIHwgRXJyb3Igb2YgJ2JhZFxuXG5sZXQgcmV0dXJuIHggPSBPayB4XG5sZXQgZmFpbCBzID0gRXJyb3Igc1xuXG5sZXQgZmFpbF9wcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgUHJpbnRmLmticHJpbnRmIChmdW4gYnVmIC0+IGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKSBidWYgZm9ybWF0XG5cbmxldCBmYWlsX2ZwcmludGYgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGZhaWwgKEJ1ZmZlci5jb250ZW50cyBidWYpKVxuICAgIG91dCBmb3JtYXRcblxubGV0IGFkZF9jdHggbXNnIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBFcnJvciBlIC0+IEVycm9yIChlIF4gXCJcXG5jb250ZXh0OlwiIF4gbXNnKVxuICB8IE9rIHggLT4gT2sgeFxuXG5sZXQgYWRkX2N0eGYgbXNnID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IG91dCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCBlIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgYWRkX2N0eCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgZSlcbiAgICBvdXQgbXNnXG5cbmxldCBvZl9leG4gZSA9XG4gIGxldCBtc2cgPSBQcmludGV4Yy50b19zdHJpbmcgZSBpblxuICBFcnJvciBtc2dcblxubGV0IG9mX2V4bl90cmFjZSBlID1cbiAgbGV0IHJlcyA9XG4gICAgUHJpbnRmLnNwcmludGYgXCIlc1xcbiVzXCIgKFByaW50ZXhjLnRvX3N0cmluZyBlKSAoUHJpbnRleGMuZ2V0X2JhY2t0cmFjZSAoKSlcbiAgaW5cbiAgRXJyb3IgcmVzXG5cbmxldCBvcHRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE5vbmUgLT4gT2sgTm9uZVxuICB8IFNvbWUgeCAtPlxuICAgIChtYXRjaCBmIHggd2l0aFxuICAgIHwgT2sgeCAtPiBPayAoU29tZSB4KVxuICAgIHwgRXJyb3IgZSAtPiBFcnJvciBlKVxuXG5sZXQgbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IG1hcF9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gIHwgRXJyb3IgeSAtPiBFcnJvciAoZiB5KVxuXG5sZXQgbWFwMiBmIGcgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gT2sgKGYgeClcbiAgfCBFcnJvciBzIC0+IEVycm9yIChnIHMpXG5cbmxldCBpdGVyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG5sZXQgaXRlcl9lcnIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgXyAtPiAoKVxuICB8IEVycm9yIGVyciAtPiBmIGVyclxuXG5leGNlcHRpb24gR2V0X2Vycm9yXG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IHJhaXNlIEdldF9lcnJvclxuXG5sZXQgZ2V0X29yIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGdldF9sYXp5IGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIGUgLT4gZiBlXG5cbmxldCBnZXRfb3JfZmFpbHdpdGggPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIG1zZyAtPiBmYWlsd2l0aCBtc2dcblxubGV0IG1hcF9vciBmIGUgfmRlZmF1bHQgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgY2F0Y2ggZSB+b2sgfmVyciA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHkgLT4gZXJyIHlcblxubGV0IGZsYXRfbWFwIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBlcXVhbCB+ZXJyIGVxIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gZXEgeCB5XG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5lcnIgY21wIGEgYiA9XG4gIG1hdGNoIGEsIGIgd2l0aFxuICB8IE9rIHgsIE9rIHkgLT4gY21wIHggeVxuICB8IE9rIF8sIF8gLT4gMVxuICB8IF8sIE9rIF8gLT4gLTFcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuXG5sZXQgZm9sZCB+b2sgfmVycm9yIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciBzIC0+IGVycm9yIHNcblxubGV0IGZvbGRfb2sgZiBhY2MgciA9XG4gIG1hdGNoIHIgd2l0aFxuICB8IE9rIHggLT4gZiBhY2MgeFxuICB8IEVycm9yIF8gLT4gYWNjXG5cbmxldCBpc19vayA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gZmFsc2VcbiAgfCBFcnJvciBfIC0+IHRydWVcblxuKCoqIHsyIFdyYXBwZXJzfSAqKVxuXG5sZXQgZ3VhcmQgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCBndWFyZF9zdHIgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4biBlXG5sZXQgZ3VhcmRfc3RyX3RyYWNlIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG5fdHJhY2UgZVxubGV0IHdyYXAxIGYgeCA9IHRyeSByZXR1cm4gKGYgeCkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMiBmIHggeSA9IHRyeSByZXR1cm4gKGYgeCB5KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAzIGYgeCB5IHogPSB0cnkgcmV0dXJuIChmIHggeSB6KSB3aXRoIGUgLT4gRXJyb3IgZVxuXG4oKiogezIgQXBwbGljYXRpdmV9ICopXG5cbmxldCBwdXJlID0gcmV0dXJuXG5cbmxldCAoIDwqPiApIGYgeCA9XG4gIG1hdGNoIGYgd2l0aFxuICB8IEVycm9yIHMgLT4gZmFpbCBzXG4gIHwgT2sgZiAtPiBtYXAgZiB4XG5cbmxldCBqb2luIHQgPVxuICBtYXRjaCB0IHdpdGhcbiAgfCBPayAoT2sgbykgLT4gT2sgb1xuICB8IE9rIChFcnJvciBlKSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgXyBhcyBlIC0+IGVcblxubGV0IGJvdGggeCB5ID1cbiAgbWF0Y2ggeCwgeSB3aXRoXG4gIHwgT2sgbywgT2sgbycgLT4gT2sgKG8sIG8nKVxuICB8IE9rIF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuXG4oKiogezIgQ29sbGVjdGlvbnN9ICopXG5cbmxldCBtYXBfbCBmIGwgPVxuICBsZXQgcmVjIG1hcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgICAgfCBPayB5IC0+IG1hcCAoeSA6OiBhY2MpIGwnKVxuICBpblxuICBtYXAgW10gbFxuXG5sZXQgZmxhdHRlbl9sIGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IE9rIHggOjogbCcgLT4gbG9vcCAoeCA6OiBhY2MpIGwnXG4gICAgfCBFcnJvciBlIDo6IF8gLT4gRXJyb3IgZVxuICBpblxuICBsb29wIFtdIGxcblxuZXhjZXB0aW9uIExvY2FsRXhpdFxuXG5sZXQgZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIHNlcSAoZnVuIHggLT5cbiAgICAgICAgbWF0Y2ggZiAhYWNjIHggd2l0aFxuICAgICAgICB8IEVycm9yIHMgLT5cbiAgICAgICAgICBlcnIgOj0gU29tZSBzO1xuICAgICAgICAgIHJhaXNlIExvY2FsRXhpdFxuICAgICAgICB8IE9rIHkgLT4gYWNjIDo9IHkpO1xuICAgIE9rICFhY2NcbiAgd2l0aCBMb2NhbEV4aXQgLT5cbiAgICAobWF0Y2ggIWVyciB3aXRoXG4gICAgfCBOb25lIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgU29tZSBzIC0+IEVycm9yIHMpXG5cbmxldCBmb2xkX2wgZiBhY2MgbCA9IGZvbGRfaXRlciBmIGFjYyAoZnVuIGsgLT4gTGlzdC5pdGVyIGsgbClcblxuKCoqIHsyIE1pc2N9ICopXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCByZWMgZmluZF8gPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoT2sgXyBhcyByZXMpIDo6IF8gLT4gcmVzXG4gICAgfCBFcnJvciBfIDo6IGwnIC0+IGZpbmRfIGwnXG4gIGluXG4gIHRyeSBmaW5kXyBsXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGwnID1cbiAgICAgIExpc3QubWFwXG4gICAgICAgIChmdW5jdGlvblxuICAgICAgICAgIHwgRXJyb3IgcyAtPiBzXG4gICAgICAgICAgfCBPayBfIC0+IGFzc2VydCBmYWxzZSlcbiAgICAgICAgbFxuICAgIGluXG4gICAgRXJyb3IgbCdcblxubGV0IHJldHJ5IG4gZiA9XG4gIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgIG1hdGNoIG4gd2l0aFxuICAgIHwgMCAtPiBmYWlsIChMaXN0LnJldiBhY2MpXG4gICAgfCBfIC0+XG4gICAgICAobWF0Y2ggZiAoKSB3aXRoXG4gICAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSlcbiAgaW5cbiAgcmV0cnkgbiBbXVxuXG4oKiogezIgSW5maXh9ICopXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA+fD0gKSBlIGYgPSBtYXAgZiBlXG4gIGxldCAoID4+PSApIGUgZiA9IGZsYXRfbWFwIGYgZVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIHgxIHgyID1cbiAgICBtYXRjaCB4MSwgeDIgd2l0aFxuICAgIHwgT2sgeCwgT2sgeSAtPiBPayAoeCwgeSlcbiAgICB8IEVycm9yIGUsIF8gLT4gRXJyb3IgZVxuICAgIHwgXywgRXJyb3IgZSAtPiBFcnJvciBlXG5cbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5cbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSA9IE0uKCA+Pj0gKVxuXG4gIGxldCBtYXBfbSBmIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgcyAtPiBNLnJldHVybiAoRXJyb3IgcylcbiAgICB8IE9rIHggLT4gZiB4ID4+PSBmdW4geSAtPiBNLnJldHVybiAoT2sgeSlcblxuICBsZXQgc2VxdWVuY2VfbSBtID0gbWFwX20gKGZ1biB4IC0+IHgpIG1cblxuICBsZXQgZm9sZF9tIGYgYWNjIGUgPVxuICAgIG1hdGNoIGUgd2l0aFxuICAgIHwgRXJyb3IgXyAtPiBNLnJldHVybiBhY2NcbiAgICB8IE9rIHggLT4gZiBhY2MgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4geVxuXG4gIGxldCByZXRyeV9tIG4gZiA9XG4gICAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgICBtYXRjaCBuIHdpdGhcbiAgICAgIHwgMCAtPiBNLnJldHVybiAoZmFpbCAoTGlzdC5yZXYgYWNjKSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBmICgpID4+PSAoIGZ1bmN0aW9uXG4gICAgICAgIHwgT2sgeCAtPiBNLnJldHVybiAoT2sgeClcbiAgICAgICAgfCBFcnJvciBlIC0+IHJldHJ5IChuIC0gMSkgKGUgOjogYWNjKSApXG4gICAgaW5cbiAgICByZXRyeSBuIFtdXG5lbmRcblxuKCoqIHsyIENvbnZlcnNpb25zfSAqKVxuXG5sZXQgdG9fb3B0ID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IFNvbWUgeFxuICB8IEVycm9yIF8gLT4gTm9uZVxuXG5sZXQgb2Zfb3B0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIFwib2Zfb3B0XCJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fc2VxIGUgKCkgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG4gIHwgRXJyb3IgXyAtPiBTZXEuTmlsXG5cbmxldCB0b19pdGVyIGUgayA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gayB4XG4gIHwgRXJyb3IgXyAtPiAoKVxuXG50eXBlICgnYSwgJ2IpIGVycm9yID0gWyBgT2sgb2YgJ2EgfCBgRXJyb3Igb2YgJ2IgXVxuXG5sZXQgb2ZfZXJyID0gZnVuY3Rpb25cbiAgfCBgT2sgeCAtPiBPayB4XG4gIHwgYEVycm9yIHkgLT4gRXJyb3IgeVxuXG5sZXQgdG9fZXJyID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IGBPayB4XG4gIHwgRXJyb3IgeSAtPiBgRXJyb3IgeVxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCBwcF94IGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlcylAXVwiIHNcblxubGV0IHBwJyBwcF94IHBwX2UgZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVhKUBdXCIgcHBfZSBzXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgV3JhcHBlciBhcm91bmQgU2V0fSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID0gU2V0Lk9yZGVyZWRUeXBlXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBTZXQuU1xuXG4gIHZhbCBtaW5fZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWluX2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIG1heF9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtYXhfZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgY2hvb3NlX29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshY2hvb3NlfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9vcHQgOiBlbHQgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kfS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWluaW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2ZpcnN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2ZpcnN0X21hcCBmIHNdIGZpbmQgdGhlIG1pbmltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgZmluZF9sYXN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtYXhpbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9sYXN0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfbGFzdF9tYXAgZiBzXSBmaW5kIHRoZSBtYXhpbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIG9mX2l0ZXIgOiBlbHQgaXRlciAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbaXRlcl0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gICgqKiBCdWlsZCBhIHNldCBmcm9tIHRoZSBnaXZlbiBbc2VxXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX2l0ZXIgOiB0IC0+IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgKCoqIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9faXRlciA6IHQgLT4gZWx0IGl0ZXJcbiAgKCoqIFt0b19pdGVyIHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgW2l0ZXJdIG9mIHRoZSBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgYWRkX2xpc3QgOiB0IC0+IGVsdCBsaXN0IC0+IHRcbiAgKCoqIEBzaW5jZSAwLjE0ICopXG5cbiAgdmFsIHRvX2xpc3QgOiB0IC0+IGVsdCBsaXN0XG4gICgqKiBbdG9fbGlzdCB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzLiAqKVxuXG4gIHZhbCB0b19zdHJpbmcgOlxuICAgID9zdGFydDpzdHJpbmcgLT5cbiAgICA/c3RvcDpzdHJpbmcgLT5cbiAgICA/c2VwOnN0cmluZyAtPlxuICAgIChlbHQgLT4gc3RyaW5nKSAtPlxuICAgIHQgLT5cbiAgICBzdHJpbmdcbiAgKCoqICBQcmludCB0aGUgc2V0IGluIGEgc3RyaW5nXG4gICAgICAgQHNpbmNlIDIuNyAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgZWx0IHByaW50ZXIgLT5cbiAgICB0IHByaW50ZXJcbiAgKCoqIFByaW50IHRoZSBzZXQuICopXG5lbmRcblxubW9kdWxlIE1ha2UgKE8gOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKE8pXG5cbiAgKCogYmFja3BvcnQgZnVuY3Rpb25zIGZyb20gcmVjZW50IHN0ZGxpYi5cbiAgICAgdGhleSB3aWxsIGJlIHNoYWRvd2VkIGJ5IGluY2x1c2lvbiBvZiBbU10gaWYgcHJlc2VudC4gKilcblxuICBbQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG4gIGxldCBmaW5kX29wdCB4IHMgPSB0cnkgU29tZSAoUy5maW5kIHggcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgY2hvb3NlX29wdCBzID0gdHJ5IFNvbWUgKFMuY2hvb3NlIHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1pbl9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5taW5fZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IG1heF9lbHRfb3B0IHMgPSB0cnkgU29tZSAoUy5tYXhfZWx0IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBleGNlcHRpb24gRmluZF9iaW5kaW5nX2V4aXRcblxuICBsZXQgZmluZF9maXJzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBpZiBmIHggdGhlbiAoXG4gICAgICAgICAgICByZXMgOj0gU29tZSB4O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXRcbiAgICAgICAgICApKVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gIGxldCBmaW5kX2ZpcnN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9maXJzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIGxldCBmaW5kX2ZpcnN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdClcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICAoKiBsaW5lYXIgdGltZSwgbXVzdCB0cmF2ZXJzZSB0aGUgd2hvbGUgc2V04oCmICopXG4gIGxldCBmaW5kX2xhc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgUy5pdGVyIChmdW4geCAtPiBpZiBmIHggdGhlbiByZXMgOj0gU29tZSB4KSBtO1xuICAgICFyZXNcblxuICBsZXQgZmluZF9sYXN0IGYgbSA9XG4gICAgbWF0Y2ggZmluZF9sYXN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuICBpbmNsdWRlIFNcblxuICAoKiBVc2UgZmluZF9sYXN0IHdoaWNoIGlzIGxpbmVhciB0aW1lIG9uIE9DYW1sIDwgNC4wNSAqKVxuICBsZXQgZmluZF9sYXN0X21hcCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIGxldCBfID1cbiAgICAgIGZpbmRfbGFzdF9vcHRcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gZmFsc2VcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHRydWUpXG4gICAgICAgIG1cbiAgICBpblxuICAgICFyZXNcblxuICBsZXQgYWRkX3NlcSBzZXEgc2V0ID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIFNlcS5pdGVyIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCkgc2VxO1xuICAgICFzZXRcblxuICBsZXQgb2Zfc2VxIHMgPSBhZGRfc2VxIHMgZW1wdHlcblxuICBsZXQgYWRkX2l0ZXIgc2V0IGkgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgaSAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpO1xuICAgICFzZXRcblxuICBsZXQgb2ZfaXRlciBzID0gYWRkX2l0ZXIgZW1wdHkgc1xuICBsZXQgdG9faXRlciBzIHlpZWxkID0gaXRlciB5aWVsZCBzXG4gIGxldCBhZGRfbGlzdCA9IExpc3QuZm9sZF9sZWZ0IChmdW4gc2V0IHggLT4gYWRkIHggc2V0KVxuICBsZXQgdG9fbGlzdCA9IGVsZW1lbnRzXG5cbiAgbGV0IHRvX3N0cmluZyA/KHN0YXJ0ID0gXCJcIikgPyhzdG9wID0gXCJcIikgPyhzZXAgPSBcIixcIikgZWx0X3RvX3N0cmluZyBoID1cbiAgICB0b19saXN0IGggfD4gQ0NMaXN0LnRvX3N0cmluZyB+c3RhcnQgfnN0b3AgfnNlcCBlbHRfdG9fc3RyaW5nXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpIHBwX3ggZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4geCAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF94IGZtdCB4KVxuICAgICAgbTtcbiAgICBwcF9zdG9wIGZtdCAoKVxuZW5kXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQmFzaWMgU3RyaW5nIFV0aWxzfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxuXG4oKiBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbnMgKilcblxuaW5jbHVkZSBTdHJpbmdcblxubGV0IGNvbXBhcmVfaW50IChhIDogaW50KSBiID0gU3RkbGliLmNvbXBhcmUgYSBiXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgaGFzaCBzID0gSGFzaHRibC5oYXNoIHNcbmxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoXG5sZXQgaXNfZW1wdHkgcyA9IGVxdWFsIHMgXCJcIlxuXG5sZXQgcmV2IHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGluaXQgbiAoZnVuIGkgLT4gcy5bbiAtIGkgLSAxXSlcblxubGV0IHJlYyBfdG9fbGlzdCBzIGFjYyBpIGxlbiA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIExpc3QucmV2IGFjY1xuICBlbHNlXG4gICAgX3RvX2xpc3QgcyAocy5baV0gOjogYWNjKSAoaSArIDEpIChsZW4gLSAxKVxuXG5sZXQgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBsZXQgcmVjIGNoZWNrIGsgPVxuICAgIGlmIGsgPSBsZW4gdGhlblxuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIENDQ2hhci5lcXVhbCBzdWIuW2kgKyBrXSBzLltqICsga10gJiYgY2hlY2sgKGsgKyAxKVxuICBpblxuICBqICsgbGVuIDw9IFN0cmluZy5sZW5ndGggcyAmJiBjaGVjayAwXG5cbmxldCBpc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgaWYgaSArIGxlbiA+IFN0cmluZy5sZW5ndGggc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pc19zdWJcIjtcbiAgX2lzX3N1YiB+c3ViIGkgcyBqIH5sZW5cblxudHlwZSBfIGRpcmVjdGlvbiA9XG4gIHwgRGlyZWN0IDogWyBgRGlyZWN0IF0gZGlyZWN0aW9uXG4gIHwgUmV2ZXJzZSA6IFsgYFJldmVyc2UgXSBkaXJlY3Rpb25cblxuKCogd2UgZm9sbG93IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0tudXRo4oCTTW9ycmlz4oCTUHJhdHRfYWxnb3JpdGhtICopXG5tb2R1bGUgRmluZCA9IHN0cnVjdFxuICB0eXBlICdhIGttcF9wYXR0ZXJuID0geyBmYWlsdXJlOiBpbnQgYXJyYXk7IHN0cjogc3RyaW5nIH1cbiAgKCogaW52YXJpYW50OiBbbGVuZ3RoIGZhaWx1cmUgPSBsZW5ndGggc3RyXS5cbiAgICAgV2UgdXNlIGEgcGhhbnRvbSB0eXBlIHRvIGF2b2lkIG1peGluZyB0aGUgZGlyZWN0aW9ucy4gKilcblxuICBsZXQga21wX3BhdHRlcm5fbGVuZ3RoIHAgPSBTdHJpbmcubGVuZ3RoIHAuc3RyXG5cbiAgKCogYWNjZXNzIHRoZSBbaV0tdGggZWxlbWVudCBvZiBbc10gYWNjb3JkaW5nIHRvIGRpcmVjdGlvbiBbZGlyXSAqKVxuICBsZXQgZ2V0XyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9XG4gICBmdW4gfmRpciAtPlxuICAgIG1hdGNoIGRpciB3aXRoXG4gICAgfCBEaXJlY3QgLT4gU3RyaW5nLmdldFxuICAgIHwgUmV2ZXJzZSAtPiBmdW4gcyBpIC0+IHMuW1N0cmluZy5sZW5ndGggcyAtIGkgLSAxXVxuXG4gIGxldCBrbXBfY29tcGlsZV8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gYSBrbXBfcGF0dGVybiA9XG4gICBmdW4gfmRpciBzdHIgLT5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHN0ciBpblxuICAgIGxldCBnZXQgPSBnZXRfIH5kaXIgaW5cbiAgICAoKiBob3cgdG8gcmVhZCBlbGVtZW50cyBvZiB0aGUgc3RyaW5nICopXG4gICAgbWF0Y2ggbGVuIHdpdGhcbiAgICB8IDAgLT4geyBmYWlsdXJlID0gW3x8XTsgc3RyIH1cbiAgICB8IDEgLT4geyBmYWlsdXJlID0gW3wgLTEgfF07IHN0ciB9XG4gICAgfCBfIC0+XG4gICAgICAoKiBhdCBsZWFzdCAyIGVsZW1lbnRzLCB0aGUgYWxnb3JpdGhtIGNhbiB3b3JrICopXG4gICAgICBsZXQgZmFpbHVyZSA9IEFycmF5Lm1ha2UgbGVuIDAgaW5cbiAgICAgIGZhaWx1cmUuKDApIDwtIC0xO1xuICAgICAgKCogaTogY3VycmVudCBpbmRleCBpbiBzdHIgKilcbiAgICAgIGxldCBpID0gcmVmIDIgaW5cbiAgICAgICgqIGo6IGluZGV4IG9mIGNhbmRpZGF0ZSBzdWJzdHJpbmcgKilcbiAgICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICAgIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgICAgIG1hdGNoICFqIHdpdGhcbiAgICAgICAgfCBfIHdoZW4gQ0NDaGFyLmVxdWFsIChnZXQgc3RyICghaSAtIDEpKSAoZ2V0IHN0ciAhaikgLT5cbiAgICAgICAgICAoKiBzdWJzdHJpbmcgc3RhcnRpbmcgYXQgIWogY29udGludWVzIG1hdGNoaW5nIGN1cnJlbnQgY2hhciAqKVxuICAgICAgICAgIGluY3IgajtcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gIWo7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgMCAtPlxuICAgICAgICAgICgqIGJhY2sgdG8gdGhlIGJlZ2lubmluZyAqKVxuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAoKiBmYWxsYmFjayBmb3IgdGhlIHByZWZpeCBzdHJpbmcgKilcbiAgICAgICAgICBhc3NlcnQgKCFqID4gMCk7XG4gICAgICAgICAgaiA6PSBmYWlsdXJlLighailcbiAgICAgIGRvbmU7XG4gICAgICAoKiBGb3JtYXQucHJpbnRmIFwie0BbZmFpbHVyZTolYSwgc3RyOiVzQF19QC5cIiBDQ0Zvcm1hdC4oYXJyYXkgaW50KSBmYWlsdXJlIHN0cjsgKilcbiAgICAgIHsgZmFpbHVyZTsgc3RyIH1cblxuICBsZXQga21wX2NvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOkRpcmVjdCBzXG4gIGxldCBrbXBfcmNvbXBpbGUgcyA9IGttcF9jb21waWxlXyB+ZGlyOlJldmVyc2Ugc1xuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24uXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgaWR4IGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKCFpICsgIWopIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPSBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyICFqIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICAhaVxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbiwgZnJvbSB0aGUgcmlnaHQuXG4gICAgIFtpXSBpbmRleCBpbiBbc11cbiAgICAgW2pdIGluZGV4IGluIFtwYXR0ZXJuXVxuICAgICBbbGVuXSBsZW5ndGggb2YgW3NdICopXG4gIGxldCBrbXBfcmZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIChsZW4gLSBpZHggLSAxKSBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzIChsZW4gLSAhaSAtICFqIC0gMSkgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9XG4gICAgICAgIFN0cmluZy5nZXQgcGF0dGVybi5zdHIgKFN0cmluZy5sZW5ndGggcGF0dGVybi5zdHIgLSAhaiAtIDEpXG4gICAgICBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICAoKiBhZGp1c3QgcmVzdWx0OiBmaXJzdCwgW3JlcyA9IHN0cmluZy5sZW5ndGggcyAtIHJlcyAtMV0gdG8gY29udmVydFxuICAgICAgIGJhY2sgdG8gcmVhbCBpbmRpY2VzOyB0aGVuLCB3aGF0IHdlIGdvdCBpcyBhY3R1YWxseSB0aGUgcG9zaXRpb25cbiAgICAgICBvZiB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyB3ZSBzdWJ0cmFjdCB0aGUgW2xlbmd0aCBvZiB0aGUgcGF0dGVybiAtMV1cbiAgICAgICB0byBvYnRhaW4gdGhlIHJlYWwgcmVzdWx0LiAqKVxuICAgIGlmICFqID0gcGF0X2xlbiB0aGVuXG4gICAgICBsZW4gLSAhaSAtIGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuXG4gICAgZWxzZVxuICAgICAgLTFcblxuICB0eXBlICdhIHBhdHRlcm4gPSBQX2NoYXIgb2YgY2hhciB8IFBfS01QIG9mICdhIGttcF9wYXR0ZXJuXG5cbiAgbGV0IHBhdHRlcm5fbGVuZ3RoID0gZnVuY3Rpb25cbiAgICB8IFBfY2hhciBfIC0+IDFcbiAgICB8IFBfS01QIHAgLT4ga21wX3BhdHRlcm5fbGVuZ3RoIHBcblxuICBsZXQgY29tcGlsZSBzdWIgOiBbIGBEaXJlY3QgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfY29tcGlsZSBzdWIpXG5cbiAgbGV0IHJjb21waWxlIHN1YiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuID1cbiAgICBpZiBsZW5ndGggc3ViID0gMSB0aGVuXG4gICAgICBQX2NoYXIgc3ViLlswXVxuICAgIGVsc2VcbiAgICAgIFBfS01QIChrbXBfcmNvbXBpbGUgc3ViKVxuXG4gIGxldCBmaW5kID8oc3RhcnQgPSAwKSB+KHBhdHRlcm4gOiBbIGBEaXJlY3QgXSBwYXR0ZXJuKSBzID1cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5cbiAgbGV0IHJmaW5kID9zdGFydCB+KHBhdHRlcm4gOiBbIGBSZXZlcnNlIF0gcGF0dGVybikgcyA9XG4gICAgbGV0IHN0YXJ0ID1cbiAgICAgIG1hdGNoIHN0YXJ0IHdpdGhcbiAgICAgIHwgU29tZSBuIC0+IG5cbiAgICAgIHwgTm9uZSAtPiBTdHJpbmcubGVuZ3RoIHMgLSAxXG4gICAgaW5cbiAgICBtYXRjaCBwYXR0ZXJuIHdpdGhcbiAgICB8IFBfY2hhciBjIC0+ICh0cnkgU3RyaW5nLnJpbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX3JmaW5kIH5wYXR0ZXJuIHMgc3RhcnRcbmVuZFxuXG5sZXQgZmluZCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLmZpbmQgfnN0YXJ0IH5wYXR0ZXJuIHNcblxubGV0IGZpbmRfYWxsID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+XG4gICAgbGV0IGkgPSByZWYgc3RhcnQgaW5cbiAgICBmdW4gKCkgLT5cbiAgICAgIGxldCByZXMgPSBGaW5kLmZpbmQgfnN0YXJ0OiFpIH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIHJlcyA9IH4tMSB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBpIDo9IHJlcyArIDE7XG4gICAgICAgICgqIHBvc3NpYmxlIG92ZXJsYXAgKilcbiAgICAgICAgU29tZSByZXNcbiAgICAgIClcblxubGV0IGZpbmRfYWxsX2wgP3N0YXJ0IH5zdWIgcyA9XG4gIGxldCByZWMgYXV4IGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIGkgLT4gYXV4IChpIDo6IGFjYykgZ1xuICBpblxuICBhdXggW10gKGZpbmRfYWxsID9zdGFydCB+c3ViIHMpXG5cbmxldCBtZW0gP3N0YXJ0IH5zdWIgcyA9IGZpbmQgP3N0YXJ0IH5zdWIgcyA+PSAwXG5cbmxldCByZmluZCB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLnJjb21waWxlIHN1YiBpblxuICBmdW4gcyAtPiBGaW5kLnJmaW5kIH5zdGFydDooU3RyaW5nLmxlbmd0aCBzIC0gMSkgfnBhdHRlcm4gc1xuXG4oKiBSZXBsYWNlIHN1YnN0cmluZyBbcy5bcG9zXSDigKYgcy5bcG9zK2xlbi0xXV0gYnkgW2J5XSBpbiBbc10gKilcbmxldCByZXBsYWNlX2F0XyB+cG9zIH5sZW4gfmJ5IHMgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKGxlbmd0aCBzICsgbGVuZ3RoIGJ5IC0gbGVuKSBpblxuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgMCBwb3M7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAocG9zICsgbGVuKSAoU3RyaW5nLmxlbmd0aCBzIC0gcG9zIC0gbGVuKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHJlcGxhY2UgPyh3aGljaCA9IGBBbGwpIH5zdWIgfmJ5IHMgPVxuICBpZiBpc19lbXB0eSBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnJlcGxhY2VcIjtcbiAgbWF0Y2ggd2hpY2ggd2l0aFxuICB8IGBMZWZ0IC0+XG4gICAgbGV0IGkgPSBmaW5kIH5zdGFydDowIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBSaWdodCAtPlxuICAgIGxldCBpID0gcmZpbmQgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYEFsbCAtPlxuICAgICgqIGNvbXBpbGUgc2VhcmNoIHBhdHRlcm4gb25seSBvbmNlICopXG4gICAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgbGV0IHN0YXJ0ID0gcmVmIDAgaW5cbiAgICB3aGlsZSAhc3RhcnQgPCBTdHJpbmcubGVuZ3RoIHMgZG9cbiAgICAgIGxldCBpID0gRmluZC5maW5kIH5zdGFydDohc3RhcnQgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgaSA+PSAwIHRoZW4gKFxuICAgICAgICAoKiBiZXR3ZWVuIGxhc3QgYW5kIGN1ciBvY2N1cnJlbmNlcyAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChpIC0gIXN0YXJ0KTtcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgICAgICAgc3RhcnQgOj0gaSArIFN0cmluZy5sZW5ndGggc3ViXG4gICAgICApIGVsc2UgKFxuICAgICAgICAoKiBhZGQgcmVtYWluZGVyICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKFN0cmluZy5sZW5ndGggcyAtICFzdGFydCk7XG4gICAgICAgIHN0YXJ0IDo9IFN0cmluZy5sZW5ndGggcyAoKiBzdG9wICopXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG5tb2R1bGUgU3BsaXQgPSBzdHJ1Y3RcbiAgdHlwZSBkcm9wX2lmX2VtcHR5ID0geyBmaXJzdDogYm9vbDsgbGFzdDogYm9vbCB9XG5cbiAgbGV0IG5vX2Ryb3AgPSB7IGZpcnN0ID0gZmFsc2U7IGxhc3QgPSBmYWxzZSB9XG4gIGxldCBkZWZhdWx0X2Ryb3AgPSBub19kcm9wXG5cbiAgdHlwZSBzcGxpdF9zdGF0ZSA9IFNwbGl0U3RvcCB8IFNwbGl0QXQgb2YgaW50ICgqIHByZXZpb3VzICopXG5cbiAgbGV0IHJlYyBfc3BsaXQgfmJ5IHMgc3RhdGUgPVxuICAgIG1hdGNoIHN0YXRlIHdpdGhcbiAgICB8IFNwbGl0U3RvcCAtPiBOb25lXG4gICAgfCBTcGxpdEF0IHByZXYgLT4gX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2XG5cbiAgYW5kIF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldiA9XG4gICAgbGV0IGogPSBGaW5kLmZpbmQgfnN0YXJ0OnByZXYgfnBhdHRlcm46YnkgcyBpblxuICAgIGlmIGogPCAwIHRoZW5cbiAgICAgIFNvbWUgKFNwbGl0U3RvcCwgcHJldiwgU3RyaW5nLmxlbmd0aCBzIC0gcHJldilcbiAgICBlbHNlXG4gICAgICBTb21lIChTcGxpdEF0IChqICsgRmluZC5wYXR0ZXJuX2xlbmd0aCBieSksIHByZXYsIGogLSBwcmV2KVxuXG4gIGxldCBfdHVwbGUzIHggeSB6ID0geCwgeSwgelxuXG4gIGxldCBfbWtnZW4gfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IHN0YXRlID0gcmVmIChTcGxpdEF0IDApIGluXG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyAhc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBuZXh0ICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIFNvbWUgKGsgcyBpIGxlbilcbiAgICBpblxuICAgIG5leHRcblxuICBsZXQgZ2VuID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgZ2VuX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rbGlzdCB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGJ1aWxkIGFjYyBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBidWlsZCBhY2Mgc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IGJ1aWxkIChrIHMgaSBsZW4gOjogYWNjKSBzdGF0ZSdcbiAgICBpblxuICAgIGJ1aWxkIFtdIChTcGxpdEF0IDApXG5cbiAgbGV0IGxpc3RfID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGxpc3RfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtsaXN0IH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rc2VxIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbWFrZSBzdGF0ZSAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gbWFrZSBzdGF0ZScgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IFNlcS5OaWxcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+IFNlcS5Db25zIChrIHMgaSBsZW4sIG1ha2Ugc3RhdGUnKVxuICAgIGluXG4gICAgbWFrZSAoU3BsaXRBdCAwKVxuXG4gIGxldCBzZXEgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBzZXFfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtfaXRlciB+ZHJvcCB+YnkgcyBmIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYXV4IHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYXV4IHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gKClcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIGsgKGYgcyBpIGxlbik7XG4gICAgICAgIGF1eCBzdGF0ZSdcbiAgICBpblxuICAgIGF1eCAoU3BsaXRBdCAwKVxuXG4gIGxldCBpdGVyID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBpdGVyX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBsZWZ0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSBmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IGxlZnQgfmJ5IHMgPSB0cnkgU29tZSAobGVmdF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICBsZXQgcmlnaHRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWI6YnkgcyBpblxuICAgIGlmIGkgPSB+LTEgdGhlblxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgZWxzZSAoXG4gICAgICBsZXQgcmlnaHQgPSBpICsgU3RyaW5nLmxlbmd0aCBieSBpblxuICAgICAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIHJpZ2h0IChTdHJpbmcubGVuZ3RoIHMgLSByaWdodClcbiAgICApXG5cbiAgbGV0IHJpZ2h0IH5ieSBzID0gdHJ5IFNvbWUgKHJpZ2h0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuZW5kXG5cbmxldCBzcGxpdCB+YnkgcyA9IFNwbGl0Lmxpc3RfY3B5IH5ieSBzXG5cbmxldCBjb21wYXJlX3ZlcnNpb25zIGEgYiA9XG4gIGxldCBvZl9pbnQgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmUgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggb2ZfaW50IHgsIG9mX2ludCB5IHdpdGhcbiAgICAgIHwgTm9uZSwgTm9uZSAtPlxuICAgICAgICBsZXQgYyA9IFN0cmluZy5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBhKSAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYilcblxudHlwZSBuYXRfY2h1bmsgPSBOQ19jaGFyIG9mIGNoYXIgfCBOQ19pbnQgb2YgaW50XG5cbmxldCBjb21wYXJlX25hdHVyYWwgYSBiID1cbiAgKCogc3RyZWFtIG9mIGNodW5rcyAqKVxuICBsZXQgY2h1bmtzIHMgOiB1bml0IC0+IG5hdF9jaHVuayBvcHRpb24gPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIE5vbmVcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgU29tZSAoTkNfY2hhciBjKVxuICAgICAgKVxuICAgIGFuZCByZWFkX2ludCBuID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBTb21lIChOQ19pbnQgbilcbiAgICAgIGVsc2UgKFxuICAgICAgICBtYXRjaCBTdHJpbmcuZ2V0IHMgIWkgd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICByZWFkX2ludCAoKDEwICogbikgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgXyAtPiBTb21lIChOQ19pbnQgbilcbiAgICAgIClcbiAgICBpblxuICAgIG5leHRcbiAgaW5cbiAgbGV0IHJlYyBjbXBfcmVjIGEgYiA9XG4gICAgbWF0Y2ggYSAoKSwgYiAoKSB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+IDBcbiAgICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAobWF0Y2ggeCwgeSB3aXRoXG4gICAgICB8IE5DX2NoYXIgeCwgTkNfY2hhciB5IC0+XG4gICAgICAgIGxldCBjID0gQ2hhci5jb21wYXJlIHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiXG4gICAgICB8IE5DX2ludCBfLCBOQ19jaGFyIF8gLT4gMVxuICAgICAgfCBOQ19jaGFyIF8sIE5DX2ludCBfIC0+IC0xXG4gICAgICB8IE5DX2ludCB4LCBOQ19pbnQgeSAtPlxuICAgICAgICBsZXQgYyA9IGNvbXBhcmVfaW50IHggeSBpblxuICAgICAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgICAgIGNcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGNtcF9yZWMgYSBiKVxuICBpblxuICBjbXBfcmVjIChjaHVua3MgYSkgKGNodW5rcyBiKVxuXG5sZXQgZWRpdF9kaXN0YW5jZSA/KGN1dG9mZiA9IG1heF9pbnQpIHMxIHMyID1cbiAgbGV0IG4xID0gbGVuZ3RoIHMxIGluXG4gIGxldCBuMiA9IGxlbmd0aCBzMiBpblxuICBpZiBuMSA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjJcbiAgZWxzZSBpZiBuMiA9IDAgdGhlblxuICAgIG1pbiBjdXRvZmYgbjFcbiAgZWxzZSBpZiBlcXVhbCBzMSBzMiB0aGVuXG4gICAgMFxuICBlbHNlIGlmIG4xIC0gbjIgPj0gY3V0b2ZmIHx8IG4yIC0gbjEgPj0gY3V0b2ZmIHRoZW5cbiAgICBjdXRvZmZcbiAgKCogYXQgbGVhc3QgY3V0b2ZmIGluc2VydHMgKilcbiAgZWxzZSAoXG4gICAgdHJ5XG4gICAgICAoKiBkaXN0YW5jZSB2ZWN0b3JzICh2MD1wcmV2aW91cywgdjE9Y3VycmVudCkgKilcbiAgICAgIGxldCB2MCA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgIGxldCB2MSA9IEFycmF5Lm1ha2UgKGxlbmd0aCBzMiArIDEpIDAgaW5cbiAgICAgICgqIGluaXRpYWxpemUgdjA6IHYwKGkpID0gQSgwKShpKSA9IGRlbGV0ZSBpIGNoYXJzIGZyb20gdCAqKVxuICAgICAgbGV0IGxvd2VyX2JvdW5kID0gcmVmIG1heF9pbnQgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczIgZG9cbiAgICAgICAgdjAuKGkpIDwtIGlcbiAgICAgIGRvbmU7XG4gICAgICAoKiBtYWluIGxvb3AgZm9yIHRoZSBib3R0b20gdXAgZHluYW1pYyBhbGdvcml0aG0gKilcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggczEgLSAxIGRvXG4gICAgICAgICgqIGZpcnN0IGVkaXQgZGlzdGFuY2UgaXMgdGhlIGRlbGV0aW9uIG9mIGkrMSBlbGVtZW50cyBmcm9tIHMgKilcbiAgICAgICAgdjEuKDApIDwtIGkgKyAxO1xuXG4gICAgICAgICgqIHRyeSBhZGQvZGVsZXRlL3JlcGxhY2Ugb3BlcmF0aW9ucyAqKVxuICAgICAgICBmb3IgaiA9IDAgdG8gbGVuZ3RoIHMyIC0gMSBkb1xuICAgICAgICAgIGxldCBjb3N0ID1cbiAgICAgICAgICAgIGlmIENoYXIuZXF1YWwgKFN0cmluZy5nZXQgczEgaSkgKFN0cmluZy5nZXQgczIgaikgdGhlblxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICBpblxuICAgICAgICAgIHYxLihqICsgMSkgPC0gbWluICh2MS4oaikgKyAxKSAobWluICh2MC4oaiArIDEpICsgMSkgKHYwLihqKSArIGNvc3QpKVxuICAgICAgICBkb25lO1xuXG4gICAgICAgIGlmXG4gICAgICAgICAgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxXG4gICAgICAgICAgJiYgaSA8PSAyICogY3V0b2ZmXG4gICAgICAgICAgJiYgKDIgKiBjdXRvZmYpIC0gaSA8IFN0cmluZy5sZW5ndGggczJcbiAgICAgICAgdGhlblxuICAgICAgICAgIGxvd2VyX2JvdW5kIDo9IG1pbiAhbG93ZXJfYm91bmQgdjEuKCgyICogY3V0b2ZmKSAtIGkpO1xuICAgICAgICAoKiBkaWQgd2UgY29tcHV0ZSB1cCB0byB0aGUgZGlhZ29uYWwgMipjdXRvZmYrMT8gKilcbiAgICAgICAgaWYgY3V0b2ZmIDwgQXJyYXkubGVuZ3RoIHYxICYmIGkgPSBjdXRvZmYgKiAyICYmICFsb3dlcl9ib3VuZCA+PSBjdXRvZmZcbiAgICAgICAgdGhlblxuICAgICAgICAgIHJhaXNlX25vdHJhY2UgRXhpdDtcblxuICAgICAgICAoKiBjb3B5IHYxIGludG8gdjAgZm9yIG5leHQgaXRlcmF0aW9uICopXG4gICAgICAgIEFycmF5LmJsaXQgdjEgMCB2MCAwIChsZW5ndGggczIgKyAxKVxuICAgICAgZG9uZTtcbiAgICAgIHYxLihsZW5ndGggczIpXG4gICAgd2l0aCBFeGl0IC0+IGN1dG9mZlxuICApXG5cbmxldCByZXBlYXQgcyBuID1cbiAgYXNzZXJ0IChuID49IDApO1xuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGFzc2VydCAobGVuID4gMCk7XG4gIGluaXQgKGxlbiAqIG4pIChmdW4gaSAtPiBzLltpIG1vZCBsZW5dKVxuXG5sZXQgcHJlZml4IH5wcmUgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHByZSBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZiBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIGkpIChTdHJpbmcudW5zYWZlX2dldCBwcmUgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCBzdWZmaXggfnN1ZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3VmIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IG9mZiA9IFN0cmluZy5sZW5ndGggcyAtIGxlbiBpblxuICAgIGxldCByZWMgY2hlY2sgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgICAgdHJ1ZVxuICAgICAgZWxzZSBpZlxuICAgICAgICBTdGRsaWIuKCA8PiApIChTdHJpbmcudW5zYWZlX2dldCBzIChvZmYgKyBpKSkgKFN0cmluZy51bnNhZmVfZ2V0IHN1ZiBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHRha2UgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgblxuICBlbHNlXG4gICAgc1xuXG5sZXQgZHJvcCBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgbiAoU3RyaW5nLmxlbmd0aCBzIC0gbilcbiAgZWxzZVxuICAgIFwiXCJcblxubGV0IHRha2VfZHJvcCBuIHMgPSB0YWtlIG4gcywgZHJvcCBuIHNcblxubGV0IGNob3Bfc3VmZml4IH5zdWYgcyA9XG4gIGlmIHN1ZmZpeCB+c3VmIHMgdGhlblxuICAgIFNvbWUgKFN0cmluZy5zdWIgcyAwIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHN1ZikpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBjaG9wX3ByZWZpeCB+cHJlIHMgPVxuICBpZiBwcmVmaXggfnByZSBzIHRoZW5cbiAgICBTb21lXG4gICAgICAoU3RyaW5nLnN1YiBzIChTdHJpbmcubGVuZ3RoIHByZSkgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggcHJlKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGJsaXQgPSBTdHJpbmcuYmxpdFxuXG5sZXQgZm9sZCBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2Mgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IGZvbGRpIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBpIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBwYWQgPyhzaWRlID0gYExlZnQpID8oYyA9ICcgJykgbiBzID1cbiAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbl9zID49IG4gdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IHBhZF9sZW4gPSBuIC0gbGVuX3MgaW5cbiAgICBtYXRjaCBzaWRlIHdpdGhcbiAgICB8IGBMZWZ0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IHBhZF9sZW4gdGhlblxuICAgICAgICAgICAgY1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMuW2kgLSBwYWRfbGVuXSlcbiAgICB8IGBSaWdodCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBsZW5fcyB0aGVuXG4gICAgICAgICAgICBzLltpXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGMpXG4gIClcblxubGV0IF90b19nZW4gcyBpMCBsZW4gPVxuICBsZXQgaSA9IHJlZiBpMCBpblxuICBmdW4gKCkgLT5cbiAgICBpZiAhaSA9IGkwICsgbGVuIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gU3RyaW5nLnVuc2FmZV9nZXQgcyAhaSBpblxuICAgICAgaW5jciBpO1xuICAgICAgU29tZSBjXG4gICAgKVxuXG5sZXQgdG9fZ2VuIHMgPSBfdG9fZ2VuIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxubGV0IG9mX2NoYXIgYyA9IFN0cmluZy5tYWtlIDEgY1xuXG5sZXQgb2ZfZ2VuIGcgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgbGV0IHJlYyBhdXggKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBCdWZmZXIuY29udGVudHMgYlxuICAgIHwgU29tZSBjIC0+XG4gICAgICBCdWZmZXIuYWRkX2NoYXIgYiBjO1xuICAgICAgYXV4ICgpXG4gIGluXG4gIGF1eCAoKVxuXG5sZXQgdG9faXRlciBzIGsgPSBTdHJpbmcuaXRlciBrIHNcblxubGV0IHJlYyBfdG9fc2VxIHMgaSBsZW4gKCkgPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBTZXEuTmlsXG4gIGVsc2VcbiAgICBTZXEuQ29ucyAocy5baV0sIF90b19zZXEgcyAoaSArIDEpIChsZW4gLSAxKSlcblxubGV0IHRvX3NlcSBzID0gX3RvX3NlcSBzIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBpIChCdWZmZXIuYWRkX2NoYXIgYik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIFNlcS5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYikgc2VxO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgdG9fbGlzdCBzID0gX3RvX2xpc3QgcyBbXSAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9saXN0IGwgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgTGlzdC5pdGVyIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBsO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBvZl9hcnJheSBhID0gaW5pdCAoQXJyYXkubGVuZ3RoIGEpIChmdW4gaSAtPiBhLihpKSlcbmxldCB0b19hcnJheSBzID0gQXJyYXkuaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGkgLT4gcy5baV0pXG5cbmxldCBsaW5lc19nZW4gcyA9XG4gIFNwbGl0Lmdlbl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX2l0ZXIgcyA9XG4gIFNwbGl0Lml0ZXJfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19zZXEgcyA9XG4gIFNwbGl0LnNlcV9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzIHMgPVxuICBTcGxpdC5saXN0X2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgY29uY2F0X2dlbl9idWYgfnNlcCBnIDogQnVmZmVyLnQgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCByZWMgYXV4IH5maXJzdCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IGJcbiAgICB8IFNvbWUgcyAtPlxuICAgICAgaWYgbm90IGZpcnN0IHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gICAgICBhdXggfmZpcnN0OmZhbHNlICgpXG4gIGluXG4gIGF1eCB+Zmlyc3Q6dHJ1ZSAoKVxuXG5sZXQgY29uY2F0X2dlbiB+c2VwIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcCBnIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBpIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKTtcbiAgYnVmXG5cbmxldCBjb25jYXRfaXRlciB+c2VwIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIFNlcS5pdGVyXG4gICAgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpXG4gICAgc2VxO1xuICBidWZcblxubGV0IGNvbmNhdF9zZXEgfnNlcCBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lcyBsID1cbiAgbGV0IGxlbiA9IExpc3QuZm9sZF9sZWZ0IChmdW4gbiBzIC0+IG4gKyAxICsgU3RyaW5nLmxlbmd0aCBzKSAwIGwgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBsZW4gaW5cbiAgbGV0IHJlYyBhdXhfYmxpdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT5cbiAgICAgIGFzc2VydCAoaSA9IGxlbik7XG4gICAgICBCeXRlcy50b19zdHJpbmcgYnVmXG4gICAgfCBzIDo6IHRhaWwgLT5cbiAgICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgICAgQnl0ZXMuYmxpdF9zdHJpbmcgcyAwIGJ1ZiBpIGxlbl9zO1xuICAgICAgQnl0ZXMuc2V0IGJ1ZiAoaSArIGxlbl9zKSAnXFxuJztcbiAgICAgIGF1eF9ibGl0IChpICsgbGVuX3MgKyAxKSB0YWlsXG4gIGluXG4gIGF1eF9ibGl0IDAgbFxuXG5sZXQgdW5saW5lc19nZW4gZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwOlwiXFxuXCIgZyBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX2l0ZXIgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcDpcIlxcblwiIGkgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19zZXEgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXA6XCJcXG5cIiBzZXEgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgc2V0IHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLnNldFwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaiAtPlxuICAgICAgaWYgaSA9IGogdGhlblxuICAgICAgICBjXG4gICAgICBlbHNlXG4gICAgICAgIHMuW2pdKVxuXG5sZXQgaXRlciA9IFN0cmluZy5pdGVyXG5cbmxldCBmaWx0ZXJfbWFwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgIG1hdGNoIGYgYyB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBjJyAtPiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMnKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGZpbHRlciBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyIChmdW4gYyAtPiBpZiBmIGMgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGMpIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVuaXEgZXEgcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA9IDAgdGhlblxuICAgIHNcbiAgZWxzZSAoXG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIHMuWzBdO1xuICAgIGxldCBfID1cbiAgICAgIGZvbGRcbiAgICAgICAgKGZ1biBwcmV2aW91c19jIGMgLT5cbiAgICAgICAgICBpZiBub3QgKGVxIHByZXZpb3VzX2MgYykgdGhlbiBCdWZmZXIuYWRkX2NoYXIgYnVmIGM7XG4gICAgICAgICAgYylcbiAgICAgICAgcy5bMF0gc1xuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICApXG5cbmxldCBmbGF0X21hcCA/c2VwIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXJpXG4gICAgKGZ1biBpIGMgLT5cbiAgICAgIChtYXRjaCBzZXAgd2l0aFxuICAgICAgfCBTb21lIF8gd2hlbiBpID0gMCAtPiAoKVxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgc2VwIC0+IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXApO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIChmIGMpKVxuICAgIHM7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxuZXhjZXB0aW9uIE15RXhpdFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBub3QgKHAgYykgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIHAgYyB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbmxldCBkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW5ndGggcyAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgaW5jciBpXG4gIGRvbmU7XG4gIGlmICFpID4gMCB0aGVuXG4gICAgc3ViIHMgIWkgKGxlbmd0aCBzIC0gIWkpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAobGVuZ3RoIHMgLSAxKSBpblxuICB3aGlsZSAhaSA+PSAwICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBkZWNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPCBsZW5ndGggcyAtIDEgdGhlblxuICAgIHN1YiBzIDAgKCFpICsgMSlcbiAgZWxzZVxuICAgIHNcblxuKCogbm90aW9uIG9mIHdoaXRlc3BhY2UgZm9yIHRyaW0gKilcbmxldCBpc19zcGFjZV8gPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IGx0cmltIHMgPSBkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5sZXQgcnRyaW0gcyA9IHJkcm9wX3doaWxlIGlzX3NwYWNlXyBzXG5cbmxldCBtYXAyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5tYXAyXCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggczEpIChmdW4gaSAtPiBmIHMxLltpXSBzMi5baV0pXG5cbmxldCBpdGVyMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcjJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGl0ZXJpMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXRlcmkyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgaSBzMS5baV0gczIuW2ldXG4gIGRvbmVcblxubGV0IGZvbGQyIGYgYWNjIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuZm9sZDJcIjtcbiAgbGV0IHJlYyBmb2xkJyBhY2MgczEgczIgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggczEgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZCcgKGYgYWNjIHMxLltpXSBzMi5baV0pIHMxIHMyIChpICsgMSlcbiAgaW5cbiAgZm9sZCcgYWNjIHMxIHMyIDBcblxubGV0IGZvcl9hbGwyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIG5vdCAocCBjMSBjMikgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0czIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgcCBjMSBjMiB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG4oKiogezIgQXNjaWkgZnVuY3Rpb25zfSAqKVxuXG5sZXQgZXF1YWxfY2FzZWxlc3MgczEgczIgOiBib29sID1cbiAgU3RyaW5nLmxlbmd0aCBzMSA9IFN0cmluZy5sZW5ndGggczJcbiAgJiYgZm9yX2FsbDJcbiAgICAgICAoZnVuIGMxIGMyIC0+XG4gICAgICAgICBDQ0NoYXIuZXF1YWwgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzEpIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMyKSlcbiAgICAgICBzMSBzMlxuXG5sZXQgdG9faGV4IChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBpX3RvX2hleCAoaSA6IGludCkgPVxuICAgIGlmIGkgPCAxMCB0aGVuXG4gICAgICBDaGFyLmNociAoaSArIENoYXIuY29kZSAnMCcpXG4gICAgZWxzZVxuICAgICAgQ2hhci5jaHIgKGkgLSAxMCArIENoYXIuY29kZSAnYScpXG4gIGluXG5cbiAgbGV0IHJlcyA9IEJ5dGVzLmNyZWF0ZSAoMiAqIGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbGV0IG4gPSBDaGFyLmNvZGUgKGdldCBzIGkpIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAoMiAqIGkpIChpX3RvX2hleCAoKG4gbGFuZCAweGYwKSBsc3IgNCkpO1xuICAgIEJ5dGVzLnNldCByZXMgKCgyICogaSkgKyAxKSAoaV90b19oZXggKG4gbGFuZCAweDBmKSlcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleF9leG4gKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IG5fb2ZfYyA9IGZ1bmN0aW9uXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnYScgLi4gJ2YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYSdcbiAgICB8ICdBJyAuLiAnRicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJ1xuICAgIHwgXyAtPiBpbnZhbGlkX2FyZyBcInN0cmluZzogaW52YWxpZCBoZXhcIlxuICBpblxuICBpZiBTdHJpbmcubGVuZ3RoIHMgbW9kIDIgPD4gMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJzdHJpbmc6IGhleCBzZXF1ZW5jZSBtdXN0IGJlIG9mIGV2ZW4gbGVuZ3RoXCI7XG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAnXFx4MDAnIGluXG4gIGZvciBpID0gMCB0byAoU3RyaW5nLmxlbmd0aCBzIC8gMikgLSAxIGRvXG4gICAgbGV0IG4xID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKDIgKiBpKSkgaW5cbiAgICBsZXQgbjIgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoKDIgKiBpKSArIDEpKSBpblxuICAgIGxldCBuID0gKG4xIGxzbCA0KSBsb3IgbjIgaW5cbiAgICBCeXRlcy5zZXQgcmVzIGkgKENoYXIuY2hyIG4pXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXggcyA9IHRyeSBTb21lIChvZl9oZXhfZXhuIHMpIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IHBwX2J1ZiBidWYgcyA9XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHM7XG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1wiJ1xuXG5sZXQgcHAgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApID0gZXF1YWxcbiAgbGV0ICggPD4gKSBhIGIgPSBub3QgKGVxdWFsIGEgYilcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwib3BlbiBMZXhpbmdcblxuZXhjZXB0aW9uIExleF9lcnJvciBvZiBzdHJpbmdcblxubGV0IGxleF9lcnJvciBlcnIgPSByYWlzZSAoTGV4X2Vycm9yIGVycilcblxubGV0IGVycm9yX3BvcyBsZXhidWYgPSBcbiAgbGV0IHN0YXJ0ID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxldCBjbnVtID0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgbGV0IGVudW0gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICAoc3RhcnQucG9zX2xudW0sIGNudW0sIGVudW0pXG5cbmxldCBlcnJvcl9wb3NfbXNnIChsZXhidWYgOiBMZXhpbmcubGV4YnVmKSA9XG4gIGxldCAobGluZSwgY251bSwgZW51bSkgPSBlcnJvcl9wb3MgbGV4YnVmIGluXG4gICAgUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgbGluZSBjbnVtIGVudW1cblxubGV0IHN0cmluZzJudW0gcyA9XG4gIHRyeSAoVG9rZW5zLklOVCAoaW50X29mX3N0cmluZyBzKSkgd2l0aFxuICB8IEZhaWx1cmUgXyAtPiBUb2tlbnMuTEFSR0VJTlQgc1xuXG5sZXQgdXBkYXRlX3BvcyBsZXhidWYgPVxuICBsZXQgcG9zID0gbGV4YnVmLmxleF9zdGFydF9wIGluXG4gIGxleGJ1Zi5sZXhfc3RhcnRfcCA8LVxuICAgIHsgcG9zIHdpdGggcG9zX2JvbCA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zO1xuICAgICAgICAgICAgICAgcG9zX2xudW0gPSBwb3MucG9zX2xudW0gKyAxXG4gICAgfVxuXG5sZXQgaW50X29mX2hleGNoYXIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJy4uJzknIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCdcbiAgfCAnYScuLidmJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICsgMTBcbiAgfCAnQScuLidGJyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICsgMTBcbiAgfCBjIC0+IGxleF9lcnJvciAoXCJpbnZhbGlkIGhleCBjaGFyIGluIHVuaWNvZGUgZXNjYXBlOiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJ1wiKVxuXG5cbmxldCB1dGY4X29mX2NvZGUgYnVmIGlkeCB1ID1cbiAgbGV0IGkgPSByZWYgaWR4IGluXG5cbiAgbGV0IGFkZF9jaGFyIGIgYyA9IEJ5dGVzLnVuc2FmZV9zZXQgYiAhaSBjOyBpIDo9ICFpICsgMSBpblxuXG4gIGxldCBtYXhfdXNlZF9iaXRzIG4gdSA9ICh1IGxzciBuKSA9IDAgaW5cblxuICBpZiBtYXhfdXNlZF9iaXRzIDcgdSB0aGVuXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociB1KVxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTAwMDAwMCBsb3IgKCh1IGxzciA2KSBsYW5kIDBiMDAwMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAwMDExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDIxIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDAwMDExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyNiB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAwMDAwMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTExMDAgbG9yICgodSBsc3IgMzApIGxhbmQgMGIwMDAwMDAwMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDI0KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmQ7XG4gICFpXG5cbmxldCB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIGJ1ZiBpZHggaGlnaCBsb3cgPVxuICBsZXQgaGlnaCA9IGhpZ2ggLSAweEQ4MDAgaW5cbiAgbGV0IGxvdyA9IGxvdyAtIDB4REMwMCBpblxuICBsZXQgY29kZSA9IDB4MTAwMDAgKyAoKGhpZ2ggbHNsIDEwKSBsb3IgbG93KSBpblxuICAgIHV0Zjhfb2ZfY29kZSBidWYgaWR4IGNvZGVcblxubGV0IGVzY2FwaW5nX2Vycm9yIG1zZyBzIGMgb2ZmID1cbiAgbGV0IG9mZnMgPSBzdHJpbmdfb2ZfaW50IG9mZiBpblxuICBsZXQgY3MgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgU29tZSBjIC0+IFwiICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInIFwiXG4gICAgfCBOb25lIC0+IFwiXCJcbiAgaW5cbiAgICBsZXhfZXJyb3IgKG1zZyBeIFwiIGF0IG9mZnNldCBcIiBeIG9mZnMgXiBjcyBeIFwiOiBcIiBeIHMpXG5cbmxldCB1bmVzY2FwZV9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBzJyA9IEJ5dGVzLmNyZWF0ZSBsIGluXG4gIGxldCBqID0gcmVmIDAgaW5cbiAgbGV0IHUxID0gcmVmIDAgaW5cbiAgbGV0IHUyID0gcmVmIDAgaW5cbiAgbGV0IHN0YXRlID0gcmVmIGBDaGFyIGluXG5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgICB8ICdcXFxcJyAtPiBzdGF0ZSA6PSBgRXNjYXBlXG4gICAgICAgICB8IGMgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiBjOyBqIDo9ICFqICsgMVxuICAgICAgIGVuZDtcbiAgICB8IGBFc2NhcGUgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICB8ICdcIicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1wiJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnXFxcXCcgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxcXCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnLycgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJy8nOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxiJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdmJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFwwMTInOyBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICduJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxuJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdyJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFxyJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd0JyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXFx0JzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICd1JyAgLT4gc3RhdGUgOj0gYFUxX2gxXG4gICAgICAgfCBfICAgIC0+IGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBlc2NhcGUgaW4gc3RyaW5nXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZW5kO1xuICAgIHwgYFUxX2gxIC0+IHUxIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUxX2gyXG4gICAgfCBgVTFfaDIgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDNcbiAgICB8IGBVMV9oMyAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oNFxuICAgIHwgYFUxX2g0IC0+XG4gICAgICB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MSA+PSAweEQ4MDAgJiYgIXUxIDw9IDB4REJGRiB0aGVuXG4gICAgICAgIHN0YXRlIDo9IGBVMl9ic1xuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBqIDo9IHV0Zjhfb2ZfY29kZSBzJyAhaiAhdTE7XG4gICAgICAgIHN0YXRlIDo9IGBDaGFyXG4gICAgICBlbmRcbiAgICB8IGBVMl9icyAtPlxuICAgICAgaWYgcy5baV0gPD4gJ1xcXFwnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBjaGFyIChcXFxcKVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX3VcbiAgICB8IGBVMl91IC0+XG4gICAgICBpZiBzLltpXSA8PiAndScgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIHNlcXVlbmNlICh1KVwiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVsc2VcbiAgICAgICAgc3RhdGUgOj0gYFUyX2gxXG4gICAgfCBgVTJfaDEgLT4gdTIgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTJfaDJcbiAgICB8IGBVMl9oMiAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oM1xuICAgIHwgYFUyX2gzIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2g0XG4gICAgfCBgVTJfaDQgLT5cbiAgICAgIHN0YXRlIDo9IGBDaGFyO1xuICAgICAgdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTIgPj0gMHhEQzAwICYmICF1MiA8PSAweERGRkYgdGhlblxuICAgICAgICBqIDo9IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgcycgIWogIXUxICF1MiBcbiAgICAgIGVsc2VcbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9yIGNvZGUgcG9pbnQgYmV5b25kIFUrRkZGRidcIiBzIE5vbmUgaVxuICBkb25lO1xuICBiZWdpblxuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiAoKVxuICAgIHwgXyAtPiBlc2NhcGluZ19lcnJvciBcImVuZCBvZiBzdHJpbmcgaW4gZXNjYXBlIHNlcXVlbmNlXCIgcyBOb25lIGxcbiAgZW5kO1xuICBpZiAhaiA8PiBsIHRoZW4gQnl0ZXMudW5zYWZlX3RvX3N0cmluZyAoQnl0ZXMuc3ViIHMnIDAgIWopIGVsc2Ugc1xuXG4iLCIoKiBjb250YWlucyB0aGUgbGluZSBhbmQgY2hhcmFjdGVyIHNwYW4gb2Ygd2hlcmUgdGhlIGVycm9yIG9jY3VyZWQgKilcblxudHlwZSB0ID0ge1xuICBsaW5lIDogaW50XG47IHN0YXJ0X2NoYXIgOiBpbnRcbjsgZW5kX2NoYXIgOiBpbnRcbjsgbXNnIDogc3RyaW5nXG59XG5cbmV4Y2VwdGlvbiBKc29uX2Vycm9yX2luZm8gb2YgdFxuXG5sZXQgY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlbXNnID1cbiAgbGV0IChlbGluZSwgc2NoYXIsIGVjaGFyKSA9IExleHhlcl91dGlscy5lcnJvcl9wb3MgbGV4YnVmIGluXG4gIHsgbGluZSA9IGVsaW5lOyBzdGFydF9jaGFyID0gc2NoYXI7IGVuZF9jaGFyID0gZWNoYXI7IG1zZyA9IGVtc2cgfVxuXG5sZXQgdG9fc3RyaW5nIGluZm8gPVxuICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCJsaW5lICVkIGNoYXJzICVkLSVkXCIgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gIGluZm8ubXNnIF4gXCIgYXQgXCIgXiBsb2NcbiIsImV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxuKCogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIGFuIGludGVnZXIsIGhhbmRsZXMgMzBiaXQsIDYyYml0IGFuZCBKc29vIHVzaW5nIDMyYml0IGludHMgKilcbmxldCBtYXhfanNvbl9pbnQgPVxuICBsZXQgcmVjIGxvZzIgbiA9IGlmIG4gPD0gMSB0aGVuIDAgZWxzZSAxICsgbG9nMihuIGFzciAxKSBpblxuICBsZXQgYml0cyBuID0gbG9nMiBuICsgMSBpblxuICBpZiBiaXRzIG1heF9pbnQgPiA1MyB0aGVuICgxIGxzbCA1MykgLSAxIGVsc2UgbWF4X2ludFxuXG5sZXQgbWF4X2pzb25faW50X2FzX2Zsb2F0ID0gZmxvYXRfb2ZfaW50IG1heF9qc29uX2ludFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0X2pzb24gZiA9XG4gIGxldCBpc19pbnQgPSAoZmxvYXRfb2ZfaW50IChpbnRfb2ZfZmxvYXQgZikpID0gZiBpblxuICBpZiBpc19pbnQgJiYgYWJzX2Zsb2F0IGYgPD0gbWF4X2pzb25faW50X2FzX2Zsb2F0IHRoZW4gYmVnaW4gKCogSUVFRSBtYXggaW50IGluIGEgZmxvYXQgd2hlbiBpbiA2NGJpdCBpbnQgbW9kZSopXG4gICAgbGV0IGludF92YWx1ZSA9IGludF9vZl9mbG9hdCBmIGluIChzdHJpbmdfb2ZfaW50IGludF92YWx1ZSkgXiBcIi4wXCJcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICAoKiAlLjE3ZyBvZnRlbiBjcmVhdGVzIG92ZXJseSBsb25nIG91dHB1dCwgYXR0ZW1wdCB0byBjb252ZXJ0IGF0IGxvd2VyIHByZWNlc3Npb24gZmlyc3QgKilcbiAgICBsZXQgcyA9IGZvcm1hdF9mbG9hdCBcIiUuMTZnXCIgZiBpblxuICAgIGxldCBzID0gaWYgZmxvYXRfb2Zfc3RyaW5nIHMgPSBmIHRoZW4gcyBlbHNlIGZvcm1hdF9mbG9hdCBcIiUuMTdnXCIgZiBpblxuICAgIGlmIG5vdCAoU3RyaW5nLmNvbnRhaW5zIHMgJy4nIHx8IFN0cmluZy5jb250YWlucyBzICdlJykgdGhlbiBzIF4gXCIuMFwiXG4gICAgZWxzZSBzXG4gIGVuZFxuIiwiXG5sZXQgdG9rZW5fZXJyb3IgdG9rID1cbiAgbGV0IG9wZW4gVG9rZW5zIGluXG4gIGxldCBlcnIgPSBtYXRjaCB0b2sgd2l0aFxuICAgIHwgU1RSSU5HIHMgLT4gXCJ1bmV4cGVjdGVkIHN0cmluZyAnXCIgXiBzIF4gXCInXCJcbiAgICB8IE9TIC0+IFwidW5leHBlY3RlZCAneydcIlxuICAgIHwgT0UgLT4gXCJ1bmV4cGVjdGVkICd9J1wiXG4gICAgfCBOVUxMIC0+IFwidW5leHBlY3RlZCBudWxsIHZhbHVlXCJcbiAgICB8IE5FR0lORklOSVRZIC0+IFwidW5leHBlY3RlZCBuZWdhdGl2ZSBpbmZpbml0eVwiXG4gICAgfCBOQU4gLT4gXCJ1bmV4cGVjdGVkIE5vdC1hLU51bWJlclwiXG4gICAgfCBMRVhfRVJST1IgcyAtPiBzXG4gICAgfCBMQVJHRUlOVCBzIC0+IFwidW5leHBlY3RlZCBsYXJnZSBpbnRlZ2VyICdcIiBeIHMgXiBcIidcIlxuICAgIHwgSU5UIGkgLT4gXCJ1bmV4cGVjdGVkIGludGVnZXIgJ1wiIF4gKHN0cmluZ19vZl9pbnQgaSkgXiBcIidcIlxuICAgIHwgSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIGluZmluaXR5XCJcbiAgICB8IEZMT0FUIGYgLT4gXCJ1bmV4cGVjdGVkIGZsb2F0ICdcIiBeIChzdHJpbmdfb2ZfZmxvYXQgZikgXiBcIidcIlxuICAgIHwgRU9GIC0+IFwidW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgQ09NUExJQU5DRV9FUlJPUiBzIC0+IFwiY29tcGxpYW5jZSBlcnJvciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IENPTU1BIC0+IFwidW5leHBlY3RlZCAnLCdcIlxuICAgIHwgQ09MT04gLT4gXCJ1bmV4cGVjdGVkICc6J1wiXG4gICAgfCBCT09MIGIgLT4gXCJ1bmV4cGVjdGVkIGJvb2xlYW4gJ1wiIF4gKGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIikgXiBcIidcIlxuICAgIHwgQVMgLT4gXCJ1bmV4cGVjdGVkICdbJ1wiXG4gICAgfCBBRSAtPiBcInVuZXhwZWN0ZWQgJ10nXCJcbiAgICB8IFRTIC0+IFwidW5leHBlY3RlZCAnKCdcIlxuICAgIHwgVEUgLT4gXCJ1bmV4cGVjdGVkICcpJ1wiXG4gICAgfCBWUyAtPiBcInVuZXhwZWN0ZWQgJzwnXCJcbiAgICB8IFZFIC0+IFwidW5leHBlY3RlZCAnPidcIlxuICBpblxuICAgIGBTeW50YXhfZXJyb3IgZXJyXG4iLCJtb2R1bGUgdHlwZSBQYXJzZXIgPSBzaWdcbiAgbW9kdWxlIENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlNcblxuICB2YWwgZGVjb2RlXG4gICAgOiAgcmVhZGVyIDogKHVuaXQgLT4gVG9rZW5zLnRva2VuKVxuICAgIC0+IChDb21wbGlhbmNlLmpzb24gb3B0aW9uLCBzdHJpbmcpIHJlc3VsdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IFBhcnNlclxuICB3aXRoIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuPSBzdHJ1Y3RcblxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2VcblxuICBleGNlcHRpb24gUGFyc2VfZXJyb3Igb2YgW2BFb2YgfCBgU3ludGF4X2Vycm9yIG9mIHN0cmluZ11cblxuICBsZXQganNvbl92YWx1ZSB+cmVhZGVyID0gXG4gICAgbGV0IG9wZW4gVG9rZW5zIGluXG4gICAgbGV0IG9wZW4gUGFyc2VyX3Rvb2xzIGluXG4gICAgbGV0IHJlYyB0b2tlbl92YWx1ZSB0b2sgPSBiZWdpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgSU5UIGkgLT4gQ29tcGxpYW5jZS5pbnRlZ2VyIGlcbiAgICAgIHwgU1RSSU5HIHMgLT4gQ29tcGxpYW5jZS5zdHJpbmcgc1xuICAgICAgfCBCT09MIGIgLT4gQ29tcGxpYW5jZS5ib29sIGJcbiAgICAgIHwgRkxPQVQgZiAtPiBDb21wbGlhbmNlLm51bWJlciAoYEZsb2F0IGYpXG4gICAgICB8IElORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBJbmZpbml0eVxuICAgICAgfCBORUdJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgTmVnaW5maW5pdHlcbiAgICAgIHwgTkFOIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOYW5cbiAgICAgIHwgTlVMTCAtPiBDb21wbGlhbmNlLm51bGxcbiAgICAgIHwgTEFSR0VJTlQgcyAtPiBDb21wbGlhbmNlLmxhcmdlaW50IHNcbiAgICAgIHwgRU9GIC0+IHJhaXNlIChQYXJzZV9lcnJvciBgRW9mKVxuICAgICAgfCBDT01NQSB8IENPTE9OIHwgQUUgfCBPRSB8IFRFIHwgVkUgfCBMRVhfRVJST1IgXyB8IENPTVBMSUFOQ0VfRVJST1IgXyAtPlxuICAgICAgICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICB8IEFTIC0+IGFycmF5X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IE9TIC0+IG9iamVjdF92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBUUyAtPiB0dXBsZV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBWUyAtPiB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpXG4gICAgZW5kXG4gICAgYW5kIHZhbHVlICgpID0gdG9rZW5fdmFsdWUgKHJlYWRlciAoKSlcbiAgICBhbmQgYXJyYXlfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IFtdXG4gICAgICB8IF8gLT4gYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHRva2VuX3ZhbHVlIHRvayBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQUUgLT4gQ29tcGxpYW5jZS5saXN0IChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gYXJyYXlfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIFtdXG4gICAgICB8IF8gLT4gb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gY29sb25fdmFsdWUgdG9rICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGtleV9jb2xvbl92YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgY29sb25fdmFsdWUgdiAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBrZXlfY29sb25fdmFsdWUgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBDT0xPTiAtPiAoaywgdmFsdWUgKCkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IHRvayAtPiAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdjEgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgQ09NTUEgLT4gYmVnaW5cbiAgICAgICAgbGV0IHYyID0gdmFsdWUgKCkgaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIFt2MTsgdjJdXG4gICAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzIFt2MjsgdjFdXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFRFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInR1cGxlIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGVsZW1lbnRzXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB0dXBsZV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIE5vbmVcbiAgICAgICAgfCBDT0xPTiAtPiB2YXJpYW50X2VuZCBrIChTb21lICh2YWx1ZSAoKSkpXG4gICAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICB8IFZFIC0+IHJhaXNlIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBcInZhcmlhbnQgbXVzdCBoYXZlIGF0IGxlYXN0IGEgc3RyaW5nXCIpKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X2VuZCBrIHYgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgdlxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGluXG4gICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gTm9uZVxuICAgIHwgZXhjZXB0aW9uIGV4bl8gLT4gcmFpc2UgZXhuX1xuICAgIHwgRU9GIC0+IE5vbmVcbiAgICB8IHRvayAtPiBTb21lICh0b2tlbl92YWx1ZSB0b2spXG5cbiAgbGV0IGRlY29kZSB+cmVhZGVyID0gXG4gICAgbWF0Y2gganNvbl92YWx1ZSB+cmVhZGVyIHdpdGhcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgYEVvZikgLT4gRXJyb3IgXCJVbmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIGVycikpIC0+IEVycm9yIGVyclxuICAgIHwgZXhjZXB0aW9uIChMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVycikgLT4gRXJyb3IgZXJyXG4gICAgfCByZXMgLT4gT2sgcmVzXG5cbmVuZFxuIiwibGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG5sZXQgYWRkX2hleF9ieXRlIH5hZGRfY2hhciBpID1cbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgYWRkX2NoYXIgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxubGV0IGVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIChpbnRfb2ZfY2hhciBjKVxuICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gIGRvbmVcbiBcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIHByZXR0eV9wcmludCA6IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHByZXR0eV9wcmludF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbGV0IHRvX2pzb25fc3RyaW5nIHMgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBVdGlscy5lc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBhZGRfcXVvdGVfc3RyaW5nIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBwcF9saXN0IHNlcCBwcHggb3V0IGwgPVxuICAgIGxldCBwcF9zZXAgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJXNAIFwiIHNlcCBpblxuICAgIEZvcm1hdC5wcF9wcmludF9saXN0IH5wcF9zZXAgcHB4IG91dCBsXG5cbiAgbGV0IHJlYyBmb3JtYXQgKG91dDpGb3JtYXQuZm9ybWF0dGVyKSBqc29uIDogdW5pdCA9XG4gICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gRm9ybWF0LnBwX3ByaW50X2Jvb2wgb3V0IGJcbiAgICAgIHwgYEludCBpIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+XG4gICAgICAgIGxldCBzID0gQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYgaW5cbiAgICAgICAgRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBJbnRsaXQgc1xuICAgICAgfCBgRmxvYXRsaXQgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgc1xuICAgICAgfCBgTGlzdCBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIltdXCJcbiAgICAgIHwgYExpc3QgbCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJbQDs8MSAwPkBbPGhvdj4lYUBdQDs8MSAtMj5dXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBBc3NvYyBbXSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcInt9XCJcbiAgICAgIHwgYEFzc29jIGwgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwie0A7PDEgMD4lYUA7PDEgLTI+fVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdF9maWVsZCkgbFxuICAgICAgfCBgVHVwbGUgbCAtPlxuICAgICAgICBpZiBsID0gW10gdGhlbiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIigpXCJcbiAgICAgICAgZWxzZSBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQCwlYUA7PDAgLTI+KVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgVmFyaWFudCAocywgTm9uZSkgLT5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPCVzPlwiICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgVmFyaWFudCAocywgU29tZSBqc29uKSAtPlxuICAgICAgICBsZXQgcyA9IHRvX2pzb25fc3RyaW5nIHMgaW5cbiAgICAgICAgRm9ybWF0LmZwcmludGYgb3V0IFwiPEBbPGh2Mj4lczogJWFAXT5cIiBzIGZvcm1hdCBqc29uXG5cbiAgYW5kIGZvcm1hdF9maWVsZCBvdXQgKG5hbWUsIGpzb24pID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JXM6ICVhQF1cIiAodG9fanNvbl9zdHJpbmcgbmFtZSkgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50IG91dCBqc29uID1cbiAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJAWzxodjI+JWFAXVwiIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19zdHJpbmcganNvbiA9XG4gICAgRm9ybWF0LmFzcHJpbnRmIFwiJWFcIiBwcmV0dHlfcHJpbnQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICAgIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhQD9cIiBwcmV0dHlfcHJpbnQganNvblxuXG5lbmRcbiIsImxldCBlcnJvciBtc2cgX2pzb24gPSByYWlzZSAoRmFpbHVyZSBtc2cpXG5cbm1vZHVsZSBJbnRlcm5hbCA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBTID0gc2lnXG4gICAgdHlwZSBqc29uXG4gICAgdmFsIG51bGwgOiB1bml0IC0+IGpzb25cbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfc3RyaWN0X2ludGYgPSBzaWdcbiAgICB0eXBlIGpzb25cblxuICAgIHZhbCBtZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBpbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIG1hcCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdXG4gICAgdmFsIHRvX2Fzc29jIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gLT4gKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB2YWwgdG9fYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSAtPiBib29sXG4gICAgdmFsIHRvX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fc3RyaW5nIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSAtPiBzdHJpbmdcbiAgICB2YWwgdG9fc3RyaW5nX29wdGlvbiA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIHwgYE51bGwgXSAtPiBzdHJpbmcgb3B0aW9uXG4gICAgdmFsIHRvX29wdGlvbiA6ICgoWz4gYE51bGwgXSBhcyAnYSkgLT4ganNvbikgLT4gJ2EgLT4ganNvbiBvcHRpb25cbiAgICB2YWwgdG9fbGlzdCA6IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCB0b19ib29sX29wdGlvbiA6IFs+IGBCb29sIG9mIGJvb2wgfCBgTnVsbCBdIC0+IGJvb2wgb3B0aW9uXG4gICAgdmFsIHRvX2Zsb2F0X29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCBjb252ZXJ0X2VhY2ggOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgcmV2X2ZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIHJldl9mbGF0dGVuIDogJ2EgbGlzdCAtPiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZsYXR0ZW4gOiBbPiBgTGlzdCBvZiAnYSBsaXN0IF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9pbmRleCA6IGludCAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbGlzdCA6IFs+IGBMaXN0IG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9hc3NvYyA6IFs+IGBBc3NvYyBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYm9vbCA6IFs+IGBCb29sIG9mIGJvb2wgXSBsaXN0IC0+IGJvb2wgbGlzdFxuICAgIHZhbCBmaWx0ZXJfZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwgZmlsdGVyX3N0cmluZyAgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIGxpc3QgLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgZmlsdGVyX21lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSBsaXN0IC0+IGpzb24gbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGtleXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gc3RyaW5nIGxpc3RcbiAgICB2YWwgdmFsdWVzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+ICdhIGxpc3RcbiAgICB2YWwgY29tYmluZSA6IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIFNoYXJlZCA9IHN0cnVjdFxuICAgIGxldCByZWMgcmV2X2ZpbHRlcl9tYXAgZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBmIGhkIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJldl9maWx0ZXJfbWFwIGYgYWNjIHRsXG4gICAgICAgIHwgU29tZSB2IC0+IHJldl9maWx0ZXJfbWFwIGYgKHY6OmFjYykgdGxcblxuICAgIGxldCBmaWx0ZXJfbWFwIGYgbCA9IExpc3QucmV2IChyZXZfZmlsdGVyX21hcCBmIFtdIGwpXG5cbiAgICBsZXQgcmVjIHJldl9mbGF0dGVuIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGhkIHdpdGhcbiAgICAgICAgfCBgTGlzdCBsMiAtPiByZXZfZmxhdHRlbiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYykgdGxcbiAgICAgICAgfCBfIC0+IHJldl9mbGF0dGVuIGFjYyB0bFxuXG4gICAgbGV0IGZsYXR0ZW4gbCA9IExpc3QucmV2IChyZXZfZmxhdHRlbiBbXSBsKVxuXG4gIGVuZFxuXG4gIG1vZHVsZSBTdHJpY3QoTSA6IFMpIDogSW50ZXJuYWxfc3RyaWN0X2ludGZcbiAgICB3aXRoIHR5cGUganNvbiA9IE0uanNvblxuICA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IE0uanNvblxuXG4gICAgbGV0IGFzc29jIG5hbWUgb2JqIDoganNvbiA9IHRyeSBMaXN0LmFzc29jIG5hbWUgb2JqIHdpdGggTm90X2ZvdW5kIC0+IE0ubnVsbCAoKVxuXG4gICAgbGV0IG1lbWJlciBuYW1lIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgQXNzb2Mgb2JqIC0+IGFzc29jIG5hbWUgb2JqXG4gICAgICB8IGpzb24gLT4gZXJyb3IgKFwiRXhwZWN0ZWQgYEFzc29jIHRvIGZpbmQgbmFtZSAnXCIgXiBuYW1lIF4gXCInIGluXCIpIGpzb25cblxuICAgIGxldCBpbmRleCBpIHYgOiBqc29uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICAgICAgICBsZXQgaScgPSBpZiBpIDwgMCB0aGVuIGxlbiArIGkgZWxzZSBpIGluXG4gICAgICAgICAgaWYgaScgPCAwIHx8IGknID49IGxlbiB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChzdHJpbmdfb2ZfaW50IGkgXiBcIiBvdXQgb2YgYm91bmRzXCIpKVxuICAgICAgICAgIGVsc2UgTGlzdC5udGggbCBpJ1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgaW5kZXggbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCBtYXAgZiB2ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBmIGwpXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBtYXAgb3ZlciBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IHRvX2Fzc29jID0gZnVuY3Rpb24gfCBgQXNzb2Mgb2JqIC0+IG9iaiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQXNzb2NcIiBqc29uXG4gICAgbGV0IHRvX2Jvb2wgPSBmdW5jdGlvbiB8IGBCb29sIGIgLT4gYiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbFwiIGpzb25cbiAgICBsZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiB8IGBGbG9hdCBmIC0+IGYgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBzXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nXCIganNvblxuXG4gICAgbGV0IHRvX3N0cmluZ19vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gU29tZSBzXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmcgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fb3B0aW9uIGYgdiA6IGpzb24gb3B0aW9uID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IHYgLT4gU29tZSAoZiB2KVxuXG4gICAgbGV0IHRvX2xpc3QgdiA6IGpzb24gbGlzdCA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCB0b19mbG9hdF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2Jvb2xfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEJvb2wgYiAtPiBTb21lIGJcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2wgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGNvbnZlcnRfZWFjaCBmID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgbCAtPiBMaXN0Lm1hcCBmIGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHJldl9maWx0ZXJfbWFwID0gU2hhcmVkLnJldl9maWx0ZXJfbWFwXG4gICAgbGV0IGZpbHRlcl9tYXAgPSBTaGFyZWQuZmlsdGVyX21hcFxuXG4gICAgbGV0IHJldl9mbGF0dGVuID0gU2hhcmVkLnJldl9mbGF0dGVuXG4gICAgbGV0IGZsYXR0ZW4gPSBTaGFyZWQuZmxhdHRlblxuXG4gICAgbGV0IGZpbHRlcl9pbmRleCBpIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gfCBgTGlzdCBsIC0+ICh0cnkgU29tZSAoTGlzdC5udGggbCBpKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbGlzdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYExpc3QgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Fzc29jIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiBTb21lIGwgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Jvb2wgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBCb29sIGIgLT4gU29tZSBiIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9mbG9hdCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEZsb2F0IGYgLT4gU29tZSBmIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9zdHJpbmcgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBTdHJpbmcgcyAtPiBTb21lIHMgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbWVtYmVyIGsgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQXNzb2MgbCAtPiAodHJ5IFNvbWUgKExpc3QuYXNzb2MgayBsKSB3aXRoIF8gLT4gTm9uZSkgfCBfIC0+IE5vbmUpIGxcblxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcblxuICAgIGxldCBrZXlzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKGtleSwgXykgLT4ga2V5KVxuXG4gICAgbGV0IHZhbHVlcyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChfLCB2YWx1ZSkgLT4gdmFsdWUpXG5cbiAgICBsZXQgY29tYmluZSBmaXJzdCBzZWNvbmQgPVxuICAgICAgbWF0Y2ggKGZpcnN0LCBzZWNvbmQpIHdpdGhcbiAgICAgIHwgKGBBc3NvYyBhLCBgQXNzb2MgYikgLT4gYEFzc29jIChhIEAgYilcbiAgICAgIHwgKF8sIF8pIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRXhwZWN0ZWQgdHdvIG9iamVjdHNcIilcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9iYXNpY19pbnRmID0gc2lnXG5cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19pbnQgOiBbPiBgSW50IG9mIGludCBdIC0+IGludFxuICAgIHZhbCB0b19pbnRfb3B0aW9uIDogWz4gYEludCBvZiBpbnQgfCBgTnVsbCBdIC0+IGludCBvcHRpb25cbiAgICB2YWwgZmlsdGVyX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gbGlzdCAtPiBpbnQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbnVtYmVyIDogWz4gYEludCBvZiBpbnQgfCBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgZW5kXG5cbiAgbW9kdWxlIEJhc2ljKE0gOiBTKSA6IEludGVybmFsX2Jhc2ljX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gZmxvYXQgaVxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50LCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9faW50ID0gZnVuY3Rpb24gfCBgSW50IGkgLT4gaSB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50XCIganNvblxuXG4gICAgbGV0IHRvX2ludF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSBpXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgZmlsdGVyX2ludCBsID0gU2hhcmVkLmZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBJbnQgaSAtPiBTb21lIGkgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIFNoYXJlZC5maWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc2lnXG4gICAgdmFsIHNvcnQgOiAoWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCB8IGBMaXN0IG9mICdhIGxpc3QgfFxuICAgICAgICAgICAgICAgICAgIGBUdXBsZSBvZiAnYSBsaXN0IHwgYFZhcmlhbnQgb2YgJ2IgKiAnYSBvcHRpb24gXSBhcyAnYSkgLT4gJ2FcbiAgZW5kXG5cbiAgbW9kdWxlIEV4dGVuZGVkKE0gOiBTKSA6IEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzdHJ1Y3RcblxuICAgIGxldCByZWMgc29ydCBqc29uID1cbiAgICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbyA9IExpc3QucmV2IChMaXN0LnJldl9tYXAgKGZ1biAoaywgdikgLT4gKGssIHNvcnQgdikpIG8pIGluXG4gICAgICAgIGBBc3NvYyAoKExpc3Quc3RhYmxlX3NvcnQgKGZ1biAoazEsIF8pIChrMiwgXykgLT4gU3RyaW5nLmNvbXBhcmUgazEgazIpKSBvKVxuICAgICAgfCBgVHVwbGUgbFxuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIHNvcnQgbCkpXG4gICAgICB8IGBWYXJpYW50IChrLCBTb21lIHYpIGFzIHYxIC0+XG4gICAgICAgIGxldCB2JyA9IHNvcnQgdiBpbiBpZiB2JyA9PSB2IHRoZW4gdjEgZWxzZSBgVmFyaWFudCAoaywgU29tZSB2JylcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIFN0cmljdCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uU3RyaWN0Lmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5kZWQgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkV4dGVuZGVkLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuXG5tb2R1bGUgWW9qc29uX3NhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcbiIsImxldCB0b2tlbl90b19zdHJpbmcgKHRvazpUb2tlbnMudG9rZW4pID1cbiAgbWF0Y2ggdG9rIHdpdGhcbiAgfCBTVFJJTkcgcyAtPiBzXG4gIHwgT1MgLT4gXCJ7XCJcbiAgfCBPRSAtPiBcIn1cIlxuICB8IE5VTEwgLT4gXCJOdWxsXCJcbiAgfCBORUdJTkZJTklUWSAtPiBcIi1JbmZpbml0eVwiXG4gIHwgTkFOIC0+IFwiTkFOXCJcbiAgfCBMRVhfRVJST1IgZXJyIC0+IFwiaW5wdXQgZXJyb3IgJ1wiIF4gZXJyIF4gXCInXCJcbiAgfCBMQVJHRUlOVCBzIC0+IHNcbiAgfCBJTlQgaSAtPiBzdHJpbmdfb2ZfaW50IGlcbiAgfCBJTkZJTklUWSAtPiBcIkluZmluaXR5XCJcbiAgfCBGTE9BVCBmIC0+IHN0cmluZ19vZl9mbG9hdCBmXG4gIHwgRU9GIC0+IFwiZW5kLW9mLWZpbGVcIlxuICB8IENPTVBMSUFOQ0VfRVJST1IgZXJyIC0+IGVyclxuICB8IENPTU1BIC0+IFwiLFwiXG4gIHwgQ09MT04gLT4gXCI6XCJcbiAgfCBCT09MIGIgLT4gaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG4gIHwgQVMgLT4gXCJbXCJcbiAgfCBBRSAtPiBcIl1cIlxuICB8IFZTIC0+IFwiPFwiXG4gIHwgVkUgLT4gXCI+XCJcbiAgfCBUUyAtPiBcIihcIlxuICB8IFRFIC0+IFwiKVwiXG4iLCJtb2R1bGUgdHlwZSBSZWFkZXJfc3RyaW5nX2ZpbGUgPSBzaWdcbiAgdHlwZSBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9zdHJpbmdfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZmlsZSA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9leG4gOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2V4biA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG4gIHZhbCBqc29uX29mX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9leG4gOiBMZXhpbmcubGV4YnVmIC0+IGpzb25cbiAgdmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9maWxlIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IGpzb25cbiAgdmFsIG9mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gOiBpbl9jaGFubmVsIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA6ID9zdHJlYW06Ym9vbCAtPiBMZXhpbmcubGV4YnVmIC0+IChqc29uIG9wdGlvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWwgOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZSA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcblxuICB2YWwgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5lbmRcblxubW9kdWxlIE1ha2UgKExleHhlciA6IENvbXBsaWFudF9sZXh4ZXIuTGV4ICkgKFBhcnNlciA6IFBhcnNlci5QYXJzZXIpIDogUmVhZGVyX3N0cmluZ19maWxlXG4gIHdpdGggdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuPSBzdHJ1Y3RcbiAgdHlwZSBqc29uID0gUGFyc2VyLkNvbXBsaWFuY2UuanNvblxuXG4gIGxldCByZWFkX2pzb24nIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEVPRiAtPiBPayByZXNcbiAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG4gIGxldCByZWFkX2pzb24gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIChFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbylcblxuICBsZXQganNvbl9vZl9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXhuIHMgPVxuICAgIG1hdGNoIGpzb25fb2Zfc3RyaW5nIHMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9zdHJpbmcgcyA9IGpzb25fb2Zfc3RyaW5nX2V4biBzXG5cbiAgbGV0IGpzb25fb2ZfZmlsZSBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgICBsZXQgcmVzID0gcmVhZF9qc29uIH5sZXhidWYgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9leG4gZmlsZW5hbWUgPVxuICAgIG1hdGNoIGpzb25fb2ZfZmlsZSBmaWxlbmFtZSB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbCBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9leG4gaW5jID1cbiAgICBtYXRjaCBqc29uX29mX2NoYW5uZWwgaW5jIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXhuIGxleGJ1ZiA9XG4gICAgbWF0Y2gganNvbl9vZl9sZXhidWYgbGV4YnVmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9leG4gZiA9XG4gICAgbWF0Y2gganNvbl9vZl9mdW5jdGlvbiBmIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2ZfZmlsZSA9IGpzb25fb2ZfZmlsZV9leG5cbiAgbGV0IG9mX2NoYW5uZWwgPSBqc29uX29mX2NoYW5uZWxfZXhuXG4gIGxldCBvZl9mdW5jdGlvbiA9IGpzb25fb2ZfZnVuY3Rpb25fZXhuXG5cbiAgKCogRXJyb3JfaW5mby50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZiA9XG4gICAgbWF0Y2ggcmVhZF9qc29uJyB+bGV4YnVmIHdpdGhcbiAgICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG4gIGxldCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgcmVzID0ganNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5jIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIHsgRXJyb3JfaW5mby5saW5lID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDsgbXNnID0gZXJyIH1cblxuICBsZXQganNvbl9vZl9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gICgqIEludGVybmFsIGNvbXBhdGliaWxpdHkgZnVuY3Rpb24gc3VwcG9ydGluZyB0aGUgc3RyZWFtIGZsYWcgKilcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgPyhzdHJlYW0gPSBmYWxzZSkgbGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IHJlcyA9IG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IGlmIHN0cmVhbSB0aGVuIE9rIE5vbmUgZWxzZSBFcnJvciBcImVtcHR5IGlucHV0XCJcbiAgICB8IE9rIChTb21lIHJlcykgLT4gYmVnaW5cbiAgICAgIG1hdGNoIHN0cmVhbSB3aXRoXG4gICAgICB8IHRydWUgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgfCBmYWxzZSAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IEVPRiAtPiBPayAoU29tZSByZXMpXG4gICAgICAgIHwgZXhjZXB0aW9uIExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuICAgICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgICAgZW5kXG4gICAgICBlbmRcbiAgICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuICAgIGluXG4gICAgbWF0Y2ggcmVzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiBPayByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciBlcnJfaW5mb1xuXG5cbiAgKCogU3RyZWFtLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIGxldCBtc2cgPSBFcnJvcl9pbmZvLnRvX3N0cmluZyBlcnJfaW5mbyBpblxuICAgICAgICByYWlzZSAoRmFpbHVyZSBtc2cpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gICgqIFN0cmVhbS50IEpzb25fZXJyb3JfaW5mbyByYWlzaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgcmFpc2UgKEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbiB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9odW1fZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19jaGFubmVsX2h1bV9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZV9odW0gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIG9jIGkgPVxuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIG9jIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBvYyAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZm10IG9jIGpzb24gfmVvbCB+aW5jciB+cHNlcCA9IFxuICAgIGxldCBhZGRfY2hhciA9IG91dHB1dF9jaGFyIG9jIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBvdXRwdXRfc3RyaW5nIG9jIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBvYyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcHNlcCA9IFwiOlwiIF4gcHNlcCBpblxuICAgIGxldCByZWMgZm10IG9mZiB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICd7JzsgYWRkX3N0cmluZyBlb2w7IGpzb25fYXNzb2MgKG9mZiArIGluY3IpIG87XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ1snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSBsO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJygnOyBhZGRfc3RyaW5nIGVvbDsganNvbl9saXN0IChvZmYgKyBpbmNyKSB0O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICc8JzsgYWRkX3N0cmluZyBlb2w7ICB2YXJpYW50IChvZmYgKyBpbmNyKSB2O1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG9mZiBvID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBvZmYgdiApIG9cbiAgICBhbmQgcGFpciBvZmYgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIHBzZXA7IGZtdCBvZmYgdlxuICAgIGFuZCBqc29uX2xpc3Qgb2ZmIGwgPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgb2ZmIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgb2ZmIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgcHNlcDsgZm10IChvZmYgKyBpbmNyKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCAwIGpzb247XG4gICAgYWRkX3N0cmluZyBlb2xcblxuICBsZXQganNvbl90b19jaGFubmVsJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlwiIH5pbmNyOjAgfnBzZXA6XCJcIlxuICBsZXQganNvbl90b19jaGFubmVsX2h1bScgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcXG5cIiB+aW5jcjoyIH5wc2VwOlwiIFwiXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2V4biA9IGpzb25fdG9fY2hhbm5lbCdcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuID0ganNvbl90b19jaGFubmVsX2h1bSdcblxuICBsZXQganNvbl90b19maWxlIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWwgb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2h1bSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHRvX2ZpbGUgPSBqc29uX3RvX2ZpbGVfZXhuXG4gIGxldCB0b19maWxlX2h1bSA9IGpzb25fdG9fZmlsZV9odW1fZXhuXG4gIGxldCB0b19jaGFubmVsID0ganNvbl90b19jaGFubmVsX2V4blxuICBsZXQgdG9fY2hhbm5lbF9odW0gPSBqc29uX3RvX2NoYW5uZWxfaHVtX2V4blxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiBqc29uX3RvX2NoYW5uZWxfZXhuIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgZmlsZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2h1bV9leG4gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgdG9fc3RyaW5nX2h1bSA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHN0cmluZ1xuICB2YWwgc3RyZWFtX3RvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBidWYgaSA9XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKGkgbGFuZCAweDBmKSlcblxuICBsZXQgZXNjYXBlIGJ1ZiBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIGJ1ZiAoaW50X29mX2NoYXIgYylcbiAgICAgIHwgXyAgICAgIC0+IGFkZF9jaGFyIHMuW2ldXG4gICAgZG9uZVxuICAgXG4gIGxldCBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT4gYWRkX2NoYXIgJ3snOyBqc29uX2Fzc29jIG87IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+IGFkZF9jaGFyICdbJzsganNvbl9saXN0IGw7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT4gYWRkX2NoYXIgJygnOyBqc29uX2xpc3QgdDsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT4gYWRkX2NoYXIgJzwnOyAgdmFyaWFudCB2OyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBwYWlyIHYgKSBvXG4gICAgYW5kIHBhaXIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfY2hhciAnOic7IGZtdCB2XG4gICAgYW5kIGpzb25fbGlzdCBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgXCJcIiBpbiBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IFwiLFwiOyBmbXQgdiApIGxcbiAgICBhbmQgdmFyaWFudCAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfY2hhciAnOic7IGZtdCBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBqc29uXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb24gPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgYnVmIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCByZWMgZm10IGxkciB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJ7XFxuXCI7IGpzb25fYXNzb2MgKGxkciBeIFwiICBcIikgbztcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiW1xcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgbDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCIoXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSB0O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCI8XCI7ICB2YXJpYW50IChsZHIgXiBcIiAgXCIpIHY7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbGRyIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgbGRyIHYgKSBvXG4gICAgYW5kIHBhaXIgbGRyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBcIjogXCI7IGZtdCBsZHIgdlxuICAgIGFuZCBqc29uX2xpc3QgbGRyIGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcXG5cIiBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBsZHIgIHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgbGRyIChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgKGxkciBeIFwiICBcIikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgXCJcIiBqc29uO1xuICAgIGFkZF9jaGFyICdcXG4nXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcicgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXIgYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfZXhuID0ganNvbl90b19zdHJpbmcnXG4gIGxldCB0b19zdHJpbmcgPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2V4biA9IGpzb25fdG9fYnVmZmVyJ1xuICBsZXQgdG9fYnVmZmVyID0ganNvbl90b19idWZmZXInXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bScganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bSBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fc3RyaW5nX2h1bScganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bSBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW1fZXhuID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQgdG9fc3RyaW5nX2h1bSA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IGpzb25fdG9fYnVmZmVyX2h1bV9leG4gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG4gIGxldCB0b19idWZmZXJfaHVtID0ganNvbl90b19idWZmZXJfaHVtJ1xuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fYnVmZmVyIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG5lbmRcbiIsImV4Y2VwdGlvbiBKc29uX2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQganNvbl9lcnJvciBtc2cgPSByYWlzZSAoSnNvbl9lcnJvciBtc2cpXG5cbnR5cGUgbGV4ZXJfc3RhdGUgPSB7XG4gIGJ1ZiA6IEJ1ZmZlci50O1xuICBtdXRhYmxlIGxudW0gOiBpbnQ7XG4gIG11dGFibGUgYm9sIDogaW50O1xuICBtdXRhYmxlIGZuYW1lIDogc3RyaW5nIG9wdGlvbjtcbn1cblxubGV0IGluaXRfbGV4ZXIgP2J1ZjpfID9mbmFtZSA/KGxudW0gPSAxKSAoKSA9XG4gIHtcbiAgICBidWYgPSBCdWZmZXIuY3JlYXRlIDE2ICAoKiB1bnVzZWQgKilcbiAgOyBsbnVtID0gbG51bVxuICA7IGJvbCA9IDBcbiAgOyBmbmFtZSA9IGZuYW1lXG4gIH1cblxubW9kdWxlIENvbW1vbl9yZWFkZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF9yZWFkZXIgPSBzdHJ1Y3RcbiAgICBtb2R1bGUgTGV4eGVyID0gQ29tcGxpYW50X2xleHhlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgbW9kdWxlIFBhcnNlciA9IFBhcnNlci5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBSZWFkZXJfc3RyaW5nX2ZpbGUuTWFrZSAoTGV4eGVyKSAoUGFyc2VyKVxuICBlbmRcblxuICB0eXBlIGpzb24gPSBJbnRlcm5hbF9yZWFkZXIuanNvblxuICB0eXBlIHQgPSBqc29uXG4gIHR5cGUganNvbl9saW5lID0gWyBgSnNvbiBvZiB0IHwgYEV4biBvZiBleG4gXVxuXG4gICgqIEhlbHBlciBmdW5jdGlvbnMgKilcbiAgbGV0IGVycm9yX3RvX3N0cmluZyAoZXJyb3JfaW5mbzpFcnJvcl9pbmZvLnQpIGZuYW1lIGxudW0gPVxuICAgIGxldCBsbnVtID0gbWF0Y2ggbG51bSB3aXRoIFNvbWUgbG51bSAtPiBsbnVtIHwgTm9uZSAtPiAxIGluXG4gICAgbGV0IGluZm8gPSB7IGVycm9yX2luZm8gd2l0aCBsaW5lID0gbG51bSArIGVycm9yX2luZm8ubGluZSAtIDEgfSBpblxuICAgIGxldCBmbmFtZSA9IG1hdGNoIGZuYW1lIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBcIkxpbmVcIlxuICAgICAgfCBTb21lIG5hbWUgLT4gXCJGaWxlIFwiIF4gbmFtZSBeIFwiLCBsaW5lXCJcbiAgICBpblxuICAgIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcIiVzICVkIGNoYXJzICVkLSVkOiBcIiBmbmFtZSBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgICBsb2MgXiBpbmZvLm1zZ1xuXG4gIGxldCBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBmIGEgZm5hbWUgbG51bSA9XG4gICAgbWF0Y2ggZiBhIHdpdGhcbiAgICB8IE9rIGpzb24gLT4ganNvblxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gICgqIFJlYWRlcnMgKilcbiAgbGV0IGZyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fY2hhbm5lbCA/YnVmOl8gP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fbGV4YnVmIGxleHN0YXRlID9zdHJlYW0gbGV4YnVmID1cbiAgICBsZXQgZm5hbWUgPSBsZXhzdGF0ZS5mbmFtZSBpblxuICAgIGxldCBsbnVtID0gU29tZSBsZXhzdGF0ZS5sbnVtIGluXG4gICAgbWF0Y2ggSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID9zdHJlYW0gbGV4YnVmIHdpdGhcbiAgICB8IE9rIChTb21lIGpzb24pIC0+IGpzb25cbiAgICB8IE9rIE5vbmUgLT4ganNvbl9lcnJvciBcIkJsYW5rIGlucHV0IGRhdGFcIlxuICAgIHwgRXJyb3IgZXJyb3JfaW5mbyAtPiBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyb3JfaW5mbyBmbmFtZSBsbnVtKVxuXG4gIGxldCByZWFkX3QgbGV4c3RhdGUgbGV4YnVmID0gZnJvbV9sZXhidWYgbGV4c3RhdGUgbGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBzdHJlYW1fZiBhIGZuYW1lIGxudW0gPVxuICAgIGxldCBzdHJlYW0gPSBzdHJlYW1fZiBhIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBmbmFtZSBsbnVtKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID9sbnVtIGluX2NoYW5uZWwgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyAoSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluKSBpbl9jaGFubmVsIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgbGV4YnVmID1cbiAgICBsZXQgc3RyZWFtID0gSW50ZXJuYWxfcmVhZGVyLnN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgZXhjZXB0aW9uIEVycm9yX2luZm8uSnNvbl9lcnJvcl9pbmZvIGVycl9pbmZvIC0+XG4gICAgICAgIGZpbiAoKTsganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGxleHN0YXRlLmZuYW1lIChTb21lIGxleHN0YXRlLmxudW0pKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsID9idWY6XyA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgP2ZuYW1lID8obG51bSA9IDEpIGljID1cbiAgICBsZXQgZiBpID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbG51bSA9IGxudW0gKyBpIGluXG4gICAgICAgIGxldCBsaW5lID0gaW5wdXRfbGluZSBpYyBpbiBTb21lIChgSnNvbiAoZnJvbV9zdHJpbmcgP2ZuYW1lIH5sbnVtIGxpbmUpKVxuICAgICAgd2l0aFxuICAgICAgICB8IEVuZF9vZl9maWxlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgICB8IGV4bl8gLT4gZmluICgpOyBTb21lIChgRXhuIGV4bl8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IGxpbmVzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWU6XyA/bG51bTpfIGZpbGVuYW1lID1cbiAgICBsZXQgaWMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGljKSBpY1xuZW5kXG5cbm1vZHVsZSBDb21tb25fd3JpdGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfd3JpdGVyID0gc3RydWN0XG4gICAgaW5jbHVkZSBXcml0ZXJfc3RyaW5nLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFdyaXRlcl9maWxlLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFByZXR0eS5NYWtlKENvbXBsaWFuY2UpXG4gIGVuZFxuXG4gIGxldCB0b19zdGFuZGFyZCBqc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2ICAoKiBpbnQgaXMgb2sgb24gb3V0cHV0ICopXG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBGbG9hdGxpdCB2IC0+IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHYpXG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIFN0cmluZy5sZW5ndGggcyB3aXRoXG4gICAgICAgIHwgMCB8IDEgLT4gYFN0cmluZyBzICAgICAgICAgKCogbWFsZm9ybWVkLCBzaG91bGQgaGF2ZSBkb3VibGUtcXVvdGVzIGF0IHN0YXJ0IGFuZCBlbmQgKilcbiAgICAgICAgfCBfIC0+IGBTdHJpbmcgKFN0cmluZy5zdWIgcyAxIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICAgICAgZW5kXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+IGJlZ2luXG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICAgICAgZW5kXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gICgqIFdyaXRlcnMgKilcblxuICBsZXQgdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nIGpzb25cblxuICBsZXQgdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIG91dF9jaGFubmVsIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwganNvblxuXG4gIGxldCB0b19maWxlID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBmaWxlbmFtZSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lIGpzb25cblxuICBsZXQgdG9fb3V0YnVmID8oc3RkID0gZmFsc2UpIGJ1ZiBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiAodG9fc3RhbmRhcmQganNvbikgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fYnVmZmVyIGJ1ZiBqc29uXG5cbiAgbGV0IHRvX291dHB1dCA/YnVmOl8gP2xlbjpfID9zdGQgb3V0IGpzb24gPVxuICAgIGxldCBzdHIgPSB0b19zdHJpbmcgP3N0ZCBqc29uIGluXG4gICAgb3V0I291dHB1dCBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/c3RkIHN0cmVhbSA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0ICgpID0gU3RyZWFtLml0ZXJcbiAgICAgIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuICAgIGluXG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBzdHJlYW1fdG9fY2hhbm5lbCA/YnVmOl8gP2xlbjpfID9zdGQgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fY2hhbm5lbCA/c3RkIG9jIGpzb247IG91dHB1dF9jaGFyIG9jICdcXG4nKSBzdHJlYW1cblxuICBsZXQgc3RyZWFtX3RvX2ZpbGUgP2xlbjpfID9zdGQgZmlsZW5hbWUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgP3N0ZCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IHN0cmVhbV90b19vdXRidWYgP3N0ZCBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCB3cml0ZV90IGJ1ZiBqc29uID0gdG9fb3V0YnVmIGJ1ZiBqc29uXG5cbiAgKCogUHJldHR5IHByaW50ZXJzICopXG4gIGxldCBwcmV0dHlfcHJpbnQgPyhzdGQgPSBmYWxzZSkgb3V0IGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0ICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQganNvblxuXG4gIGxldCBwcmV0dHlfdG9fc3RyaW5nID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcganNvblxuXG4gIGxldCBwcmV0dHlfdG9fY2hhbm5lbCA/KHN0ZCA9IGZhbHNlKSBvYyBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvblxuXG4gICgqIFV0aWxpdGllcyAqKVxuICBsZXQgc2hvdyBqc29uID0gVXRpbGl0aWVzLmpzb25fdG9fc3RyaW5nX3JlcHIganNvblxuICBsZXQgcHAgb3V0IGpzb24gPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc2hvdyBqc29uKVxuZW5kXG5cbm1vZHVsZSBCYXNpYyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uQmFzaWMuanNvblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5CYXNpYy5qc29uXG5cbiAgICBvcGVuIFRva2Vuc1xuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgXyA9IENPTVBMSUFOQ0VfRVJST1IgXCJJbnRlZ2VyIG91dCBvZiBib3VuZHNcIlxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSBmYWxzZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IGZhbHNlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBGbG9hdCAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBfbCA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICBsZXQgdmFyaWFudCBfbCA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuQmFzaWMuc29ydFxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLkJhc2ljXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBTYWZlID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIHNhZmUgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5cbiAgbGV0IHRvX2Jhc2ljIGpzb24gOiBCYXNpYy5qc29uID1cbiAgICBsZXQgcmVjIG1hcCBub2RlID1cbiAgICAgIG1hdGNoIG5vZGUgd2l0aFxuICAgICAgfCBgTnVsbCAtPiBgTnVsbFxuICAgICAgfCBgQm9vbCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50IF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnRsaXQgdiAtPiBgU3RyaW5nIHZcbiAgICAgIHwgYEZsb2F0IF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmcgXyBhcyB2IC0+IHZcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5Zb2pzb25fc2FmZVxuICBlbmRcbmVuZFxuXG5tb2R1bGUgUmF3ID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG5cbiAgdHlwZSBqc29uID1cbiAgICBbXG4gICAgfCBgTnVsbFxuICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICB8IGBGbG9hdGxpdCBvZiBzdHJpbmdcbiAgICB8IGBTdHJpbmdsaXQgb2Ygc3RyaW5nXG4gICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgIF1cblxuICAgIHR5cGUganNvbl9zdHJlYW0gPSBKc29uX3N0cmVhbS5FeHRlbmRlZC5qc29uICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIlxuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludGxpdCAoc3RyaW5nX29mX2ludCBpKVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nbGl0IHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdGxpdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0bGl0IFwiSW5maW5pdHlcIlxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdGxpdCBcIi1JbmZpbml0eVwiXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0bGl0IFwiTmFOXCJcbiAgICB8IGBGbG9hdGxpdCBmIC0+ICBgRmxvYXRsaXQgZlxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gYFRzXG4gICAgICBsZXQgdHVwbGVfZW5kICgpID0gYFRlXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IGBWc1xuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gYFZlXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5FeHRlbmRlZC5zb3J0XG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xubW9kdWxlIEZGQ2FjaGUgPSBGRkNhY2hlXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIFlvanNvbiA9IHN0cnVjdFxuICBpbmNsdWRlIEpzb254dC5Zb2pzb25cbmVuZFxuXG5tb2R1bGUgRW5jb2RpbmdzID0gc3RydWN0XG4gIGxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG4gIGxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxuICBsZXQgb2ZfanN0ciBqc3RyID1cbiAgICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gICAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG4gIGxldCBvZl9qdiBqdiA9IEp2LnRvX2pzdHIganYgfD4gb2ZfanN0clxuZW5kXG5cbmxldCByYW5kb21fc3RhdGUgPSBSYW5kb20uZ2V0X3N0YXRlICgpXG5sZXQgbmV3X3V1aWRfdjQgKCkgPSBVdWlkbS52NF9nZW4gcmFuZG9tX3N0YXRlICgpXG5cbigqKiBbdGVlIGYgeF0gYXBwbGllcyBbZl0gdG8gW3hdIGFuZCByZXR1cm5zIFt4XSAqKVxubGV0IHRlZSBmIHggPVxuICBsZXQgKCkgPSBmIHggaW5cbiAgeFxuIiwib3BlbiBTdGRMYWJlbHNcbm9wZW4gTW9yZUxhYmVsc1xub3BlbiEgWW9qc29uXG5cbnR5cGUgdCA9IFlvanNvbi5TYWZlLnRcblxubGV0IHlvanNvbl9vZl91bml0ICgpIDogdCA9IGBOdWxsXG5sZXQgeW9qc29uX29mX2Jvb2wgYiA6IHQgPSBgQm9vbCBiXG5sZXQgeW9qc29uX29mX3N0cmluZyBzdHIgOiB0ID0gYFN0cmluZyBzdHJcbmxldCB5b2pzb25fb2ZfYnl0ZXMgYnl0ZXMgOiB0ID0gYFN0cmluZyAoQnl0ZXMudG9fc3RyaW5nIGJ5dGVzKVxubGV0IHlvanNvbl9vZl9jaGFyIGMgOiB0ID0gYFN0cmluZyAoU3RyaW5nLm1ha2UgMSBjKVxubGV0IHlvanNvbl9vZl9pbnQgbiA6IHQgPSBgSW50IG5cbmxldCB5b2pzb25fb2ZfZmxvYXQgbiA6IHQgPSBgRmxvYXQgblxubGV0IHlvanNvbl9vZl9pbnQzMiAobiA6IEludDMyLnQpIDogdCA9IGBJbnRsaXQgKEludDMyLnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9pbnQ2NCAobiA6IEludDY0LnQpIDogdCA9IGBJbnRsaXQgKEludDY0LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgbiA6IHQgPSBgSW50bGl0IChOYXRpdmVpbnQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX3JlZiB5b2pzb25fb2ZfX2EgcmYgPSB5b2pzb25fb2ZfX2EgIXJmXG5sZXQgeW9qc29uX29mX2xhenlfdCB5b2pzb25fb2ZfX2EgbHYgPSB5b2pzb25fb2ZfX2EgKExhenkuZm9yY2UgbHYpXG5cbmxldCB5b2pzb25fb2Zfb3B0aW9uIHlvanNvbl9vZl9fYSA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHlvanNvbl9vZl9fYSB4XG4gIHwgTm9uZSAtPiBgTnVsbFxuOztcblxubGV0IHlvanNvbl9vZl9wYWlyIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgKGEsIGIpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGIgXVxuOztcblxubGV0IHlvanNvbl9vZl90cmlwbGUgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiB5b2pzb25fb2ZfX2MgKGEsIGIsIGMpID1cbiAgYExpc3QgWyB5b2pzb25fb2ZfX2EgYTsgeW9qc29uX29mX19iIGI7IHlvanNvbl9vZl9fYyBjIF1cbjs7XG5cbigqIExpc3QucmV2IChMaXN0LnJldl9tYXAgLi4uKSBpcyB0YWlsIHJlY3Vyc2l2ZSwgdGhlIE9DYW1sIHN0YW5kYXJkXG4gICBsaWJyYXJ5IExpc3QubWFwIGlzIE5PVC4gKilcbmxldCB5b2pzb25fb2ZfbGlzdCB5b2pzb25fb2ZfX2EgbHN0ID0gYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgfmY6eW9qc29uX29mX19hIGxzdCkpXG5cbmxldCB5b2pzb25fb2ZfYXJyYXkgeW9qc29uX29mX19hIGFyID1cbiAgbGV0IGxzdF9yZWYgPSByZWYgW10gaW5cbiAgZm9yIGkgPSBBcnJheS5sZW5ndGggYXIgLSAxIGRvd250byAwIGRvXG4gICAgbHN0X3JlZiA6PSB5b2pzb25fb2ZfX2EgYXIuKGkpIDo6ICFsc3RfcmVmXG4gIGRvbmU7XG4gIGBMaXN0ICFsc3RfcmVmXG47O1xuXG5sZXQgeW9qc29uX29mX2hhc2h0YmwgeW9qc29uX29mX2tleSB5b2pzb25fb2ZfdmFsIGh0YmwgPVxuICBsZXQgY29sbCB+a2V5OmsgfmRhdGE6diBhY2MgPSBgTGlzdCBbIHlvanNvbl9vZl9rZXkgazsgeW9qc29uX29mX3ZhbCB2IF0gOjogYWNjIGluXG4gIGBMaXN0IChIYXNodGJsLmZvbGQgaHRibCB+aW5pdDpbXSB+Zjpjb2xsKVxuOztcblxubGV0IHlvanNvbl9vZl9vcGFxdWUgXyA9IGBTdHJpbmcgXCI8b3BhcXVlPlwiXG5sZXQgeW9qc29uX29mX2Z1biBfID0gYFN0cmluZyBcIjxmdW4+XCJcblxuZXhjZXB0aW9uIE9mX3lvanNvbl9lcnJvciBvZiBleG4gKiB0XG5cbmxldCByZWNvcmRfY2hlY2tfZXh0cmFfZmllbGRzID0gcmVmIHRydWVcbmxldCBvZl95b2pzb25fZXJyb3JfZXhuIGV4YyB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChleGMsIHlvanNvbikpXG5sZXQgb2ZfeW9qc29uX2Vycm9yIHdoYXQgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoRmFpbHVyZSB3aGF0LCB5b2pzb24pKVxuXG5sZXQgdW5pdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiAoKVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidW5pdF9vZl95b2pzb246IGBOdWxsIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJvb2xfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEJvb2wgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJib29sX29mX3lvanNvbjogdHJ1ZS9mYWxzZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBzdHJpbmdfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJzdHJpbmdfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYnl0ZXNfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT4gQnl0ZXMub2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYnl0ZXNfb2ZfeW9qc29uOiBzdHJpbmcgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgY2hhcl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPlxuICAgIGlmIFN0cmluZy5sZW5ndGggc3RyIDw+IDFcbiAgICB0aGVuIG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgbXVzdCBjb250YWluIG9uZSBjaGFyYWN0ZXIgb25seVwiIHlvanNvbjtcbiAgICBzdHIuWzBdXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG9mIHNpemUgb25lIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50IHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBmbG9hdF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgRmxvYXQgdiAtPiB2XG4gIHwgYEludCBpIC0+IGZsb2F0X29mX2ludCBpXG4gIHwgYEludGxpdCBzdHIgLT4gZmxvYXRfb2Zfc3RyaW5nIHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiZmxvYXRfb2ZfeW9qc29uOiBmbG9hdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQzMl9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQzMi5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDMyLm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQzMl9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50NjRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50NjQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQ2NC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50NjRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG5hdGl2ZWludF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBOYXRpdmVpbnQub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBOYXRpdmVpbnQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcIm5hdGl2ZWludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgcmVmX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gcmVmIChhX19vZl95b2pzb24geW9qc29uKVxubGV0IGxhenlfdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IExhenkuZnJvbV92YWwgKGFfX29mX3lvanNvbiB5b2pzb24pXG5cbmxldCBvcHRpb25fb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+IE5vbmVcbiAgfCBlbCAtPiBTb21lIChhX19vZl95b2pzb24gZWwpXG47O1xuXG5sZXQgcGFpcl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgYSwgYlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwicGFpcl9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgdHJpcGxlX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIGNfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFsgYV95b2pzb247IGJfeW9qc29uOyBjX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGxldCBjID0gY19fb2ZfeW9qc29uIGNfeW9qc29uIGluXG4gICAgYSwgYiwgY1xuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwidHJpcGxlX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCBsaXN0X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgcmV2X2xzdCA9IExpc3QucmV2X21hcCBsc3QgfmY6YV9fb2ZfeW9qc29uIGluXG4gICAgTGlzdC5yZXYgcmV2X2xzdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibGlzdF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYXJyYXlfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IFtdIC0+IFt8fF1cbiAgfCBgTGlzdCAoaCA6OiB0KSAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCB0ICsgMSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIGxlbiAoYV9fb2ZfeW9qc29uIGgpIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPSBmdW5jdGlvblxuICAgICAgfCBbXSAtPiByZXNcbiAgICAgIHwgaCA6OiB0IC0+XG4gICAgICAgIHJlcy4oaSkgPC0gYV9fb2ZfeW9qc29uIGg7XG4gICAgICAgIGxvb3AgKGkgKyAxKSB0XG4gICAgaW5cbiAgICBsb29wIDEgdFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYXJyYXlfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGhhc2h0Ymxfb2ZfeW9qc29uIGtleV9vZl95b2pzb24gdmFsX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCBodGJsID0gSGFzaHRibC5jcmVhdGUgMCBpblxuICAgIGxldCBhY3QgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBbIGtfeW9qc29uOyB2X3lvanNvbiBdIC0+XG4gICAgICAgIEhhc2h0YmwuYWRkIGh0YmwgfmtleTooa2V5X29mX3lvanNvbiBrX3lvanNvbikgfmRhdGE6KHZhbF9vZl95b2pzb24gdl95b2pzb24pXG4gICAgICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IHR1cGxlIGxpc3QgbmVlZGVkXCIgeW9qc29uXG4gICAgaW5cbiAgICBMaXN0Lml0ZXIgbHN0IH5mOmFjdDtcbiAgICBodGJsXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBvcGFxdWVfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcIm9wYXF1ZV9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IG9wYXF1ZSB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbmxldCBmdW5fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciBcImZ1bl9vZl95b2pzb246IGNhbm5vdCBjb252ZXJ0IGZ1bmN0aW9uIHZhbHVlc1wiIHlvanNvblxuOztcblxubW9kdWxlIFByaW1pdGl2ZXMgPSBzdHJ1Y3RcbiAgbGV0IHlvanNvbl9vZl9hcnJheSA9IHlvanNvbl9vZl9hcnJheVxuICBsZXQgYXJyYXlfb2ZfeW9qc29uID0gYXJyYXlfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYm9vbCA9IHlvanNvbl9vZl9ib29sXG4gIGxldCBib29sX29mX3lvanNvbiA9IGJvb2xfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfY2hhciA9IHlvanNvbl9vZl9jaGFyXG4gIGxldCBjaGFyX29mX3lvanNvbiA9IGNoYXJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfZmxvYXQgPSB5b2pzb25fb2ZfZmxvYXRcbiAgbGV0IGZsb2F0X29mX3lvanNvbiA9IGZsb2F0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludCA9IHlvanNvbl9vZl9pbnRcbiAgbGV0IGludF9vZl95b2pzb24gPSBpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50MzIgPSB5b2pzb25fb2ZfaW50MzJcbiAgbGV0IGludDMyX29mX3lvanNvbiA9IGludDMyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDY0ID0geW9qc29uX29mX2ludDY0XG4gIGxldCBpbnQ2NF9vZl95b2pzb24gPSBpbnQ2NF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9saXN0ID0geW9qc29uX29mX2xpc3RcbiAgbGV0IGxpc3Rfb2ZfeW9qc29uID0gbGlzdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9uYXRpdmVpbnQgPSB5b2pzb25fb2ZfbmF0aXZlaW50XG4gIGxldCBuYXRpdmVpbnRfb2ZfeW9qc29uID0gbmF0aXZlaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX29wdGlvbiA9IHlvanNvbl9vZl9vcHRpb25cbiAgbGV0IG9wdGlvbl9vZl95b2pzb24gPSBvcHRpb25fb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfcmVmID0geW9qc29uX29mX3JlZlxuICBsZXQgcmVmX29mX3lvanNvbiA9IHJlZl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9zdHJpbmcgPSB5b2pzb25fb2Zfc3RyaW5nXG4gIGxldCBzdHJpbmdfb2ZfeW9qc29uID0gc3RyaW5nX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2J5dGVzID0geW9qc29uX29mX2J5dGVzXG4gIGxldCBieXRlc19vZl95b2pzb24gPSBieXRlc19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl91bml0ID0geW9qc29uX29mX3VuaXRcbiAgbGV0IHVuaXRfb2ZfeW9qc29uID0gdW5pdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9sYXp5X3QgPSB5b2pzb25fb2ZfbGF6eV90XG4gIGxldCBsYXp5X3Rfb2ZfeW9qc29uID0gbGF6eV90X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2hhc2h0YmwgPSB5b2pzb25fb2ZfaGFzaHRibFxuICBsZXQgaGFzaHRibF9vZl95b2pzb24gPSBoYXNodGJsX29mX3lvanNvblxuZW5kXG4iLCJtb2R1bGUgWW9qc29uX2NvbnZfZXJyb3IgPSBZb2pzb25fY29udl9lcnJvclxubW9kdWxlIFlvanNvbl9jb252ID0gWW9qc29uX2NvbnZcbm1vZHVsZSBZb2pzb25hYmxlID0gWW9qc29uYWJsZV9pbnRmXG5tb2R1bGUgWW9qc29uID0gWW9qc29uXG5cbm1vZHVsZSBPcHRpb24gPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egb3B0aW9uID1cbiAgICB8IE5vbmVcbiAgICB8IFNvbWUgb2YgJ2FcbmVuZFxuXG5leHRlcm5hbCBpZ25vcmUgOiBfIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuZXh0ZXJuYWwgcG9seV9lcXVhbCA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5cbmxldCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IGZ1biB4IC0+ICF4XG4iLCJtb2R1bGUgQXBpID0gSmVsbHlmaW5fYXBpXG5cbnR5cGUgY3JlZGVudGlhbHMgPSB7IGJhc2VfdXJsIDogc3RyaW5nOyB1c2VybmFtZSA6IHN0cmluZzsgcGFzc3dvcmQgOiBzdHJpbmcgfVxuXG50eXBlIGNvbm5leGlvbiA9IHtcbiAgYmFzZV91cmwgOiBzdHJpbmc7XG4gIGF1dGhfcmVzcG9uc2UgOiBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUucmVzcG9uc2U7XG59XG5cbmxldCBnZXRfdG9rZW4gdCA9IHQuYXV0aF9yZXNwb25zZS5BcGkuQXV0aGVudGljYXRlX2J5X25hbWUuYWNjZXNzX3Rva2VuXG5cbmxldCBjb25uZWN0IGNyZWRlbnRpYWxzID1cbiAgbGV0IG1vZHVsZSBBdXRoID0gQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCB7IGJhc2VfdXJsOyB1c2VybmFtZTsgcGFzc3dvcmQgfSA9IGNyZWRlbnRpYWxzIGluXG4gIGxldCBhdXRoID0geyBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUudXNlcm5hbWU7IHB3ID0gcGFzc3dvcmQgfSBpblxuICBsZXQrIGF1dGhfcmVzcG9uc2UgPSBBcGkucmVxdWVzdCB+YmFzZV91cmwgKG1vZHVsZSBBdXRoKSBhdXRoICgpIGluXG4gIHsgYmFzZV91cmw7IGF1dGhfcmVzcG9uc2UgfVxuXG5sZXQgcXVlcnkgdCA9XG4gIGxldCB0b2tlbiA9IGdldF90b2tlbiB0IGluXG4gIGxldCBiYXNlX3VybCA9IHQuYmFzZV91cmwgaW5cbiAgSmVsbHlmaW5fYXBpLnJlcXVlc3QgfmJhc2VfdXJsIH50b2tlblxuIiwib3BlbiBTdGRcbm9wZW4gQnJyXG5cbnR5cGUgdGFnID0gQmxvY2sgb2YgaW50IHwgSW50IG9mIGludFxuXG5sZXQgdGFnX29mIHYgPVxuICAoKiB3b3cgd293IHdvdy4gaXMgdGhhdCBva2F5eWlzaCA/KilcbiAgbGV0IG9iaiA9IE9iai5yZXByIHYgaW5cbiAgaWYgT2JqLmlzX2Jsb2NrIG9iaiB0aGVuIEJsb2NrIChPYmoudGFnIG9iaikgZWxzZSBJbnQgKE9iai5tYWdpYyBvYmopXG5cbm1vZHVsZSB0eXBlIFF1ZXJpZXMgPSBzaWdcbiAgdHlwZSAnYSBxdWVyeVxuICB0eXBlICdhIGV2ZW50XG5lbmRcblxubW9kdWxlIE1ha2UgKFEgOiBRdWVyaWVzKSA9IHN0cnVjdFxuICB0eXBlIGVycm9yID0gWyBgSnYgb2YgSnYuRXJyb3IudCB8IGBNc2cgb2Ygc3RyaW5nIF1cbiAgdHlwZSAnYSBxdWVyeSA9ICdhIFEucXVlcnlcbiAgdHlwZSAnYSBldmVudCA9ICdhIFEuZXZlbnRcbiAgdHlwZSAnYSB3aXRoX3V1aWQgPSB7IHV1aWQgOiBzdHJpbmc7IGRhdGEgOiAnYSB9XG4gIHR5cGUgJ2EgbWVzc2FnZSA9IEFuc3dlciBvZiAnYSB3aXRoX3V1aWQgfCBFdmVudCBvZiAoJ2EgZXZlbnQgKiAnYSlcbiAgdHlwZSBsaXN0ZW5lciA9IHN0cmluZ1xuXG4gICgqIHRvZG86Y2hlY2sgdGhhdCB0aGUgd29ya2VyIGFuZCB0aGUgY2xpZW50IHNoYXJlIHRoZSBzYW1lIGFwaT8gKilcblxuICBtb2R1bGUgU3RhcnRfY2xpZW50IChQIDogc2lnXG4gICAgdmFsIHVybCA6IHN0cmluZ1xuICBlbmQpID1cbiAgc3RydWN0XG4gICAgbGV0IGZ1dHVyZXMgOiAoc3RyaW5nLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IGxpc3RlbmVycyA6ICh0YWcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgd29ya2VyID0gQnJyX3dlYndvcmtlcnMuV29ya2VyLmNyZWF0ZSBAQCBKc3RyLm9mX3N0cmluZyBQLnVybFxuXG4gICAgbGV0IHF1ZXJ5ICh0eXBlIGEpIChxdWVyeSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgZnV0LCBzZXQgPSBGdXQuY3JlYXRlICgpIGluXG4gICAgICBsZXQgc2V0IGp2ID0gc2V0IEBAIEVuY29kaW5ncy5vZl9qdiBqdiBpblxuICAgICAgbGV0IHF1ZXJ5ID0geyB1dWlkOyBkYXRhID0gcXVlcnkgfSB8PiBFbmNvZGluZ3MudG9fanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLnBvc3Qgd29ya2VyIChKdi5vZl9qc3RyIHF1ZXJ5KTtcbiAgICAgIEhhc2h0YmwuYWRkIGZ1dHVyZXMgdXVpZCBzZXQ7XG4gICAgICBmdXRcblxuICAgIGxldCBsaXN0ZW4gKHR5cGUgYSkgKGV2ZW50IDogYSBldmVudCkgfihmIDogYSAtPiB1bml0KSA6IGxpc3RlbmVyID1cbiAgICAgIGxldCB1dWlkID0gbmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nIGluXG4gICAgICBsZXQgc2V0IGp2ID0gZiAoT2JqLm1hZ2ljIGp2KSBpblxuICAgICAgSGFzaHRibC5hZGQgbGlzdGVuZXJzICh0YWdfb2YgZXZlbnQpIHNldDtcbiAgICAgIHV1aWRcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrIG1lc3NhZ2UgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIG1hdGNoIG1lc3NhZ2Ugd2l0aFxuICAgICAgfCBFdmVudCAoZSwgdikgLT5cbiAgICAgICAgICBIYXNodGJsLmZpbmRfYWxsIGxpc3RlbmVycyAodGFnX29mIGUpIHw+IExpc3QuaXRlciB+ZjooZnVuIGYgLT4gZiB2KVxuICAgICAgfCBBbnN3ZXIgeyB1dWlkOyBkYXRhIH0gLT5cbiAgICAgICAgICBsZXQgZiA9IEhhc2h0YmwuZmluZCBmdXR1cmVzIHV1aWQgaW5cbiAgICAgICAgICBIYXNodGJsLnJlbW92ZSBmdXR1cmVzIHV1aWQ7XG4gICAgICAgICAgZiBkYXRhXG5cbiAgICBsZXQgXyA9XG4gICAgICBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlXG4gICAgICBAQCBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuYXNfdGFyZ2V0IHdvcmtlclxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBXb3JrZXJfaW1wbCA9IGZ1bmN0b3IgKCkgLT4gc2lnXG4gICAgdmFsIG9uX3F1ZXJ5IDogJ2EgcXVlcnkgLT4gKCdhLCBlcnJvcikgRnV0LnJlc3VsdFxuICBlbmRcblxuICBsZXQgZGlzcGF0Y2hfZXZlbnQgKHR5cGUgYSkgKGUgOiBhIGV2ZW50KSAodiA6IGEpID1cbiAgICAoKiBsZXQgZGF0YSA9IEVuY29kaW5ncy5tYXJzaGFsX3RvX2pzdHIgfD4gSnYub2ZfanN0ciBpbiAqKVxuICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3QgKEVuY29kaW5ncy50b19qc3RyIChFdmVudCAoZSwgdikpIHw+IEp2Lm9mX2pzdHIpXG5cbiAgKCoqIEV4ZWN1dGUgVydzIGJvZHkgYW5kIGNvbmZpZ3VyZSBtZXNzYWdpbmcgKilcbiAgbW9kdWxlIE1ha2Vfd29ya2VyIChXIDogV29ya2VyX2ltcGwpID0gc3RydWN0XG4gICAgb3BlbiBCcnJcbiAgICBtb2R1bGUgVyA9IFcgKClcblxuICAgIGxldCBvbl9tZXNzYWdlIGV2ID1cbiAgICAgIGxldCBtZXNzYWdlID0gRXYuYXNfdHlwZSBldiBpblxuICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICBpZ25vcmUgKCogVE9ETzogaGFuZGxlciBlcnJvcnMgKilcbiAgICAgIEBAXG4gICAgICBsZXQrICh7IHV1aWQ7IGRhdGEgfSA6ICdhIHF1ZXJ5IHdpdGhfdXVpZCkgPVxuICAgICAgICBCcnJfaW8uTWVzc2FnZS5Fdi5kYXRhIG1lc3NhZ2UgfD4gSnYudG9fanN0ciB8PiBFbmNvZGluZ3Mub2ZfanN0clxuICAgICAgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQrIHJlc3VsdCA9IFcub25fcXVlcnkgZGF0YSBpblxuICAgICAgbGV0IGRhdGEgPSBFbmNvZGluZ3MudG9fanN0ciByZXN1bHQgfD4gSnYub2ZfanN0ciBpblxuICAgICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdFxuICAgICAgICAoRW5jb2RpbmdzLnRvX2pzdHIgKEFuc3dlciB7IHV1aWQ7IGRhdGEgfSkgfD4gSnYub2ZfanN0cilcblxuICAgIGxldCBfID0gRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZSBHLnRhcmdldFxuICBlbmRcbmVuZFxuIiwib3BlbiBTdGRcblxuKCoqIFNvbWUgc29ydHMgcmVxdWlyZSBhIGN1c3RvbSBvcmRlcmluZyB3aGljaCBpcyBkb25lIHVzaW5nIGEgdGFibGUgb2YgaW5kZXhlcy4gRm9yIGV4YW1wbGUsIHRvIGdldCBhIHJhbmRvbSBzb3J0IHdlIHNpbXBsZSBzaHVmZmxlIGFuIGFycmF5IHdoaWNoIHNpemUgaXMgdGhlIG9uZSBvZiB0aGUgcmVzdWx0LiAqKVxubW9kdWxlIE9yZGVyID0gc3RydWN0XG4gIHR5cGUgdCA9IEluaXRpYWwgfCBBc2MgfCBEZXNjIHwgQ3VzdG9tIG9mIGludCBhcnJheVxuXG4gIGxldCByYW5kb20gfnNpemUgPVxuICAgIGxldCB0YmwgPSBBcnJheS5pbml0IHNpemUgfmY6RnVuLmlkIGluXG4gICAgbGV0ICgpID0gQXJyYXkuc2h1ZmZsZSB0YmwgaW5cbiAgICBDdXN0b20gdGJsXG5cbiAgbGV0IG9mX3N0cmluZyB+c2l6ZSA9IGZ1bmN0aW9uXG4gICAgfCBcInJhbmRvbVwiIC0+IHJhbmRvbSB+c2l6ZVxuICAgIHwgXCJhc2NcIiAtPiBBc2NcbiAgICB8IFwiZGVzY1wiIC0+IERlc2NcbiAgICB8IF8gLT4gSW5pdGlhbFxuXG4gIGxldCBhcHBseSB0IH5zaXplIGkgPVxuICAgIG1hdGNoIHQgd2l0aFxuICAgIHwgSW5pdGlhbCB8IEFzYyAtPiBpXG4gICAgfCBEZXNjIC0+IHNpemUgLSAxIC0gaVxuICAgIHwgQ3VzdG9tIGEgLT4gKCogdG9kbyBjaGVjayBib3VuZHMgKikgYS4oaSlcbmVuZFxuXG5tb2R1bGUgU29ydCA9IHN0cnVjdFxuICB0eXBlIHQgPSBEYXRlX2FkZGVkIHwgTmFtZVxuXG4gIGxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgXCJkYXRlX2FkZGVkXCIgLT4gRGF0ZV9hZGRlZFxuICAgIHwgXCJuYW1lXCIgLT4gTmFtZVxuICAgIHwgXyAtPiBEYXRlX2FkZGVkXG5lbmRcblxudHlwZSAnYSBzZWxlY3Rpb24gPSBBbGwgfCBPbmx5IG9mICdhIGxpc3RcbnR5cGUga2luZCA9IEF1ZGlvXG50eXBlIGZpbHRlciA9IFNlYXJjaCBvZiBzdHJpbmdcblxudHlwZSByZXEgPSB7XG4gIGtpbmQgOiBraW5kO1xuICBzcmNfdmlld3MgOiBzdHJpbmcgc2VsZWN0aW9uO1xuICBzb3J0IDogU29ydC50O1xuICBmaWx0ZXJzIDogZmlsdGVyIGxpc3Q7XG59XG5cbnR5cGUgdCA9IHsgdXVpZCA6IFV1aWRtLnQ7IHJlcXVlc3QgOiByZXE7IHN0YXJ0X29mZnNldCA6IGludDsgaXRlbV9jb3VudCA6IGludCB9XG50eXBlIHJhbmdlZCA9IHsgdmlldyA6IHQ7IGZpcnN0IDogaW50OyBsYXN0IDogaW50OyBvcmRlciA6IE9yZGVyLnQgfVxuXG5sZXQgaXRlbV9jb3VudCB0ID0gdC5pdGVtX2NvdW50IC0gdC5zdGFydF9vZmZzZXRcblxubGV0IHJlcSBraW5kID8oc3JjX3ZpZXdzID0gQWxsKSA/KHNvcnQgPSBTb3J0LkRhdGVfYWRkZWQpID8oZmlsdGVycyA9IFtdKSAoKSA9XG4gIHsga2luZDsgc3JjX3ZpZXdzOyBzb3J0OyBmaWx0ZXJzIH1cblxubGV0IGhhc2ggcmVxID0gSGFzaHRibC5oYXNoIChyZXEuc3JjX3ZpZXdzLCByZXEuZmlsdGVycylcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIERTID0gRGF0YV9zb3VyY2UuSmVsbHlmaW5cbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxudHlwZSBzZXJ2ZXIgPSBzdHJpbmcgKiBEUy5jb25uZXhpb25cblxubW9kdWxlIFF1ZXJpZXMgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBxdWVyeSA9XG4gICAgfCBTZXRfc2Vzc2lvbl91dWlkIDogc3RyaW5nIC0+IHVuaXQgcXVlcnlcbiAgICB8IEFkZF9zZXJ2ZXJzIDogc2VydmVyIGxpc3QgLT4gdW5pdCBxdWVyeVxuICAgIHwgR2V0X2FsbCA6IHVuaXQgLT4gQXBpLkl0ZW0udCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfbGlicmFyaWVzIDogdW5pdCAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyA6IHN0cmluZyAtPiBTdG9yZXMuSXRlbXMudCBsaXN0IHF1ZXJ5XG4gICAgfCBDcmVhdGVfdmlldyA6IFZpZXcucmVxIC0+IFZpZXcudCBxdWVyeVxuICAgIHwgR2V0IDpcbiAgICAgICAgVmlldy50ICogVmlldy5PcmRlci50ICogaW50IGFycmF5XG4gICAgICAgIC0+IFN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSBxdWVyeVxuXG4gIHR5cGUgJ2EgZXZlbnQgPSBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgOiAoc3RyaW5nICogU3luYy5yZXBvcnQpIGV2ZW50XG5lbmRcblxuaW5jbHVkZSBXb3JrZXJfYXBpLk1ha2UgKFF1ZXJpZXMpXG4iLCJtb2R1bGUgU3RvcmVzID0gU3RvcmVzXG5tb2R1bGUgU3luYyA9IFN5bmNcbm1vZHVsZSBWaWV3ID0gVmlld1xub3BlbiBCcnJlclxub3BlbiBCcnJcbm1vZHVsZSBPSSA9IFN0b3Jlcy5PcmRlcnJlZF9pdGVtc19zdG9yZVxubW9kdWxlIEkgPSBTdG9yZXMuSXRlbXNfc3RvcmVcbm1vZHVsZSBWRiA9IFN0b3Jlcy5WaXJ0dWFsX2ZvbGRlcl9zdG9yZVxubW9kdWxlIFdvcmtlcl9hcGkgPSBEYl93b3JrZXJfYXBpXG5cbm1vZHVsZSBJdGVtX3N0b3JlID0gc3RydWN0XG4gIGluY2x1ZGUgU3RvcmVzLkl0ZW1zX3N0b3JlXG5cbiAgbW9kdWxlIEluZGV4ID0gc3RydWN0XG4gICAgbW9kdWxlIElkID0gU3RvcmVzLkl0ZW1zQnlJZFxuICAgIG1vZHVsZSBEYXRlX2FkZGVkID0gU3RvcmVzLkl0ZW1zQnlEYXRlQWRkZWRcbiAgICBtb2R1bGUgVHlwZV9OYW1lID0gU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZVxuICAgIG1vZHVsZSBLaW5kX1ZpZXcgPSBTdG9yZXMuSXRlbXNCeVZpZXdBbmRLaW5kXG4gIGVuZFxuZW5kXG5cbmxldCBvbl91cGdyYWRlX25lZWRlZCBlIHEgPVxuICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICBsZXQgb2xkX3ZlcnNpb24sIG5ld192ZXJzaW9uID1cbiAgICBsZXQgdiA9IEV2LmFzX3R5cGUgZSBpblxuICAgIEV2ZW50cy5WZXJzaW9uX2NoYW5nZS4ob2xkX3ZlcnNpb24gdiwgbmV3X3ZlcnNpb24gdilcbiAgaW5cbiAgQ29uc29sZS5pbmZvXG4gICAgW1xuICAgICAgXCJVcGdyYWRpbmcgaW5kZXhlZF9kYiBzY2hlbWEgZnJvbSB2ZXJzaW9uXCI7IG9sZF92ZXJzaW9uOyBcInRvXCI7IG5ld192ZXJzaW9uO1xuICAgIF07XG4gIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IHEgaW5cbiAgbGV0IHN0b3JlcyA9IERhdGFiYXNlLm9iamVjdF9zdG9yZV9uYW1lcyBkYiBpblxuICBDb25zb2xlLmluZm8gWyBcIkVyYXNpbmcgZXhpc3Rpbmcgc3RvcmVzXCIgXTtcbiAgQXJyYXkuaXRlciAoRGF0YWJhc2UuZGVsZXRlX29iamVjdF9zdG9yZSBkYikgc3RvcmVzO1xuICBsZXQgbGlzdCA9XG4gICAgRGF0YWJhc2UuY3JlYXRlX29iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB+YXV0b19pbmNyZW1lbnQ6ZmFsc2UgZGJcbiAgaW5cbiAgbGV0IGl0ZW1zID1cbiAgICBEYXRhYmFzZS5jcmVhdGVfb2JqZWN0X3N0b3JlIChtb2R1bGUgSSkgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCB2aXJ0dWFsX2ZvbGRlcnMgPVxuICAgIERhdGFiYXNlLmNyZWF0ZV9vYmplY3Rfc3RvcmUgKG1vZHVsZSBWRikgfmF1dG9faW5jcmVtZW50OmZhbHNlIGRiXG4gIGluXG4gIGxldCBpbmRleF9kYXRlX2FkZGVkID1cbiAgICBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5RGF0ZUFkZGVkKSBpdGVtc1xuICBpblxuICBsZXQgXyA9IEkuY3JlYXRlX2luZGV4IChtb2R1bGUgU3RvcmVzLkl0ZW1zQnlUeXBlQW5kTmFtZSkgaXRlbXMgaW5cbiAgbGV0IF8gPSBJLmNyZWF0ZV9pbmRleCAobW9kdWxlIFN0b3Jlcy5JdGVtc0J5Vmlld0FuZEtpbmQpIGl0ZW1zIGluXG4gIGxldCBfID0gSS5jcmVhdGVfaW5kZXggKG1vZHVsZSBTdG9yZXMuSXRlbXNCeUlkKSBpdGVtcyBpblxuICBDb25zb2xlLmluZm9cbiAgICBbIFwiU3RvcmVzIGNyZWF0ZWQ6XCI7IGxpc3Q7IGl0ZW1zOyBpbmRleF9kYXRlX2FkZGVkOyB2aXJ0dWFsX2ZvbGRlcnMgXVxuXG5sZXQgd2l0aF9pZGIgP3ZlcnNpb24gfm5hbWUgZiA9XG4gIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gIGxldCBmIF9ldiBkYnIgPVxuICAgIGxldCBkYiA9IFJlcXVlc3QucmVzdWx0IGRiciBpblxuICAgIGYgZGJcbiAgaW5cbiAgZ2V0X2ZhY3RvcnkgKClcbiAgfD4gRmFjdG9yeS5vcGVuJyB+bmFtZSA/dmVyc2lvblxuICB8PiBPcGVuX2RiX3JlcXVlc3Qub25fdXBncmFkZV9uZWVkZWQgfmY6b25fdXBncmFkZV9uZWVkZWRcbiAgfD4gUmVxdWVzdC5vbl9zdWNjZXNzIH5mIHw+IGlnbm9yZVxuIiwib3BlbiEgU3RkXG5vcGVuIERiLldvcmtlcl9hcGlcbm9wZW4gQnJyZXJcbm9wZW4hIEJyclxubW9kdWxlIElEQiA9IEJycl9pby5JbmRleGVkX2RiXG5tb2R1bGUgSVMgPSBEYi5JdGVtX3N0b3JlXG5cbmxldCAoKSA9IFJhbmRvbS5zZWxmX2luaXQgKClcblxubGV0IG1hcF9lcnJvciBmID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIGYgPSBmIGluXG4gIFJlc3VsdC5tYXBfZXJyIChmdW4ganYgLT4gYEp2IGp2KSBmXG5cbmxldCBhc19mdXQgcSA9IElEQi5SZXF1ZXN0LmZ1dCBxIHw+IG1hcF9lcnJvclxuXG5sZXQgZnV0X29mX2FycmF5IChmcyA6ICdhIEZ1dC50IGFycmF5KSA6ICdhIGFycmF5IEZ1dC50ID1cbiAgbGV0IGZ1dCBwID0gSnYub2JqIFt8IChcImZ1dFwiLCBwKSB8XSBpblxuICBsZXQgcHJvbWlzZScgZiA9IEp2LmdldCAoSnYucmVwciBmKSBcImZ1dFwiIGluXG4gIGxldCBhcnIgPSBKdi5vZl9hcnJheSBwcm9taXNlJyBmcyBpblxuICBsZXQgYWxsID0gSnYuUHJvbWlzZS5hbGwgYXJyIGluXG4gIGxldCB0b19hcnJheSBsID0gSnYuUHJvbWlzZS5yZXNvbHZlIChKdi50b19hcnJheSBPYmoubWFnaWMgbCkgaW5cbiAgT2JqLm1hZ2ljIEBAIGZ1dCBAQCBKdi5Qcm9taXNlLmJpbmQgYWxsIHRvX2FycmF5XG5cbm1vZHVsZSBXb3JrZXIgKCkgPSBzdHJ1Y3RcbiAgbGV0IGNoZWNrX2RiIGlkYiBzb3VyY2UgPVxuICAgIGxldCBzZXJ2ZXJfaWQsIHNvdXJjZSA9IHNvdXJjZSBpblxuICAgIGxldCByZXBvcnQgc3RhdHVzID1cbiAgICAgIGRpc3BhdGNoX2V2ZW50IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSAoc2VydmVyX2lkLCBzdGF0dXMpXG4gICAgaW5cbiAgICBEYi5TeW5jLmNoZWNrX2FuZF9zeW5jIH5yZXBvcnQgfnNvdXJjZSBpZGJcblxuICBsZXQgaWRiID1cbiAgICBsZXQgaWRiLCBzZXRfaWRiID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgIGxldCBfID1cbiAgICAgIERiLndpdGhfaWRiIH5uYW1lOlwidHJhY2tzXCIgfnZlcnNpb246MSBAQCBmdW4gaWRiIC0+XG4gICAgICBpZ25vcmUgKHNldF9pZGIgQEAgT2sgaWRiKVxuICAgIGluXG4gICAgaWRiXG5cbiAgbGV0IHJlYWRfb25seV9zdG9yZSAoKSA9XG4gICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICBsZXQrIGlkYiA9IGlkYiBpblxuICAgIElEQi5EYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgRGIuSSkgXSB+bW9kZTpSZWFkb25seSBpZGJcbiAgICB8PiBJREIuVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgRGIuSSlcblxuICBsZXQgZ2V0X3ZpZXdfa2V5cyA9XG4gICAgbGV0IHZpZXdfbWVtbyA6XG4gICAgICAgICggc3RyaW5nIERiLlZpZXcuc2VsZWN0aW9uICogRGIuVmlldy5Tb3J0LnQsXG4gICAgICAgICAgSVMuQ29udGVudC5LZXkudCBhcnJheSApXG4gICAgICAgIEhhc2h0YmwudCA9XG4gICAgICBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGluXG4gICAgbGV0IGxhc3RfdmlldyA6IChpbnQgKiBJUy5Db250ZW50LktleS50IGFycmF5KSByZWYgPSByZWYgKC0xLCBbfHxdKSBpblxuICAgIGZ1biBzdG9yZSB7IERiLlZpZXcua2luZCA9IF87IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9IC0+XG4gICAgICAoKiB0b2RvOiBzdGFnZWQgbWVtb2l6YXRpb24gKyBzcGVjaWFsaXplZCBxdWVyaWVzIHVzaW5nIGluZGV4ZXMgKilcbiAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICBsZXQgaGFzaCA9IEhhc2h0YmwuaGFzaCAoc3JjX3ZpZXdzLCBzb3J0LCBmaWx0ZXJzKSBpblxuICAgICAgaWYgSW50LmVxdWFsIChmc3QgIWxhc3RfdmlldykgaGFzaCB0aGVuIEZ1dC5vayAoc25kICFsYXN0X3ZpZXcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCsga2V5cyA9XG4gICAgICAgICAgdHJ5IEZ1dC5vayBAQCBIYXNodGJsLmZpbmQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpXG4gICAgICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIGxldCsgYWxsX2tleXMgPVxuICAgICAgICAgICAgICBsZXQgbG93ZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJBdWRpb1wiIHxdIGluXG4gICAgICAgICAgICAgIGxldCB1cHBlciA9IEp2Lm9mX2FycmF5IEp2Lm9mX3N0cmluZyBbfCBcIkF1ZGlvXFx1ezB9XCIgfF0gaW5cbiAgICAgICAgICAgICAgbGV0IHF1ZXJ5ID1cbiAgICAgICAgICAgICAgICBJREIuS2V5X3JhbmdlLmJvdW5kIH5sb3dlciB+dXBwZXIgfmxvd2VyX29wZW46dHJ1ZVxuICAgICAgICAgICAgICAgICAgfnVwcGVyX29wZW46ZmFsc2UgKClcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGlkeCA9IElTLmluZGV4IChtb2R1bGUgSVMuSW5kZXguS2luZF9WaWV3KSBzdG9yZSBpblxuICAgICAgICAgICAgICBJUy5JbmRleC5LaW5kX1ZpZXcuZ2V0X2FsbF9rZXlzIH5xdWVyeSBpZHggfD4gYXNfZnV0XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGtleXMgPVxuICAgICAgICAgICAgICBtYXRjaCBzcmNfdmlld3Mgd2l0aFxuICAgICAgICAgICAgICB8IEFsbCAtPiBhbGxfa2V5c1xuICAgICAgICAgICAgICB8IE9ubHkgc3JjX3ZpZXdzIC0+XG4gICAgICAgICAgICAgICAgICBBcnJheS5maWx0ZXIgYWxsX2tleXNcbiAgICAgICAgICAgICAgICAgICAgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkudmlld3M7IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuZXhpc3RzIHZpZXdzIH5mOihmdW4gdiAtPiBMaXN0Lm1lbXEgdiB+c2V0OnNyY192aWV3cykpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgdmlld19tZW1vIChzcmNfdmlld3MsIHNvcnQpIGtleXM7XG4gICAgICAgICAgICBrZXlzXG4gICAgICAgIGluXG4gICAgICAgIGxldCBrZXlzID1cbiAgICAgICAgICBtYXRjaCBmaWx0ZXJzIHdpdGhcbiAgICAgICAgICB8IFsgU2VhcmNoIHN1YiBdIHdoZW4gbm90IChTdHJpbmcuaXNfZW1wdHkgc3ViKSAtPlxuICAgICAgICAgICAgICBsZXQgc3ViID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWIgaW5cbiAgICAgICAgICAgICAgQXJyYXkuZmlsdGVyIGtleXMgfmY6KGZ1biB7IERiLlN0b3Jlcy5JdGVtcy5LZXkuc29ydF9uYW1lOyBfIH0gLT5cbiAgICAgICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHNvcnRfbmFtZSBpblxuICAgICAgICAgICAgICAgICAgbGV0IHBhdHRlcm4gPSBTdHJpbmcuRmluZC5jb21waWxlIChQcmludGYuc3ByaW50ZiBcIiVzXCIgc3ViKSBpblxuICAgICAgICAgICAgICAgICAgU3RyaW5nLkZpbmQuZmluZCB+cGF0dGVybiBzb3J0X25hbWUgPj0gMClcbiAgICAgICAgICB8IF8gLT4ga2V5c1xuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIG1hdGNoIHNvcnQgd2l0aFxuICAgICAgICAgIHwgTmFtZSAtPlxuICAgICAgICAgICAgICBBcnJheS5zb3J0IGtleXNcbiAgICAgICAgICAgICAgICB+Y21wOihmdW5cbiAgICAgICAgICAgICAgICAgICAgeyBEYi5TdG9yZXMuSXRlbXMuS2V5LnNvcnRfbmFtZSA9IHNuYTsgXyB9XG4gICAgICAgICAgICAgICAgICAgIHsgRGIuU3RvcmVzLkl0ZW1zLktleS5zb3J0X25hbWUgPSBzbmI7IF8gfVxuICAgICAgICAgICAgICAgICAgLT4gU3RyaW5nLmNvbXBhcmUgc25hIHNuYilcbiAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbGFzdF92aWV3IDo9IChoYXNoLCBrZXlzKTtcbiAgICAgICAga2V5c1xuXG4gIGxldCBvbl9xdWVyeSAodHlwZSBhKSAocSA6IGEgcXVlcnkpIDogKGEsIGVycm9yKSBGdXQucmVzdWx0ID1cbiAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgIG1hdGNoIHEgd2l0aFxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCBzIC0+XG4gICAgICAgIGxldCAoKSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHMgaW5cbiAgICAgICAgRnV0Lm9rICgpXG4gICAgfCBBZGRfc2VydmVycyBsIC0+XG4gICAgICAgIGxldCogaWRiID0gaWRiIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgbGV0KyByZXMgPSBjaGVja19kYiBpZGIgKExpc3QuaGQgbCkgaW5cbiAgICAgICAgUmVzdWx0Lm1hcF9lcnIgKGZ1biBqdiAtPiBgSnYganYpIHJlc1xuICAgIHwgR2V0X2FsbCAoKSAtPlxuICAgICAgICBsZXQqIHN0b3JlID0gcmVhZF9vbmx5X3N0b3JlICgpIGluXG4gICAgICAgIGxldCsgcmVxID0gRGIuSS5nZXRfYWxsIHN0b3JlIHw+IGFzX2Z1dCBpblxuICAgICAgICBBcnJheS5tYXAgfmY6KGZ1biBpIC0+IGkuRGIuU3RvcmVzLkl0ZW1zLml0ZW0pIHJlcSB8PiBBcnJheS50b19saXN0XG4gICAgfCBHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQnIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcFxuICAgICAgICAgICAgICAgKExpc3QuZmlsdGVyX21hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgICAgfCBTb21lICh7IERiLlN0b3Jlcy5JdGVtcy5pdGVtID0geyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IGFzIGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgd2hlbiBTdHJpbmcuZXF1YWwgc2VydmVyX2lkIHNlcnZlcl9pZCcgLT5cbiAgICAgICAgICAgICAgICAgICAgIFNvbWUgaXRlbVxuICAgICAgICAgICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gTm9uZSkpXG4gICAgICAgIGluXG4gICAgICAgIGl0ZW1zXG4gICAgfCBHZXRfbGlicmFyaWVzICgpIC0+XG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0IGluZGV4ID0gSVMuKGluZGV4IChtb2R1bGUgSVMuSW5kZXguVHlwZV9OYW1lKSBzdG9yZSkgaW5cbiAgICAgICAgbGV0IGxvd2VyID0gSnYub2ZfYXJyYXkgSnYub2Zfc3RyaW5nIFt8IFwibXVzaWNcIiB8XSBpblxuICAgICAgICBsZXQgdXBwZXIgPSBKdi5vZl9hcnJheSBKdi5vZl9zdHJpbmcgW3wgXCJtdXNpY1xcdXswfVwiIHxdIGluXG4gICAgICAgIGxldCBxdWVyeSA9XG4gICAgICAgICAgSURCLktleV9yYW5nZS5ib3VuZCB+bG93ZXIgfnVwcGVyIH5sb3dlcl9vcGVuOnRydWUgfnVwcGVyX29wZW46ZmFsc2VcbiAgICAgICAgICAgICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCoga2V5cyA9IElTLkluZGV4LlR5cGVfTmFtZS5nZXRfYWxsX2tleXMgfnF1ZXJ5IGluZGV4IHw+IGFzX2Z1dCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbXMgPVxuICAgICAgICAgIExpc3QubWFwIChBcnJheS50b19saXN0IGtleXMpIH5mOihmdW4gayAtPiBJUy5nZXQgayBzdG9yZSB8PiBhc19mdXQpXG4gICAgICAgICAgfD4gRnV0Lm9mX2xpc3RcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGl0ZW1zID1cbiAgICAgICAgICBSZXN1bHQuZmxhdHRlbl9sIGl0ZW1zXG4gICAgICAgICAgfD4gUmVzdWx0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgTGlzdC5tYXAgbCB+ZjooT3B0aW9uLmdldF9leG5fb3IgXCJJdGVtIHNob3VsZCBleGlzdHMuXCIpKVxuICAgICAgICBpblxuICAgICAgICBpdGVtc1xuICAgIHwgQ3JlYXRlX3ZpZXcgcmVxdWVzdCAtPlxuICAgICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIGluXG4gICAgICAgIGxldCogc3RvcmUgPSByZWFkX29ubHlfc3RvcmUgKCkgaW5cbiAgICAgICAgbGV0KyBrZXlzID0gZ2V0X3ZpZXdfa2V5cyBzdG9yZSByZXF1ZXN0IGluXG4gICAgICAgIGxldCBpdGVtX2NvdW50ID0gQXJyYXkubGVuZ3RoIGtleXMgaW5cbiAgICAgICAgeyBEYi5WaWV3LnV1aWQ7IHJlcXVlc3Q7IHN0YXJ0X29mZnNldCA9IDA7IGl0ZW1fY291bnQgfVxuICAgIHwgR2V0ICh2aWV3LCBvcmRlciwgaW5kZXhlcykgLT5cbiAgICAgICAgKCogVGhpcyByZXF1ZXN0IGlzIGNyaXRpY2FsIHRvIHZpcnR1YWwgbGlzdHMgcGVyZm9ybWFuY2VzIGFuZCBzaG91bGRcbiAgICAgICAgICAgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gKilcbiAgICAgICAgbGV0KiBzdG9yZSA9IHJlYWRfb25seV9zdG9yZSAoKSBpblxuICAgICAgICBsZXQqIGtleXMgPSBnZXRfdmlld19rZXlzIHN0b3JlIHZpZXcucmVxdWVzdCBpblxuICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgIGxldCsgcmVzdWx0cyA9XG4gICAgICAgICAgQXJyYXkubWFwIGluZGV4ZXMgfmY6KGZ1biBpbmRleCAtPlxuICAgICAgICAgICAgICB0cnlcbiAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBpbmRleCArIHZpZXcuc3RhcnRfb2Zmc2V0IGluXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID1cbiAgICAgICAgICAgICAgICAgIERiLlZpZXcuT3JkZXIuYXBwbHkgfnNpemU6dmlldy5pdGVtX2NvdW50IG9yZGVyIGluZGV4XG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAoKiBUaGlzIGNvdWxkIGJlIG9wdGltaXplIHdoZW4gYWNjZXNzIGlzIHNlcXVlbnRpYWwgKilcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5cy4oaW5kZXgpIGluXG4gICAgICAgICAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICAgICAgICAgIGxldCsgcmVzdWx0ID0gSVMuZ2V0IGtleSBzdG9yZSB8PiBJREIuUmVxdWVzdC5mdXQgaW5cbiAgICAgICAgICAgICAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgICAgICAgICAgICAgIHwgT2sgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgIFsgXCJBbiBlcnJvciBvY2N1cmVkIHdoaWxlIGxvYWRpbmcgaXRlbVwiOyBrZXk7IGVyciBdO1xuICAgICAgICAgICAgICAgICAgICBOb25lXG4gICAgICAgICAgICAgICAgfCBPayAoU29tZSB2KSAtPiBTb21lIHZcbiAgICAgICAgICAgICAgd2l0aCBfIC0+IEZ1dC5yZXR1cm4gTm9uZSlcbiAgICAgICAgICB8PiBmdXRfb2ZfYXJyYXlcbiAgICAgICAgaW5cbiAgICAgICAgT2sgcmVzdWx0c1xuZW5kXG5cbmluY2x1ZGUgTWFrZV93b3JrZXIgKFdvcmtlcilcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19 diff --git a/main.bc.js b/main.bc.js index ccd7dc7..02c095f 100644 --- a/main.bc.js +++ b/main.bc.js @@ -3320,6 +3320,7 @@ var cst$1 = "", cst$13 = " ", + cst_unfetched = " unfetched: ", cst$12 = '"', cst_Li = "%Li", cst_a = "%a", @@ -3417,6 +3418,7 @@ cst_SortName = "SortName", cst_Stack_overflow = "Stack_overflow", cst_Studio = "Studio", + cst_Synchronized = "Synchronized", cst_Sys_blocked_io = "Sys_blocked_io", cst_Sys_error = "Sys_error", cst_Title = "Title", @@ -3569,8 +3571,8 @@ cst_characters, [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, [2, 0, 0]]]]]]]]]], 'File "%s", line %d, characters %d-%d: %s'], - empty$1 = [0, 0], empty$2 = [0, 0], + empty$3 = [0, 0], ocaml_lex_tables = [0, "\0\0\xe5\xff\x11\0\xe8\xff\x03\0\xea\xff~\0\0\0q\0\0\0\x01\0\x01\0\x02\0{\0\xf3\xff\xf4\xff\xf5\xff\xf6\xff\xf7\xff\xf8\xff\xf9\xff\xfa\xff\xfb\xff\xfc\xff\x01\0\x02\0\0\0\0\0\x02\0\xff\xff\0\0\0\0\x03\0\xfe\xff\x03\0\x01\0\x0b\0\xfd\xff\xef\xff\x03\0\n\0\x0b\0\x05\0\xf2\xff\x14\0\x13\x000\0L\0C\0?\0K\0T\0\xf1\xffU\0S\0O\0U\0K\0G\0S\0T\0]\0\xf0\xff_\0]\0Y\0_\0U\0Q\0\x01\0 \0\x9b\0\xba\0\xd1\0\xdb\0\xe5\0\xf0\0\xfa\0\x12\x01B\x01\xec\xff\xeb\xff^\x01u\x01\x9b\x01\xb2\x015\0\xe7\xffX\x01\xfc\xff\xfd\xff\xfe\xff\x0e\0\xff\xff", @@ -3663,155 +3665,156 @@ _R_ = cst_Map_bal, _S_ = cst_Map_bal, _U_ = cst_Map_bal, - _Z_ = "Stdlib.Queue.Empty", - _ac_ = "Buffer.add_substring/add_subbytes", - _ab_ = "Buffer.add: cannot grow buffer", - _aa_ = [0, cst_buffer_ml, 93, 2], - _$_ = [0, cst_buffer_ml, 94, 2], - ___ = "Buffer.sub", - _al_ = "%c", - _am_ = cst_s, - _an_ = cst_i, - _ao_ = cst_li, - _ap_ = cst_ni, - _aq_ = cst_Li, - _ar_ = "%f", - _as_ = "%B", - _at_ = "%{", - _au_ = "%}", - _av_ = "%(", - _aw_ = "%)", - _ax_ = cst_a, - _ay_ = "%t", - _az_ = "%?", - _aA_ = "%r", - _aB_ = "%_r", - _aC_ = [0, cst_camlinternalFormat_ml, 850, 23], - _aN_ = [0, cst_camlinternalFormat_ml, 814, 21], - _aF_ = [0, cst_camlinternalFormat_ml, 815, 21], - _aO_ = [0, cst_camlinternalFormat_ml, 818, 21], - _aG_ = [0, cst_camlinternalFormat_ml, 819, 21], - _aP_ = [0, cst_camlinternalFormat_ml, 822, 19], - _aH_ = [0, cst_camlinternalFormat_ml, 823, 19], - _aQ_ = [0, cst_camlinternalFormat_ml, 826, 22], - _aI_ = [0, cst_camlinternalFormat_ml, 827, 22], - _aR_ = [0, cst_camlinternalFormat_ml, 831, 30], - _aJ_ = [0, cst_camlinternalFormat_ml, 832, 30], - _aL_ = [0, cst_camlinternalFormat_ml, 836, 26], - _aD_ = [0, cst_camlinternalFormat_ml, 837, 26], - _aM_ = [0, cst_camlinternalFormat_ml, 846, 28], - _aE_ = [0, cst_camlinternalFormat_ml, 847, 28], - _aK_ = [0, cst_camlinternalFormat_ml, 851, 23], - _bM_ = [0, cst_camlinternalFormat_ml, 1558, 4], - _bN_ = "Printf: bad conversion %[", - _bO_ = [0, cst_camlinternalFormat_ml, 1626, 39], - _bP_ = [0, cst_camlinternalFormat_ml, 1649, 31], - _bQ_ = [0, cst_camlinternalFormat_ml, 1650, 31], - _bR_ = "Printf: bad conversion %_", - _bS_ = cst$2, - _bT_ = cst$3, - _bU_ = cst$2, - _bV_ = cst$3, - _bX_ = + _Z_ = "Stdlib.Stack.Empty", + ___ = "Stdlib.Queue.Empty", + _ad_ = "Buffer.add_substring/add_subbytes", + _ac_ = "Buffer.add: cannot grow buffer", + _ab_ = [0, cst_buffer_ml, 93, 2], + _aa_ = [0, cst_buffer_ml, 94, 2], + _$_ = "Buffer.sub", + _am_ = "%c", + _an_ = cst_s, + _ao_ = cst_i, + _ap_ = cst_li, + _aq_ = cst_ni, + _ar_ = cst_Li, + _as_ = "%f", + _at_ = "%B", + _au_ = "%{", + _av_ = "%}", + _aw_ = "%(", + _ax_ = "%)", + _ay_ = cst_a, + _az_ = "%t", + _aA_ = "%?", + _aB_ = "%r", + _aC_ = "%_r", + _aD_ = [0, cst_camlinternalFormat_ml, 850, 23], + _aO_ = [0, cst_camlinternalFormat_ml, 814, 21], + _aG_ = [0, cst_camlinternalFormat_ml, 815, 21], + _aP_ = [0, cst_camlinternalFormat_ml, 818, 21], + _aH_ = [0, cst_camlinternalFormat_ml, 819, 21], + _aQ_ = [0, cst_camlinternalFormat_ml, 822, 19], + _aI_ = [0, cst_camlinternalFormat_ml, 823, 19], + _aR_ = [0, cst_camlinternalFormat_ml, 826, 22], + _aJ_ = [0, cst_camlinternalFormat_ml, 827, 22], + _aS_ = [0, cst_camlinternalFormat_ml, 831, 30], + _aK_ = [0, cst_camlinternalFormat_ml, 832, 30], + _aM_ = [0, cst_camlinternalFormat_ml, 836, 26], + _aE_ = [0, cst_camlinternalFormat_ml, 837, 26], + _aN_ = [0, cst_camlinternalFormat_ml, 846, 28], + _aF_ = [0, cst_camlinternalFormat_ml, 847, 28], + _aL_ = [0, cst_camlinternalFormat_ml, 851, 23], + _bN_ = [0, cst_camlinternalFormat_ml, 1558, 4], + _bO_ = "Printf: bad conversion %[", + _bP_ = [0, cst_camlinternalFormat_ml, 1626, 39], + _bQ_ = [0, cst_camlinternalFormat_ml, 1649, 31], + _bR_ = [0, cst_camlinternalFormat_ml, 1650, 31], + _bS_ = "Printf: bad conversion %_", + _bT_ = cst$2, + _bU_ = cst$3, + _bV_ = cst$2, + _bW_ = cst$3, + _bY_ = [0, [11, "invalid box description ", [3, 0, 0]], "invalid box description %S"], - _bW_ = [0, 0, 4], - _bL_ = "nan", - _bJ_ = "neg_infinity", - _bK_ = "infinity", - _bI_ = cst, - _bH_ = [0, 103], - _bv_ = "%+nd", - _bw_ = "% nd", - _by_ = "%+ni", - _bz_ = "% ni", - _bA_ = "%nx", - _bB_ = "%#nx", - _bC_ = "%nX", - _bD_ = "%#nX", - _bE_ = "%no", - _bF_ = "%#no", - _bu_ = "%nd", - _bx_ = cst_ni, - _bG_ = "%nu", - _bi_ = "%+ld", - _bj_ = "% ld", - _bl_ = "%+li", - _bm_ = "% li", - _bn_ = "%lx", - _bo_ = "%#lx", - _bp_ = "%lX", - _bq_ = "%#lX", - _br_ = "%lo", - _bs_ = "%#lo", - _bh_ = "%ld", - _bk_ = cst_li, - _bt_ = "%lu", - _a7_ = "%+Ld", - _a8_ = "% Ld", - _a__ = "%+Li", - _a$_ = "% Li", - _ba_ = "%Lx", - _bb_ = "%#Lx", - _bc_ = "%LX", - _bd_ = "%#LX", - _be_ = "%Lo", - _bf_ = "%#Lo", - _a6_ = "%Ld", - _a9_ = cst_Li, - _bg_ = "%Lu", - _aU_ = "%+d", - _aV_ = "% d", - _aX_ = "%+i", - _aY_ = "% i", - _aZ_ = "%x", - _a0_ = "%#x", - _a1_ = "%X", - _a2_ = "%#X", - _a3_ = "%o", - _a4_ = "%#o", - _aT_ = cst_d, - _aW_ = cst_i, - _a5_ = cst_u, - _ad_ = "@]", - _ae_ = "@}", - _af_ = "@?", - _ag_ = "@\n", - _ah_ = "@.", - _ai_ = "@@", - _aj_ = "@%", - _ak_ = "@", - _aS_ = "CamlinternalFormat.Type_mismatch", - _b1_ = cst$1, - _b2_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], - _cn_ = + _bX_ = [0, 0, 4], + _bM_ = "nan", + _bK_ = "neg_infinity", + _bL_ = "infinity", + _bJ_ = cst, + _bI_ = [0, 103], + _bw_ = "%+nd", + _bx_ = "% nd", + _bz_ = "%+ni", + _bA_ = "% ni", + _bB_ = "%nx", + _bC_ = "%#nx", + _bD_ = "%nX", + _bE_ = "%#nX", + _bF_ = "%no", + _bG_ = "%#no", + _bv_ = "%nd", + _by_ = cst_ni, + _bH_ = "%nu", + _bj_ = "%+ld", + _bk_ = "% ld", + _bm_ = "%+li", + _bn_ = "% li", + _bo_ = "%lx", + _bp_ = "%#lx", + _bq_ = "%lX", + _br_ = "%#lX", + _bs_ = "%lo", + _bt_ = "%#lo", + _bi_ = "%ld", + _bl_ = cst_li, + _bu_ = "%lu", + _a8_ = "%+Ld", + _a9_ = "% Ld", + _a$_ = "%+Li", + _ba_ = "% Li", + _bb_ = "%Lx", + _bc_ = "%#Lx", + _bd_ = "%LX", + _be_ = "%#LX", + _bf_ = "%Lo", + _bg_ = "%#Lo", + _a7_ = "%Ld", + _a__ = cst_Li, + _bh_ = "%Lu", + _aV_ = "%+d", + _aW_ = "% d", + _aY_ = "%+i", + _aZ_ = "% i", + _a0_ = "%x", + _a1_ = "%#x", + _a2_ = "%X", + _a3_ = "%#X", + _a4_ = "%o", + _a5_ = "%#o", + _aU_ = cst_d, + _aX_ = cst_i, + _a6_ = cst_u, + _ae_ = "@]", + _af_ = "@}", + _ag_ = "@?", + _ah_ = "@\n", + _ai_ = "@.", + _aj_ = "@@", + _ak_ = "@%", + _al_ = "@", + _aT_ = "CamlinternalFormat.Type_mismatch", + _b2_ = cst$1, + _b3_ = [0, [11, cst$4, [2, 0, [2, 0, 0]]], ", %s%s"], + _co_ = [0, [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], cst_Fatal_error_exception_s], - _co_ = + _cp_ = [0, [11, "Fatal error in uncaught exception handler: exception ", [2, 0, [12, 10, 0]]], "Fatal error in uncaught exception handler: exception %s\n"], - _cm_ = "Fatal error: out of memory in uncaught exception handler", - _cl_ = + _cn_ = "Fatal error: out of memory in uncaught exception handler", + _cm_ = [0, [11, cst_Fatal_error_exception, [2, 0, [12, 10, 0]]], cst_Fatal_error_exception_s], - _ci_ = [0, [2, 0, [12, 10, 0]], "%s\n"], - _cj_ = + _cj_ = [0, [2, 0, [12, 10, 0]], "%s\n"], + _ck_ = [0, [11, cst_Program_not_linked_with_g_, 0], cst_Program_not_linked_with_g_], - _ca_ = "Raised at", - _cb_ = "Re-raised at", - _cc_ = "Raised by primitive operation at", - _cd_ = "Called from", - _ce_ = " (inlined)", - _cg_ = cst$1, - _cf_ = + _cb_ = "Raised at", + _cc_ = "Re-raised at", + _cd_ = "Raised by primitive operation at", + _ce_ = "Called from", + _cf_ = " (inlined)", + _ch_ = cst$1, + _cg_ = [0, [2, 0, @@ -3829,31 +3832,31 @@ 0, [11, ", line ", [4, 0, 0, 0, [11, cst_characters, partial]]]]]]]]]], '%s %s in file "%s"%s, line %d, characters %d-%d'], - _ch_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], - _b7_ = "Out of memory", - _b8_ = "Stack overflow", - _b9_ = "Pattern matching failed", - _b__ = "Assertion failed", - _b$_ = "Undefined recursive module", - _b3_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], - _b4_ = cst$1, + _ci_ = [0, [2, 0, [11, " unknown location", 0]], "%s unknown location"], + _b8_ = "Out of memory", + _b9_ = "Stack overflow", + _b__ = "Pattern matching failed", + _b$_ = "Assertion failed", + _ca_ = "Undefined recursive module", + _b4_ = [0, [12, 40, [2, 0, [2, 0, [12, 41, 0]]]], "(%s%s)"], _b5_ = cst$1, - _b6_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], - _b0_ = [0, [4, 0, 0, 0, 0], cst_d], - _bY_ = [0, [3, 0, 0], "%S"], - _bZ_ = "_", - _ck_ = + _b6_ = cst$1, + _b7_ = [0, [12, 40, [2, 0, [12, 41, 0]]], "(%s)"], + _b1_ = [0, [4, 0, 0, 0, 0], cst_d], + _bZ_ = [0, [3, 0, 0], "%S"], + _b0_ = "_", + _cl_ = [0, cst$1, "(Cannot print locations:\n bytecode executable program file not found)", "(Cannot print locations:\n bytecode executable program file appears to be corrupt)", "(Cannot print locations:\n bytecode executable program file has wrong magic number)", "(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)"], - _cr_ = "Fun.Finally_raised: ", - _cq_ = "Stdlib.Fun.Finally_raised", - _ct_ = "Random.int", - _cs_ = "x", - _cu_ = + _cs_ = "Fun.Finally_raised: ", + _cr_ = "Stdlib.Fun.Finally_raised", + _cu_ = "Random.int", + _ct_ = "x", + _cv_ = [0, 987910699, 495797812, @@ -3910,220 +3913,243 @@ 652377910, 409934019, 801085050], - _cz_ = "Hashtbl: unsupported hash table format", - _cx_ = cst$1, - _cS_ = [3, 0, 3], - _cT_ = cst, - _cP_ = cst$6, - _cQ_ = "<\/", - _cR_ = cst$1, - _cM_ = cst$6, - _cN_ = cst$7, - _cO_ = cst$1, - _cL_ = "\n", - _cH_ = cst$1, + _cA_ = "Hashtbl: unsupported hash table format", + _cy_ = cst$1, + _cT_ = [3, 0, 3], + _cU_ = cst, + _cQ_ = cst$6, + _cR_ = "<\/", + _cS_ = cst$1, + _cN_ = cst$6, + _cO_ = cst$7, + _cP_ = cst$1, + _cM_ = "\n", _cI_ = cst$1, _cJ_ = cst$1, _cK_ = cst$1, - _cG_ = [0, cst$1], - _cC_ = cst$1, + _cL_ = cst$1, + _cH_ = [0, cst$1], _cD_ = cst$1, _cE_ = cst$1, _cF_ = cst$1, - _cB_ = [0, cst$1, 0, cst$1], - _cA_ = "Stdlib.Format.String_tag", - _cU_ = "Jsoo_runtime.Error.Exn", - _cV_ = "jsError", - _cX_ = [0, "src/fut.ml", 34, 25], - _c6_ = "warn", - _c5_ = cst_error, - _c4_ = "log", - _c2_ = "scrollTop", - _c0_ = "search", - _cZ_ = [0, 1], - _cY_ = cst_pathname, - _c7_ = "isSecureContext", - _c8_ = "cache", - _c9_ = "credentials", - _c__ = "headers", - _c$_ = "integrity", - _da_ = "keepalive", - _db_ = "method", - _dc_ = "mode", - _dd_ = "redirect", - _de_ = "referrer", - _df_ = "referrerPolicy", - _dh_ = "content-box", - _di_ = "border-box", - _dj_ = "device-pixel-content-box", - _dl_ = cst_duration, - _dm_ = cst_playbackRate, - _dn_ = "position", - _dk_ = "Set metadata", - _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], - _ds_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], - _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], - _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], - _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], - _dC_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], - _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], - _dE_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], - _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], - _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], - _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], - _dI_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], - _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], - _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], - _dO_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], - _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], - _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], - _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], - _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], - _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], - _dy_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], - _dx_ = + _cG_ = cst$1, + _cC_ = [0, cst$1, 0, cst$1], + _cB_ = "Stdlib.Format.String_tag", + _cV_ = "Jsoo_runtime.Error.Exn", + _cW_ = "jsError", + _cY_ = [0, "src/fut.ml", 34, 25], + _c7_ = "warn", + _c6_ = cst_error, + _c5_ = "log", + _c3_ = "scrollTop", + _c1_ = "search", + _c0_ = [0, 1], + _cZ_ = cst_pathname, + _c8_ = "isSecureContext", + _c9_ = "cache", + _c__ = "credentials", + _c$_ = "headers", + _da_ = "integrity", + _db_ = "keepalive", + _dc_ = "method", + _dd_ = "mode", + _de_ = "redirect", + _df_ = "referrer", + _dg_ = "referrerPolicy", + _di_ = "content-box", + _dj_ = "border-box", + _dk_ = "device-pixel-content-box", + _dm_ = cst_duration, + _dn_ = cst_playbackRate, + _do_ = "position", + _dl_ = "Set metadata", + _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 157, 10], + _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 179, 10], + _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 191, 10], + _dx_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 218, 17], + _dC_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 367, 16], + _dD_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 368, 18], + _dE_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 372, 15], + _dF_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 377, 15], + _dG_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 383, 15], + _dH_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 386, 10], + _dI_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 362, 16], + _dJ_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 517, 12], + _dK_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 459, 14], + _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 686, 27], + _dP_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 651, 27], + _dN_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 560, 16], + _dL_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 550, 23], + _dM_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 544, 14], + _dB_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 334, 9], + _dA_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 309, 9], + _dz_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 305, 9], + _dy_ = [0, [11, "Lwd: unsafe mutation (variable invalidated during evaluation) at\n", [15, 0]], "Lwd: unsafe mutation (variable invalidated during evaluation) at\n%a"], - _dv_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], - _dt_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], - _dr_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], - _dp_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], - _dN_ = "Lwd.Release_failure", - _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], - _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], - _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], - _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], - _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], - _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], - _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], - _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], - _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], - _eg_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 522, 14], - _ei_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 553, 18], - _ej_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 557, 12], - _ek_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 546, 14], - _eh_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 538, 21], - _ef_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], - _ee_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], - _ed_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], - _d$_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], - _ea_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], - _eb_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], - _ec_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], - _d8_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], - _d9_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], - _d__ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], - _d7_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], - _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], - _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], - _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], - _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], - _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], - _dT_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], - _dS_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], - _dQ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], - _eC_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], - _eq_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], - _er_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], - _et_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], - _eu_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], - _es_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], - _ew_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], - _ex_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], - _ev_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], - _ez_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], - _eB_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], - _eA_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], - _ey_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], - _en_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], - _eo_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], - _ep_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], - _el_ = cst_Lwd_seq_rank_node_is_marke, + _dw_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 199, 14], + _du_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 186, 14], + _ds_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 169, 14], + _dq_ = [0, cst_vendor_lwd_lib_lwd_lwd_ml, 152, 14], + _dO_ = "Lwd.Release_failure", + _dS_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 64, 12], + _d0_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 205, 18], + _dZ_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 218, 9], + _d2_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 224, 18], + _d1_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 237, 9], + _d3_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 240, 21], + _d4_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 250, 21], + _d5_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 260, 21], + _d6_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 296, 14], + _eh_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 522, 14], + _ej_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 553, 18], + _ek_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 557, 12], + _el_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 546, 14], + _ei_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 538, 21], + _eg_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 492, 29], + _ef_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 499, 29], + _ee_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 462, 21], + _ea_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 420, 10], + _eb_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 423, 15], + _ec_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 435, 10], + _ed_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 457, 2], + _d9_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 371, 24], + _d__ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 391, 16], + _d$_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 394, 2], + _d8_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 315, 18], + _d7_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 317, 9], + _dY_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 193, 4], + _dX_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 199, 21], + _dV_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 174, 4], + _dW_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 177, 14], + _dU_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 113, 14], + _dT_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 82, 21], + _dR_ = [0, cst_vendor_lwd_lib_lwd_lwd_tab, 32, 14], + _eD_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 571, 12], + _er_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 321, 37], + _es_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 322, 37], + _eu_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 346, 10], + _ev_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 357, 42], + _et_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 337, 37], + _ex_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 375, 10], + _ey_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 383, 42], + _ew_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 338, 37], + _eA_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 425, 16], + _eC_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 513, 50], + _eB_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 480, 6], + _ez_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 395, 14], + _eo_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 174, 57], + _ep_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 182, 57], + _eq_ = [0, cst_vendor_lwd_lib_lwd_lwd_seq, 238, 11], _em_ = cst_Lwd_seq_rank_node_is_marke, - _eG_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], - _eF_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], + _en_ = cst_Lwd_seq_rank_node_is_marke, + _eH_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 233, 16], + _eG_ = [0, cst_vendor_lwd_lib_brr_lwd_elw, 201, 16], + _eF_ = [0, 0, 0], _eE_ = [0, 0, 0], - _eD_ = [0, 0, 0], - _eH_ = cst$4, - _eI_ = "CCResult.Get_error", - _eL_ = "CCFQueue.Empty", - _eV_ = "expected low surrogate escape sequence (u)", - _eW_ = "invalid low surrogate for code point beyond U+FFFF'", - _eX_ = "expected low surrogate escape char (\\)", - _eY_ = "invalid escape in string", - _eU_ = "end of string in escape sequence", - _eP_ = "' ", - _eQ_ = " '", - _eT_ = cst$1, - _eR_ = cst$5, - _eS_ = " at offset ", - _eN_ = cst$8, - _eO_ = "invalid hex char in unicode escape: '", - _eM_ = "Jsonxt__Lexxer_utils.Lex_error", - _eZ_ = [6, 1], - _e0_ = [6, 0], - _e1_ = cst$8, - _e2_ = cst_unexpected_character, - _e3_ = cst$8, - _e4_ = cst_unexpected_character, - _e5_ = cst$8, - _e6_ = cst_unexpected_character, - _e7_ = cst$8, - _e8_ = cst_unexpected_character, - _e9_ = [0, cst$1], - _e__ = cst$8, - _e$_ = cst_unexpected_character, - _fa_ = "unexpected EOF in comment", - _fb_ = "Jsonxt__Error_info.Json_error_info", - _fc_ = cst_0, - _fd_ = cst_0, - _fe_ = "unexpected '{'", - _ff_ = "unexpected '}'", - _fg_ = "unexpected null value", - _fh_ = "unexpected negative infinity", - _fi_ = "unexpected Not-a-Number", - _fj_ = "unexpected infinity", - _fk_ = "unexpected end-of-input", - _fl_ = "unexpected ','", - _fm_ = "unexpected ':'", - _fn_ = "unexpected '['", - _fo_ = "unexpected ']'", - _fp_ = "unexpected '<'", - _fq_ = "unexpected '>'", - _fr_ = "unexpected '('", - _fs_ = "unexpected ')'", - _ft_ = cst$8, - _fu_ = "unexpected string '", - _fv_ = cst$8, - _fw_ = "unexpected large integer '", + _eI_ = cst$4, + _e5_ = cst$1, + _e4_ = cst$1, + _eU_ = [0, [0, 15681, -937474657], 0], + _eV_ = [0, [0, 15681, 82908052], [0, 737455525, 0]], + _eW_ = [0, [0, 15681, -588596599], [0, 737455525, 0]], + _eX_ = [0, [0, 15681, 4100401], [0, 737455525, 0]], + _eY_ = [0, [0, 15681, -605101559], [0, 737455525, 0]], + _eZ_ = [0, [0, 15681, 756711075], [0, 737455525, 0]], + _e0_ = [0, [0, 15681, 749039939], [0, 737455525, 0]], + _e1_ = [0, [0, 15681, 737308346], [0, 737455525, 0]], + _e2_ = [0, [0, 15681, -937474657], [0, 737455525, 0]], + _eL_ = [0, [0, 15681, 82908052], 0], + _eM_ = [0, [0, 15681, -588596599], 0], + _eN_ = [0, -101336657, 0], + _eO_ = [0, [0, 15681, 4100401], 0], + _eP_ = [0, [0, 15681, -605101559], 0], + _eQ_ = [0, [0, 15681, 756711075], 0], + _eR_ = [0, [0, 15681, 749039939], 0], + _eS_ = [0, 737455525, 0], + _eT_ = [0, [0, 15681, 737308346], 0], + _eJ_ = [0, [11, "\x1b[", [4, 0, 0, 0, [12, 109, 0]]], "\x1b[%dm"], + _eK_ = "CCFormat.ANSI_codes.No_such_style", + _e6_ = "CCFormat.Style", + _e7_ = "CCResult.Get_error", + _e__ = "CCFQueue.Empty", + _fi_ = "expected low surrogate escape sequence (u)", + _fj_ = "invalid low surrogate for code point beyond U+FFFF'", + _fk_ = "expected low surrogate escape char (\\)", + _fl_ = "invalid escape in string", + _fh_ = "end of string in escape sequence", + _fc_ = "' ", + _fd_ = " '", + _fg_ = cst$1, + _fe_ = cst$5, + _ff_ = " at offset ", + _fa_ = cst$8, + _fb_ = "invalid hex char in unicode escape: '", + _e$_ = "Jsonxt__Lexxer_utils.Lex_error", + _fm_ = [6, 1], + _fn_ = [6, 0], + _fo_ = cst$8, + _fp_ = cst_unexpected_character, + _fq_ = cst$8, + _fr_ = cst_unexpected_character, + _fs_ = cst$8, + _ft_ = cst_unexpected_character, + _fu_ = cst$8, + _fv_ = cst_unexpected_character, + _fw_ = [0, cst$1], _fx_ = cst$8, - _fy_ = "unexpected integer '", - _fz_ = cst$8, - _fA_ = "unexpected float '", - _fB_ = cst$8, - _fC_ = "compliance error '", - _fD_ = cst$8, - _fE_ = cst_true, - _fG_ = cst_false, - _fF_ = "unexpected boolean '", - _fK_ = [1, "Unexpected end-of-input"], - _fI_ = [0, 148000204, "tuple must have at least 2 elements"], - _fJ_ = [0, 148000204, "variant must have at least a string"], - _fH_ = "Jsonxt__Parser.Make(Compliance).Parse_error", - _fN_ = cst_b, - _fO_ = cst_t, - _fP_ = cst_n, - _fQ_ = cst_f, - _fR_ = cst_r, - _fS_ = cst$9, - _fL_ = cst$0, - _fM_ = cst_u00, - _fU_ = cst_null, - _fV_ = cst$10, - _fW_ = + _fy_ = cst_unexpected_character, + _fz_ = "unexpected EOF in comment", + _fA_ = "Jsonxt__Error_info.Json_error_info", + _fB_ = cst_0, + _fC_ = cst_0, + _fD_ = "unexpected '{'", + _fE_ = "unexpected '}'", + _fF_ = "unexpected null value", + _fG_ = "unexpected negative infinity", + _fH_ = "unexpected Not-a-Number", + _fI_ = "unexpected infinity", + _fJ_ = "unexpected end-of-input", + _fK_ = "unexpected ','", + _fL_ = "unexpected ':'", + _fM_ = "unexpected '['", + _fN_ = "unexpected ']'", + _fO_ = "unexpected '<'", + _fP_ = "unexpected '>'", + _fQ_ = "unexpected '('", + _fR_ = "unexpected ')'", + _fS_ = cst$8, + _fT_ = "unexpected string '", + _fU_ = cst$8, + _fV_ = "unexpected large integer '", + _fW_ = cst$8, + _fX_ = "unexpected integer '", + _fY_ = cst$8, + _fZ_ = "unexpected float '", + _f0_ = cst$8, + _f1_ = "compliance error '", + _f2_ = cst$8, + _f3_ = cst_true, + _f5_ = cst_false, + _f4_ = "unexpected boolean '", + _f9_ = [1, "Unexpected end-of-input"], + _f7_ = [0, 148000204, "tuple must have at least 2 elements"], + _f8_ = [0, 148000204, "variant must have at least a string"], + _f6_ = "Jsonxt__Parser.Make(Compliance).Parse_error", + _ga_ = cst_b, + _gb_ = cst_t, + _gc_ = cst_n, + _gd_ = cst_f, + _ge_ = cst_r, + _gf_ = cst$9, + _f__ = cst$0, + _f$_ = cst_u00, + _gh_ = cst_null, + _gi_ = cst$10, + _gj_ = [0, [12, 123, @@ -4131,9 +4157,9 @@ [0, cst_1_0, 1, 0], [15, [17, [0, cst_1_2, 1, -2], [12, 125, 0]]]]], "{@;<1 0>%a@;<1 -2>}"], - _fX_ = "{}", - _fY_ = cst$10, - _fZ_ = + _gk_ = "{}", + _gl_ = cst$10, + _gm_ = [0, [12, 91, @@ -4143,16 +4169,16 @@ [1, [0, [11, cst_hov, 0], cst_hov]], [15, [17, 0, [17, [0, cst_1_2, 1, -2], [12, 93, 0]]]]]]], "[@;<1 0>@[%a@]@;<1 -2>]"], - _f0_ = "[]", - _f1_ = "()", - _f2_ = cst$10, - _f3_ = + _gn_ = "[]", + _go_ = "()", + _gp_ = cst$10, + _gq_ = [0, [12, 40, [17, [0, "@,", 0, 0], [15, [17, [0, "@;<0 -2>", 0, -2], [12, 41, 0]]]]], "(@,%a@;<0 -2>)"], - _f4_ = + _gr_ = [0, [12, 60, @@ -4160,103 +4186,103 @@ [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$5, [15, [17, 0, [12, 62, 0]]]]]]], "<@[%s: %a@]>"], - _f5_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], - _f6_ = + _gs_ = [0, [12, 60, [2, 0, [12, 62, 0]]], "<%s>"], + _gt_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [2, 0, [11, cst$5, [15, [17, 0, 0]]]]], "@[%s: %a@]"], - _f9_ = [0, [15, [17, 2, 0]], "%a@?"], - _f8_ = [0, [15, 0], cst_a], - _f7_ = + _gw_ = [0, [15, [17, 2, 0]], "%a@?"], + _gv_ = [0, [15, 0], cst_a], + _gu_ = [0, [18, [1, [0, [11, cst_hv2, 0], cst_hv2]], [15, [17, 0, 0]]], "@[%a@]"], - _fT_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], - _ga_ = "Expected `String", - _f$_ = "Expected `Assoc", - _gc_ = "{", - _gd_ = "}", - _ge_ = "Null", - _gf_ = cst_Infinity, - _gg_ = "NAN", - _gh_ = cst_Infinity$0, - _gi_ = "end-of-file", - _gj_ = cst$10, - _gk_ = cst$11, - _gl_ = "[", - _gm_ = "]", - _gn_ = cst$7, - _go_ = cst$6, - _gp_ = "(", - _gq_ = ")", - _gr_ = cst$8, - _gs_ = "input error '", - _gt_ = cst_true, - _gu_ = cst_false, - _gx_ = cst_junk_after_end_of_JSON_val, - _gy_ = [0, 0], - _gz_ = [1, cst_empty_input], - _gv_ = cst_junk_after_end_of_JSON_val, - _gw_ = [1, cst_empty_input], - _gM_ = cst$1, - _gN_ = cst$1, - _gJ_ = cst_null, - _gK_ = cst$10, - _gL_ = cst$10, - _gI_ = cst$11, - _gC_ = cst_b, - _gD_ = cst_t, - _gE_ = cst_n, - _gF_ = cst_f, - _gG_ = cst_r, - _gH_ = cst$9, - _gA_ = cst$0, - _gB_ = cst_u00, - _gW_ = cst_null, - _gY_ = cst$10, - _gX_ = cst$1, - _g0_ = cst$10, - _gZ_ = cst$1, - _gQ_ = cst_b, - _gR_ = cst_t, - _gS_ = cst_n, - _gT_ = cst_f, - _gU_ = cst_r, - _gV_ = cst$9, - _gO_ = cst$0, - _gP_ = cst_u00, - _hs_ = [0, 928231259, cst_Infinity$0], - _ht_ = [0, 928231259, cst_Infinity], - _hr_ = [0, 928231259, cst_NaN], - _hq_ = cst_NaN, - _ho_ = cst_Infinity, - _hp_ = cst_Infinity$0, - _hn_ = [0, 0], - _hl_ = cst$12, - _hm_ = cst$12, - _hk_ = "floatlit not supported in yojson safe mode", - _hj_ = cst_NaN, - _hh_ = cst_Infinity, - _hi_ = cst_Infinity$0, - _hg_ = [0, 0], - _hf_ = cst_variants_not_supported_in_, - _he_ = cst_variants_not_supported_in_, - _hd_ = cst_tuples_not_supported_in_yo, - _hc_ = cst_tuples_not_supported_in_yo, - _hb_ = "floatlit not supported in yojson basic mode", - _ha_ = cst_variants_not_supported_in_, - _g$_ = cst_tuples_not_supported_in_yo, - _g__ = cst_NaN, - _g8_ = cst_Infinity, - _g9_ = cst_Infinity$0, - _g7_ = [0, 0], - _g6_ = [5, "Integer out of bounds"], - _g2_ = ", line", - _g3_ = "File ", - _g5_ = "Line", - _g4_ = + _gg_ = [0, [2, 0, [17, [0, "@ ", 1, 0], 0]], "%s@ "], + _gz_ = "Expected `String", + _gy_ = "Expected `Assoc", + _gB_ = "{", + _gC_ = "}", + _gD_ = "Null", + _gE_ = cst_Infinity, + _gF_ = "NAN", + _gG_ = cst_Infinity$0, + _gH_ = "end-of-file", + _gI_ = cst$10, + _gJ_ = cst$11, + _gK_ = "[", + _gL_ = "]", + _gM_ = cst$7, + _gN_ = cst$6, + _gO_ = "(", + _gP_ = ")", + _gQ_ = cst$8, + _gR_ = "input error '", + _gS_ = cst_true, + _gT_ = cst_false, + _gW_ = cst_junk_after_end_of_JSON_val, + _gX_ = [0, 0], + _gY_ = [1, cst_empty_input], + _gU_ = cst_junk_after_end_of_JSON_val, + _gV_ = [1, cst_empty_input], + _g$_ = cst$1, + _ha_ = cst$1, + _g8_ = cst_null, + _g9_ = cst$10, + _g__ = cst$10, + _g7_ = cst$11, + _g1_ = cst_b, + _g2_ = cst_t, + _g3_ = cst_n, + _g4_ = cst_f, + _g5_ = cst_r, + _g6_ = cst$9, + _gZ_ = cst$0, + _g0_ = cst_u00, + _hj_ = cst_null, + _hl_ = cst$10, + _hk_ = cst$1, + _hn_ = cst$10, + _hm_ = cst$1, + _hd_ = cst_b, + _he_ = cst_t, + _hf_ = cst_n, + _hg_ = cst_f, + _hh_ = cst_r, + _hi_ = cst$9, + _hb_ = cst$0, + _hc_ = cst_u00, + _hR_ = [0, 928231259, cst_Infinity$0], + _hS_ = [0, 928231259, cst_Infinity], + _hQ_ = [0, 928231259, cst_NaN], + _hP_ = cst_NaN, + _hN_ = cst_Infinity, + _hO_ = cst_Infinity$0, + _hM_ = [0, 0], + _hK_ = cst$12, + _hL_ = cst$12, + _hJ_ = "floatlit not supported in yojson safe mode", + _hI_ = cst_NaN, + _hG_ = cst_Infinity, + _hH_ = cst_Infinity$0, + _hF_ = [0, 0], + _hE_ = cst_variants_not_supported_in_, + _hD_ = cst_variants_not_supported_in_, + _hC_ = cst_tuples_not_supported_in_yo, + _hB_ = cst_tuples_not_supported_in_yo, + _hA_ = "floatlit not supported in yojson basic mode", + _hz_ = cst_variants_not_supported_in_, + _hy_ = cst_tuples_not_supported_in_yo, + _hx_ = cst_NaN, + _hv_ = cst_Infinity, + _hw_ = cst_Infinity$0, + _hu_ = [0, 0], + _ht_ = [5, "Integer out of bounds"], + _hp_ = ", line", + _hq_ = "File ", + _hs_ = "Line", + _hr_ = [0, [2, 0, @@ -4270,67 +4296,67 @@ " chars ", [4, 0, 0, 0, [12, 45, [4, 0, 0, 0, [11, cst$5, 0]]]]]]]], "%s %d chars %d-%d: "], - _g1_ = "Jsonxt__Yojson.Json_error", - _hu_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", - _hv_ = [1, [0, 3854881, "Failed to unmarshal data"]], - _hw_ = "TODO not implemented", - _hD_ = "not implemented", - _hA_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], - _hB_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], - _hC_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], - _hx_ = cst_px, - _hy_ = cst_rem, - _hz_ = cst_em, - _hE_ = [0, 80, [0, "lwdui-controlled-scroll-wrapper"]], - _hF_ = [0, 80, "lwdui-controlled-scroll-controls"], - _hG_ = "Show playing", - _hL_ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], - _hK_ = cst$13, - _hH_ = [0, cst$13], - _hI_ = "grid-template-columns", - _hJ_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], - _hM_ = [1, 4.], - _hP_ = [0, 80, "row"], - _hN_ = + _ho_ = "Jsonxt__Yojson.Json_error", + _hT_ = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", + _hU_ = [1, [0, 3854881, "Failed to unmarshal data"]], + _hV_ = "TODO not implemented", + _h2_ = "not implemented", + _hZ_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_px, 0]], "%fpx"], + _h0_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_rem, 0]], "%frem"], + _h1_ = [0, [8, [0, 0, 0], 0, 0, [11, cst_em, 0]], "%fem"], + _hW_ = cst_px, + _hX_ = cst_rem, + _hY_ = cst_em, + _h3_ = [0, 80, [0, "lwdui-controlled-scroll-wrapper"]], + _h4_ = [0, 80, "lwdui-controlled-scroll-controls"], + _h5_ = "Show playing", + _h__ = [0, [11, cst_height, [2, 0, 0]], "height: %s"], + _h9_ = cst$13, + _h6_ = [0, cst$13], + _h7_ = "grid-template-columns", + _h8_ = [0, [2, 0, [11, cst$5, [2, 0, [12, 59, 0]]]], "%s: %s;"], + _h$_ = [1, 4.], + _ic_ = [0, 80, "row"], + _ia_ = [0, [11, "height: calc(", [2, 0, [11, " * ", [4, 3, 0, 0, [11, ");", 0]]]]], "height: calc(%s * %i);"], - _hO_ = + _ib_ = [0, [11, cst_height, [2, 0, [11, " !important;", 0]]], "height: %s !important;"], - _hQ_ = [0, "lwdui-lazy-table", 0], - _hR_ = [0, 80, [0, "lwdui-lazy-table-wrapper"]], - _hT_ = [1, -358247754], - _hS_ = + _id_ = [0, "lwdui-lazy-table", 0], + _ie_ = [0, 80, [0, "lwdui-lazy-table-wrapper"]], + _ig_ = [1, -358247754], + _if_ = [0, [11, "Multiple persitent var are using the key ", [2, 0, 0]], "Multiple persitent var are using the key %s"], - _hW_ = cst_submit, - _hV_ = "password", - _hU_ = cst_text, - _hZ_ = [0, 80, cst_text], - _hX_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _hY_ = [0, [2, 0, 0], cst_s], - _h1_ = [0, 80, cst_text], - _h0_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], - _h4_ = [0, 80, "checkbox"], - _h2_ = + _ij_ = cst_submit, + _ii_ = "password", + _ih_ = cst_text, + _im_ = [0, 80, cst_text], + _ik_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], + _il_ = [0, [2, 0, 0], cst_s], + _io_ = [0, 80, cst_text], + _in_ = [0, [2, 0, [11, cst_id, 0]], cst_s_id], + _ir_ = [0, 80, "checkbox"], + _ip_ = [0, [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, [11, "-id", 0]]]]]], "%s-%i-%i-id"], - _h3_ = + _iq_ = [0, [2, 0, [12, 45, [4, 3, 0, 0, [12, 45, [4, 3, 0, 0, 0]]]]], "%s-%i-%i"], - _h5_ = [0, 80, cst_button], - _h9_ = "list_of_yojson: list needed", - _h8_ = "int_of_yojson: integer needed", - _h7_ = "string_of_yojson: string needed", - _h6_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", - _ig_ = cst$13, - _ii_ = "_of_yojson: list instead of atom for record expected", - _ih_ = + _is_ = [0, 80, cst_button], + _iw_ = "list_of_yojson: list needed", + _iv_ = "int_of_yojson: integer needed", + _iu_ = "string_of_yojson: string needed", + _it_ = "Ppx_yojson_conv_lib__Yojson_conv.Of_yojson_error", + _iF_ = cst$13, + _iH_ = "_of_yojson: list instead of atom for record expected", + _iG_ = [0, [2, 0, @@ -4338,171 +4364,199 @@ "_of_yojson: the following record elements were undefined: ", [2, 0, 0]]], "%s_of_yojson: the following record elements were undefined: %s"], - _if_ = "extra fields", - _ie_ = "duplicate fields", - _ic_ = cst$13, - _id_ = + _iE_ = "extra fields", + _iD_ = "duplicate fields", + _iB_ = cst$13, + _iC_ = [0, [2, 0, [11, "_of_yojson: ", [2, 0, [11, cst$5, [2, 0, 0]]]]], "%s_of_yojson: %s: %s"], - _ib_ = "_of_yojson: unexpected variant constructor", - _ia_ = "_of_yojson: expected a variant type, saw an empty list", - _h$_ = "_of_yojson: expected a variant type, saw a nested list", - _h__ = "_of_yojson: this constructor does not take arguments", - _jv_ = "An error occured while decoding response: ", - _jr_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], - _ju_ = cst$1, - _js_ = cst$1, - _jt_ = + _iA_ = "_of_yojson: unexpected variant constructor", + _iz_ = "_of_yojson: expected a variant type, saw an empty list", + _iy_ = "_of_yojson: expected a variant type, saw a nested list", + _ix_ = "_of_yojson: this constructor does not take arguments", + _jU_ = "An error occured while decoding response: ", + _jQ_ = [0, [11, ", Token=", [3, 0, 0]], ", Token=%S"], + _jT_ = cst$1, + _jR_ = cst$1, + _jS_ = [0, [11, 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="', [2, 0, [11, '", Version="0.1"', [2, 0, 0]]]], 'MediaBrowser Client="Ocamix", Device="Firefox", DeviceId="%s", Version="0.1"%s'], - _jq_ = cst_CollectionType, - _jh_ = cst_Type, - _ji_ = cst_ImageBlurHashes, - _jj_ = cst_ServerId, - _jk_ = cst_ParentId, - _jl_ = cst_AlbumId, - _jm_ = cst_Path, - _jn_ = cst_Id, - _jo_ = cst_SortName, - _jp_ = cst_Name, - _jc_ = "type_", - _jd_ = "image_blur_hashes", - _je_ = cst_server_id, - _jf_ = cst_id$0, - _jg_ = cst_name, - _jb_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], - _iC_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], - _iD_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], - _iE_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], - _iF_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], - _iG_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], - _iH_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], - _iI_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], - _iJ_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], - _iK_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], - _iL_ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], - _iM_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], - _iN_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], - _iO_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], - _iP_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], - _iQ_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], - _iR_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], - _iS_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], - _iT_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], - _iU_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], - _iV_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], - _iW_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], - _iX_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], - _iY_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], - _iZ_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], - _i0_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], - _i1_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], - _i2_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], - _i3_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], - _i4_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], - _i5_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], - _i6_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], - _i7_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], - _i8_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], - _i9_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], - _i__ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], - _i$_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], - _ja_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], - _iB_ = cst_Primary, - _iA_ = [0, "Users", [0, "AuthenticateByName", 0]], - _ix_ = cst_ServerId, - _iy_ = cst_AccessToken, - _iz_ = cst_User, - _iu_ = cst_server_id, - _iv_ = "access_token", - _iw_ = "user", - _is_ = cst_Pw, - _it_ = cst_Username, - _iq_ = "pw", - _ir_ = "username", - _im_ = cst_Id, - _in_ = cst_ServerName, - _io_ = cst_ServerId, - _ip_ = cst_Name, - _ij_ = cst_id$0, - _ik_ = cst_server_id, - _il_ = cst_name, - _jQ_ = [0, cst_lib_db_stores_ml, 116, 13], - _jP_ = [0, cst_lib_db_stores_ml, 107, 19], - _jM_ = [0, cst_lib_db_stores_ml, 99, 13], - _jL_ = [0, cst_lib_db_stores_ml, 93, 19], - _jH_ = [0, cst_lib_db_stores_ml, 66, 13], - _jF_ = cst_item, - _jG_ = cst_sorts, - _jD_ = cst_item, - _jE_ = cst_sorts, - _jA_ = cst_sort_name, - _jB_ = cst_views, - _jC_ = cst_date_added, - _jx_ = cst_sort_name, - _jy_ = cst_views, - _jz_ = cst_date_added, - _jI_ = [0, cst_sorts_views], - _jJ_ = [0, "item.Name"], - _jK_ = [0, cst_item_Id], - _jN_ = [0, cst_sorts_views], - _jO_ = [0, "item.Type"], - _jR_ = [0, "sorts.sort_name"], - _jS_ = [0, "item.CollectionType"], - _kf_ = "GOT L=", - _ke_ = [0, "NEW REF", 0], - _kd_ = "Synchronized", - _kb_ = + _jP_ = cst_CollectionType, + _jG_ = cst_Type, + _jH_ = cst_ImageBlurHashes, + _jI_ = cst_ServerId, + _jJ_ = cst_ParentId, + _jK_ = cst_AlbumId, + _jL_ = cst_Path, + _jM_ = cst_Id, + _jN_ = cst_SortName, + _jO_ = cst_Name, + _jB_ = "type_", + _jC_ = "image_blur_hashes", + _jD_ = cst_server_id, + _jE_ = cst_id$0, + _jF_ = cst_name, + _jA_ = [0, "lib/data_source/jellyfin_api.ml", 193, 64], + _i1_ = [0, 848054398, [0, [0, -976970511, cst_AggregateFolder], 0]], + _i2_ = [0, 848054398, [0, [0, -976970511, cst_Audio], 0]], + _i3_ = [0, 848054398, [0, [0, -976970511, cst_AudioBook], 0]], + _i4_ = [0, 848054398, [0, [0, -976970511, cst_BasePluginFolder], 0]], + _i5_ = [0, 848054398, [0, [0, -976970511, cst_Book], 0]], + _i6_ = [0, 848054398, [0, [0, -976970511, cst_BoxSet], 0]], + _i7_ = [0, 848054398, [0, [0, -976970511, cst_Channel], 0]], + _i8_ = [0, 848054398, [0, [0, -976970511, cst_ChannelFolderItem], 0]], + _i9_ = [0, 848054398, [0, [0, -976970511, cst_CollectionFolder], 0]], + _i__ = [0, 848054398, [0, [0, -976970511, cst_Episode], 0]], + _i$_ = [0, 848054398, [0, [0, -976970511, cst_Folder], 0]], + _ja_ = [0, 848054398, [0, [0, -976970511, cst_Genre], 0]], + _jb_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvChannel], 0]], + _jc_ = [0, 848054398, [0, [0, -976970511, cst_LiveTvProgram], 0]], + _jd_ = [0, 848054398, [0, [0, -976970511, cst_ManualPlaylistsFolder], 0]], + _je_ = [0, 848054398, [0, [0, -976970511, cst_Movie], 0]], + _jf_ = [0, 848054398, [0, [0, -976970511, cst_MusicAlbum], 0]], + _jg_ = [0, 848054398, [0, [0, -976970511, cst_MusicArtist], 0]], + _jh_ = [0, 848054398, [0, [0, -976970511, cst_MusicGenre], 0]], + _ji_ = [0, 848054398, [0, [0, -976970511, cst_MusicVideo], 0]], + _jj_ = [0, 848054398, [0, [0, -976970511, cst_Person], 0]], + _jk_ = [0, 848054398, [0, [0, -976970511, cst_Photo], 0]], + _jl_ = [0, 848054398, [0, [0, -976970511, cst_PhotoAlbum], 0]], + _jm_ = [0, 848054398, [0, [0, -976970511, cst_Playlist], 0]], + _jn_ = [0, 848054398, [0, [0, -976970511, cst_PlaylistsFolder], 0]], + _jo_ = [0, 848054398, [0, [0, -976970511, cst_Program], 0]], + _jp_ = [0, 848054398, [0, [0, -976970511, cst_Recording], 0]], + _jq_ = [0, 848054398, [0, [0, -976970511, cst_Season], 0]], + _jr_ = [0, 848054398, [0, [0, -976970511, cst_Series], 0]], + _js_ = [0, 848054398, [0, [0, -976970511, cst_Studio], 0]], + _jt_ = [0, 848054398, [0, [0, -976970511, cst_Trailer], 0]], + _ju_ = [0, 848054398, [0, [0, -976970511, cst_TvChannel], 0]], + _jv_ = [0, 848054398, [0, [0, -976970511, cst_TvProgram], 0]], + _jw_ = [0, 848054398, [0, [0, -976970511, cst_UserRootFolder], 0]], + _jx_ = [0, 848054398, [0, [0, -976970511, cst_UserView], 0]], + _jy_ = [0, 848054398, [0, [0, -976970511, cst_Video], 0]], + _jz_ = [0, 848054398, [0, [0, -976970511, cst_Year], 0]], + _i0_ = cst_Primary, + _iZ_ = [0, "Users", [0, "AuthenticateByName", 0]], + _iW_ = cst_ServerId, + _iX_ = cst_AccessToken, + _iY_ = cst_User, + _iT_ = cst_server_id, + _iU_ = "access_token", + _iV_ = "user", + _iR_ = cst_Pw, + _iS_ = cst_Username, + _iP_ = "pw", + _iQ_ = "username", + _iL_ = cst_Id, + _iM_ = cst_ServerName, + _iN_ = cst_ServerId, + _iO_ = cst_Name, + _iI_ = cst_id$0, + _iJ_ = cst_server_id, + _iK_ = cst_name, + _kd_ = [0, cst_lib_db_stores_ml, 116, 13], + _kc_ = [0, cst_lib_db_stores_ml, 107, 19], + _j$_ = [0, cst_lib_db_stores_ml, 99, 13], + _j__ = [0, cst_lib_db_stores_ml, 93, 19], + _j6_ = [0, cst_lib_db_stores_ml, 66, 13], + _j4_ = cst_item, + _j5_ = cst_sorts, + _j2_ = cst_item, + _j3_ = cst_sorts, + _jZ_ = cst_sort_name, + _j0_ = cst_views, + _j1_ = cst_date_added, + _jW_ = cst_sort_name, + _jX_ = cst_views, + _jY_ = cst_date_added, + _j7_ = [0, cst_sorts_views], + _j8_ = [0, "item.Name"], + _j9_ = [0, cst_item_Id], + _ka_ = [0, cst_sorts_views], + _kb_ = [0, "item.Type"], + _ke_ = [0, "sorts.sort_name"], + _kf_ = [0, "item.CollectionType"], + _ku_ = [0, [2, 0, [15, 0]], "%s%a"], + _kt_ = + [0, + [12, 40, [4, 3, 0, 0, [12, 47, [4, 3, 0, 0, [12, 41, 0]]]]], + "(%i/%i)"], + _ko_ = "Unknown", + _kp_ = cst_Synchronized, + _kq_ = "Inconsistent", + _kr_ = + [0, + [11, + "New items: last: ", + [4, + 3, + 0, + 0, + [11, + " missing: ", + [4, 3, 0, 0, [11, cst_unfetched, [4, 3, 0, 0, 0]]]]]], + "New items: last: %i missing: %i unfetched: %i"], + _ks_ = + [0, + [11, + "Partial: last: ", + [4, 3, 0, 0, [11, cst_unfetched, [4, 3, 0, 0, 0]]]], + "Partial: last: %i unfetched: %i"], + _kx_ = [0, [11, "Server ", [2, 0, [11, cst$5, [15, 0]]]], "Server %s: %a"], + _kw_ = cst$1, + _kN_ = "GOT L=", + _kM_ = [0, "NEW REF", 0], + _kL_ = cst_Synchronized, + _kJ_ = [0, [11, "Sync in progress: ", [4, 3, 0, 0, [12, 47, [4, 3, 0, 0, 0]]]], "Sync in progress: %i/%i"], - _kc_ = "Desynchronized", - _j9_ = cst_Form_submitted, - _ka_ = cst_Form_submitted, - _j__ = cst_Form_submitted, - _j$_ = cst$1, - _j2_ = "ui_servers", - _j3_ = [0, "https://demo.jellyfin.org/stable"], - _j4_ = [0, 1], - _j5_ = [0, "demo"], - _j6_ = [0, 1], - _j7_ = [0, 0], - _j8_ = [0, 80, "Connect"], - _ku_ = cst_Nothing_playing, - _kp_ = + _kK_ = "Desynchronized", + _kF_ = cst_Form_submitted, + _kI_ = cst_Form_submitted, + _kG_ = cst_Form_submitted, + _kH_ = cst$1, + _ky_ = "ui_servers", + _kz_ = [0, "https://demo.jellyfin.org/stable"], + _kA_ = [0, 1], + _kB_ = [0, "demo"], + _kC_ = [0, 1], + _kD_ = [0, 0], + _kE_ = [0, 80, "Connect"], + _k2_ = cst_Nothing_playing, + _kX_ = [0, [2, 0, [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], cst_s_Items_s_Images_Primary_w], - _kr_ = cst_track_png, - _kq_ = + _kZ_ = cst_track_png, + _kY_ = [0, [11, cst_background_image_url, [3, 0, [12, 41, 0]]], cst_background_image_url_S], - _kn_ = + _kV_ = "A playback error happened. This is probably due to a codec unsupported by the browser.", - _ko_ = [0, 80, "NEXT"], - _ks_ = [0, 80, "now-playing-cover"], - _kt_ = [0, 80, "now-playing-details"], - _kv_ = [0, 80, cst_box], - _kw_ = [0, 80, "now-playing-display"], - _kx_ = [0, 80, "player-wrapper"], - _ky_ = [0, 80, cst_box], - _kj_ = "Now playing:", - _kk_ = + _kW_ = [0, 80, "NEXT"], + _k0_ = [0, 80, "now-playing-cover"], + _k1_ = [0, 80, "now-playing-details"], + _k3_ = [0, 80, cst_box], + _k4_ = [0, 80, "now-playing-display"], + _k5_ = [0, 80, "player-wrapper"], + _k6_ = [0, 80, cst_box], + _kR_ = "Now playing:", + _kS_ = [0, [2, 0, [11, cst_Items, [2, 0, [11, cst_Images_Primary_width_500_f, 0]]]], cst_s_Items_s_Images_Primary_w], - _kl_ = "image/jpeg", - _km_ = "500x500", - _ki_ = + _kT_ = "image/jpeg", + _kU_ = "500x500", + _kQ_ = [0, [2, 0, @@ -4518,28 +4572,29 @@ "&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls", 0]]]]]], "%s/Audio/%s/universal?api_key=%s&audioCodec=aac&container=opus,mp3,aac,m4a,m4b,flac,wav,ogg&transcodingContainer=ts&transcodingProtocol=hls"], - _kA_ = [0, "off", 0], - _kB_ = [0, "on", 0], - _kz_ = [0, cst_button, 0], - _kC_ = [0, "draggable-table", 0], - _kO_ = "|>", - _kN_ = + _k8_ = [0, "off", 0], + _k9_ = [0, "on", 0], + _k7_ = [0, cst_button, 0], + _k__ = [0, "draggable-table", 0], + _lm_ = [0, 3854881, "No view !"], + _lk_ = "|>", + _lj_ = [0, [2, 0, [11, cst_Items, [2, 0, [11, "/Images/Primary?width=50", 0]]]], "%s/Items/%s/Images/Primary?width=50"], - _kM_ = "server-error.png", - _kP_ = [2, 4.], - _kD_ = cst_Title, - _kE_ = "1fr", - _kF_ = cst_Title, - _kG_ = cst_Cover, - _kH_ = cst_5rem, - _kI_ = cst_Cover, - _kJ_ = "#", - _kK_ = cst_5rem, - _kL_ = "Order", - _k$_ = "Persist ?", - _k5_ = + _li_ = "server-error.png", + _ll_ = [2, 4.], + _k$_ = cst_Title, + _la_ = "1fr", + _lb_ = cst_Title, + _lc_ = cst_Cover, + _ld_ = cst_5rem, + _le_ = cst_Cover, + _lf_ = "#", + _lg_ = cst_5rem, + _lh_ = "Order", + _lI_ = "Persist ?", + _lC_ = [0, [2, 0, @@ -4547,29 +4602,29 @@ cst_Items, [2, 0, [11, "/Images/Primary?width=800&format=Jpg", 0]]]], "%s/Items/%s/Images/Primary?width=800&format=Jpg"], - _k7_ = cst_track_png, - _k6_ = + _lE_ = cst_track_png, + _lD_ = [0, [11, cst_background_image_url, [3, 0, [12, 41, 0]]], cst_background_image_url_S], - _k4_ = cst_Nothing_playing, - _k2_ = '""', - _k3_ = "Updating main view:", - _kS_ = cst_click, - _kQ_ = "session_uuid", - _kR_ = "toto1", - _kU_ = "Welcome to OCAMIX", - _kW_ = [0, cst_pouet, 0, 0], - _kX_ = + _lB_ = cst_Nothing_playing, + _lz_ = '""', + _lA_ = "Updating main view:", + _lp_ = cst_click, + _ln_ = "session_uuid", + _lo_ = "toto1", + _lr_ = "Welcome to OCAMIX", + _lt_ = [0, cst_pouet, 0, 0], + _lu_ = [0, [0, cst_date_added, "Date added"], [0, [0, cst_name, cst_Name], 0]], - _kY_ = [0, "view-sort", cst_date_added, 0], - _kZ_ = + _lv_ = [0, "view-sort", cst_date_added, 0], + _lw_ = [0, [0, cst_asc, "Asc"], [0, [0, cst_desc, "Desc"], [0, [0, cst_random, "Random"], 0]]], - _k0_ = [0, "view-order", cst_desc, 0], - _k1_ = cst_pouet, - _k__ = [0, "main-layout"]; + _lx_ = [0, "view-order", cst_desc, 0], + _ly_ = cst_pouet, + _lH_ = [0, "main-layout"]; function erase_rel(param){ if(typeof param === "number") return 0; switch(param[0]){ @@ -4798,9 +4853,9 @@ if(! param$0) return 0; var l = param$0[2], a = param$0[1]; try{caml_ml_flush(a);} - catch(_ze_){ - var _zd_ = caml_wrap_exception(_ze_); - if(_zd_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_zd_, 0); + catch(_z3_){ + var _z2_ = caml_wrap_exception(_z3_); + if(_z2_[1] !== Sys_error) throw caml_maybe_attach_backtrace(_z2_, 0); } param$0 = l; } @@ -4848,15 +4903,15 @@ return caml_call1(old_exit$0, 0); }, success = compare_and_set(exit_function, old_exit, new_exit), - _zc_ = 1 - success; - if(! _zc_) return _zc_; + _z1_ = 1 - success; + if(! _z1_) return _z1_; } } function do_at_exit(param){return caml_call1(get(exit_function), 0);} caml_register_named_value("Pervasives.do_at_exit", do_at_exit); - function _i_(_zb_){return caml_ml_close_channel(_zb_);} - function _j_(_za_, _y$_){return caml_ml_output_char(_za_, _y$_);} - function _k_(_y__){return caml_ml_flush(_y__);} + function _i_(_z0_){return caml_ml_close_channel(_z0_);} + function _j_(_zZ_, _zY_){return caml_ml_output_char(_zZ_, _zY_);} + function _k_(_zX_){return caml_ml_flush(_zX_);} var max_array_length = caml_sys_const_max_wosize(0), max_string_length = (4 * max_array_length | 0) - 1 | 0; @@ -5047,8 +5102,8 @@ var param$0 = param; for(;;){ if(! param$0) return 1; - var l = param$0[2], a = param$0[1], _y9_ = caml_call1(p, a); - if(! _y9_) return _y9_; + var l = param$0[2], a = param$0[1], _zW_ = caml_call1(p, a); + if(! _zW_) return _zW_; param$0 = l; } } @@ -5085,8 +5140,8 @@ param$0 = l; } } - var _y7_ = 0; - return function(_y8_){return find(_y7_, _y8_);}; + var _zU_ = 0; + return function(_zV_){return find(_zU_, _zV_);}; } function filter_map(f){ function aux(accu, param){ @@ -5103,14 +5158,14 @@ param$0 = l; } } - var _y5_ = 0; - return function(_y6_){return aux(_y5_, _y6_);}; + var _zS_ = 0; + return function(_zT_){return aux(_zS_, _zT_);}; } function partition(p, l){ function part(yes, no, param){ var yes$0 = yes, no$0 = no, param$0 = param; for(;;){ - if(! param$0){var _y4_ = rev(no$0); return [0, rev(yes$0), _y4_];} + if(! param$0){var _zR_ = rev(no$0); return [0, rev(yes$0), _zR_];} var l = param$0[2], x = param$0[1]; if(caml_call1(p, x)){ var yes$1 = [0, x, yes$0]; @@ -5192,61 +5247,61 @@ } } else if(3 === n && l){ - var _yY_ = l[2]; - if(_yY_){ - var match$2 = _yY_[2]; + var _zL_ = l[2]; + if(_zL_){ + var match$2 = _zL_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _yY_[1], + x2$0 = _zL_[1], x1$0 = l[1], c$0 = caml_call2(cmp, x1$0, x2$0); if(0 === c$0) var c$1 = caml_call2(cmp, x2$0, x3), - _yZ_ = + _zM_ = 0 === c$1 ? [0, x2$0, 0] : 0 <= c$1 ? [0, x3, [0, x2$0, 0]] : [0, x2$0, [0, x3, 0]], - s$0 = _yZ_; + s$0 = _zM_; else if(0 <= c$0){ var c$2 = caml_call2(cmp, x1$0, x3); if(0 === c$2) - var _y0_ = [0, x2$0, [0, x1$0, 0]]; + var _zN_ = [0, x2$0, [0, x1$0, 0]]; else if(0 <= c$2) var c$3 = caml_call2(cmp, x2$0, x3), - _y1_ = + _zO_ = 0 === c$3 ? [0, x2$0, [0, x1$0, 0]] : 0 <= c$3 ? [0, x3, [0, x2$0, [0, x1$0, 0]]] : [0, x2$0, [0, x3, [0, x1$0, 0]]], - _y0_ = _y1_; + _zN_ = _zO_; else - var _y0_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; - var s$0 = _y0_; + var _zN_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var s$0 = _zN_; } else{ var c$4 = caml_call2(cmp, x2$0, x3); if(0 === c$4) - var _y2_ = [0, x1$0, [0, x2$0, 0]]; + var _zP_ = [0, x1$0, [0, x2$0, 0]]; else if(0 <= c$4) var c$5 = caml_call2(cmp, x1$0, x3), - _y3_ = + _zQ_ = 0 === c$5 ? [0, x1$0, [0, x2$0, 0]] : 0 <= c$5 ? [0, x3, [0, x1$0, [0, x2$0, 0]]] : [0, x1$0, [0, x3, [0, x2$0, 0]]], - _y2_ = _y3_; + _zP_ = _zQ_; else - var _y2_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; - var s$0 = _y2_; + var _zP_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var s$0 = _zP_; } return [0, s$0, tl$1]; } @@ -5282,61 +5337,61 @@ } } else if(3 === n && l){ - var _yS_ = l[2]; - if(_yS_){ - var match$2 = _yS_[2]; + var _zF_ = l[2]; + if(_zF_){ + var match$2 = _zF_[2]; if(match$2){ var tl$1 = match$2[2], x3 = match$2[1], - x2$0 = _yS_[1], + x2$0 = _zF_[1], x1$0 = l[1], c$0 = caml_call2(cmp, x1$0, x2$0); if(0 === c$0) var c$1 = caml_call2(cmp, x2$0, x3), - _yT_ = + _zG_ = 0 === c$1 ? [0, x2$0, 0] : 0 < c$1 ? [0, x2$0, [0, x3, 0]] : [0, x3, [0, x2$0, 0]], - s$0 = _yT_; + s$0 = _zG_; else if(0 < c$0){ var c$2 = caml_call2(cmp, x2$0, x3); if(0 === c$2) - var _yU_ = [0, x1$0, [0, x2$0, 0]]; + var _zH_ = [0, x1$0, [0, x2$0, 0]]; else if(0 < c$2) - var _yU_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; + var _zH_ = [0, x1$0, [0, x2$0, [0, x3, 0]]]; else var c$3 = caml_call2(cmp, x1$0, x3), - _yV_ = + _zI_ = 0 === c$3 ? [0, x1$0, [0, x2$0, 0]] : 0 < c$3 ? [0, x1$0, [0, x3, [0, x2$0, 0]]] : [0, x3, [0, x1$0, [0, x2$0, 0]]], - _yU_ = _yV_; - var s$0 = _yU_; + _zH_ = _zI_; + var s$0 = _zH_; } else{ var c$4 = caml_call2(cmp, x1$0, x3); if(0 === c$4) - var _yW_ = [0, x2$0, [0, x1$0, 0]]; + var _zJ_ = [0, x2$0, [0, x1$0, 0]]; else if(0 < c$4) - var _yW_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; + var _zJ_ = [0, x2$0, [0, x1$0, [0, x3, 0]]]; else var c$5 = caml_call2(cmp, x2$0, x3), - _yX_ = + _zK_ = 0 === c$5 ? [0, x2$0, [0, x1$0, 0]] : 0 < c$5 ? [0, x2$0, [0, x3, [0, x1$0, 0]]] : [0, x3, [0, x2$0, [0, x1$0, 0]]], - _yW_ = _yX_; - var s$0 = _yW_; + _zJ_ = _zK_; + var s$0 = _zJ_; } return [0, s$0, tl$1]; } @@ -5356,7 +5411,7 @@ var len = length(l); return 2 <= len ? sort(len, l)[1] : l; } - function compare(_yR_, _yQ_){return caml_int_compare(_yR_, _yQ_);} + function compare(_zE_, _zD_){return caml_int_compare(_zE_, _zD_);} function min(x, y){return x <= y ? x : y;} function max$0(x, y){return y <= x ? x : y;} function to_string(x){return "" + x;} @@ -5365,6 +5420,7 @@ caml_fill_bytes(s, 0, n, c); return s; } + var empty = caml_create_bytes(0); function copy(s){ var len = caml_ml_bytes_length(s), r = caml_create_bytes(len); caml_blit_bytes(s, 0, r, 0, len); @@ -5402,10 +5458,32 @@ && 0 <= ofs2 && (caml_ml_bytes_length(s2) - len | 0) >= ofs2){caml_blit_string(s1, ofs1, s2, ofs2, len); return;} return invalid_arg(_z_); } + function is_space(param){ + var _zC_ = param - 9 | 0; + a: + { + if(4 < _zC_ >>> 0){if(23 !== _zC_) break a;} else if(2 === _zC_) break a; + return 1; + } + return 0; + } + function trim(s){ + var len = caml_ml_bytes_length(s), i = [0, 0]; + for(;;){ + if(i[1] >= len) break; + if(! is_space(caml_bytes_unsafe_get(s, i[1]))) break; + i[1]++; + } + var j = [0, len - 1 | 0]; + for(;;){ + if(i[1] <= j[1] && is_space(caml_bytes_unsafe_get(s, j[1]))){j[1]--; continue;} + return i[1] <= j[1] ? sub(s, i[1], (j[1] - i[1] | 0) + 1 | 0) : empty; + } + } function escaped$0(s){ - var n = [0, 0], _yJ_ = caml_ml_bytes_length(s) - 1 | 0, _yI_ = 0; - if(_yJ_ >= 0){ - var i$0 = _yI_; + var n = [0, 0], _zv_ = caml_ml_bytes_length(s) - 1 | 0, _zu_ = 0; + if(_zv_ >= 0){ + var i$0 = _zu_; for(;;){ var match = caml_bytes_unsafe_get(s, i$0); a: @@ -5415,12 +5493,12 @@ c: { if(32 <= match){ - var _yN_ = match - 34 | 0; - if(58 < _yN_ >>> 0){ - if(93 <= _yN_) break c; + var _zz_ = match - 34 | 0; + if(58 < _zz_ >>> 0){ + if(93 <= _zz_) break c; } - else if(56 < _yN_ - 1 >>> 0) break b; - var _yO_ = 1; + else if(56 < _zz_ - 1 >>> 0) break b; + var _zA_ = 1; break a; } if(11 <= match){ @@ -5428,23 +5506,23 @@ } else if(8 <= match) break b; } - var _yO_ = 4; + var _zA_ = 4; break a; } - var _yO_ = 2; + var _zA_ = 2; } - n[1] = n[1] + _yO_ | 0; - var _yP_ = i$0 + 1 | 0; - if(_yJ_ === i$0) break; - i$0 = _yP_; + n[1] = n[1] + _zA_ | 0; + var _zB_ = i$0 + 1 | 0; + if(_zv_ === i$0) break; + i$0 = _zB_; } } if(n[1] === caml_ml_bytes_length(s)) return copy(s); var s$0 = caml_create_bytes(n[1]); n[1] = 0; - var _yL_ = caml_ml_bytes_length(s) - 1 | 0, _yK_ = 0; - if(_yL_ >= 0){ - var i = _yK_; + var _zx_ = caml_ml_bytes_length(s) - 1 | 0, _zw_ = 0; + if(_zx_ >= 0){ + var i = _zw_; for(;;){ var c = caml_bytes_unsafe_get(s, i); a: @@ -5502,9 +5580,9 @@ caml_bytes_unsafe_set(s$0, n[1], c); } n[1]++; - var _yM_ = i + 1 | 0; - if(_yL_ === i) break; - i = _yM_; + var _zy_ = i + 1 | 0; + if(_zx_ === i) break; + i = _zy_; } } return s$0; @@ -5512,21 +5590,21 @@ function map$2(f, s){ var l = caml_ml_bytes_length(s); if(0 === l) return s; - var r = caml_create_bytes(l), _yG_ = l - 1 | 0, _yF_ = 0; - if(_yG_ >= 0){ - var i = _yF_; + var r = caml_create_bytes(l), _zs_ = l - 1 | 0, _zr_ = 0; + if(_zs_ >= 0){ + var i = _zr_; for(;;){ caml_bytes_unsafe_set(r, i, caml_call1(f, caml_bytes_unsafe_get(s, i))); - var _yH_ = i + 1 | 0; - if(_yG_ === i) break; - i = _yH_; + var _zt_ = i + 1 | 0; + if(_zs_ === i) break; + i = _zt_; } } return r; } function uppercase_ascii$0(s){return map$2(uppercase_ascii, s);} - function unsafe_of_string(_yE_){return caml_bytes_of_string(_yE_);} - function unsafe_to_string(_yD_){return caml_string_of_bytes(_yD_);} + function unsafe_of_string(_zq_){return caml_bytes_of_string(_zq_);} + function unsafe_to_string(_zp_){return caml_string_of_bytes(_zp_);} function make$1(n, c){return unsafe_to_string(make$0(n, c));} function sub$0(s, ofs, len){ return unsafe_to_string(sub(unsafe_of_string(s), ofs, len)); @@ -5575,18 +5653,38 @@ seplen, l)); } + function is_space$0(param){ + var _zo_ = param - 9 | 0; + a: + { + if(4 < _zo_ >>> 0){if(23 !== _zo_) break a;} else if(2 === _zo_) break a; + return 1; + } + return 0; + } + function trim$0(s){ + if(s == cst$1) return s; + if + (! + is_space$0(caml_string_unsafe_get(s, 0)) + && + ! + is_space$0(caml_string_unsafe_get(s, caml_ml_string_length(s) - 1 | 0))) + return s; + return unsafe_to_string(trim(unsafe_of_string(s))); + } function escaped$1(s){ function escape_if_needed(s, n, i){ var i$0 = i; for(;;){ if(n <= i$0) return s; - var _yC_ = caml_string_unsafe_get(s, i$0) - 32 | 0; + var _zn_ = caml_string_unsafe_get(s, i$0) - 32 | 0; a: { - if(59 < _yC_ >>> 0){ - if(33 < _yC_ - 61 >>> 0) break a; + if(59 < _zn_ >>> 0){ + if(33 < _zn_ - 61 >>> 0) break a; } - else if(2 === _yC_) break a; + else if(2 === _zn_) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -5608,11 +5706,11 @@ function contains_from(s, i, c){ var l = caml_ml_string_length(s); if(0 <= i && l >= i) - try{index_rec(s, l, i, c); var _yA_ = 1; return _yA_;} - catch(_yB_){ - var _yz_ = caml_wrap_exception(_yB_); - if(_yz_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_yz_, 0); + try{index_rec(s, l, i, c); var _zl_ = 1; return _zl_;} + catch(_zm_){ + var _zk_ = caml_wrap_exception(_zm_); + if(_zk_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_zk_, 0); } return invalid_arg(_C_); } @@ -5621,18 +5719,18 @@ return unsafe_to_string(uppercase_ascii$0(unsafe_of_string(s))); } function compare$0(x, y){return caml_string_compare(x, y);} - function symbol$0(_yy_, _yx_){return _yy_ == _yx_ ? 1 : 0;} + function symbol$0(_zj_, _zi_){return _zj_ == _zi_ ? 1 : 0;} function init$0(l, f){ if(0 === l) return [0]; if(0 > l) return invalid_arg(_D_); - var res = caml_make_vect(l, caml_call1(f, 0)), _yv_ = l - 1 | 0, _yu_ = 1; - if(_yv_ >= 1){ - var i = _yu_; + var res = caml_make_vect(l, caml_call1(f, 0)), _zg_ = l - 1 | 0, _zf_ = 1; + if(_zg_ >= 1){ + var i = _zf_; for(;;){ res[1 + i] = caml_call1(f, i); - var _yw_ = i + 1 | 0; - if(_yv_ === i) break; - i = _yw_; + var _zh_ = i + 1 | 0; + if(_zg_ === i) break; + i = _zh_; } } return res; @@ -5657,14 +5755,14 @@ } function iter2(f, a, b){ if(a.length - 1 !== b.length - 1) return invalid_arg(_G_); - var _ys_ = a.length - 2 | 0, _yr_ = 0; - if(_ys_ >= 0){ - var i = _yr_; + var _zd_ = a.length - 2 | 0, _zc_ = 0; + if(_zd_ >= 0){ + var i = _zc_; for(;;){ caml_call2(f, a[1 + i], b[1 + i]); - var _yt_ = i + 1 | 0; - if(_ys_ === i) break; - i = _yt_; + var _ze_ = i + 1 | 0; + if(_zd_ === i) break; + i = _ze_; } } return 0; @@ -5707,14 +5805,14 @@ return fill(1, tl); } function fold_right(f, a, x){ - var r = [0, x], _yp_ = a.length - 2 | 0; - if(_yp_ >= 0){ - var i = _yp_; + var r = [0, x], _za_ = a.length - 2 | 0; + if(_za_ >= 0){ + var i = _za_; for(;;){ r[1] = caml_call2(f, a[1 + i], r[1]); - var _yq_ = i - 1 | 0; + var _zb_ = i - 1 | 0; if(0 === i) break; - i = _yq_; + i = _zb_; } } return r[1]; @@ -5743,15 +5841,15 @@ lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; - var t = lexbuf[10], _yn_ = t.length - 2 | 0, _ym_ = 0; - if(_yn_ >= 0){ - var i = _ym_; + var t = lexbuf[10], _y__ = t.length - 2 | 0, _y9_ = 0; + if(_y__ >= 0){ + var i = _y9_; for(;;){ var v = caml_check_bound(t, i)[1 + i]; if(0 <= v) caml_check_bound(t, i)[1 + i] = v - s | 0; - var _yo_ = i + 1 | 0; - if(_yn_ === i) break; - i = _yo_; + var _y$_ = i + 1 | 0; + if(_y__ === i) break; + i = _y$_; } } } @@ -5765,11 +5863,11 @@ else var with_positions = 1; var - _yi_ = with_positions ? zero_pos : dummy_pos, - _yj_ = with_positions ? zero_pos : dummy_pos, - _yk_ = caml_create_bytes(512); + _y5_ = with_positions ? zero_pos : dummy_pos, + _y6_ = with_positions ? zero_pos : dummy_pos, + _y7_ = caml_create_bytes(512); return [0, - function(_yl_){return lex_refill(f, _yk_, _yl_);}, + function(_y8_){return lex_refill(f, _y7_, _y8_);}, caml_create_bytes(1024), 0, 0, @@ -5779,8 +5877,8 @@ 0, 0, [0], - _yj_, - _yi_]; + _y6_, + _y5_]; } function from_channel(with_positions, ic){ return from_function @@ -5792,8 +5890,8 @@ else var with_positions = 1; var - _yg_ = with_positions ? zero_pos : dummy_pos, - _yh_ = with_positions ? zero_pos : dummy_pos; + _y3_ = with_positions ? zero_pos : dummy_pos, + _y4_ = with_positions ? zero_pos : dummy_pos; return [0, function(lexbuf){lexbuf[9] = 1; return 0;}, of_string(s), @@ -5805,8 +5903,8 @@ 0, 1, [0], - _yh_, - _yg_]; + _y4_, + _y3_]; } function lexeme(lexbuf){ var len = lexbuf[6] - lexbuf[5] | 0; @@ -5821,30 +5919,30 @@ function create(l, v, r){ if(l) var h = l[4], hl = h; else var hl = 0; if(r) var h$0 = r[4], hr = h$0; else var hr = 0; - var _yf_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _yf_]; + var _y2_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _y2_]; } function bal(l, v, r){ if(l) var h = l[4], hl = h; else var hl = 0; if(r) var h$0 = r[4], hr = h$0; else var hr = 0; if((hr + 2 | 0) < hl){ if(! l) return invalid_arg(_J_); - var lr = l[3], lv = l[2], ll = l[1], _ya_ = height(lr); - if(_ya_ <= height(ll)) return create(ll, lv, create(lr, v, r)); + var lr = l[3], lv = l[2], ll = l[1], _yX_ = height(lr); + if(_yX_ <= height(ll)) return create(ll, lv, create(lr, v, r)); if(! lr) return invalid_arg(_I_); - var lrr = lr[3], lrv = lr[2], lrl = lr[1], _yb_ = create(lrr, v, r); - return create(create(ll, lv, lrl), lrv, _yb_); + var lrr = lr[3], lrv = lr[2], lrl = lr[1], _yY_ = create(lrr, v, r); + return create(create(ll, lv, lrl), lrv, _yY_); } if((hl + 2 | 0) >= hr){ - var _ye_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, v, r, _ye_]; + var _y1_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, v, r, _y1_]; } if(! r) return invalid_arg(_L_); - var rr = r[3], rv = r[2], rl = r[1], _yc_ = height(rl); - if(_yc_ <= height(rr)) return create(create(l, v, rl), rv, rr); + var rr = r[3], rv = r[2], rl = r[1], _yZ_ = height(rl); + if(_yZ_ <= height(rr)) return create(create(l, v, rl), rv, rr); if(! rl) return invalid_arg(_K_); - var rlr = rl[3], rlv = rl[2], rll = rl[1], _yd_ = create(rlr, rv, rr); - return create(create(l, v, rll), rlv, _yd_); + var rlr = rl[3], rlv = rl[2], rll = rl[1], _y0_ = create(rlr, rv, rr); + return create(create(l, v, rll), rlv, _y0_); } function add(x, t){ if(! t) return [0, 0, x, 0, 1]; @@ -5908,14 +6006,14 @@ function merge(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _x$_ = remove_min_elt(t2); - return bal(t1, min_elt(t2), _x$_); + var _yW_ = remove_min_elt(t2); + return bal(t1, min_elt(t2), _yW_); } function concat(t1, t2){ if(! t1) return t2; if(! t2) return t1; - var _x__ = remove_min_elt(t2); - return join(t1, min_elt(t2), _x__); + var _yV_ = remove_min_elt(t2); + return join(t1, min_elt(t2), _yV_); } function split(x, param){ if(! param) return _N_; @@ -5964,16 +6062,16 @@ match = split(v1, s2), r2$0 = match[3], l2$0 = match[1], - _x8_ = union(r1, r2$0); - return join(union(l1, l2$0), v1, _x8_); + _yT_ = union(r1, r2$0); + return join(union(l1, l2$0), v1, _yT_); } if(1 === h1) return add(v1, s2); var match$0 = split(v2, s1), r1$0 = match$0[3], l1$0 = match$0[1], - _x9_ = union(r1$0, r2); - return join(union(l1$0, l2), v2, _x9_); + _yU_ = union(r1$0, r2); + return join(union(l1$0, l2), v2, _yU_); } function inter(s1, s2){ if(! s1) return 0; @@ -5982,14 +6080,14 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _x5_ = split(v1, s2), - l2 = _x5_[1]; - if(_x5_[2]){ - var r2 = _x5_[3], _x6_ = inter(r1, r2); - return join(inter(l1, l2), v1, _x6_); + _yQ_ = split(v1, s2), + l2 = _yQ_[1]; + if(_yQ_[2]){ + var r2 = _yQ_[3], _yR_ = inter(r1, r2); + return join(inter(l1, l2), v1, _yR_); } - var r2$0 = _x5_[3], _x7_ = inter(r1, r2$0); - return concat(inter(l1, l2), _x7_); + var r2$0 = _yQ_[3], _yS_ = inter(r1, r2$0); + return concat(inter(l1, l2), _yS_); } function diff(s1, s2){ if(! s1) return 0; @@ -5998,14 +6096,14 @@ r1 = s1[3], v1 = s1[2], l1 = s1[1], - _x2_ = split(v1, s2), - l2 = _x2_[1]; - if(_x2_[2]){ - var r2 = _x2_[3], _x3_ = diff(r1, r2); - return concat(diff(l1, l2), _x3_); + _yN_ = split(v1, s2), + l2 = _yN_[1]; + if(_yN_[2]){ + var r2 = _yN_[3], _yO_ = diff(r1, r2); + return concat(diff(l1, l2), _yO_); } - var r2$0 = _x2_[3], _x4_ = diff(r1, r2$0); - return join(diff(l1, l2), v1, _x4_); + var r2$0 = _yN_[3], _yP_ = diff(r1, r2$0); + return join(diff(l1, l2), v1, _yP_); } function cons_enum(s, e){ var s$0 = s, e$0 = e; @@ -6036,8 +6134,8 @@ } } function compare(s1, s2){ - var _x1_ = cons_enum(s2, 0); - return compare_aux(cons_enum(s1, 0), _x1_); + var _yM_ = cons_enum(s2, 0); + return compare_aux(cons_enum(s1, 0), _yM_); } function equal(s1, s2){return 0 === compare(s1, s2) ? 1 : 0;} function subset(s1, s2){ @@ -6054,19 +6152,19 @@ l1 = s1$0[1], c = caml_call2(Ord[1], v1, v2); if(0 === c){ - var _xY_ = subset(l1, l2); - if(! _xY_) return _xY_; + var _yJ_ = subset(l1, l2); + if(! _yJ_) return _yJ_; s1$0 = r1; s2$0 = r2; } else if(0 <= c){ - var _xZ_ = subset([0, 0, v1, r1, 0], r2); - if(! _xZ_) return _xZ_; + var _yK_ = subset([0, 0, v1, r1, 0], r2); + if(! _yK_) return _yK_; s1$0 = l1; } else{ - var _x0_ = subset([0, l1, v1, 0, 0], l2); - if(! _x0_) return _x0_; + var _yL_ = subset([0, l1, v1, 0, 0], l2); + if(! _yL_) return _yL_; s1$0 = r1; } } @@ -6152,14 +6250,14 @@ break; default: if(l){ - var _xX_ = l[2]; - if(_xX_){ - var match$2 = _xX_[2]; + var _yI_ = l[2]; + if(_yI_){ + var match$2 = _yI_[2]; if(match$2){ var l$5 = match$2[2], x2 = match$2[1], - x1$0 = _xX_[1], + x1$0 = _yI_[1], x0$1 = l[1]; return [0, [0, [0, 0, x0$1, 0, 1], x1$0, [0, 0, x2, 0, 1], 2], @@ -6183,16 +6281,16 @@ } function of_list(l){ if(! l) return empty; - var _xT_ = l[2], x0 = l[1]; - if(! _xT_) return singleton(x0); - var _xU_ = _xT_[2], x1 = _xT_[1]; - if(! _xU_) return add(x1, singleton(x0)); - var _xV_ = _xU_[2], x2 = _xU_[1]; - if(! _xV_) return add(x2, add(x1, singleton(x0))); - var _xW_ = _xV_[2], x3 = _xV_[1]; - if(! _xW_) return add(x3, add(x2, add(x1, singleton(x0)))); - if(_xW_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); - var x4 = _xW_[1]; + var _yE_ = l[2], x0 = l[1]; + if(! _yE_) return singleton(x0); + var _yF_ = _yE_[2], x1 = _yE_[1]; + if(! _yF_) return add(x1, singleton(x0)); + var _yG_ = _yF_[2], x2 = _yF_[1]; + if(! _yG_) return add(x2, add(x1, singleton(x0))); + var _yH_ = _yG_[2], x3 = _yG_[1]; + if(! _yH_) return add(x3, add(x2, add(x1, singleton(x0)))); + if(_yH_[2]) return of_sorted_list(sort_uniq(Ord[1], l)); + var x4 = _yH_[1]; return add(x4, add(x3, add(x2, add(x1, singleton(x0))))); } return [0, @@ -6254,32 +6352,32 @@ , of_list]; } - function _P_(_xR_){ - var _xS_ = Make(_xR_); + function _P_(_yC_){ + var _yD_ = Make(_yC_); return [0, - _xS_[17], - _xS_[18], + _yD_[17], + _yD_[18], , - _xS_[4], + _yD_[4], , - _xS_[20], - _xS_[21], - _xS_[22], + _yD_[20], + _yD_[21], + _yD_[22], , - _xS_[25], - _xS_[28], - _xS_[29], - _xS_[30], - _xS_[31], + _yD_[25], + _yD_[28], + _yD_[29], + _yD_[30], + _yD_[31], , - _xS_[32], + _yD_[32], , , , , , - _xS_[37], - _xS_[39], + _yD_[37], + _yD_[39], , , , @@ -6292,8 +6390,8 @@ , , , - _xS_[50], - _xS_[57]]; + _yD_[50], + _yD_[57]]; } function Make$0(Ord){ function height(param){if(! param) return 0; var h = param[5]; return h;} @@ -6301,8 +6399,8 @@ var hl = height(l), hr = height(r), - _xQ_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _xQ_]; + _yB_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, x, d, r, _yB_]; } function singleton(x, d){return [0, 0, x, d, 0, 1];} function bal(l, x, d, r){ @@ -6310,32 +6408,32 @@ if(r) var h$0 = r[5], hr = h$0; else var hr = 0; if((hr + 2 | 0) < hl){ if(! l) return invalid_arg(_R_); - var lr = l[4], ld = l[3], lv = l[2], ll = l[1], _xL_ = height(lr); - if(_xL_ <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r)); + var lr = l[4], ld = l[3], lv = l[2], ll = l[1], _yw_ = height(lr); + if(_yw_ <= height(ll)) return create(ll, lv, ld, create(lr, x, d, r)); if(! lr) return invalid_arg(_Q_); var lrr = lr[4], lrd = lr[3], lrv = lr[2], lrl = lr[1], - _xM_ = create(lrr, x, d, r); - return create(create(ll, lv, ld, lrl), lrv, lrd, _xM_); + _yx_ = create(lrr, x, d, r); + return create(create(ll, lv, ld, lrl), lrv, lrd, _yx_); } if((hl + 2 | 0) >= hr){ - var _xP_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; - return [0, l, x, d, r, _xP_]; + var _yA_ = hr <= hl ? hl + 1 | 0 : hr + 1 | 0; + return [0, l, x, d, r, _yA_]; } if(! r) return invalid_arg(_U_); - var rr = r[4], rd = r[3], rv = r[2], rl = r[1], _xN_ = height(rl); - if(_xN_ <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr); + var rr = r[4], rd = r[3], rv = r[2], rl = r[1], _yy_ = height(rl); + if(_yy_ <= height(rr)) return create(create(l, x, d, rl), rv, rd, rr); if(! rl) return invalid_arg(_S_); var rlr = rl[4], rld = rl[3], rlv = rl[2], rll = rl[1], - _xO_ = create(rlr, rv, rd, rr); - return create(create(l, x, d, rll), rlv, rld, _xO_); + _yz_ = create(rlr, rv, rd, rr); + return create(create(l, x, d, rll), rlv, rld, _yz_); } function add(x, data, m){ if(! m) return [0, 0, x, data, 0, 1]; @@ -6393,8 +6491,8 @@ v = param$0[2], l = param$0[1], c = caml_call2(Ord[1], x, v), - _xK_ = 0 === c ? 1 : 0; - if(_xK_) return _xK_; + _yv_ = 0 === c ? 1 : 0; + if(_yv_) return _yv_; var r$0 = 0 <= c ? r : l; param$0 = r$0; } @@ -6418,7 +6516,7 @@ var r$0 = param[4]; return r$0; } - function _xA_(t1, t2){ + function _yl_(t1, t2){ if(! t1) return t2; if(! t2) return t1; var match = min_binding(t2), d = match[2], x = match[1]; @@ -6427,7 +6525,7 @@ function remove(x, m){ if(! m) return 0; var r = m[4], d = m[3], v = m[2], l = m[1], c = caml_call2(Ord[1], x, v); - if(0 === c) return _xA_(l, r); + if(0 === c) return _yl_(l, r); if(0 <= c){ var rr = remove(x, r); return r === rr ? m : bal(l, v, d, rr); @@ -6468,15 +6566,15 @@ d = param$0[3], v = param$0[2], l = param$0[1], - _xH_ = caml_call2(p, v, d); - if(_xH_){ - var _xI_ = for_all(p, l); - if(_xI_){param$0 = r; continue;} - var _xJ_ = _xI_; + _ys_ = caml_call2(p, v, d); + if(_ys_){ + var _yt_ = for_all(p, l); + if(_yt_){param$0 = r; continue;} + var _yu_ = _yt_; } else - var _xJ_ = _xH_; - return _xJ_; + var _yu_ = _ys_; + return _yu_; } } function add_min_binding(k, x, param){ @@ -6552,9 +6650,9 @@ r2 = match[3], d2 = match[2], l2 = match[1], - _xD_ = merge(f, r1, r2), - _xE_ = caml_call3(f, v1, [0, d1], d2); - return concat_or_join(merge(f, l1, l2), v1, _xE_, _xD_); + _yo_ = merge(f, r1, r2), + _yp_ = caml_call3(f, v1, [0, d1], d2); + return concat_or_join(merge(f, l1, l2), v1, _yp_, _yo_); } } else if(! s2) return 0; @@ -6568,9 +6666,9 @@ r1$0 = match$0[3], d1$0 = match$0[2], l1$0 = match$0[1], - _xF_ = merge(f, r1$0, r2$0), - _xG_ = caml_call3(f, v2, d1$0, [0, d2$0]); - return concat_or_join(merge(f, l1$0, l2$0), v2, _xG_, _xF_); + _yq_ = merge(f, r1$0, r2$0), + _yr_ = caml_call3(f, v2, d1$0, [0, d2$0]); + return concat_or_join(merge(f, l1$0, l2$0), v2, _yr_, _yq_); } function cons_enum(m, e){ var m$0 = m, e$0 = e; @@ -6610,8 +6708,8 @@ e2$0 = e2$2; } } - var _xC_ = cons_enum(m2, 0); - return compare_aux(cons_enum(m1, 0), _xC_); + var _yn_ = cons_enum(m2, 0); + return compare_aux(cons_enum(m1, 0), _yn_); } function equal(cmp, m1, m2){ function equal_aux(e1, e2){ @@ -6637,8 +6735,8 @@ return; } } - var _xB_ = cons_enum(m2, 0); - return equal_aux(cons_enum(m1, 0), _xB_); + var _ym_ = cons_enum(m2, 0); + return equal_aux(cons_enum(m1, 0), _ym_); } function cardinal(param){ if(! param) return; @@ -6695,28 +6793,28 @@ equal, cardinal]; } - function _Y_(_xy_){ - var _xz_ = Make$0(_xy_); + function _Y_(_yj_){ + var _yk_ = Make$0(_yj_); return [0, - _xz_[5], + _yk_[5], , - _xz_[18], - _xz_[7], + _yk_[18], + _yk_[7], , , - _xz_[24], - _xz_[38], + _yk_[24], + _yk_[38], , - _xz_[44], - _xz_[45], - _xz_[26], - _xz_[29], - _xz_[30], + _yk_[44], + _yk_[45], + _yk_[26], + _yk_[29], + _yk_[30], , , , , - _xz_[46], + _yk_[46], , , , @@ -6725,12 +6823,21 @@ , , , - _xz_[8], - _xz_[17]]; + _yk_[8], + _yk_[17]]; } + var Empty = [248, _Z_, caml_fresh_oo_id(0)]; function create(param){return [0, 0, 0];} function clear(s){s[1] = 0; s[2] = 0; return;} function push(x, s){s[1] = [0, x, s[1]]; s[2] = s[2] + 1 | 0; return 0;} + function pop(s){ + var match = s[1]; + if(! match) throw caml_maybe_attach_backtrace(Empty, 1); + var tl = match[2]; + s[1] = tl; + s[2] = s[2] - 1 | 0; + return; + } function pop_opt(s){ var match = s[1]; if(! match) return 0; @@ -6739,6 +6846,10 @@ s[2] = s[2] - 1 | 0; return [0, hd]; } + function top(s){ + if(s[1]) return; + throw caml_maybe_attach_backtrace(Empty, 1); + } function top_opt(s){ var match = s[1]; if(! match) return 0; @@ -6746,7 +6857,7 @@ return [0, hd]; } function iter$1(f, s){return iter$0(f, s[1]);} - var Empty = [248, _Z_, caml_fresh_oo_id(0)]; + var Empty$0 = [248, ___, caml_fresh_oo_id(0)]; function create$0(param){return [0, 0, 0, 0];} function clear$0(q){q[1] = 0; q[2] = 0; q[3] = 0; return;} function add(x, q){ @@ -6762,11 +6873,11 @@ return [0, content]; } function take(q){ - var _xx_ = q[2]; - if(! _xx_) throw caml_maybe_attach_backtrace(Empty, 1); - var content = _xx_[1]; - if(_xx_[2]){ - var next = _xx_[2]; + var _yi_ = q[2]; + if(! _yi_) throw caml_maybe_attach_backtrace(Empty$0, 1); + var content = _yi_[1]; + if(_yi_[2]){ + var next = _yi_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return content; @@ -6775,11 +6886,11 @@ return content; } function take_opt(q){ - var _xw_ = q[2]; - if(! _xw_) return 0; - var content = _xw_[1]; - if(_xw_[2]){ - var next = _xw_[2]; + var _yh_ = q[2]; + if(! _yh_) return 0; + var content = _yh_[1]; + if(_yh_[2]){ + var next = _yh_[2]; q[1] = q[1] - 1 | 0; q[2] = next; return [0, content]; @@ -6800,7 +6911,7 @@ function sub$2(b, ofs, len){ if(0 <= ofs && 0 <= len && (b[2] - len | 0) >= ofs) return sub_string(b[1], ofs, len); - return invalid_arg(___); + return invalid_arg(_$_); } function length$0(b){return b[2];} function reset(b){ @@ -6819,15 +6930,15 @@ if((old_pos + more | 0) <= max_string_length) new_len[1] = max_string_length; else - failwith(_ab_); + failwith(_ac_); var new_buffer = caml_create_bytes(new_len[1]); blit(b[1], 0, new_buffer, 0, b[2]); b[1] = new_buffer; b[3] = new_len[1]; if((b[2] + more | 0) > b[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _aa_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ab_], 1); if((old_pos + more | 0) <= b[3]) return; - throw caml_maybe_attach_backtrace([0, Assert_failure, _$_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aa_], 1); } function add_char(b, c){ var pos = b[2]; @@ -6837,14 +6948,14 @@ return 0; } function add_substring(b, s, offset, len){ - var _xt_ = offset < 0 ? 1 : 0; - if(_xt_) - var _xu_ = _xt_; + var _ye_ = offset < 0 ? 1 : 0; + if(_ye_) + var _yf_ = _ye_; else var - _xv_ = len < 0 ? 1 : 0, - _xu_ = _xv_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); - if(_xu_) invalid_arg(_ac_); + _yg_ = len < 0 ? 1 : 0, + _yf_ = _yg_ || ((caml_ml_string_length(s) - len | 0) < offset ? 1 : 0); + if(_yf_) invalid_arg(_ad_); var new_position = b[2] + len | 0; if(b[3] < new_position) resize(b, len); caml_blit_string(s, offset, b[1], b[2], len); @@ -6923,18 +7034,18 @@ if(typeof formatting_lit === "number") switch(formatting_lit){ case 0: - return _ad_; - case 1: return _ae_; - case 2: + case 1: return _af_; - case 3: + case 2: return _ag_; - case 4: + case 3: return _ah_; - case 5: + case 4: return _ai_; - default: return _aj_; + case 5: + return _aj_; + default: return _ak_; } switch(formatting_lit[0]){ case 0: @@ -6942,7 +7053,7 @@ case 1: var str$0 = formatting_lit[1]; return str$0; default: - var c = formatting_lit[1]; return symbol_concat(_ak_, make$1(1, c)); + var c = formatting_lit[1]; return symbol_concat(_al_, make$1(1, c)); } } function bprint_fmtty(buf, fmtty){ @@ -6952,81 +7063,81 @@ switch(fmtty$0[0]){ case 0: var fmtty$1 = fmtty$0[1]; - buffer_add_string(buf, _al_); + buffer_add_string(buf, _am_); fmtty$0 = fmtty$1; break; case 1: var fmtty$2 = fmtty$0[1]; - buffer_add_string(buf, _am_); + buffer_add_string(buf, _an_); fmtty$0 = fmtty$2; break; case 2: var fmtty$3 = fmtty$0[1]; - buffer_add_string(buf, _an_); + buffer_add_string(buf, _ao_); fmtty$0 = fmtty$3; break; case 3: var fmtty$4 = fmtty$0[1]; - buffer_add_string(buf, _ao_); + buffer_add_string(buf, _ap_); fmtty$0 = fmtty$4; break; case 4: var fmtty$5 = fmtty$0[1]; - buffer_add_string(buf, _ap_); + buffer_add_string(buf, _aq_); fmtty$0 = fmtty$5; break; case 5: var fmtty$6 = fmtty$0[1]; - buffer_add_string(buf, _aq_); + buffer_add_string(buf, _ar_); fmtty$0 = fmtty$6; break; case 6: var fmtty$7 = fmtty$0[1]; - buffer_add_string(buf, _ar_); + buffer_add_string(buf, _as_); fmtty$0 = fmtty$7; break; case 7: var fmtty$8 = fmtty$0[1]; - buffer_add_string(buf, _as_); + buffer_add_string(buf, _at_); fmtty$0 = fmtty$8; break; case 8: var fmtty$9 = fmtty$0[2], sub_fmtty = fmtty$0[1]; - buffer_add_string(buf, _at_); - bprint_fmtty(buf, sub_fmtty); buffer_add_string(buf, _au_); + bprint_fmtty(buf, sub_fmtty); + buffer_add_string(buf, _av_); fmtty$0 = fmtty$9; break; case 9: var fmtty$10 = fmtty$0[3], sub_fmtty$0 = fmtty$0[1]; - buffer_add_string(buf, _av_); - bprint_fmtty(buf, sub_fmtty$0); buffer_add_string(buf, _aw_); + bprint_fmtty(buf, sub_fmtty$0); + buffer_add_string(buf, _ax_); fmtty$0 = fmtty$10; break; case 10: var fmtty$11 = fmtty$0[1]; - buffer_add_string(buf, _ax_); + buffer_add_string(buf, _ay_); fmtty$0 = fmtty$11; break; case 11: var fmtty$12 = fmtty$0[1]; - buffer_add_string(buf, _ay_); + buffer_add_string(buf, _az_); fmtty$0 = fmtty$12; break; case 12: var fmtty$13 = fmtty$0[1]; - buffer_add_string(buf, _az_); + buffer_add_string(buf, _aA_); fmtty$0 = fmtty$13; break; case 13: var fmtty$14 = fmtty$0[1]; - buffer_add_string(buf, _aA_); + buffer_add_string(buf, _aB_); fmtty$0 = fmtty$14; break; default: var fmtty$15 = fmtty$0[1]; - buffer_add_string(buf, _aB_); + buffer_add_string(buf, _aC_); fmtty$0 = fmtty$15; } } @@ -7480,8 +7591,8 @@ var rest2$7 = ty2[2], ty2$0 = ty2[1], - _xs_ = trans(rest1$7, rest2$7); - return [8, trans(ty1$0, ty2$0), _xs_]; + _yd_ = trans(rest1$7, rest2$7); + return [8, trans(ty1$0, ty2$0), _yd_]; case 10: break a; case 11: @@ -7493,7 +7604,7 @@ case 14: break e; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aL_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aM_], 1); case 9: var rest1$8 = ty1[3], ty12 = ty1[2], ty11 = ty1[1]; if(typeof ty2 !== "number") @@ -7523,14 +7634,14 @@ case 14: break e; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aM_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aN_], 1); case 10: var rest1$9 = ty1[1]; if(typeof ty2 !== "number" && 10 === ty2[0]){ var rest2$9 = ty2[1]; return [10, trans(rest1$9, rest2$9)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aN_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aO_], 1); case 11: var rest1$10 = ty1[1]; if(typeof ty2 !== "number") @@ -7541,7 +7652,7 @@ var rest2$10 = ty2[1]; return [11, trans(rest1$10, rest2$10)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aO_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aP_], 1); case 12: var rest1$11 = ty1[1]; if(typeof ty2 !== "number") @@ -7554,7 +7665,7 @@ var rest2$11 = ty2[1]; return [12, trans(rest1$11, rest2$11)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aP_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aQ_], 1); case 13: var rest1$12 = ty1[1]; if(typeof ty2 !== "number") @@ -7569,7 +7680,7 @@ var rest2$12 = ty2[1]; return [13, trans(rest1$12, rest2$12)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aQ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aR_], 1); default: var rest1$13 = ty1[1]; if(typeof ty2 !== "number") @@ -7586,9 +7697,9 @@ var rest2$13 = ty2[1]; return [14, trans(rest1$13, rest2$13)]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aR_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aS_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aK_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aL_], 1); } if(typeof ty2 === "number") return 0; switch(ty2[0]){ @@ -7606,24 +7717,24 @@ break f; case 9: break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _aC_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aF_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aD_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aE_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aK_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aJ_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aI_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aH_], 1); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _aF_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _aG_], 1); } - var Type_mismatch = [248, _aS_, caml_fresh_oo_id(0)]; + var Type_mismatch = [248, _aT_, caml_fresh_oo_id(0)]; function type_padding(pad, fmtty){ if(typeof pad === "number") return [0, 0, fmtty]; if(0 === pad[0]){ @@ -7654,10 +7765,10 @@ throw caml_maybe_attach_backtrace(Type_mismatch, 1); } function type_format(fmt, fmtty){ - var _xr_ = type_format_gen(fmt, fmtty); - if(typeof _xr_[2] !== "number") + var _yc_ = type_format_gen(fmt, fmtty); + if(typeof _yc_[2] !== "number") throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var fmt$0 = _xr_[1]; + var fmt$0 = _yc_[1]; return fmt$0; } function type_format_gen(fmt, fmtty){ @@ -7876,8 +7987,8 @@ fmt_rest$13 = fmt[3], sub_fmtty$1 = fmt[2], pad_opt$0 = fmt[1], - _xq_ = [0, erase_rel(sub_fmtty1)]; - if(caml_notequal([0, erase_rel(sub_fmtty$1)], _xq_)) + _yb_ = [0, erase_rel(sub_fmtty1)]; + if(caml_notequal([0, erase_rel(sub_fmtty$1)], _yb_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var match$29 = type_format_gen(fmt_rest$13, erase_rel(fmtty_rest$10)), @@ -8013,11 +8124,11 @@ var sub_fmtty$0 = ign[2], pad_opt$0 = ign[1], - _xp_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), - match$0 = _xp_[2], + _ya_ = type_ignored_format_substituti(sub_fmtty$0, fmt, fmtty), + match$0 = _ya_[2], fmtty$1 = match$0[2], fmt$1 = match$0[1], - sub_fmtty$1 = _xp_[1]; + sub_fmtty$1 = _ya_[1]; return [0, [23, [9, pad_opt$0, sub_fmtty$1], fmt$1], fmtty$1]; case 10: return type_ignored_param_one(ign, fmt, fmtty); @@ -8177,11 +8288,11 @@ sub_fmtty_rest$17 = sub_fmtty[3], sub2_fmtty$2 = sub_fmtty[2], sub1_fmtty$0 = sub_fmtty[1], - _xn_ = [0, erase_rel(sub1_fmtty)]; - if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _xn_)) + _x__ = [0, erase_rel(sub1_fmtty)]; + if(caml_notequal([0, erase_rel(sub1_fmtty$0)], _x__)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); - var _xo_ = [0, erase_rel(sub2_fmtty$1)]; - if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _xo_)) + var _x$_ = [0, erase_rel(sub2_fmtty$1)]; + if(caml_notequal([0, erase_rel(sub2_fmtty$2)], _x$_)) throw caml_maybe_attach_backtrace(Type_mismatch, 1); var sub_fmtty$0 = trans(symm(sub1_fmtty), sub2_fmtty$1), @@ -8265,7 +8376,7 @@ padty$0 = 0 <= width ? padty : 0, width$0 = abs(width); if(width$0 <= len) return str; - var _xm_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _xm_); + var _x9_ = 2 === padty$0 ? 48 : 32, res = make$0(width$0, _x9_); switch(padty$0){ case 0: blit_string(str, 0, res, 0, len); break; @@ -8357,131 +8468,131 @@ function format_of_iconv(param){ switch(param){ case 1: - return _aU_; - case 2: return _aV_; + case 2: + return _aW_; case 4: - return _aX_; - case 5: return _aY_; - case 6: + case 5: return _aZ_; - case 7: + case 6: return _a0_; - case 8: + case 7: return _a1_; - case 9: + case 8: return _a2_; - case 10: + case 9: return _a3_; - case 11: + case 10: return _a4_; + case 11: + return _a5_; case 0: case 13: - return _aT_; + return _aU_; case 3: case 14: - return _aW_; - default: return _a5_; + return _aX_; + default: return _a6_; } } function format_of_iconvL(param){ switch(param){ case 1: - return _a7_; - case 2: return _a8_; + case 2: + return _a9_; case 4: - return _a__; - case 5: return _a$_; - case 6: + case 5: return _ba_; - case 7: + case 6: return _bb_; - case 8: + case 7: return _bc_; - case 9: + case 8: return _bd_; - case 10: + case 9: return _be_; - case 11: + case 10: return _bf_; + case 11: + return _bg_; case 0: case 13: - return _a6_; + return _a7_; case 3: case 14: - return _a9_; - default: return _bg_; + return _a__; + default: return _bh_; } } function format_of_iconvl(param){ switch(param){ case 1: - return _bi_; - case 2: return _bj_; + case 2: + return _bk_; case 4: - return _bl_; - case 5: return _bm_; - case 6: + case 5: return _bn_; - case 7: + case 6: return _bo_; - case 8: + case 7: return _bp_; - case 9: + case 8: return _bq_; - case 10: + case 9: return _br_; - case 11: + case 10: return _bs_; + case 11: + return _bt_; case 0: case 13: - return _bh_; + return _bi_; case 3: case 14: - return _bk_; - default: return _bt_; + return _bl_; + default: return _bu_; } } function format_of_iconvn(param){ switch(param){ case 1: - return _bv_; - case 2: return _bw_; + case 2: + return _bx_; case 4: - return _by_; - case 5: return _bz_; - case 6: + case 5: return _bA_; - case 7: + case 6: return _bB_; - case 8: + case 7: return _bC_; - case 9: + case 8: return _bD_; - case 10: + case 9: return _bE_; - case 11: + case 10: return _bF_; + case 11: + return _bG_; case 0: case 13: - return _bu_; + return _bv_; case 3: case 14: - return _bx_; - default: return _bG_; + return _by_; + default: return _bH_; } } function format_of_fconv(fconv, prec){ var prec$0 = abs(prec), - symb = char_of_fconv(_bH_, fconv), + symb = char_of_fconv(_bI_, fconv), buf = buffer_create(16); buffer_add_char(buf, 37); bprint_fconv_flag(buf, fconv); @@ -8492,14 +8603,14 @@ } function transform_int_alt(iconv, s){ if(13 > iconv) return s; - var n = [0, 0], _xh_ = caml_ml_string_length(s) - 1 | 0, _xg_ = 0; - if(_xh_ >= 0){ - var i$0 = _xg_; + var n = [0, 0], _x4_ = caml_ml_string_length(s) - 1 | 0, _x3_ = 0; + if(_x4_ >= 0){ + var i$0 = _x3_; for(;;){ if(9 >= caml_string_unsafe_get(s, i$0) - 48 >>> 0) n[1]++; - var _xl_ = i$0 + 1 | 0; - if(_xh_ === i$0) break; - i$0 = _xl_; + var _x8_ = i$0 + 1 | 0; + if(_x4_ === i$0) break; + i$0 = _x8_; } } var @@ -8511,18 +8622,18 @@ function put(c){caml_bytes_set(buf, pos[1], c); pos[1]++; return;} var left = [0, ((digits - 1 | 0) % 3 | 0) + 1 | 0], - _xj_ = caml_ml_string_length(s) - 1 | 0, - _xi_ = 0; - if(_xj_ >= 0){ - var i = _xi_; + _x6_ = caml_ml_string_length(s) - 1 | 0, + _x5_ = 0; + if(_x6_ >= 0){ + var i = _x5_; for(;;){ var c = caml_string_unsafe_get(s, i); if(9 < c - 48 >>> 0) put(c); else{if(0 === left[1]){put(95); left[1] = 3;} left[1]--; put(c);} - var _xk_ = i + 1 | 0; - if(_xj_ === i) break; - i = _xk_; + var _x7_ = i + 1 | 0; + if(_x6_ === i) break; + i = _x7_; } } return unsafe_to_string(buf); @@ -8560,13 +8671,13 @@ var i$0 = i; for(;;){ if(i$0 === len) return 0; - var _xf_ = caml_string_get(str, i$0) - 46 | 0; + var _x2_ = caml_string_get(str, i$0) - 46 | 0; a: { - if(23 < _xf_ >>> 0){ - if(55 === _xf_) break a; + if(23 < _x2_ >>> 0){ + if(55 === _x2_) break a; } - else if(21 < _xf_ - 1 >>> 0) break a; + else if(21 < _x2_ - 1 >>> 0) break a; var i$1 = i$0 + 1 | 0; i$0 = i$1; continue; @@ -8574,11 +8685,11 @@ return 1; } } - return is_valid(0) ? str : symbol_concat(str, _bI_); + return is_valid(0) ? str : symbol_concat(str, _bJ_); } function caml_special_val(str){ var match = caml_classify_float(x); - return 3 === match ? x < 0. ? _bJ_ : _bK_ : 4 <= match ? _bL_ : str; + return 3 === match ? x < 0. ? _bK_ : _bL_ : 4 <= match ? _bM_ : str; } switch(fconv[2]){ case 5: @@ -8724,9 +8835,9 @@ fmt$0 = rest$16; break; case 18: - var _xd_ = fmt$0[1]; - if(0 === _xd_[0]){ - var rest$17 = fmt$0[2], fmt$1 = _xd_[1][1]; + var _x0_ = fmt$0[1]; + if(0 === _x0_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _x0_[1][1]; let acc = acc$0, k = k$0, rest = rest$17; var k$1 = @@ -8736,7 +8847,7 @@ fmt$0 = fmt$1; } else{ - var rest$18 = fmt$0[2], fmt$2 = _xd_[1][1]; + var rest$18 = fmt$0[2], fmt$2 = _x0_[1][1]; let acc = acc$0, k = k$0, rest = rest$18; var k$2 = @@ -8747,9 +8858,9 @@ } break; case 19: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bM_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _bN_], 1); case 20: - var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bN_]; + var rest$19 = fmt$0[3], new_acc = [8, acc$0, _bO_]; return function(param){return make_printf(k$0, new_acc, rest$19);}; case 21: var rest$20 = fmt$0[2]; @@ -8773,12 +8884,12 @@ rest$23 = fmt$0[3], f = fmt$0[2], arity = fmt$0[1], - _xe_ = caml_call1(f, 0); + _x1_ = caml_call1(f, 0); if(counter >= 50) return caml_trampoline_return - (make_custom$0, [0, k$0, acc$0, rest$23, arity, _xe_]); + (make_custom$0, [0, k$0, acc$0, rest$23, arity, _x1_]); var counter$0 = counter + 1 | 0; - return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _xe_); + return make_custom$0(counter$0, k$0, acc$0, rest$23, arity, _x1_); } } } @@ -8799,7 +8910,7 @@ var counter$1 = counter + 1 | 0; return make_invalid_arg(counter$1, k, acc, fmt); case 2: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bO_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _bP_], 1); default: if(counter >= 50) return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); @@ -8911,7 +9022,7 @@ return make_from_fmtty(k, acc, concat_fmtty(ty, rest$8), fmt);}; case 10: var rest$9 = fmtty[1]; - return function(param, _xc_){ + return function(param, _xZ_){ return make_from_fmtty(k, acc, rest$9, fmt);}; case 11: var rest$10 = fmtty[1]; @@ -8920,9 +9031,9 @@ var rest$11 = fmtty[1]; return function(param){return make_from_fmtty(k, acc, rest$11, fmt);}; case 13: - throw caml_maybe_attach_backtrace([0, Assert_failure, _bP_], 1); - default: throw caml_maybe_attach_backtrace([0, Assert_failure, _bQ_], 1); + default: + throw caml_maybe_attach_backtrace([0, Assert_failure, _bR_], 1); } if(counter >= 50) return caml_trampoline_return(make_invalid_arg, [0, k, acc, fmt]); @@ -8933,11 +9044,11 @@ return caml_trampoline(make_from_fmtty$0(0, k, acc, fmtty, fmt)); } function make_invalid_arg(counter, k, acc, fmt){ - var _xb_ = [8, acc, _bR_]; + var _xY_ = [8, acc, _bS_]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _xb_, fmt]); + return caml_trampoline_return(make_printf$0, [0, k, _xY_, fmt]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _xb_, fmt); + return make_printf$0(counter$0, k, _xY_, fmt); } function make_padding(k, acc, fmt, pad, trans){ if(typeof pad === "number") @@ -9094,11 +9205,11 @@ return function(x){ return make_custom(k, acc, rest, arity$0, caml_call1(f, x));}; } - var _xa_ = [4, acc, f]; + var _xX_ = [4, acc, f]; if(counter >= 50) - return caml_trampoline_return(make_printf$0, [0, k, _xa_, rest]); + return caml_trampoline_return(make_printf$0, [0, k, _xX_, rest]); var counter$0 = counter + 1 | 0; - return make_printf$0(counter$0, k, _xa_, rest); + return make_printf$0(counter$0, k, _xX_, rest); } function make_custom(k, acc, rest, arity, f){ return caml_trampoline(make_custom$0(0, k, acc, rest, arity, f)); @@ -9120,13 +9231,13 @@ if(0 === match[0]){ var acc$1 = match[1]; output_acc(o, p$0); - output_string(o, _bS_); + output_string(o, _bT_); acc$0 = acc$1; } else{ var acc$2 = match[1]; output_acc(o, p$0); - output_string(o, _bT_); + output_string(o, _bU_); acc$0 = acc$2; } break; @@ -9169,13 +9280,13 @@ if(0 === match[0]){ var acc$1 = match[1]; strput_acc(b, p$0); - add_string(b, _bU_); + add_string(b, _bV_); acc$0 = acc$1; } else{ var acc$2 = match[1]; strput_acc(b, p$0); - add_string(b, _bV_); + add_string(b, _bW_); acc$0 = acc$2; } break; @@ -9207,10 +9318,10 @@ return make_printf(k, 0, fmt); } function open_box_of_string(str){ - if(str == cst$1) return _bW_; + if(str == cst$1) return _bX_; var len = caml_ml_string_length(str); function invalid_box(param){ - return caml_call1(failwith_message(_bX_), str); + return caml_call1(failwith_message(_bY_), str); } function parse_spaces(i){ var i$0 = i; @@ -9256,13 +9367,13 @@ else try{ var - _w__ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), - indent = _w__; + _xV_ = caml_int_of_string(sub$0(str, nstart, nend - nstart | 0)), + indent = _xV_; } - catch(_w$_){ - var _w8_ = caml_wrap_exception(_w$_); - if(_w8_[1] !== Failure) throw caml_maybe_attach_backtrace(_w8_, 0); - var _w9_ = invalid_box(0), indent = _w9_; + catch(_xW_){ + var _xT_ = caml_wrap_exception(_xW_); + if(_xT_[1] !== Failure) throw caml_maybe_attach_backtrace(_xT_, 0); + var _xU_ = invalid_box(0), indent = _xU_; } var exp_end = parse_spaces(nend); if(exp_end !== len) invalid_box(0); @@ -9288,7 +9399,7 @@ fmt); } function fprintf(oc, fmt){ - return kfprintf(function(_w7_){return 0;}, oc, fmt); + return kfprintf(function(_xS_){return 0;}, oc, fmt); } function eprintf(fmt){return fprintf(stderr, fmt);} function ksprintf(k, param){ @@ -9308,28 +9419,28 @@ ? caml_obj_tag (f) === 252 - ? caml_call1(sprintf(_bY_), f) - : caml_obj_tag(f) === 253 ? string_of_float(f) : _bZ_ - : caml_call1(sprintf(_b0_), f); + ? caml_call1(sprintf(_bZ_), f) + : caml_obj_tag(f) === 253 ? string_of_float(f) : _b0_ + : caml_call1(sprintf(_b1_), f); } function other_fields(x, i){ - if(x.length - 1 <= i) return _b1_; - var _w5_ = other_fields(x, i + 1 | 0), _w6_ = field(x, i); - return caml_call2(sprintf(_b2_), _w6_, _w5_); + if(x.length - 1 <= i) return _b2_; + var _xQ_ = other_fields(x, i + 1 | 0), _xR_ = field(x, i); + return caml_call2(sprintf(_b3_), _xR_, _xQ_); } function fields(x){ var match = x.length - 1; if(2 >= match >>> 0) switch(match){ case 0: - return _b4_; - case 1: return _b5_; + case 1: + return _b6_; default: - var _w4_ = field(x, 1); return caml_call1(sprintf(_b6_), _w4_); + var _xP_ = field(x, 1); return caml_call1(sprintf(_b7_), _xP_); } - var _w2_ = other_fields(x, 2), _w3_ = field(x, 1); - return caml_call2(sprintf(_b3_), _w3_, _w2_); + var _xN_ = other_fields(x, 2), _xO_ = field(x, 1); + return caml_call2(sprintf(_b4_), _xO_, _xN_); } function use_printers(x){ function conv(param){ @@ -9339,7 +9450,7 @@ var tl = param$0[2], hd = param$0[1]; a: { - try{var val = caml_call1(hd, x);}catch(_w1_){break a;} + try{var val = caml_call1(hd, x);}catch(_xM_){break a;} if(val){var s = val[1]; return [0, s];} } param$0 = tl; @@ -9348,12 +9459,12 @@ return conv(get(printers)); } function to_string_default(x){ - if(x === Out_of_memory) return _b7_; - if(x === Stack_overflow) return _b8_; + if(x === Out_of_memory) return _b8_; + if(x === Stack_overflow) return _b9_; if(x[1] === Match_failure){ var match = x[2], char$0 = match[3], line = match[2], file = match[1]; return caml_call5 - (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b9_); + (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, _b__); } if(x[1] === Assert_failure){ var @@ -9362,7 +9473,7 @@ line$0 = match$0[2], file$0 = match$0[1]; return caml_call5 - (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b__); + (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, _b$_); } if(x[1] === Undefined_recursive_module){ var @@ -9371,7 +9482,7 @@ line$1 = match$1[2], file$1 = match$1[1]; return caml_call5 - (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _b$_); + (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, _ca_); } if(0 !== caml_obj_tag(x)) return x[1]; var constructor = x[1][1]; @@ -9384,41 +9495,41 @@ return s; } function convert_raw_backtrace(bt){ - var _w0_ = [0, caml_convert_raw_backtrace(bt)]; - return _w0_; + var _xL_ = [0, caml_convert_raw_backtrace(bt)]; + return _xL_; } function format_backtrace_slot(pos, slot){ function info(is_raise){ - return is_raise ? 0 === pos ? _ca_ : _cb_ : 0 === pos ? _cc_ : _cd_; + return is_raise ? 0 === pos ? _cb_ : _cc_ : 0 === pos ? _cd_ : _ce_; } if(0 === slot[0]){ var - _wS_ = slot[5], - _wT_ = slot[4], - _wU_ = slot[3], - _wV_ = slot[6] ? _ce_ : _cg_, - _wW_ = slot[2], - _wX_ = slot[7], - _wY_ = info(slot[1]); + _xD_ = slot[5], + _xE_ = slot[4], + _xF_ = slot[3], + _xG_ = slot[6] ? _cf_ : _ch_, + _xH_ = slot[2], + _xI_ = slot[7], + _xJ_ = info(slot[1]); return [0, caml_call7 - (sprintf(_cf_), _wY_, _wX_, _wW_, _wV_, _wU_, _wT_, _wS_)]; + (sprintf(_cg_), _xJ_, _xI_, _xH_, _xG_, _xF_, _xE_, _xD_)]; } if(slot[1]) return 0; - var _wZ_ = info(0); - return [0, caml_call1(sprintf(_ch_), _wZ_)]; + var _xK_ = info(0); + return [0, caml_call1(sprintf(_ci_), _xK_)]; } function print_exception_backtrace(outchan, backtrace){ - if(! backtrace) return fprintf(outchan, _cj_); - var a = backtrace[1], _wQ_ = a.length - 2 | 0, _wP_ = 0; - if(_wQ_ >= 0){ - var i = _wP_; + if(! backtrace) return fprintf(outchan, _ck_); + var a = backtrace[1], _xB_ = a.length - 2 | 0, _xA_ = 0; + if(_xB_ >= 0){ + var i = _xA_; for(;;){ var match = format_backtrace_slot(i, caml_check_bound(a, i)[1 + i]); - if(match){var str = match[1]; caml_call1(fprintf(outchan, _ci_), str);} - var _wR_ = i + 1 | 0; - if(_wQ_ === i) break; - i = _wR_; + if(match){var str = match[1]; caml_call1(fprintf(outchan, _cj_), str);} + var _xC_ = i + 1 | 0; + if(_xB_ === i) break; + i = _xC_; } } return 0; @@ -9433,74 +9544,74 @@ old_printers = get(printers), new_printers = [0, fn, old_printers], success = compare_and_set(printers, old_printers, new_printers), - _wO_ = 1 - success; - if(! _wO_) return _wO_; + _xz_ = 1 - success; + if(! _xz_) return _xz_; } } - var errors = _ck_.slice(); + var errors = _cl_.slice(); function default_uncaught_exception_han(exn, raw_backtrace){ - var _wM_ = to_string$0(exn); - caml_call1(eprintf(_cl_), _wM_); + var _xx_ = to_string$0(exn); + caml_call1(eprintf(_cm_), _xx_); print_raw_backtrace(stderr, raw_backtrace); var status = caml_ml_debug_info_status(0); if(status < 0){ - var _wN_ = abs(status); - prerr_endline(caml_check_bound(errors, _wN_)[1 + _wN_]); + var _xy_ = abs(status); + prerr_endline(caml_check_bound(errors, _xy_)[1 + _xy_]); } return _k_(stderr); } var empty_backtrace = [0]; function try_get_raw_backtrace(param){ - var _wL_ = caml_get_exception_raw_backtrace(0); - return _wL_; + var _xw_ = caml_get_exception_raw_backtrace(0); + return _xw_; } function handle_uncaught_exception(exn, debugger_in_use){ try{ var raw_backtrace = debugger_in_use ? empty_backtrace : try_get_raw_backtrace(0); - try{do_at_exit(0);}catch(_wK_){} + try{do_at_exit(0);}catch(_xv_){} try{ var - _wI_ = default_uncaught_exception_han(exn, raw_backtrace), - _wH_ = _wI_; + _xt_ = default_uncaught_exception_han(exn, raw_backtrace), + _xs_ = _xt_; } catch(exn$1){ var exn$0 = caml_wrap_exception(exn$1), raw_backtrace$0 = try_get_raw_backtrace(0), - _wF_ = to_string$0(exn); - caml_call1(eprintf(_cn_), _wF_); + _xq_ = to_string$0(exn); + caml_call1(eprintf(_co_), _xq_); print_raw_backtrace(stderr, raw_backtrace); - var _wG_ = to_string$0(exn$0); - caml_call1(eprintf(_co_), _wG_); + var _xr_ = to_string$0(exn$0); + caml_call1(eprintf(_cp_), _xr_); print_raw_backtrace(stderr, raw_backtrace$0); - var _wH_ = _k_(stderr); + var _xs_ = _k_(stderr); } - return _wH_; + return _xs_; } - catch(_wJ_){ - var _wE_ = caml_wrap_exception(_wJ_); - if(_wE_ === Out_of_memory) return prerr_endline(_cm_); - throw caml_maybe_attach_backtrace(_wE_, 0); + catch(_xu_){ + var _xp_ = caml_wrap_exception(_xu_); + if(_xp_ === Out_of_memory) return prerr_endline(_cn_); + throw caml_maybe_attach_backtrace(_xp_, 0); } } function handle_uncaught_exception$0(exn, debugger_in_use){ try{ - var _wC_ = handle_uncaught_exception(exn, debugger_in_use); - return _wC_; + var _xn_ = handle_uncaught_exception(exn, debugger_in_use); + return _xn_; } - catch(_wD_){return 0;} + catch(_xo_){return 0;} } caml_register_named_value ("Printexc.handle_uncaught_exception", handle_uncaught_exception$0); - function _cp_(_wB_){return caml_get_exception_raw_backtrace(_wB_);} - var Finally_raised = [248, _cq_, caml_fresh_oo_id(0)]; + function _cq_(_xm_){return caml_get_exception_raw_backtrace(_xm_);} + var Finally_raised = [248, _cr_, caml_fresh_oo_id(0)]; register_printer (function(param){ if(param[1] !== Finally_raised) return 0; var exn = param[2]; - return [0, symbol_concat(_cr_, to_string$0(exn))]; + return [0, symbol_concat(_cs_, to_string$0(exn))]; }); function string(str){ return caml_md5_string(str, 0, caml_ml_string_length(str)); @@ -9517,10 +9628,10 @@ } function extract(d){ var - _wy_ = caml_string_get(d, 3) << 24, - _wz_ = caml_string_get(d, 2) << 16, - _wA_ = caml_string_get(d, 1) << 8; - return ((caml_string_get(d, 0) + _wA_ | 0) + _wz_ | 0) + _wy_ | 0; + _xj_ = caml_string_get(d, 3) << 24, + _xk_ = caml_string_get(d, 2) << 16, + _xl_ = caml_string_get(d, 1) << 8; + return ((caml_string_get(d, 0) + _xl_ | 0) + _xk_ | 0) + _xj_ | 0; } var seed$0 = 0 === seed.length - 1 ? [0, 0] : seed, @@ -9528,26 +9639,26 @@ i$0 = 0; for(;;){ caml_check_bound(s[1], i$0)[1 + i$0] = i$0; - var _wx_ = i$0 + 1 | 0; + var _xi_ = i$0 + 1 | 0; if(54 === i$0) break; - i$0 = _wx_; + i$0 = _xi_; } - var accu = [0, _cs_], _ws_ = 54 + max$0(55, l) | 0, _wr_ = 0; - if(_ws_ >= 0){ - var i = _wr_; + var accu = [0, _ct_], _xd_ = 54 + max$0(55, l) | 0, _xc_ = 0; + if(_xd_ >= 0){ + var i = _xc_; for(;;){ var j = i % 55 | 0, k = caml_mod(i, l), - _wt_ = caml_check_bound(seed$0, k)[1 + k]; - accu[1] = combine(accu[1], _wt_); + _xe_ = caml_check_bound(seed$0, k)[1 + k]; + accu[1] = combine(accu[1], _xe_); var - _wu_ = extract(accu[1]), - _wv_ = (caml_check_bound(s[1], j)[1 + j] ^ _wu_) & 1073741823; - caml_check_bound(s[1], j)[1 + j] = _wv_; - var _ww_ = i + 1 | 0; - if(_ws_ === i) break; - i = _ww_; + _xf_ = extract(accu[1]), + _xg_ = (caml_check_bound(s[1], j)[1 + j] ^ _xf_) & 1073741823; + caml_check_bound(s[1], j)[1 + j] = _xg_; + var _xh_ = i + 1 | 0; + if(_xd_ === i) break; + i = _xh_; } } s[2] = 0; @@ -9567,16 +9678,16 @@ function bits(s){ s[2] = (s[2] + 1 | 0) % 55 | 0; var - _wo_ = s[2], - curval = caml_check_bound(s[1], _wo_)[1 + _wo_], - _wp_ = (s[2] + 24 | 0) % 55 | 0, + _w$_ = s[2], + curval = caml_check_bound(s[1], _w$_)[1 + _w$_], + _xa_ = (s[2] + 24 | 0) % 55 | 0, newval = - caml_check_bound(s[1], _wp_)[1 + _wp_] + caml_check_bound(s[1], _xa_)[1 + _xa_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30 = newval & 1073741823, - _wq_ = s[2]; - caml_check_bound(s[1], _wq_)[1 + _wq_] = newval30; + _xb_ = s[2]; + caml_check_bound(s[1], _xb_)[1 + _xb_] = newval30; return newval30; } function intaux(s, n){ @@ -9587,30 +9698,30 @@ } function int$0(s, bound){ if(1073741823 >= bound && 0 < bound) return intaux(s, bound); - return invalid_arg(_ct_); + return invalid_arg(_cu_); } - var default$0 = [0, _cu_.slice(), 0]; + var default$0 = [0, _cv_.slice(), 0]; function int$1(bound){return int$0(default$0, bound);} function get_state(param){return copy$0(default$0);} function ongoing_traversal(h){ - var _wm_ = h.length - 1 < 4 ? 1 : 0, _wn_ = _wm_ || (h[4] < 0 ? 1 : 0); - return _wn_; + var _w9_ = h.length - 1 < 4 ? 1 : 0, _w__ = _w9_ || (h[4] < 0 ? 1 : 0); + return _w__; } - try{var _lb_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _lb_;} - catch(_wk_){ - var _cv_ = caml_wrap_exception(_wk_); - if(_cv_ !== Not_found) throw caml_maybe_attach_backtrace(_cv_, 0); - try{var _la_ = caml_sys_getenv("CAMLRUNPARAM"), _cy_ = _la_;} - catch(_wl_){ - var _cw_ = caml_wrap_exception(_wl_); - if(_cw_ !== Not_found) throw caml_maybe_attach_backtrace(_cw_, 0); - var _cy_ = _cx_; + try{var _lK_ = caml_sys_getenv("OCAMLRUNPARAM"), params = _lK_;} + catch(_w7_){ + var _cw_ = caml_wrap_exception(_w7_); + if(_cw_ !== Not_found) throw caml_maybe_attach_backtrace(_cw_, 0); + try{var _lJ_ = caml_sys_getenv("CAMLRUNPARAM"), _cz_ = _lJ_;} + catch(_w8_){ + var _cx_ = caml_wrap_exception(_w8_); + if(_cx_ !== Not_found) throw caml_maybe_attach_backtrace(_cx_, 0); + var _cz_ = _cy_; } - var params = _cy_; + var params = _cz_; } var randomized_default = contains(params, 82), - prng = [246, function(_wj_){return make_self_init(0);}]; + prng = [246, function(_w6_){return make_self_init(0);}]; function power_2_above(x, n){ var x$0 = x; for(;;){ @@ -9628,10 +9739,10 @@ var s = power_2_above(16, initial_size); if(random) var - _wh_ = caml_obj_tag(prng), - _wi_ = - 250 === _wh_ ? prng[1] : 246 === _wh_ ? force_lazy_block(prng) : prng, - seed = bits(_wi_); + _w4_ = caml_obj_tag(prng), + _w5_ = + 250 === _w4_ ? prng[1] : 246 === _w4_ ? force_lazy_block(prng) : prng, + seed = bits(_w5_); else var seed = 0; return [0, 0, caml_make_vect(s, 0), seed, s]; @@ -9657,26 +9768,26 @@ cell$0 = next; } } - var _wc_ = odata.length - 2 | 0, _wb_ = 0; - if(_wc_ >= 0){ - var i$0 = _wb_; + var _wZ_ = odata.length - 2 | 0, _wY_ = 0; + if(_wZ_ >= 0){ + var i$0 = _wY_; for(;;){ insert_bucket(caml_check_bound(odata, i$0)[1 + i$0]); - var _wg_ = i$0 + 1 | 0; - if(_wc_ === i$0) break; - i$0 = _wg_; + var _w3_ = i$0 + 1 | 0; + if(_wZ_ === i$0) break; + i$0 = _w3_; } } if(inplace){ - var _we_ = nsize - 1 | 0, _wd_ = 0; - if(_we_ >= 0){ - var i = _wd_; + var _w1_ = nsize - 1 | 0, _w0_ = 0; + if(_w1_ >= 0){ + var i = _w0_; for(;;){ var match = caml_check_bound(ndata_tail, i)[1 + i]; if(match) match[3] = 0; - var _wf_ = i + 1 | 0; - if(_we_ === i) break; - i = _wf_; + var _w2_ = i + 1 | 0; + if(_w1_ === i) break; + i = _w2_; } } } @@ -9687,8 +9798,8 @@ odata = h[2], osize = odata.length - 1, nsize = osize * 2 | 0, - _wa_ = nsize < max_array_length ? 1 : 0; - if(! _wa_) return _wa_; + _wX_ = nsize < max_array_length ? 1 : 0; + if(! _wX_) return _wX_; var ndata = caml_make_vect(nsize, 0), inplace = 1 - ongoing_traversal(h); h[2] = ndata; return insert_all_buckets(caml_call1(indexfun, h), inplace, odata, ndata); @@ -9696,7 +9807,7 @@ function key_index(h, key){ return 4 <= h.length - 1 ? caml_hash(10, 100, h[3], key) & (h[2].length - 2 | 0) - : invalid_arg(_cz_); + : invalid_arg(_cA_); } function add$0(h, key, data){ var @@ -9704,8 +9815,8 @@ bucket = [0, key, data, caml_check_bound(h[2], i)[1 + i]]; caml_check_bound(h[2], i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; - var _v$_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; - return _v$_ ? resize$0(key_index, h) : _v$_; + var _wW_ = h[2].length - 1 << 1 < h[1] ? 1 : 0; + return _wW_ ? resize$0(key_index, h) : _wW_; } function remove_bucket(h, i, key, prec, c){ var prec$1 = prec, prec$0 = c; @@ -9737,8 +9848,8 @@ } function find(h, key){ var - _v__ = key_index(h, key), - match = caml_check_bound(h[2], _v__)[1 + _v__]; + _wV_ = key_index(h, key), + match = caml_check_bound(h[2], _wV_)[1 + _wV_]; if(! match) throw caml_maybe_attach_backtrace(Not_found, 1); var k1 = match[1], d1 = match[2], next1 = match[3]; if(0 === caml_compare(key, k1)) return d1; @@ -9759,8 +9870,8 @@ param$0 = next; } } - var _v9_ = key_index(h, key); - return find_in_bucket(caml_check_bound(h[2], _v9_)[1 + _v9_]); + var _wU_ = key_index(h, key); + return find_in_bucket(caml_check_bound(h[2], _wU_)[1 + _wU_]); } function replace_bucket(key, data, param){ var slot = param; @@ -9788,18 +9899,18 @@ var k = param$0[1], next = param$0[3], - _v8_ = 0 === caml_compare(k, key) ? 1 : 0; - if(_v8_) return _v8_; + _wT_ = 0 === caml_compare(k, key) ? 1 : 0; + if(_wT_) return _wT_; param$0 = next; } } - var _v7_ = key_index(h, key); - return mem_in_bucket(caml_check_bound(h[2], _v7_)[1 + _v7_]); + var _wS_ = key_index(h, key); + return mem_in_bucket(caml_check_bound(h[2], _wS_)[1 + _wS_]); } function id(x){return x;} var zero = 0, unknown = -1; function is_known(n){return 0 <= n ? 1 : 0;} - var String_tag = [248, _cA_, caml_fresh_oo_id(0)]; + var String_tag = [248, _cB_, caml_fresh_oo_id(0)]; function pp_enqueue(state, token){ state[13] = state[13] + token[3] | 0; return add(token, state[28]); @@ -9823,8 +9934,8 @@ return; } function format_string(state, s){ - var _v6_ = s !== cst$1 ? 1 : 0; - return _v6_ ? format_pp_text(state, caml_ml_string_length(s), s) : _v6_; + var _wR_ = s !== cst$1 ? 1 : 0; + return _wR_ ? format_pp_text(state, caml_ml_string_length(s), s) : _wR_; } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -9840,7 +9951,7 @@ return format_string(state, after); } function break_line(state, width){ - return break_new_line(state, _cB_, width); + return break_new_line(state, _cC_, width); } function break_same_line(state, param){ var after = param[3], width = param[2], before = param[1]; @@ -9856,8 +9967,8 @@ match$0 = match[1], width = match$0[2], box_type = match$0[1], - _v5_ = state[9] < width ? 1 : 0; - if(! _v5_) return _v5_; + _wQ_ = state[9] < width ? 1 : 0; + if(! _wQ_) return _wQ_; if(3 < box_type - 1 >>> 0) return; return break_line(state, width); } @@ -9866,8 +9977,8 @@ if(! match) return; var match$0 = match[1], size = match$0[1], length = match$0[3]; state[12] = state[12] - length | 0; - var _v4_ = id(size); - state[9] = state[9] + _v4_ | 0; + var _wP_ = id(size); + state[9] = state[9] + _wP_ | 0; return; } function format_pp_token(state, size, param){ @@ -9896,8 +10007,8 @@ var width = match$0[1][2]; return break_line(state, width); case 4: - var _v3_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; - return _v3_ ? pp_skip_token(state) : _v3_; + var _wO_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + return _wO_ ? pp_skip_token(state) : _wO_; default: var match$1 = pop_opt(state[5]); if(! match$1) return; @@ -9971,9 +10082,9 @@ var tab = insertion_point; var offset = tab - insertion_point | 0; return 0 <= offset - ? break_same_line(state, [0, _cD_, offset + n | 0, _cC_]) + ? break_same_line(state, [0, _cE_, offset + n | 0, _cD_]) : break_new_line - (state, [0, _cF_, tab + off$0 | 0, _cE_], state[6]); + (state, [0, _cG_, tab + off$0 | 0, _cF_], state[6]); case 3: var ty = param[2], @@ -10004,9 +10115,9 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - _v1_ = is_known(size), - _v2_ = _v1_ || (state[9] <= pending_count ? 1 : 0); - if(! _v2_) return _v2_; + _wM_ = is_known(size), + _wN_ = _wM_ || (state[9] <= pending_count ? 1 : 0); + if(! _wN_) return _wN_; take(state[28]); var size$0 = is_known(size) ? id(size) : pp_infinity; format_pp_token(state, size$0, token); @@ -10025,7 +10136,7 @@ } function initialize_scan_stack(stack){ clear(stack); - var queue_elem = [0, unknown, _cG_, 0]; + var queue_elem = [0, unknown, _cH_, 0]; return push([0, -1, queue_elem], stack); } function set_size(state, ty){ @@ -10037,9 +10148,9 @@ left_total = match$0[1], size = id(queue_elem[1]); if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _v0_ = queue_elem[2]; - if(typeof _v0_ !== "number") - switch(_v0_[0]){ + var _wL_ = queue_elem[2]; + if(typeof _wL_ !== "number") + switch(_wL_[0]){ case 3: if(1 - ty){ queue_elem[1] = id(state[13] + size | 0); @@ -10065,48 +10176,60 @@ var size = id(- state[13] | 0), elem = [0, size, [3, indent, br_ty], 0]; return scan_push(state, 0, elem); } - var _vZ_ = state[14] === state[15] ? 1 : 0; - return _vZ_ ? enqueue_string(state, state[16]) : _vZ_; + var _wK_ = state[14] === state[15] ? 1 : 0; + return _wK_ ? enqueue_string(state, state[16]) : _wK_; } function pp_open_sys_box(state){return pp_open_box_gen(state, 0, 3);} function pp_close_box(state, param){ - var _vX_ = 1 < state[14] ? 1 : 0; - if(_vX_){ + var _wI_ = 1 < state[14] ? 1 : 0; + if(_wI_){ if(state[14] < state[15]){ pp_enqueue(state, [0, zero, 1, 0]); set_size(state, 1); set_size(state, 0); } state[14] = state[14] - 1 | 0; - var _vY_ = 0; + var _wJ_ = 0; } else - var _vY_ = _vX_; - return _vY_; + var _wJ_ = _wI_; + return _wJ_; } function pp_open_stag(state, tag_name){ if(state[22]){push(tag_name, state[4]); caml_call1(state[26], tag_name);} - var _vW_ = state[23]; - if(! _vW_) return _vW_; + var _wH_ = state[23]; + if(! _wH_) return _wH_; var token = [5, tag_name]; return pp_enqueue(state, [0, zero, token, 0]); } function pp_close_stag(state, param){ if(state[23]) pp_enqueue(state, [0, zero, 5, 0]); - var _vU_ = state[22]; - if(_vU_){ + var _wF_ = state[22]; + if(_wF_){ var match = pop_opt(state[4]); if(match){ var tag_name = match[1]; return caml_call1(state[27], tag_name); } - var _vV_ = 0; + var _wG_ = 0; } else - var _vV_ = _vU_; - return _vV_; + var _wG_ = _wF_; + return _wG_; } function pp_close_tag(state, param){return pp_close_stag(state, 0);} + function pp_set_mark_tags(state, b){state[23] = b; return;} + function pp_get_formatter_stag_function(state, param){ + return [0, state[24], state[25], state[26], state[27]]; + } + function pp_set_formatter_stag_function(state, param){ + var pct = param[4], pot = param[3], mct = param[2], mot = param[1]; + state[24] = mot; + state[25] = mct; + state[26] = pot; + state[27] = pct; + return; + } function pp_rinit(state){ pp_clear_queue(state); initialize_scan_stack(state[1]); @@ -10135,8 +10258,8 @@ } } function pp_print_as_size(state, size, s){ - var _vT_ = state[14] < state[15] ? 1 : 0; - return _vT_ ? enqueue_string_as(state, size, s) : _vT_; + var _wE_ = state[14] < state[15] ? 1 : 0; + return _wE_ ? enqueue_string_as(state, size, s) : _wE_; } function pp_print_as(state, isize, s){ return pp_print_as_size(state, id(isize), s); @@ -10159,16 +10282,16 @@ return caml_call1(state[18], 0); } function pp_force_newline(state, param){ - var _vS_ = state[14] < state[15] ? 1 : 0; - return _vS_ ? enqueue_advance(state, [0, zero, 3, 0]) : _vS_; + var _wD_ = state[14] < state[15] ? 1 : 0; + return _wD_ ? enqueue_advance(state, [0, zero, 3, 0]) : _wD_; } function pp_print_custom_break(state, fits, breaks){ var after = fits[3], width = fits[2], before = fits[1], - _vR_ = state[14] < state[15] ? 1 : 0; - if(! _vR_) return _vR_; + _wC_ = state[14] < state[15] ? 1 : 0; + if(! _wC_) return _wC_; var size = id(- state[13] | 0), token = [1, fits, breaks], @@ -10181,18 +10304,18 @@ } function pp_print_break(state, width, offset){ return pp_print_custom_break - (state, [0, _cK_, width, _cJ_], [0, _cI_, offset, _cH_]); + (state, [0, _cL_, width, _cK_], [0, _cJ_, offset, _cI_]); } function pp_print_cut(state, param){return pp_print_break(state, 0, 0);} function display_newline(state, param){ - return caml_call3(state[17], _cL_, 0, 1); + return caml_call3(state[17], _cM_, 0, 1); } var blank_line = make$1(80, 32); function display_blanks(state, n){ var n$0 = n; for(;;){ - var _vQ_ = 0 < n$0 ? 1 : 0; - if(! _vQ_) return _vQ_; + var _wB_ = 0 < n$0 ? 1 : 0; + if(! _wB_) return _wB_; if(80 >= n$0) return caml_call3(state[17], blank_line, 0, n$0); caml_call3(state[17], blank_line, 0, 80); var n$1 = n$0 - 80 | 0; @@ -10200,30 +10323,30 @@ } } function default_pp_mark_open_tag(param){ - if(param[1] !== String_tag) return _cO_; + if(param[1] !== String_tag) return _cP_; var s = param[2]; - return symbol_concat(_cN_, symbol_concat(s, _cM_)); + return symbol_concat(_cO_, symbol_concat(s, _cN_)); } function default_pp_mark_close_tag(param){ - if(param[1] !== String_tag) return _cR_; + if(param[1] !== String_tag) return _cS_; var s = param[2]; - return symbol_concat(_cQ_, symbol_concat(s, _cP_)); + return symbol_concat(_cR_, symbol_concat(s, _cQ_)); } - function default_pp_print_open_tag(_vP_){return 0;} - function default_pp_print_close_tag(_vO_){return 0;} + function default_pp_print_open_tag(_wA_){return 0;} + function default_pp_print_close_tag(_wz_){return 0;} function pp_make_formatter(f, g, h, i, j){ - var pp_queue = create$0(0), sys_tok = [0, unknown, _cS_, 0]; + var pp_queue = create$0(0), sys_tok = [0, unknown, _cT_, 0]; add(sys_tok, pp_queue); var scan_stack = create(0); initialize_scan_stack(scan_stack); push([0, 1, sys_tok], scan_stack); - var pp_margin = 78, _vL_ = create(0), _vM_ = create(0), _vN_ = create(0); + var pp_margin = 78, _ww_ = create(0), _wx_ = create(0), _wy_ = create(0); return [0, scan_stack, create(0), - _vN_, - _vM_, - _vL_, + _wy_, + _wx_, + _ww_, pp_margin, 10, 68, @@ -10234,7 +10357,7 @@ 1, 1, max_int, - _cT_, + _cU_, f, g, h, @@ -10254,27 +10377,27 @@ pp_make_formatter (output, flush, - function(_vK_){return 0;}, - function(_vJ_){return 0;}, - function(_vI_){return 0;}); - ppf[19] = function(_vH_){return display_newline(ppf, _vH_);}; - ppf[20] = function(_vG_){return display_blanks(ppf, _vG_);}; - ppf[21] = function(_vF_){return display_blanks(ppf, _vF_);}; + function(_wv_){return 0;}, + function(_wu_){return 0;}, + function(_wt_){return 0;}); + ppf[19] = function(_ws_){return display_newline(ppf, _ws_);}; + ppf[20] = function(_wr_){return display_blanks(ppf, _wr_);}; + ppf[21] = function(_wq_){return display_blanks(ppf, _wq_);}; return ppf; } function formatter_of_out_channel(oc){ return make_formatter - (function(_vC_, _vD_, _vE_){ - return output_substring(oc, _vC_, _vD_, _vE_); + (function(_wn_, _wo_, _wp_){ + return output_substring(oc, _wn_, _wo_, _wp_); }, function(param){return _k_(oc);}); } function formatter_of_buffer(b){ return make_formatter - (function(_vz_, _vA_, _vB_){ - return add_substring(b, _vz_, _vA_, _vB_); + (function(_wk_, _wl_, _wm_){ + return add_substring(b, _wk_, _wl_, _wm_); }, - function(_vy_){return 0;}); + function(_wj_){return 0;}); } var pp_buffer_size = 512; function pp_make_buffer(param){return create$1(pp_buffer_size);} @@ -10307,6 +10430,15 @@ param$0 = vs; } } + function pp_print_option(opt, pp_v, ppf, param){ + if(opt) + var sth = opt[1], none = sth; + else + var none = function(param, _wi_){return 0;}; + if(! param) return caml_call2(none, ppf, 0); + var v = param[1]; + return caml_call2(pp_v, ppf, v); + } function compute_tag(output, tag_acc){ var buf = create$1(16), ppf = formatter_of_buffer(buf); caml_call2(output, ppf, tag_acc); @@ -10372,48 +10504,48 @@ indent = match$0[1]; return pp_open_box_gen(ppf, indent, bty); case 2: - var _vp_ = acc[1]; - if(typeof _vp_ !== "number" && 0 === _vp_[0]){ - var _vq_ = _vp_[2]; - if(typeof _vq_ !== "number" && 1 === _vq_[0]){ - var s$0 = acc[2], size = _vq_[2], p$2 = _vp_[1]; + var _v$_ = acc[1]; + if(typeof _v$_ !== "number" && 0 === _v$_[0]){ + var _wa_ = _v$_[2]; + if(typeof _wa_ !== "number" && 1 === _wa_[0]){ + var s$0 = acc[2], size = _wa_[2], p$2 = _v$_[1]; break b; } } - var s = acc[2], p$1 = _vp_; + var s = acc[2], p$1 = _v$_; break a; case 3: - var _vr_ = acc[1]; - if(typeof _vr_ !== "number" && 0 === _vr_[0]){ - var _vs_ = _vr_[2]; - if(typeof _vs_ !== "number" && 1 === _vs_[0]){ - var c$0 = acc[2], size$0 = _vs_[2], p$4 = _vr_[1]; + var _wb_ = acc[1]; + if(typeof _wb_ !== "number" && 0 === _wb_[0]){ + var _wc_ = _wb_[2]; + if(typeof _wc_ !== "number" && 1 === _wc_[0]){ + var c$0 = acc[2], size$0 = _wc_[2], p$4 = _wb_[1]; break; } } - var c = acc[2], p$3 = _vr_; + var c = acc[2], p$3 = _wb_; break c; case 4: - var _vu_ = acc[1]; - if(typeof _vu_ !== "number" && 0 === _vu_[0]){ - var _vv_ = _vu_[2]; - if(typeof _vv_ !== "number" && 1 === _vv_[0]){ - var s$0 = acc[2], size = _vv_[2], p$2 = _vu_[1]; + var _we_ = acc[1]; + if(typeof _we_ !== "number" && 0 === _we_[0]){ + var _wf_ = _we_[2]; + if(typeof _wf_ !== "number" && 1 === _wf_[0]){ + var s$0 = acc[2], size = _wf_[2], p$2 = _we_[1]; break b; } } - var s = acc[2], p$1 = _vu_; + var s = acc[2], p$1 = _we_; break a; case 5: - var _vw_ = acc[1]; - if(typeof _vw_ !== "number" && 0 === _vw_[0]){ - var _vx_ = _vw_[2]; - if(typeof _vx_ !== "number" && 1 === _vx_[0]){ - var c$0 = acc[2], size$0 = _vx_[2], p$4 = _vw_[1]; + var _wg_ = acc[1]; + if(typeof _wg_ !== "number" && 0 === _wg_[0]){ + var _wh_ = _wg_[2]; + if(typeof _wh_ !== "number" && 1 === _wh_[0]){ + var c$0 = acc[2], size$0 = _wh_[2], p$4 = _wg_[1]; break; } } - var c = acc[2], p$3 = _vw_; + var c = acc[2], p$3 = _wg_; break c; case 6: var f$0 = acc[2], p$5 = acc[1]; @@ -10429,8 +10561,8 @@ return invalid_arg(msg); } output_acc$0(ppf, p$4); - var _vt_ = make$1(1, c$0); - return pp_print_as_size(ppf, id(size$0), _vt_); + var _wd_ = make$1(1, c$0); + return pp_print_as_size(ppf, id(size$0), _wd_); } output_acc$0(ppf, p$3); return pp_print_char(ppf, c); @@ -10449,8 +10581,8 @@ fmt); } function fprintf$0(ppf){ - function _vm_(_vo_){return 0;} - return function(_vn_){return kfprintf$0(_vm_, ppf, _vn_);}; + function _v8_(_v__){return 0;} + return function(_v9_){return kfprintf$0(_v8_, ppf, _v9_);}; } function kasprintf(k, param){ var fmt = param[1], b = pp_make_buffer(0), ppf = formatter_of_buffer(b); @@ -10471,8 +10603,8 @@ caml_register_named_value(name, slot); return; } - var Error = [248, _cU_, caml_fresh_oo_id(0)]; - register_exception(_cV_, [0, Error, [0]]); + var Error = [248, _cV_, caml_fresh_oo_id(0)]; + register_exception(_cW_, [0, Error, [0]]); (function(exn){throw exn;}); var jv_global = globalThis; function length$1(s){return s[cst_length];} @@ -10480,10 +10612,10 @@ if(opt) var sth = opt[1], base = sth; else var base = 10; return i.toString(base); } - var empty = cst$1; + var empty$0 = cst$1; function append(s0, s1){return s0.concat(s1);} function concat$0(opt, ss){ - if(opt) var sth = opt[1], sep = sth; else var sep = empty; + if(opt) var sth = opt[1], sep = sth; else var sep = empty$0; return caml_list_to_js_array(ss).join(sep); } function slice(opt, stop, s){ @@ -10497,14 +10629,14 @@ function cuts(sep, s){return caml_list_of_js_array(s.split(sep));} function is_empty$0(s){return 0 === length$1(s) ? 1 : 0;} function starts_with(prefix, s){return s.startsWith(prefix) | 0;} - function equal(_vl_, _vk_){return caml_equal(_vl_, _vk_);} + function equal(_v7_, _v6_){return caml_equal(_v7_, _v6_);} jv_global["Number"]; var null$0 = null, undefined$0 = undefined; function is_null(v){return v === null$0 ? 1 : 0;} function is_undefined(v){return v === undefined$0 ? 1 : 0;} function is_none(v){ - var _vj_ = is_null(v); - return _vj_ ? _vj_ : is_undefined(v); + var _v5_ = is_null(v); + return _v5_ ? _v5_ : is_undefined(v); } function is_some$0(v){return 1 - is_none(v);} function to_option(conv, v){ @@ -10538,7 +10670,7 @@ var f = param[1]; return set$0(o, p, f); } - function to_string$1(_vi_){return caml_string_of_jsstring(_vi_);} + function to_string$1(_v4_){return caml_string_of_jsstring(_v4_);} function create$3(n){return new global["Array"](n);} function length$2(a){return a[cst_length];} function to_list$0(conv, v){ @@ -10579,10 +10711,7 @@ return new promise(caml_js_wrap_callback_strict(2, g)); } function resolve(v){return promise.resolve(v);} - function await$0(p, k){ - p.then(caml_js_wrap_callback_strict(1, k)); - return 0; - } + function await$0(p, k){p.then(caml_js_wrap_callback_strict(1, k)); return;} function bind(p, res){return p.then(caml_js_wrap_callback_strict(1, res));} function then(p, res, rej){ return p.then @@ -10592,13 +10721,13 @@ function call(o, m, args){ return caml_js_meth_call(o, to_string$1(m), args); } - function value$0(_vh_){return caml_string_of_jsstring(_vh_);} - function _cW_(_vg_){return caml_jsstring_of_string(_vg_);} + function value$0(_v3_){return caml_string_of_jsstring(_v3_);} + function _cX_(_v2_){return caml_jsstring_of_string(_v2_);} function fut(p){return {fut: p};} function promise$0(f){return f[cst_fut];} function create$5(param){ function not_set(param){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _cX_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _cY_], 1); } function is_set(param){return throw$0(0, "The future is already set");} var setter = [0, not_set]; @@ -10619,25 +10748,25 @@ return bind$0(f, function(v){return return$0(caml_call1(fn, v));}); } function ok(v){return return$0([0, v]);} + function error(e){return return$0([1, e]);} function of_promise(ok, error, p){ function ok$0(v){return resolve([0, caml_call1(ok, v)]);} function error$0(e){return resolve([1, caml_call1(error, e)]);} return fut(then(p, ok$0, error$0)); } function of_promise$0(ok, v){ - return of_promise(ok, function(_vf_){return _vf_;}, v); + return of_promise(ok, function(_v1_){return _v1_;}, v); } - function let$0(f, fn){return map$3(fn, f);} - function let$1(f, fn){ - return function(_ve_){return bind$0(f, _ve_);} + function let$0(f, fn){ + return function(_v0_){return bind$0(f, _v0_);} (function(e){ if(0 !== e[0]) return return$0(e); var v = e[1]; return caml_call1(fn, v); }); } - function let$2(f, fn){ - return map$3(function(_vd_){return map$0(fn, _vd_);}, f); + function let$1(f, fn){ + return map$3(function(_vZ_){return map$0(fn, _vZ_);}, f); } global["Event"]; function target(e){return e[cst_target];} @@ -10660,7 +10789,7 @@ click = cst_click, dom_content_loaded = "DOMContentLoaded", ended = "ended", - error = cst_error, + error$0 = cst_error, keyup = "keyup", play = "play", scroll = cst_scroll, @@ -10693,15 +10822,15 @@ return new url(s, b); } var prefix = "/"; - function path(u){return get$3(u, _cY_);} + function path(u){return get$3(u, _cZ_);} function path_segments(u){ function decode_seg(s){return decode_component(s);} try{ var p = path(u), - p$0 = starts_with(prefix, p) ? slice(_cZ_, 0, p) : p, - _vc_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; - return _vc_; + p$0 = starts_with(prefix, p) ? slice(_c0_, 0, p) : p, + _vY_ = [0, map$1(decode_seg, cuts(prefix, p$0))]; + return _vY_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -10715,8 +10844,8 @@ try{ var u$0 = new url(u), path = concat$0(0, map$1(encode_seg, segs)); u$0[cst_pathname] = path; - var _vb_ = [0, u$0]; - return _vb_; + var _vX_ = [0, u$0]; + return _vX_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -10730,16 +10859,16 @@ function of_obj(o){return new usp(o);} function with_query_params(u, ps){ var u$0 = new url(u); - set$0(u$0, _c0_, to_jstr(ps)); + set$0(u$0, _c1_, to_jstr(ps)); return u$0; } function to_jstr$0(u){return u.toString();} function v$1(n, v){return [0, n, v];} - var void$0 = [0, empty, empty]; + var void$0 = [0, empty$0, empty$0]; function if$0(b, at){return b ? at : void$0;} - function true$1(n){return [0, n, empty];} + function true$1(n){return [0, n, empty$0];} function int$2(n, i){return [0, n, jstr_of_int(0, i)];} - function to_pair(_va_){return _va_;} + function to_pair(_vW_){return _vW_;} var checked = cst_checked, class$0 = "class", @@ -10767,7 +10896,7 @@ var global_document = global["document"]; function document(e){return e["ownerDocument"];} if(! is_none(global_document)) global_document[cst_documentElement]; - function _c1_(e, n){e.appendChild(n); return 0;} + function _c2_(e, n){e.appendChild(n); return 0;} function set_atts(e, ss, param){ var ss$0 = ss, param$0 = param; for(;;){ @@ -10793,17 +10922,17 @@ else{e.setAttribute(a, v); param$0 = at;} } } - function v$2(opt, _u__, name, cs){ + function v$2(opt, _vU_, name, cs){ if(opt) var sth = opt[1], d = sth; else var d = global_document; - if(_u__) var sth$0 = _u__[1], at = sth$0; else var at = 0; + if(_vU_) var sth$0 = _vU_[1], at = sth$0; else var at = 0; var e = d.createElement(name); set_atts(e, 0, at); - iter$0(function(_u$_){return _c1_(e, _u$_);}, cs); + iter$0(function(_vV_){return _c2_(e, _vV_);}, cs); return e; } function txt(opt, s){ if(opt) var sth = opt[1], d = sth; else var d = global_document; - return d.createTextNode(_cW_(s)); + return d.createTextNode(_cX_(s)); } function append_children(e, l){ caml_js_meth_call(e, cst_append, of_list(l)); @@ -10817,18 +10946,18 @@ } function jv_to_float(f){return is_undefined(f) ? 0. : f;} function float$0(n){ - return [0, n, jv_to_float, function(_u9_){return _u9_;}]; + return [0, n, jv_to_float, function(_vT_){return _vT_;}]; } - function prop(p, e){var _u8_ = e[p[1]]; return caml_call1(p[2], _u8_);} + function prop(p, e){var _vS_ = e[p[1]]; return caml_call1(p[2], _vS_);} function set_class(c, b, e){ return b ? (e[cst_classList].add(c), 0) : (e[cst_classList].remove(c), 0); } function computed_style(opt, p, e){ if(opt) var sth = opt[1], w = sth; else var w = global[cst_window]; var style = w.getComputedStyle(e), v = style[p]; - return is_none(v) ? empty : v; + return is_none(v) ? empty$0 : v; } - function scroll_y(e){return get$2(e, _c2_);} + function scroll_y(e){return get$2(e, _c3_);} function scroll_into_view(opt, e){ if(opt) var sth = opt[1], align_v = sth; else var align_v = 389604418; var align = 389604418 <= align_v ? 1 : 0; @@ -10848,10 +10977,10 @@ select = "select", span = "span"; function cons$0(name, d, at, cs){return v$2(d, at, name, cs);} - function audio$0(_u5_, _u6_, _u7_){return cons$0(audio, _u5_, _u6_, _u7_);} - function div$0(_u2_, _u3_, _u4_){return cons$0(div, _u2_, _u3_, _u4_);} - function h1$0(_uZ_, _u0_, _u1_){return cons$0(h1, _uZ_, _u0_, _u1_);} - function span$0(_uW_, _uX_, _uY_){return cons$0(span, _uW_, _uX_, _uY_);} + function audio$0(_vP_, _vQ_, _vR_){return cons$0(audio, _vP_, _vQ_, _vR_);} + function div$0(_vM_, _vN_, _vO_){return cons$0(div, _vM_, _vN_, _vO_);} + function h1$0(_vJ_, _vK_, _vL_){return cons$0(h1, _vJ_, _vK_, _vL_);} + function span$0(_vG_, _vH_, _vI_){return cons$0(span, _vG_, _vH_, _vI_);} function root(d){return d[cst_documentElement];} function body(d){ var b = d[cst_body]; @@ -10862,10 +10991,10 @@ "Document body is null. Try to defer your script execution."); } function active_el(d){ - return to_option(function(_uV_){return _uV_;}, d["activeElement"]); + return to_option(function(_vF_){return _vF_;}, d["activeElement"]); } function call$0(c, meth, args){caml_js_meth_call(c, meth, args); return;} - var _c3_ = global[cst_console]; + var _c4_ = global[cst_console]; function msg_to_jv_array(msg){ function loop(a, i, param){ var i$0 = i, param$0 = param; @@ -10880,9 +11009,9 @@ } return caml_js_to_array(loop(create$3(0), 0, msg)); } - function log(msg){return call$0(_c3_, _c4_, msg_to_jv_array(msg));} - function error$0(msg){return call$0(_c3_, _c5_, msg_to_jv_array(msg));} - function warn(msg){return call$0(_c3_, _c6_, msg_to_jv_array(msg));} + function log(msg){return call$0(_c4_, _c5_, msg_to_jv_array(msg));} + function error$1(msg){return call$0(_c4_, _c6_, msg_to_jv_array(msg));} + function warn(msg){return call$0(_c4_, _c7_, msg_to_jv_array(msg));} function as_target(w){return w;} function now_ms(p){return p.now();} global[cst_console]; @@ -10890,7 +11019,7 @@ navigator = global["navigator"], performance = global["performance"], window = global[cst_window]; - get$1(global, _c7_); + get$1(global, _c8_); function set_timeout(ms, f){ return global.setTimeout(caml_js_wrap_callback_strict(1, f), ms); } @@ -10901,9 +11030,9 @@ } global["ClipboardItem"]; global["FormData"]; - function of_jstr(_uU_){return _uU_;} + function of_jstr(_vE_){return _vE_;} function text(r){ - return of_promise$0(function(_uT_){return _uT_;}, r.text()); + return of_promise$0(function(_vD_){return _vD_;}, r.text()); } var headers = global["Headers"]; function of_assoc(init, l){ @@ -10914,7 +11043,7 @@ hs.append(k, v); return 0; } - iter$0(function(_uS_){return add(hs, _uS_);}, l); + iter$0(function(_vC_){return add(hs, _vC_);}, l); return hs; } function init$1 @@ -10932,18 +11061,18 @@ signal, param){ var o = {}; - o[cst_body] = of_option(undefined$0, function(_uR_){return _uR_;}, body); - set_if_some$1(o, _c8_, cache); - set_if_some$1(o, _c9_, credentials); - set_if_some(o, _c__, map(function(_uQ_){return _uQ_;}, headers)); - set_if_some$1(o, _c$_, integrity); - set_if_some$0(o, _da_, keepalive); - set_if_some$1(o, _db_, method); - set_if_some$1(o, _dc_, mode); - set_if_some$1(o, _dd_, redirect); - set_if_some$1(o, _de_, referrer); - set_if_some$1(o, _df_, referrer_policy); - o["signal"] = of_option(undefined$0, function(_uP_){return _uP_;}, signal); + o[cst_body] = of_option(undefined$0, function(_vB_){return _vB_;}, body); + set_if_some$1(o, _c9_, cache); + set_if_some$1(o, _c__, credentials); + set_if_some(o, _c$_, map(function(_vA_){return _vA_;}, headers)); + set_if_some$1(o, _da_, integrity); + set_if_some$0(o, _db_, keepalive); + set_if_some$1(o, _dc_, method); + set_if_some$1(o, _dd_, mode); + set_if_some$1(o, _de_, redirect); + set_if_some$1(o, _df_, referrer); + set_if_some$1(o, _dg_, referrer_policy); + o["signal"] = of_option(undefined$0, function(_vz_){return _vz_;}, signal); return o; } var request = global["Request"]; @@ -10954,8 +11083,8 @@ global["Response"]; var fetch = global["fetch"]; function request$0(r){ - function _uM_(_uO_){return _uO_;} - return function(_uN_){return of_promise$0(_uM_, _uN_);}(fetch(r)); + function _vw_(_vy_){return _vy_;} + return function(_vx_){return of_promise$0(_vw_, _vx_);}(fetch(r)); } global["MediaStream"]; global["MediaRecorder"]; @@ -10966,8 +11095,8 @@ global["Notification"]; function local(w){return w["localStorage"];} function get_item(s, k){ - function _uJ_(_uL_){return _uL_;} - return function(_uK_){return to_option(_uJ_, _uK_);}(s.getItem(k)); + function _vt_(_vv_){return _vv_;} + return function(_vu_){return to_option(_vt_, _vu_);}(s.getItem(k)); } function set_item(s, k, v){ try{s.setItem(k, v); return;} @@ -10998,23 +11127,23 @@ global["registration"]; global["serviceWorker"]; function height(t){return t["height"];} - function _dg_(_uI_){return _uI_;} - function content_rect(t){return _dg_(t["contentRect"]);} + function _dh_(_vs_){return _vs_;} + function content_rect(t){return _dh_(t["contentRect"]);} function target$0(t){return t[cst_target];} function string_of_box(param){ switch(param){ case 0: - return _dh_; - case 1: return _di_; - default: return _dj_; + case 1: + return _dj_; + default: return _dk_; } } function observe(t, box, target){ if(box) var b = box[1], - box$0 = {box: _cW_(string_of_box(b))}, + box$0 = {box: _cX_(string_of_box(b))}, args = [0, target, box$0]; else var args = [0, target]; @@ -11023,26 +11152,26 @@ } function create$7(callback){ function callback$0(entries, observer){ - var entries$0 = to_list$0(function(_uH_){return _uH_;}, entries); + var entries$0 = to_list$0(function(_vr_){return _vr_;}, entries); return caml_call2(callback, entries$0, observer); } return new global["ResizeObserver"](callback$0); } function of_navigator(n){return n["mediaSession"];} function img_to_jv(img){ - var _uF_ = _cW_(img[3]), _uG_ = _cW_(img[2]); - return {src: _cW_(img[1]), sizes: _uG_, type: _uF_}; + var _vp_ = _cX_(img[3]), _vq_ = _cX_(img[2]); + return {src: _cX_(img[1]), sizes: _vq_, type: _vp_}; } function to_jv(t){ var artwork = of_list$0(img_to_jv, t[4]), - _uD_ = _cW_(t[3]), - _uE_ = _cW_(t[2]); - return {title: _cW_(t[1]), artist: _uE_, album: _uD_, artwork: artwork}; + _vn_ = _cX_(t[3]), + _vo_ = _cX_(t[2]); + return {title: _cX_(t[1]), artist: _vo_, album: _vn_, artwork: artwork}; } function set_metadata(t, v){ - log([0, _dk_, [0, to_jv(v), 0]]); - var _uC_ = to_jv(v), metadata = new global["MediaMetadata"](_uC_); + log([0, _dl_, [0, to_jv(v), 0]]); + var _vm_ = to_jv(v), metadata = new global["MediaMetadata"](_vm_); t["metadata"] = metadata; return; } @@ -11057,24 +11186,24 @@ return map(function(v){return [0, name, v];}, v); } var - duration$0 = maybe_float(_dl_, duration), - playback_rate$0 = maybe_float(_dm_, playback_rate), - position$0 = maybe_float(_dn_, position), + duration$0 = maybe_float(_dm_, duration), + playback_rate$0 = maybe_float(_dn_, playback_rate), + position$0 = maybe_float(_do_, position), state_dict = - filter_map(function(_uB_){return _uB_;}) + filter_map(function(_vl_){return _vl_;}) ([0, duration$0, [0, playback_rate$0, [0, position$0, 0]]]), args = state_dict ? [0, caml_js_object(of_list(state_dict))] : [0]; caml_js_meth_call(t, "setPositionState", args); return 0; } - function _do_(_uA_, _uz_, _uy_){return;} + function _dp_(_vk_, _vj_, _vi_){return;} var submit = cst_submit, pattern = "pattern"; function persist(t){ - function _uv_(_ux_){return _ux_ | 0;} - return function(_uw_){return of_promise$0(_uv_, _uw_);}(t.persist()); + function _vf_(_vh_){return _vh_ | 0;} + return function(_vg_){return of_promise$0(_vf_, _vg_);}(t.persist()); } function manager(n){return n["storage"];} - function any(_uu_){return _uu_;} + function any(_ve_){return _ve_;} function return$1(x){return [0, x];} function pure(x){return [0, x];} function is_pure(x){ @@ -11112,7 +11241,7 @@ function add_idx(obj, idx, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dp_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); case 1: param[3] = [0, idx, obj, param[3]]; return; default: param[2] = [0, idx, obj, param[2]]; return; @@ -11120,7 +11249,7 @@ } function rem_idx_rec(obj, self){ if(! self) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dq_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); if(self[2] === obj) return [0, self[1], self[3]]; var match = rem_idx_rec(obj, self[3]), result = match[2], idx = match[1]; self[3] = result; @@ -11129,7 +11258,7 @@ function rem_idx(obj, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dr_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ds_], 1); case 1: var match = rem_idx_rec(obj, param[3]), @@ -11149,7 +11278,7 @@ function mov_idx_rec(obj, oldidx, newidx, param){ var t = param; for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _ds_], 1); + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); if(t[1] === oldidx && t[2] === obj){t[1] = newidx; return;} t = t[3]; } @@ -11157,7 +11286,7 @@ function mov_idx(obj, oldidx, newidx, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dt_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); case 1: return mov_idx_rec(obj, oldidx, newidx, param[3]); default: return mov_idx_rec(obj, oldidx, newidx, param[2]); @@ -11166,7 +11295,7 @@ function get_idx_rec(obj, param){ var t = param; for(;;){ - if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _du_], 1); + if(! t) throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); if(t[2] === obj) return t[1]; t = t[3]; } @@ -11174,7 +11303,7 @@ function get_idx(obj, param){ switch(param[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dv_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); case 1: return get_idx_rec(obj, param[3]); default: return get_idx_rec(obj, param[2]); @@ -11183,22 +11312,22 @@ function invalidate_node$0(counter, status, sensitivity, node){ switch(node[0]){ case 0: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dw_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dx_], 1); case 1: - var _uo_ = node[1]; - if(typeof _uo_ === "number" && ! _uo_){ + var _u__ = node[1]; + if(typeof _u__ === "number" && ! _u__){ if(! sensitivity) return; if(status[1]) return; status[1] = 1; return; } - var _up_ = node[4]; - if(7 === _up_[0]){ - var _us_ = _up_[2]; - if(1 === _us_[0]){ - var _ut_ = _us_[1]; - if(typeof _ut_ === "number"){ - if(! _ut_ && sensitivity){ + var _u$_ = node[4]; + if(7 === _u$_[0]){ + var _vc_ = _u$_[2]; + if(1 === _vc_[0]){ + var _vd_ = _vc_[1]; + if(typeof _vd_ === "number"){ + if(! _vd_ && sensitivity){ if(status[1]) return; status[1] = 1; return; @@ -11207,19 +11336,19 @@ else if(sensitivity) return; } } - var _uq_ = node[1]; + var _va_ = node[1]; a: { - if(typeof _uq_ === "number" && _uq_){var sensitivity$0 = 1; break a;} + if(typeof _va_ === "number" && _va_){var sensitivity$0 = 1; break a;} var sensitivity$0 = sensitivity; } node[1] = 0; - var _ur_ = node[2]; + var _vb_ = node[2]; if(counter >= 50) return caml_trampoline_return - (invalidate_trace, [0, status, sensitivity$0, _ur_]); + (invalidate_trace, [0, status, sensitivity$0, _vb_]); var counter$0 = counter + 1 | 0; - return invalidate_trace(counter$0, status, sensitivity$0, _ur_); + return invalidate_trace(counter$0, status, sensitivity$0, _vb_); default: var value = node[1]; node[1] = 0; @@ -11276,15 +11405,15 @@ default: var active = t[1]; t[1] = 0; - var _um_ = active - 1 | 0, _ul_ = 0; - if(_um_ >= 0){ - var i = _ul_; + var _u8_ = active - 1 | 0, _u7_ = 0; + if(_u8_ >= 0){ + var i = _u7_; for(;;){ invalidate_node (status, sensitivity, caml_check_bound(t[3], i)[1 + i]); - var _un_ = i + 1 | 0; - if(_um_ === i) break; - i = _un_; + var _u9_ = i + 1 | 0; + if(_u8_ === i) break; + i = _u9_; } } return; @@ -11292,7 +11421,7 @@ } function default_unsafe_mutation_logger(param){ var callstack = caml_get_current_callstack(20); - return caml_call2(fprintf(stderr, _dx_), print_raw_backtrace, callstack); + return caml_call2(fprintf(stderr, _dy_), print_raw_backtrace, callstack); } function do_invalidate(sensitivity, node){ var status = [0, 0]; @@ -11307,14 +11436,14 @@ var match = vx[4]; if(5 === match[0]){match[1] = x; return do_invalidate(0, vx);} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dy_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); } function peek(param){ if(1 === param[0]){ var match = param[4]; if(5 === match[0]) return match[1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dz_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); } function update(f, v){return symbol$1(v, caml_call1(f, peek(v)));} function prim(acquire, release){return operator([6, acquire, release]);} @@ -11329,7 +11458,7 @@ return caml_call2(p[2], x, v); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dA_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); } function sub_release(failures, origin, self){ var failures$0 = failures, origin$1 = origin, origin$0 = self; @@ -11340,57 +11469,57 @@ case 1: var trace = origin$0[2]; if(typeof trace === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dB_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dC_], 1); switch(trace[0]){ case 0: var x = trace[1]; if(x !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dC_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); var trace$0 = 0; break; case 1: var y = trace[2], x$4 = trace[1]; if(x$4 === origin$1) - var _uf_ = [0, y]; + var _u1_ = [0, y]; else{ if(y !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dD_], 1); - var _uf_ = [0, x$4]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dE_], 1); + var _u1_ = [0, x$4]; } - var trace$0 = _uf_; + var trace$0 = _u1_; break; case 2: var z = trace[3], y$0 = trace[2], x$5 = trace[1]; if(x$5 === origin$1) - var _ug_ = [1, y$0, z]; + var _u2_ = [1, y$0, z]; else if(y$0 === origin$1) - var _ug_ = [1, x$5, z]; + var _u2_ = [1, x$5, z]; else{ if(z !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dE_], 1); - var _ug_ = [1, x$5, y$0]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); + var _u2_ = [1, x$5, y$0]; } - var trace$0 = _ug_; + var trace$0 = _u2_; break; case 3: var w = trace[4], z$0 = trace[3], y$1 = trace[2], x$6 = trace[1]; if(x$6 === origin$1) - var _uh_ = [2, y$1, z$0, w]; + var _u3_ = [2, y$1, z$0, w]; else if(y$1 === origin$1) - var _uh_ = [2, x$6, z$0, w]; + var _u3_ = [2, x$6, z$0, w]; else if(z$0 === origin$1) - var _uh_ = [2, x$6, y$1, w]; + var _u3_ = [2, x$6, y$1, w]; else{ if(w !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dF_], 1); - var _uh_ = [2, x$6, y$1, z$0]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); + var _u3_ = [2, x$6, y$1, z$0]; } - var trace$0 = _uh_; + var trace$0 = _u3_; break; default: var revidx = rem_idx(origin$0, origin$1); if(caml_check_bound(trace[3], revidx)[1 + revidx] !== origin$1) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dG_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); var count = trace[2] - 1 | 0; trace[2] = count; if(revidx < count){ @@ -11412,19 +11541,19 @@ rem_idx(origin$0, b); rem_idx(origin$0, c); rem_idx(origin$0, d); - var _ui_ = [3, a, b, c, d]; + var _u4_ = [3, a, b, c, d]; } else{ var len = trace[3].length - 1; if(count <= (len >>> 2 | 0)) var - _uj_ = sub$1(trace[3], 0, len >>> 1 | 0), - _uk_ = [4, trace[1], trace[2], _uj_]; + _u5_ = sub$1(trace[3], 0, len >>> 1 | 0), + _u6_ = [4, trace[1], trace[2], _u5_]; else - var _uk_ = trace; - var _ui_ = _uk_; + var _u6_ = trace; + var _u4_ = _u6_; } - var trace$0 = _ui_; + var trace$0 = _u4_; } origin$0[2] = trace$0; if(typeof trace$0 !== "number") return failures$0; @@ -11480,7 +11609,7 @@ var x$3 = value[1]; try{caml_call2(t[2], origin$0, x$3); return failures$0;} catch(exn$0){ - var exn = caml_wrap_exception(exn$0), bt = _cp_(0); + var exn = caml_wrap_exception(exn$0), bt = _cq_(0); return [0, [0, exn, bt], failures$0]; } default: @@ -11494,7 +11623,7 @@ } break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dH_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); } } function sub_acquire(origin, self){ @@ -11533,9 +11662,9 @@ i = 0; for(;;){ add_idx(origin$0, i, caml_check_bound(entries, i)[1 + i]); - var _ue_ = i + 1 | 0; + var _u0_ = i + 1 | 0; if(4 === i) break; - i = _ue_; + i = _u0_; } var trace$0 = [4, 5, 5, entries]; break; @@ -11587,7 +11716,7 @@ var child = match[1], intermediate = match[2]; sub_acquire(origin$0, child); if(intermediate) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dI_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); return; case 5: return; @@ -11601,15 +11730,15 @@ } break; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dJ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); } } function activate_tracing(self, origin, tn){ if(typeof tn !== "number" && 4 === tn[0]){ var idx = get_idx(self, origin), active = tn[1]; if(active <= idx) tn[1] = active + 1 | 0; - var _ud_ = active < idx ? 1 : 0; - if(! _ud_) return _ud_; + var _uZ_ = active < idx ? 1 : 0; + if(! _uZ_) return _uZ_; var old = caml_check_bound(tn[3], active)[1 + active]; caml_check_bound(tn[3], idx)[1 + idx] = old; caml_check_bound(tn[3], active)[1 + active] = origin; @@ -11626,10 +11755,10 @@ var value = param[1]; if(typeof value !== "number") return 0; if(value) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dK_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); return 1; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dL_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); } } function sub_sample(queue){ @@ -11658,22 +11787,22 @@ f$0 = x$0[3], y = x$0[2], x$2 = x$0[1], - _t$_ = aux(self, y), - result = caml_call2(f$0, aux(self, x$2), _t$_); + _uV_ = aux(self, y), + result = caml_call2(f$0, aux(self, x$2), _uV_); break; case 2: var y$0 = x$0[2], x$3 = x$0[1], - _ua_ = aux(self, y$0), - result = [0, aux(self, x$3), _ua_]; + _uW_ = aux(self, y$0), + result = [0, aux(self, x$3), _uW_]; break; case 3: var x$4 = x$0[2], f$1 = x$0[1], - _ub_ = aux(self, x$4), - result = caml_call1(aux(self, f$1), _ub_); + _uX_ = aux(self, x$4), + result = caml_call1(aux(self, f$1), _uX_); break; case 4: var intermediate = aux(self, x$0[1]), match$0 = x$0[2]; @@ -11697,20 +11826,20 @@ aux(self, wrt); var result$0 = aux(self, doc); if(sub_is_damaged(wrt)) - var _uc_ = aux(origin, self); + var _uY_ = aux(origin, self); else{ if(sub_is_damaged(doc)) do_invalidate(1, self); - var _uc_ = result$0; + var _uY_ = result$0; } - var result = _uc_; + var result = _uY_; } - var _t__ = self[1]; + var _uU_ = self[1]; a: - if(typeof _t__ === "number" && _t__){self[1] = [0, result]; break a;} + if(typeof _uU_ === "number" && _uU_){self[1] = [0, result]; break a;} activate_tracing(self, origin, self[2]); return result; default: - throw caml_maybe_attach_backtrace([0, Assert_failure, _dM_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dN_], 1); } } return aux; @@ -11719,11 +11848,11 @@ if(opt) var sth = opt[1], on_invalidate = sth; else - var on_invalidate = function(_t9_){return 0;}; + var on_invalidate = function(_uT_){return 0;}; var root = [2, 0, 0, on_invalidate, 0, child]; return root; } - var Release_failure = [248, _dN_, caml_fresh_oo_id(0)]; + var Release_failure = [248, _dO_, caml_fresh_oo_id(0)]; function raw_flush_release_queue(queue){ function aux(failures, param){ var failures$0 = failures, param$0 = param; @@ -11743,19 +11872,19 @@ } function sample(queue, self){ if(2 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dO_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); var match = self[1]; if(typeof match !== "number"){var value$0 = match[1]; return value$0;} if(1 - self[4]){self[4] = 1; sub_acquire(self, self[5]);} self[1] = 1; - var _t7_ = self[5], value = sub_sample(queue)(self, _t7_), _t8_ = self[1]; + var _uR_ = self[5], value = sub_sample(queue)(self, _uR_), _uS_ = self[1]; a: - if(typeof _t8_ === "number" && _t8_){self[1] = [0, value]; break a;} + if(typeof _uS_ === "number" && _uS_){self[1] = [0, value]; break a;} return value; } function set_on_invalidate(x, f){ if(2 !== x[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dP_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); x[3] = f; return 0; } @@ -11815,7 +11944,7 @@ function set_parent(parent, param){ if(typeof param === "number") return; if(0 !== param[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dQ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); param[5] = parent; return; } @@ -11830,7 +11959,7 @@ var param$0 = param; for(;;){ if(typeof param$0 === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _dR_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dS_], 1); if(0 !== param$0[0]) return iter$0(invalidate, param$0[4]); if(0 === param$0[6]) return; param$0[6] = 0; @@ -11844,7 +11973,7 @@ parent[2] = node; return node; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dS_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dT_], 1); } function get$5(param){ if(typeof param !== "number" && 0 === param[0]){ @@ -11861,7 +11990,7 @@ function set_binding(x, t){ if(typeof t !== "number"){ if(0 !== t[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dT_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); if(typeof t[5] !== "number"){ raw_invalidate(t); invalidate_binding(t[3]); @@ -11876,30 +12005,30 @@ function size(node){ if(typeof node === "number") return 0; if(0 !== node[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); if(0 === node[6]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dU_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dV_], 1); return node[6]; } function smaller_ell(smin, smax){ var - _t5_ = smin < smax ? 1 : 0, - _t6_ = _t5_ ? (smin & smax) << 1 < smax ? 1 : 0 : _t5_; - return _t6_; + _uP_ = smin < smax ? 1 : 0, + _uQ_ = _uP_ ? (smin & smax) << 1 < smax ? 1 : 0 : _uP_; + return _uQ_; } function disbalanced(smin, smax){return smaller_ell(smin, smax >>> 1 | 0);} function reparent(parent, oldchild, newchild){ if(typeof parent !== "number"){ if(0 !== parent[0]){ if(parent[2] !== oldchild) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); parent[2] = newchild; return; } if(parent[2] === oldchild){parent[2] = newchild; return;} if(parent[4] === oldchild){parent[4] = newchild; return;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dW_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dX_], 1); } function rot_left$0(counter, version, sn){ if(typeof sn !== "number" && 0 === sn[0]){ @@ -11910,7 +12039,7 @@ var rl$0 = 0; else{ if(0 !== rl[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); rl[5] = sn; var rl$0 = rl; } @@ -11926,7 +12055,7 @@ return balance$0(counter$0, version, rn); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _dY_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _dZ_], 1); } function rot_left(version, sn){ return caml_trampoline(rot_left$0(0, version, sn)); @@ -11940,7 +12069,7 @@ var lr$0 = 0; else{ if(0 !== lr[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); lr[5] = sn; var lr$0 = lr; } @@ -11956,7 +12085,7 @@ return balance$0(counter$0, version, ln); } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d0_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d1_], 1); } function rot_right(version, sn){ return caml_trampoline(rot_right$0(0, version, sn)); @@ -11966,30 +12095,30 @@ var right = self[4]; a: if(typeof right !== "number" && 0 === right[0]){ - var _t4_ = size(right[2]); - if(smaller_ell(size(right[4]), _t4_)){rot_right(version, right); break a;} + var _uO_ = size(right[2]); + if(smaller_ell(size(right[4]), _uO_)){rot_right(version, right); break a;} } if(counter >= 50) return caml_trampoline_return(rot_left$0, [0, version, self]); var counter$0 = counter + 1 | 0; return rot_left$0(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d2_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); } function inc_right(counter, version, self){ if(typeof self !== "number" && 0 === self[0]){ var left = self[2]; a: if(typeof left !== "number" && 0 === left[0]){ - var _t3_ = size(left[4]); - if(smaller_ell(size(left[2]), _t3_)){rot_left(version, left); break a;} + var _uN_ = size(left[4]); + if(smaller_ell(size(left[2]), _uN_)){rot_left(version, left); break a;} } if(counter >= 50) return caml_trampoline_return(rot_right$0, [0, version, self]); var counter$0 = counter + 1 | 0; return rot_right$0(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d3_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); } function balance$0(counter, version, self){ if(typeof self !== "number" && 0 === self[0]){ @@ -12015,7 +12144,7 @@ var counter$0 = counter + 1 | 0; return inc_right(counter$0, version, self); } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d4_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); } function balance(version, self){ return caml_trampoline(balance$0(0, version, self)); @@ -12025,12 +12154,12 @@ for(;;){ if(typeof self$0 === "number") return; if(0 !== self$0[0]) return; - var _t0_ = 0 === self$0[6] ? 1 : 0; - if(! _t0_) return _t0_; - var _t1_ = self$0[2]; - if(typeof _t1_ !== "number" && 0 === _t1_[0] && 0 === _t1_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} - var _t2_ = self$0[4]; - if(typeof _t2_ !== "number" && 0 === _t2_[0] && 0 === _t2_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} + var _uK_ = 0 === self$0[6] ? 1 : 0; + if(! _uK_) return _uK_; + var _uL_ = self$0[2]; + if(typeof _uL_ !== "number" && 0 === _uL_[0] && 0 === _uL_[6]){var self$2 = self$0[2]; self$0 = self$2; continue;} + var _uM_ = self$0[4]; + if(typeof _uM_ !== "number" && 0 === _uM_[0] && 0 === _uM_[6]){var self$1 = self$0[4]; self$0 = self$1; continue;} var parent = self$0[5]; balance(version, self$0); self$0 = parent; @@ -12041,7 +12170,7 @@ for(;;){ if(typeof param$0 === "number") return; if(0 !== param$0[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d5_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); param$0[1] = version; reset_version(version, param$0[2]); param$0 = param$0[4]; @@ -12049,11 +12178,11 @@ } function rebalance(r){ if(typeof r !== "number" && 1 === r[0]){ - var _tZ_ = r[2]; - if(typeof _tZ_ !== "number"){ - if(0 !== _tZ_[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); - if(0 === _tZ_[6]){ + var _uJ_ = r[2]; + if(typeof _uJ_ !== "number"){ + if(0 !== _uJ_[0]) + throw caml_maybe_attach_backtrace([0, Assert_failure, _d8_], 1); + if(0 === _uJ_[6]){ var version = r[1] + 1 | 0, version$0 = @@ -12067,7 +12196,7 @@ } return r[1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _d6_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d7_], 1); } function plus(param, x, y){ var plus = param[2], zero = param[1]; @@ -12078,11 +12207,11 @@ var acc$0 = acc, rnode = param; for(;;){ if(! rnode) return acc$0; - var acc$1 = aux(acc$0, rnode[6]), _tX_ = rnode[2]; - if(_tX_) + var acc$1 = aux(acc$0, rnode[6]), _uH_ = rnode[2]; + if(_uH_) var - _tY_ = _tX_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, - acc$2 = _tY_; + _uI_ = _uH_[2] ? [0, [0, rnode[2], rnode[3]], acc$1] : acc$1, + acc$2 = _uI_; else var acc$2 = acc$1; acc$0 = acc$2; @@ -12096,14 +12225,14 @@ function aux(cell){ if(typeof cell === "number") return 0; if(0 !== cell[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); - var left = aux(cell[2]), binding = cell[3], _tW_ = bindings[1]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _d__], 1); + var left = aux(cell[2]), binding = cell[3], _uG_ = bindings[1]; a: if(binding){ - if(_tW_){ + if(_uG_){ var - bindings$0 = _tW_[2], - match = _tW_[1], + bindings$0 = _uG_[2], + match = _uG_[1], reduction = match[2], binding$0 = match[1]; if(binding === binding$0){ @@ -12113,7 +12242,7 @@ } } if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d8_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d9_], 1); var reduction$0 = caml_call2(red[5], cell, binding[1]); } else @@ -12126,7 +12255,7 @@ } var result = aux(tree); if(0 === bindings[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _d__], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); } function extract_fringe(version, tree){ function aux(acc, tree){ @@ -12136,9 +12265,9 @@ var match = rnode[1]; if(typeof match !== "number" && 0 === match[0] && match[1] <= version) return [0, rnode, acc$0]; - var acc$1 = aux(acc$0, rnode[6]), _tU_ = rnode[2]; - if(_tU_) - var _tV_ = _tU_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _tV_; + var acc$1 = aux(acc$0, rnode[6]), _uE_ = rnode[2]; + if(_uE_) + var _uF_ = _uE_[2] ? [0, rnode, acc$1] : acc$1, acc$2 = _uF_; else var acc$2 = acc$1; var tree$0 = rnode[5]; @@ -12159,29 +12288,29 @@ if(reduction){ var fringe$0 = match[2]; if(reduction[1] !== cell) - throw caml_maybe_attach_backtrace([0, Assert_failure, _d$_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ea_], 1); fringe[1] = fringe$0; return reduction; } } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ea_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eb_], 1); } - var left = aux(cell[2]), binding = cell[3], _tS_ = fringe[1]; + var left = aux(cell[2]), binding = cell[3], _uC_ = fringe[1]; a: if(binding){ - if(_tS_){ - var rnode = _tS_[1]; + if(_uC_){ + var rnode = _uC_[1]; if(rnode){ - var fringe$1 = _tS_[2]; + var fringe$1 = _uC_[2]; if(binding === rnode[2]){ fringe[1] = fringe$1; - var _tT_ = rnode[3], reduction$0 = _tT_; + var _uD_ = rnode[3], reduction$0 = _uD_; break a; } } } if(! binding[2]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eb_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ec_], 1); var reduction$0 = caml_call2(red[5], cell, binding[1]); } else @@ -12196,7 +12325,7 @@ } var result = aux(tree); if(0 === fringe[1]) return result; - throw caml_maybe_attach_backtrace([0, Assert_failure, _ec_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ed_], 1); } function eval$0(red){ var root = red[2]; @@ -12212,9 +12341,9 @@ var match = red[3]; return match ? match[4] : red[6][1]; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ed_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ee_], 1); } - function opaque(_tR_){return _tR_;} + function opaque(_uB_){return _uB_;} function map_reduce$0(mapper, monoid, source){ var reduction = [0, 0, source, 0, not_origin, mapper, monoid], @@ -12223,53 +12352,53 @@ (function(self){ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ - var _tQ_ = match[4]; - match[4] = [0, opaque(self), _tQ_]; + var _uA_ = match[4]; + match[4] = [0, opaque(self), _uA_]; return reduction; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ef_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eg_], 1); }, function(self, reduction){ var match = reduction[2]; if(typeof match !== "number" && 1 === match[0]){ var - _tK_ = match[4], - _tL_ = opaque(self), - _tM_ = function(_tP_, _tO_){return _tP_ !== _tO_ ? 1 : 0;}; - match[4] = find_all(function(_tN_){return _tM_(_tL_, _tN_);})(_tK_); + _uu_ = match[4], + _uv_ = opaque(self), + _uw_ = function(_uz_, _uy_){return _uz_ !== _uy_ ? 1 : 0;}; + match[4] = find_all(function(_ux_){return _uw_(_uv_, _ux_);})(_uu_); return 0; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ee_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ef_], 1); }); return func(get_prim(prim$0), eval$0); } function left_most(self){ if(typeof self === "number") return 0; if(0 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eg_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eh_], 1); var x = left_most(self[2]); return x ? x : [0, self]; } function first(param){ if(typeof param !== "number" && 1 === param[0]) return left_most(param[2]); - throw caml_maybe_attach_backtrace([0, Assert_failure, _eh_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ei_], 1); } function next(self){ if(typeof self === "number") return 0; if(0 !== self[0]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ek_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _el_], 1); var x = left_most(self[4]); if(x) return x; function walk_root(self, parent){ var self$0 = self, parent$0 = parent; for(;;){ if(typeof parent$0 === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _ei_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ej_], 1); if(0 !== parent$0[0]) return 0; if(parent$0[2] === self$0) return [0, parent$0]; if(parent$0[4] !== self$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ej_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ek_], 1); var parent$1 = parent$0[5]; self$0 = parent$0; parent$0 = parent$1; @@ -12277,13 +12406,13 @@ } return walk_root(self, self[5]); } - var empty$0 = 0; + var empty$1 = 0; function element(v){return [0, 0, v];} function maxi(a, b){return a < b ? b : a;} function rank(t){ if(typeof t === "number") return 0; - if(0 === t[0]){if(0 !== t[1]) invalid_arg(_el_); return 0;} - if(0 !== (t[1] & 2)) invalid_arg(_em_); + if(0 === t[0]){if(0 !== t[1]) invalid_arg(_em_); return 0;} + if(0 !== (t[1] & 2)) invalid_arg(_en_); return t[1] >>> 2 | 0; } function concat$1(a, b){ @@ -12291,8 +12420,8 @@ var x = b; else{ if(typeof b !== "number"){ - var _tJ_ = rank(b); - return [1, (maxi(rank(a), _tJ_) + 1 | 0) << 2, a, b]; + var _ut_ = rank(b); + return [1, (maxi(rank(a), _ut_) + 1 | 0) << 2, a, b]; } var x = a; } @@ -12327,11 +12456,11 @@ if(0 === t[0]){ var mark = t[1], - _tF_ = (mark & 3) !== 3 ? 1 : 0, - _tG_ = _tF_ ? 0 !== (mark & 3) ? 1 : 0 : _tF_; - if(_tG_){ + _up_ = (mark & 3) !== 3 ? 1 : 0, + _uq_ = _up_ ? 0 !== (mark & 3) ? 1 : 0 : _up_; + if(_uq_){ if(0 !== (mark & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _en_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eo_], 1); new_marked(stats); new_blocked(stats); t[1] = mark | 3; @@ -12340,11 +12469,11 @@ } var mark$0 = t[1], - _tH_ = (mark$0 & 3) !== 3 ? 1 : 0, - _tI_ = _tH_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _tH_; - if(! _tI_) return _tI_; + _ur_ = (mark$0 & 3) !== 3 ? 1 : 0, + _us_ = _ur_ ? 0 !== (mark$0 & 3) ? 1 : 0 : _ur_; + if(! _us_) return _us_; if(0 !== (mark$0 & mask)) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eo_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ep_], 1); new_marked(stats); new_blocked(stats); t[1] = mark$0 | 3; @@ -12363,9 +12492,9 @@ else{t[1] = -1; new_blocked(stats); new_shared(stats);} } var - _tB_ = -1 !== mark ? 1 : 0, - _tC_ = _tB_ ? (mark & 3) === 3 ? 1 : 0 : _tB_; - return _tC_ ? (t[1] = -1, new_shared(stats)) : _tC_; + _ul_ = -1 !== mark ? 1 : 0, + _um_ = _ul_ ? (mark & 3) === 3 ? 1 : 0 : _ul_; + return _um_ ? (t[1] = -1, new_shared(stats)) : _um_; } var mark$0 = t[1]; if(0 === (mark$0 & mask)){ @@ -12383,19 +12512,19 @@ } } var - _tD_ = -1 !== mark$0 ? 1 : 0, - _tE_ = _tD_ ? (mark$0 & 3) === 3 ? 1 : 0 : _tD_; - return _tE_ ? (t[1] = -1, new_shared(stats)) : _tE_; + _un_ = -1 !== mark$0 ? 1 : 0, + _uo_ = _un_ ? (mark$0 & 3) === 3 ? 1 : 0 : _un_; + return _uo_ ? (t[1] = -1, new_shared(stats)) : _uo_; } function dequeue(stats, q, mask){ var t = take(q); if(typeof t !== "number" && 1 === t[0]){ - var _tA_ = (t[1] & 3) === mask ? 1 : 0; - return _tA_ + var _uk_ = (t[1] & 3) === mask ? 1 : 0; + return _uk_ ? (enqueue(stats, q, mask, t[2]), enqueue(stats, q, mask, t[3])) - : _tA_; + : _uk_; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ep_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eq_], 1); } function traverse1(stats, q, mask){ for(;;){if(is_empty(q)) return; dequeue(stats, q, mask);} @@ -12424,8 +12553,8 @@ function restore(param){ if(typeof param === "number") return; if(0 === param[0]){param[1] = 0; return;} - var _tz_ = rank(param[3]); - param[1] = (maxi(rank(param[2]), _tz_) + 1 | 0) << 2; + var _uj_ = rank(param[3]); + param[1] = (maxi(rank(param[2]), _uj_) + 1 | 0) << 2; return; } function next_shared_index(st){ @@ -12442,12 +12571,12 @@ if(typeof t !== "number" && 0 === t[0]){ var mark = t[1], - _tv_ = is_not_shared(mark), - _tw_ = _tv_ ? is_both(mark) : _tv_; - if(_tw_) t[1] = unmark(mark); + _uf_ = is_not_shared(mark), + _ug_ = _uf_ ? is_both(mark) : _uf_; + if(_ug_) t[1] = unmark(mark); return; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _eq_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _er_], 1); } var t$0 = param$0[1]; if(typeof t$0 !== "number" && 1 === t$0[0]){ @@ -12455,15 +12584,15 @@ r = param$0[4], l = param$0[3], mark$0 = t$0[1], - _tx_ = is_not_shared(mark$0), - _ty_ = _tx_ ? is_both(mark$0) : _tx_; - if(! _ty_) return _ty_; + _uh_ = is_not_shared(mark$0), + _ui_ = _uh_ ? is_both(mark$0) : _uh_; + if(! _ui_) return _ui_; t$0[1] = unmark(mark$0); unblock(l); param$0 = r; continue; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _er_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _es_], 1); } } function unmark_old(st, t){ @@ -12485,26 +12614,26 @@ if(is_new(mark)){ var index$0 = get_index(mark), - _tr_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; - caml_check_bound(st[5], index$0)[1 + index$0] = _tr_; + _ub_ = [0, t$0, caml_check_bound(st[5], index$0)[1 + index$0]]; + caml_check_bound(st[5], index$0)[1 + index$0] = _ub_; return; } - var _ts_ = is_both(mark); - if(_ts_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eu_], 1); - return _ts_; + var _uc_ = is_both(mark); + if(_uc_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ev_], 1); + return _uc_; } var dropped_leaf = st[2]; if(-1 < dropped_leaf){ caml_check_bound(st[1], dropped_leaf)[1 + dropped_leaf] = b; st[2] = dropped_leaf + 1 | 0; if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _et_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eu_], 1); } a[1] = unmark(mark); return; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _es_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _et_], 1); } var a$0 = t$0[1]; if(typeof a$0 !== "number" && 1 === a$0[0]){ @@ -12521,34 +12650,34 @@ if(is_new(mark$0)){ var index$2 = mark$0 >>> 2 | 0, - _tt_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; - caml_check_bound(st[5], index$2)[1 + index$2] = _tt_; + _ud_ = [0, t$0, caml_check_bound(st[5], index$2)[1 + index$2]]; + caml_check_bound(st[5], index$2)[1 + index$2] = _ud_; return; } - var _tu_ = is_both(mark$0); - if(_tu_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ex_], 1); - return _tu_; + var _ue_ = is_both(mark$0); + if(_ue_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _ey_], 1); + return _ue_; } if(-1 < st[3]){ var dropped_join = st[3] - 1 | 0; caml_check_bound(st[1], dropped_join)[1 + dropped_join] = b$0; st[3] = dropped_join; if(st[2] > st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ew_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ex_], 1); } a$0[1] = unmark(mark$0); unmark_old(st, l); t$0 = r; continue; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _ev_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _ew_], 1); } } function prepare_shared(st){ - var _to_ = st[6] - 1 | 0, _tn_ = 0; - if(_to_ >= 0){ - var i = _tn_; + var _t__ = st[6] - 1 | 0, _t9_ = 0; + if(_t__ >= 0){ + var i = _t9_; for(;;){ var match = caml_check_bound(st[4], i)[1 + i]; if(typeof match !== "number") @@ -12558,11 +12687,11 @@ match[1] = set_both(match[1]); var xs = caml_check_bound(st[5], i)[1 + i]; if(! xs) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ey_], 1); - if(xs[2]){var _tp_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _tp_;} - var _tq_ = i + 1 | 0; - if(_to_ === i) break; - i = _tq_; + throw caml_maybe_attach_backtrace([0, Assert_failure, _ez_], 1); + if(xs[2]){var _t$_ = rev(xs); caml_check_bound(st[5], i)[1 + i] = _t$_;} + var _ua_ = i + 1 | 0; + if(_t__ === i) break; + i = _ua_; } } return; @@ -12587,7 +12716,7 @@ index$1 = mark$0 >>> 2 | 0, match$0 = caml_check_bound(st[5], index$1)[1 + index$1]; if(! match$0) - throw caml_maybe_attach_backtrace([0, Assert_failure, _ez_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eA_], 1); var xs$0 = match$0[2], x$0 = match$0[1]; caml_check_bound(st[5], index$1)[1 + index$1] = xs$0; if(0 === xs$0) t[1] = 0; @@ -12613,43 +12742,43 @@ } else{var a$0 = xold[1]; if(a$0 === tnew) return [0, no_dropped, xold];} if(typeof xold === "number") - var empty = empty$0; + var empty = empty$1; else var a = xold[1], empty = a; var traversal = unsafe_traverse(empty, tnew), sold = old_stats(traversal), snew = new_stats(traversal), - _ta_ = blocked(snew), - _tb_ = blocked(sold) + _ta_ | 0, - nb_dropped = marked(sold) - _tb_ | 0, - _tc_ = shared(snew), - nb_shared = shared(sold) + _tc_ | 0, - _td_ = 0, - _te_ = caml_make_vect(nb_shared, 0), - _tf_ = caml_make_vect(nb_shared, 0), + _tW_ = blocked(snew), + _tX_ = blocked(sold) + _tW_ | 0, + nb_dropped = marked(sold) - _tX_ | 0, + _tY_ = shared(snew), + nb_shared = shared(sold) + _tY_ | 0, + _tZ_ = 0, + _t0_ = caml_make_vect(nb_shared, 0), + _t1_ = caml_make_vect(nb_shared, 0), nb_dropped$0 = get_dropped ? nb_dropped : -1, - _tg_ = get_dropped ? 0 : -1, - _th_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], - st = [0, _th_, _tg_, nb_dropped$0, _tf_, _te_, _td_]; + _t2_ = get_dropped ? 0 : -1, + _t3_ = get_dropped ? caml_make_vect(nb_dropped, 0) : [0], + st = [0, _t3_, _t2_, nb_dropped$0, _t1_, _t0_, _tZ_]; unmark_old(st, xold); if(st[2] !== st[3]) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eA_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eB_], 1); prepare_shared(st); - var result = unmark_new(st, tnew), _ti_ = st[6] - 1 | 0; - if(_ti_ >= 0){ - var i$0 = _ti_; + var result = unmark_new(st, tnew), _t4_ = st[6] - 1 | 0; + if(_t4_ >= 0){ + var i$0 = _t4_; for(;;){ restore(caml_check_bound(st[4], i$0)[1 + i$0]); - var _tm_ = i$0 - 1 | 0; + var _t8_ = i$0 - 1 | 0; if(0 === i$0) break; - i$0 = _tm_; + i$0 = _t8_; } } if(! get_dropped) return [0, no_dropped, result]; - var xleaf = [0, 0], xjoin = [0, 0], _tk_ = st[6] - 1 | 0, _tj_ = 0; - if(_tk_ >= 0){ - var i = _tj_; + var xleaf = [0, 0], xjoin = [0, 0], _t6_ = st[6] - 1 | 0, _t5_ = 0; + if(_t6_ >= 0){ + var i = _t5_; for(;;){ iter$0 (function(param){ @@ -12669,9 +12798,9 @@ return 0; }, caml_check_bound(st[5], i)[1 + i]); - var _tl_ = i + 1 | 0; - if(_tk_ === i) break; - i = _tl_; + var _t7_ = i + 1 | 0; + if(_t6_ === i) break; + i = _t7_; } } return [0, [0, st[2], st[1], xleaf[1], xjoin[1]], result]; @@ -12686,16 +12815,16 @@ if(0 === param[0]){ var t = param[1]; if(typeof t !== "number" && 0 === t[0]){ - var _s__ = param[2]; - if(_s__){var b = _s__[1]; break b;} + var _tU_ = param[2]; + if(_tU_){var b = _tU_[1]; break b;} var result = caml_call1(map_reduce[1], t[2]); param[2] = [0, result]; return result; } break a; } - var _s$_ = param[2]; - if(! _s$_){ + var _tV_ = param[2]; + if(! _tV_){ var l = aux(param[3]), r = aux(param[4]), @@ -12703,11 +12832,11 @@ param[2] = [0, result$0]; return result$0; } - var b = _s$_[1]; + var b = _tV_[1]; } return b; } - throw caml_maybe_attach_backtrace([0, Assert_failure, _eB_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eC_], 1); } return [0, aux(other)]; } @@ -12740,15 +12869,15 @@ var bound$0 = dropped[2].length - 1, start = dropped[1]; else var bound$0 = dropped[2].length - 1, start = 0; - var _s8_ = bound$0 - 1 | 0; - if(_s8_ >= start){ + var _tS_ = bound$0 - 1 | 0; + if(_tS_ >= start){ var i = start; for(;;){ var match = caml_check_bound(dropped[2], i)[1 + i]; if(match){var x = match[1]; acc$0[1] = caml_call2(f, x, acc$0[1]);} - var _s9_ = i + 1 | 0; - if(_s8_ === i) break; - i = _s9_; + var _tT_ = i + 1 | 0; + if(_tS_ === i) break; + i = _tT_; } } if(858694086 > kind) @@ -12763,10 +12892,10 @@ } function pure_map_reduce(map, reduce, param){ if(typeof param === "number") - throw caml_maybe_attach_backtrace([0, Assert_failure, _eC_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _eD_], 1); if(0 === param[0]) return caml_call1(map, param[2]); - var _s7_ = pure_map_reduce(map, reduce, param[3]); - return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _s7_); + var _tR_ = pure_map_reduce(map, reduce, param[3]); + return caml_call2(reduce, pure_map_reduce(map, reduce, param[2]), _tR_); } function fold_monoid(map, param, seq){ var reduce$0 = param[2], zero = param[1], match = is_pure(seq); @@ -12788,7 +12917,7 @@ return x; }); } - var monoid = [0, empty$0, concat$1]; + var monoid = [0, empty$1, concat$1]; function transform_list(ls, f){return map_reduce(f, monoid, ls);} function of_list$1(ls){return transform_list(ls, element);} function to_list$1(x){ @@ -12814,7 +12943,7 @@ function filter_map$0(f, seq){ function select(x){ var match = caml_call1(f, x); - if(! match) return empty$0; + if(! match) return empty$1; var y = match[1]; return element(y); } @@ -12822,13 +12951,13 @@ } function bind$2(seq, f){return join(fold_monoid(f, lwd_monoid, seq));} function lift(seq){ - return bind$2(seq, function(_s6_){return func(_s6_, element);}); + return bind$2(seq, function(_tQ_){return func(_tQ_, element);}); } function handler(opts, type, func){return [0, opts, type, func];} function is_pure_element(param){ - var _s5_ = param[1]; - if(82 === _s5_){var x = param[2]; return is_some(is_pure(x));} - if(83 > _s5_) return 1; + var _tP_ = param[1]; + if(82 === _tP_){var x = param[2]; return is_some(is_pure(x));} + if(83 > _tP_) return 1; var x$0 = param[2]; return is_some(is_pure(x$0)); } @@ -12837,12 +12966,12 @@ return flatten (map$1 (function(param){ - var _s4_ = param[1]; - if(82 === _s4_){ + var _tO_ = param[1]; + if(82 === _tO_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _s4_){ + if(83 <= _tO_){ var x$0 = param[2]; return to_list$1(extract_pure_element(x$0)); } @@ -12852,7 +12981,7 @@ xs)); } function prepare_col(col){ - if(! col) return _eD_; + if(! col) return _eE_; var match = partition(is_pure_element, col), impure = match[2], @@ -12860,27 +12989,27 @@ return [0, extract_pure_elements(pure), impure]; } function consume_children(col){ - if(! col) return _eE_; - var _s0_ = col[1], _s1_ = _s0_[1]; - if(82 === _s1_){ - if(! col[2]){var x = _s0_[2]; return [0, 0, [0, func(x, element)]];} + if(! col) return _eF_; + var _tK_ = col[1], _tL_ = _tK_[1]; + if(82 === _tL_){ + if(! col[2]){var x = _tK_[2]; return [0, 0, [0, func(x, element)]];} } else - if(83 <= _s1_){ - if(! col[2]){var x$0 = _s0_[2]; return [0, 0, [0, x$0]];} + if(83 <= _tL_){ + if(! col[2]){var x$0 = _tK_[2]; return [0, 0, [0, x$0]];} } - else if(! col[2]){var x$1 = _s0_[2]; return [0, [0, x$1, 0], 0];} + else if(! col[2]){var x$1 = _tK_[2]; return [0, [0, x$1, 0], 0];} return for_all(is_pure_element, col) ? [0, flatten (map$1 (function(param){ - var _s2_ = param[1]; - if(82 === _s2_){ + var _tM_ = param[1]; + if(82 === _tM_){ var x = param[2]; return [0, extract_pure_element(x), 0]; } - if(83 <= _s2_){ + if(83 <= _tM_){ var x$0 = param[2]; return to_list$1(extract_pure_element(x$0)); } @@ -12894,9 +13023,9 @@ [0, map_reduce (function(param){ - var _s3_ = param[1]; - if(82 === _s3_){var x = param[2]; return func(x, element);} - if(83 <= _s3_){var x$0 = param[2]; return x$0;} + var _tN_ = param[1]; + if(82 === _tN_){var x = param[2]; return func(x, element);} + if(83 <= _tN_){var x$0 = param[2]; return x$0;} var x$1 = param[2]; return pure(element(x$1)); }, @@ -12954,11 +13083,11 @@ else call(acc, jv_before, [0, node]); else{ - var _sW_ = node.nextSibling !== acc ? 1 : 0; - if(_sW_){ + var _tG_ = node.nextSibling !== acc ? 1 : 0; + if(_tG_){ if(preserve_focus){ - var _sX_ = contains_focus(node); - if(_sX_) + var _tH_ = contains_focus(node); + if(_tH_) var shift_siblings = function(param){ @@ -12969,17 +13098,17 @@ call(node, jv_before, [0, sibling]); } }, - _sY_ = shift_siblings(0); + _tI_ = shift_siblings(0); else - var _sY_ = _sX_; + var _tI_ = _tH_; } else - var _sY_ = preserve_focus; - var _sZ_ = 1 - _sY_; + var _tI_ = preserve_focus; + var _tJ_ = 1 - _tI_; } else - var _sZ_ = _sW_; - if(_sZ_) + var _tJ_ = _tG_; + if(_tJ_) if(is_null(acc)) call(self, jv_append, [0, node]); else @@ -12993,21 +13122,21 @@ if(0 !== child[0]) return 0; var node = child[1], - _sU_ = is_some$0(node[cst_lwd_to_remove]), - _sV_ = - _sU_ + _tE_ = is_some$0(node[cst_lwd_to_remove]), + _tF_ = + _tE_ ? (delete node[cst_lwd_to_remove], call(node, jv_remove, [0]), 0) - : _sU_; - return _sV_; + : _tE_; + return _tF_; } fold_dropped(3850876, remove_child, dropped, 0); return self; }); } - var pure_unit = pure(0), dummy_kv_at = [0, empty, empty]; + var pure_unit = pure(0), dummy_kv_at = [0, empty$0, empty$0]; function attach_attribs(el, attribs){ function set_kv(param){ var v = param[2], k = param[1]; @@ -13028,13 +13157,13 @@ } return map_reduce (function(param){ - var _sS_ = param[1]; - if(82 === _sS_){ + var _tC_ = param[1]; + if(82 === _tC_){ var at = param[2]; return func(at, set_lwd_at(0)); } - if(83 > _sS_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eF_], 1); + if(83 > _tC_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _eG_], 1); var ats = param[2]; function set_at(at){ var kv = to_pair(at); @@ -13044,7 +13173,7 @@ var reducer = [0, - make$4(set_at, function(param, _sT_){return dummy_kv_at;})]; + make$4(set_at, function(param, _tD_){return dummy_kv_at;})]; function update(ats){ var match = update_and_get_dropped(reducer[1], ats), @@ -13061,7 +13190,7 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _sR_){return pure_unit;}], + [0, pure_unit, function(param, _tB_){return pure_unit;}], attribs); } function listen$0(el, param){ @@ -13071,8 +13200,8 @@ function attach_events(el, events){ return map_reduce (function(param){ - var _sP_ = param[1]; - if(82 === _sP_){ + var _tz_ = param[1]; + if(82 === _tz_){ var at = param[2], cached = [0, 0]; return func (at, @@ -13083,14 +13212,14 @@ return 0; }); } - if(83 > _sP_) - throw caml_maybe_attach_backtrace([0, Assert_failure, _eG_], 1); + if(83 > _tz_) + throw caml_maybe_attach_backtrace([0, Assert_failure, _eH_], 1); var ats = param[2], reducer = [0, make$4 - (function(_sQ_){return listen$0(el, _sQ_);}, + (function(_tA_){return listen$0(el, _tA_);}, function(x, y){return x;})]; function update(ats){ var @@ -13105,12 +13234,12 @@ } return func(ats, update); }, - [0, pure_unit, function(param, _sO_){return pure_unit;}], + [0, pure_unit, function(param, _ty_){return pure_unit;}], events); } - function v$4(d, opt, _sM_, tag, children){ + function v$4(d, opt, _tw_, tag, children){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_sM_) var sth$0 = _sM_[1], ev = sth$0; else var ev = 0; + if(_tw_) var sth$0 = _tw_[1], ev = sth$0; else var ev = 0; var match = prepare_col(at), impure_at = match[2], @@ -13126,11 +13255,11 @@ if(impure_children) var children$1 = impure_children[1], - _sN_ = update_children(el, children$1), + _tx_ = update_children(el, children$1), result = map2 (attach_attribs(el, impure_at), - _sN_, + _tx_, function(param, el){return el;}); else var @@ -13155,88 +13284,203 @@ } function cons$1(name, d, at, ev, cs){return v$4(d, at, ev, name, cs);} function void_cons(name, d, at, ev, param){return v$4(d, at, ev, name, 0);} - function button$0(_sI_, _sJ_, _sK_, _sL_){ - return cons$1(button, _sI_, _sJ_, _sK_, _sL_); + function button$0(_ts_, _tt_, _tu_, _tv_){ + return cons$1(button, _ts_, _tt_, _tu_, _tv_); } - function div$1(_sE_, _sF_, _sG_, _sH_){ - return cons$1(div, _sE_, _sF_, _sG_, _sH_); + function div$1(_to_, _tp_, _tq_, _tr_){ + return cons$1(div, _to_, _tp_, _tq_, _tr_); } - function form$0(_sA_, _sB_, _sC_, _sD_){ - return cons$1(form, _sA_, _sB_, _sC_, _sD_); + function form$0(_tk_, _tl_, _tm_, _tn_){ + return cons$1(form, _tk_, _tl_, _tm_, _tn_); } - function img$0(_sw_, _sx_, _sy_, _sz_){ - return void_cons(img, _sw_, _sx_, _sy_, _sz_); + function img$0(_tg_, _th_, _ti_, _tj_){ + return void_cons(img, _tg_, _th_, _ti_, _tj_); } - function input$1(_ss_, _st_, _su_, _sv_){ - return void_cons(input$0, _ss_, _st_, _su_, _sv_); + function input$1(_tc_, _td_, _te_, _tf_){ + return void_cons(input$0, _tc_, _td_, _te_, _tf_); } - function label$0(_so_, _sp_, _sq_, _sr_){ - return cons$1(label, _so_, _sp_, _sq_, _sr_); + function label$0(_s__, _s$_, _ta_, _tb_){ + return cons$1(label, _s__, _s$_, _ta_, _tb_); } - function option$0(_sk_, _sl_, _sm_, _sn_){ - return cons$1(option, _sk_, _sl_, _sm_, _sn_); + function option$0(_s6_, _s7_, _s8_, _s9_){ + return cons$1(option, _s6_, _s7_, _s8_, _s9_); } - function select$0(_sg_, _sh_, _si_, _sj_){ - return cons$1(select, _sg_, _sh_, _si_, _sj_); + function select$0(_s2_, _s3_, _s4_, _s5_){ + return cons$1(select, _s2_, _s3_, _s4_, _s5_); } - function span$1(_sc_, _sd_, _se_, _sf_){ - return cons$1(span, _sc_, _sd_, _se_, _sf_); + function span$1(_sY_, _sZ_, _s0_, _s1_){ + return cons$1(span, _sY_, _sZ_, _s0_, _s1_); } - function symbol$3(_sb_, _sa_){return _sb_ === _sa_ ? 1 : 0;} - function symbol$4(_r$_, _r__){return _r$_ !== _r__ ? 1 : 0;} - function symbol$5(_r9_, _r8_){return _r9_ < _r8_ ? 1 : 0;} - function symbol$6(_r7_, _r6_){return _r6_ < _r7_ ? 1 : 0;} - function symbol$7(_r5_, _r4_){return _r4_ <= _r5_ ? 1 : 0;} - function symbol$8(_r3_, _r2_){return _r2_ < _r3_ ? 1 : 0;} + function symbol$3(_sX_, _sW_){return _sX_ === _sW_ ? 1 : 0;} + function symbol$4(_sV_, _sU_){return _sV_ !== _sU_ ? 1 : 0;} + function symbol$5(_sT_, _sS_){return _sT_ < _sS_ ? 1 : 0;} + function symbol$6(_sR_, _sQ_){return _sQ_ < _sR_ ? 1 : 0;} + function symbol$7(_sP_, _sO_){return _sO_ <= _sP_ ? 1 : 0;} + function symbol$8(_sN_, _sM_){return _sM_ < _sN_ ? 1 : 0;} function shuffle(rand_int, a, i, j){ - var _rZ_ = j - 1 | 0, _r0_ = i + 1 | 0; - if(_rZ_ >= _r0_){ - var k = _rZ_; + var _sJ_ = j - 1 | 0, _sK_ = i + 1 | 0; + if(_sJ_ >= _sK_){ + var k = _sJ_; for(;;){ var l = caml_call1(rand_int, k + 1 | 0), tmp = caml_check_bound(a, l)[1 + l]; a[1 + l] = caml_check_bound(a, k)[1 + k]; a[1 + k] = tmp; - var _r1_ = k - 1 | 0; - if(_r0_ === k) break; - k = _r1_; + var _sL_ = k - 1 | 0; + if(_sK_ === k) break; + k = _sL_; } } return; } function shuffle$0(a){return shuffle(int$1, a, 0, a.length - 1);} function to_string$2(opt, item_to_string, a){ - if(opt) var sth = opt[1], sep = sth; else var sep = _eH_; - return function(_rX_){return concat(sep, _rX_);} - (function(_rY_){return map$1(item_to_string, _rY_);}(to_list(a))); + if(opt) var sth = opt[1], sep = sth; else var sep = _eI_; + return function(_sH_){return concat(sep, _sH_);} + (function(_sI_){return map$1(item_to_string, _sI_);}(to_list(a))); } - function poly(_rW_, _rV_){return caml_equal(_rW_, _rV_);} + function poly(_sG_, _sF_){return caml_equal(_sG_, _sF_);} function is_nan(x){return 4 === caml_classify_float(x) ? 1 : 0;} function of_string_opt(a){ - try{var _rT_ = [0, caml_float_of_string(a)]; return _rT_;} - catch(_rU_){ - var _rS_ = caml_wrap_exception(_rU_); - if(_rS_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_rS_, 0); + try{var _sD_ = [0, caml_float_of_string(a)]; return _sD_;} + catch(_sE_){ + var _sC_ = caml_wrap_exception(_sE_); + if(_sC_[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_sC_, 0); + } + } + function int_of_color(param){ + return 82908052 <= param + ? 749039939 + <= param + ? 756711075 <= param ? 2 : 6 + : 737308346 <= param ? 4 : 3 + : -588596599 + <= param + ? 4100401 <= param ? 1 : 7 + : -605101559 <= param ? 5 : 0; + } + function code_of_style(param){ + if(typeof param === "number") return 737455525 <= param ? 1 : 0; + if(15681 <= param[1]){var c = param[2]; return 30 + int_of_color(c) | 0;} + var c$0 = param[2]; + return 40 + int_of_color(c$0) | 0; + } + function string_of_style(a){ + var _sB_ = code_of_style(a); + return caml_call1(sprintf(_eJ_), _sB_); + } + string_of_style(-101336657); + var No_such_style = [248, _eK_, caml_fresh_oo_id(0)]; + function style_of_tag(s){ + var match = trim$0(s), switch$0 = caml_string_compare(match, "blue"); + if(0 <= switch$0){ + if(0 >= switch$0) return _eT_; + if(match === "bold") return _eS_; + if(match === "cyan") return _eR_; + if(match === "green") return _eQ_; + if(match === "magenta") return _eP_; + if(match === "red") return _eO_; + if(match === "reset") return _eN_; + if(match === "white") return _eM_; + if(match === "yellow") return _eL_; } + else{ + if(match === "Black") return _e2_; + if(match === "Blue") return _e1_; + if(match === "Cyan") return _e0_; + if(match === "Green") return _eZ_; + if(match === "Magenta") return _eY_; + if(match === "Red") return _eX_; + if(match === "White") return _eW_; + if(match === "Yellow") return _eV_; + if(match === "black") return _eU_; + } + throw caml_maybe_attach_backtrace(No_such_style, 1); + } + function mark_open_style(st, style){push(style, st); return _e4_;} + function mark_close_style(st){ + try{pop(st); top(st);} + catch(_sA_){ + var _sz_ = caml_wrap_exception(_sA_); + if(_sz_ !== Empty) throw caml_maybe_attach_backtrace(_sz_, 0); + } + return _e5_; + } + var Style = [248, _e6_, caml_fresh_oo_id(0)], _e3_ = 0; + function mark_open_stag(st, or_else, tag){ + if(tag[1] === Style){ + var style = tag[2]; + return mark_open_style(st, style); + } + if(tag[1] !== String_tag) return caml_call1(or_else, tag); + var s = tag[2]; + try{ + var style$0 = style_of_tag(s), _sx_ = mark_open_style(st, style$0); + return _sx_; + } + catch(_sy_){ + var _sw_ = caml_wrap_exception(_sy_); + if(_sw_ === No_such_style) return caml_call1(or_else, tag); + throw caml_maybe_attach_backtrace(_sw_, 0); + } + } + function mark_close_stag(st, or_else, tag){ + if(tag[1] === Style) return mark_close_style(st); + if(tag[1] !== String_tag) return caml_call1(or_else, tag); + var s = tag[2]; + try{style_of_tag(s);} + catch(_sv_){ + var _su_ = caml_wrap_exception(_sv_); + if(_su_ === No_such_style) return caml_call1(or_else, tag); + throw caml_maybe_attach_backtrace(_su_, 0); + } + return mark_close_style(st); + } + function set_color_tag_handling(ppf){ + var st = create(0); + pp_set_mark_tags(ppf, 1); + var + funs = pp_get_formatter_stag_function(ppf, 0), + _sq_ = funs[2], + _sr_ = funs[1], + funs$0 = + [0, + function(_st_){return mark_open_stag(st, _sr_, _st_);}, + function(_ss_){return mark_close_stag(st, _sq_, _ss_);}, + funs[3], + funs[4]]; + return pp_set_formatter_stag_function(ppf, funs$0); } + function sprintf$0(c, format){ + var + buf = create$1(64), + fmt = formatter_of_buffer(buf), + _sp_ = c ? _e3_ : c; + if(_sp_) set_color_tag_handling(fmt); + return kfprintf$0 + (function(fmt$0){pp_print_flush(fmt, 0); return contents(buf);}, + fmt, + format); + } + function sprintf$1(fmt){return sprintf$0(1, fmt);} function compare$1(a, b){return compare(a, b);} function of_string$0(s){ - try{var _rQ_ = [0, caml_int_of_string(s)]; return _rQ_;} - catch(_rR_){ - var _rP_ = caml_wrap_exception(_rR_); - if(_rP_[1] === Failure) return 0; - throw caml_maybe_attach_backtrace(_rP_, 0); + try{var _sn_ = [0, caml_int_of_string(s)]; return _sn_;} + catch(_so_){ + var _sm_ = caml_wrap_exception(_so_); + if(_sm_[1] === Failure) return 0; + throw caml_maybe_attach_backtrace(_sm_, 0); } } - function of_float(_rO_){return _rO_ | 0;} + function of_float(_sl_){return _sl_ | 0;} function get$6(tbl, x){ - try{var _rM_ = [0, find(tbl, x)]; return _rM_;} - catch(_rN_){ - var _rL_ = caml_wrap_exception(_rN_); - if(_rL_ === Not_found) return 0; - throw caml_maybe_attach_backtrace(_rL_, 0); + try{var _sj_ = [0, find(tbl, x)]; return _sj_;} + catch(_sk_){ + var _si_ = caml_wrap_exception(_sk_); + if(_si_ === Not_found) return 0; + throw caml_maybe_attach_backtrace(_si_, 0); } } function symbol$9(f, l){ @@ -13306,12 +13550,13 @@ function to_list$2(o){if(! o) return 0; var x = o[1]; return [0, x, 0];} function symbol$11(x, f){return symbol$10(f, x);} make_self_init(0); + function return$2(x){return [0, x];} function symbol$12(f, e){ if(0 === e[0]){var x = e[1]; return [0, caml_call1(f, x)];} var s = e[1]; return [1, s]; } - var Get_error = [248, _eI_, caml_fresh_oo_id(0)]; + var Get_error = [248, _e7_, caml_fresh_oo_id(0)]; function get_exn(param){ if(0 !== param[0]) throw caml_maybe_attach_backtrace(Get_error, 1); var x = param[1]; @@ -13389,16 +13634,16 @@ , elements]; } - function _eJ_(_rJ_){ - var _rK_ = Make$1(_rJ_); + function _e8_(_sg_){ + var _sh_ = Make$1(_sg_); return [0, - _rK_[4], + _sh_[4], , , , , , - _rK_[10], + _sh_[10], , , , @@ -13420,7 +13665,7 @@ , , , - _rK_[40], + _sh_[40], , , , @@ -13440,7 +13685,7 @@ , , , - _rK_[51]]; + _sh_[51]]; } function suffix(suf, s){ var len = caml_ml_string_length(suf); @@ -13470,8 +13715,8 @@ : 0; } function Make$2(K, V){return;} - function _eK_(_rI_, _rH_){Make$2(_rI_, _rH_); return;} - var Empty$0 = [248, _eL_, caml_fresh_oo_id(0)]; + function _e9_(_sf_, _se_){Make$2(_sf_, _se_); return;} + var Empty$1 = [248, _e__, caml_fresh_oo_id(0)]; function single(x){return [0, [0, x]];} function deep(n, hd, middle, tl){return [1, n, hd, middle, tl];} function is_empty$1(param){ @@ -13489,7 +13734,7 @@ var z = match[2], y$0 = match[1]; return [0, [2, x, y$0, z]]; default: var z$0 = match[3], z$1 = match[2], y$1 = match[1]; - return deep(4, [1, x, y$1], empty$2, [1, z$1, z$0]); + return deep(4, [1, x, y$1], empty$3, [1, z$1, z$0]); } } var match$0 = q[2], n = q[1]; @@ -13501,20 +13746,20 @@ return deep(n + 1 | 0, [2, x, y$3, z$2], middle$0, tl$0); default: var - _rE_ = q[3], + _sb_ = q[3], z$3 = match$0[3], z$4 = match$0[2], y$4 = match$0[1], - _rF_ = caml_obj_tag(_rE_), + _sc_ = caml_obj_tag(_sb_), q$0 = - 250 === _rF_ - ? _rE_[1] - : 246 === _rF_ ? force_lazy_block(_rE_) : _rE_, + 250 === _sc_ + ? _sb_[1] + : 246 === _sc_ ? force_lazy_block(_sb_) : _sb_, tail = q[4]; return deep (n + 1 | 0, [1, x, y$4], - [246, function(_rG_){return cons$2([0, z$4, z$3], q$0);}], + [246, function(_sd_){return cons$2([0, z$4, z$3], q$0);}], tail); } var tl = q[4], middle = q[3], y$2 = match$0[1]; @@ -13524,10 +13769,10 @@ if(0 === q[0]){ var match = q[1]; if(typeof match === "number") - throw caml_maybe_attach_backtrace(Empty$0, 1); + throw caml_maybe_attach_backtrace(Empty$1, 1); switch(match[0]){ case 0: - var x = match[1]; return [0, empty$1, x]; + var x = match[1]; return [0, empty$2, x]; case 1: var y = match[2], x$0 = match[1]; return [0, single(x$0), y]; default: @@ -13539,11 +13784,11 @@ middle = q[3], hd = q[2], n = q[1], - _rC_ = caml_obj_tag(middle), + _r$_ = caml_obj_tag(middle), q$0 = - 250 === _rC_ + 250 === _r$_ ? middle[1] - : 246 === _rC_ ? force_lazy_block(middle) : middle, + : 246 === _r$_ ? force_lazy_block(middle) : middle, match$0 = q[4]; if(typeof match$0 !== "number" && 0 !== match$0[0]){ var match$2 = q[4]; @@ -13557,19 +13802,19 @@ var x$2 = match$0[1]; if(is_empty$1(q$0)) return [0, [0, hd], x$2]; var - _rD_ = take_back_exn(q$0), - match$1 = _rD_[2], + _sa_ = take_back_exn(q$0), + match$1 = _sa_[2], z$0 = match$1[2], y$1 = match$1[1], - q$1 = _rD_[1]; + q$1 = _sa_[1]; return [0, deep(n - 1 | 0, hd, from_val(q$1), [1, y$1, z$0]), x$2]; } function take_back(q){ - try{var _rA_ = [0, take_back_exn(q)]; return _rA_;} - catch(_rB_){ - var _rz_ = caml_wrap_exception(_rB_); - if(_rz_ === Empty$0) return 0; - throw caml_maybe_attach_backtrace(_rz_, 0); + try{var _r9_ = [0, take_back_exn(q)]; return _r9_;} + catch(_r__){ + var _r8_ = caml_wrap_exception(_r__); + if(_r8_ === Empty$1) return 0; + throw caml_maybe_attach_backtrace(_r8_, 0); } } function size_digit(param){ @@ -13582,7 +13827,7 @@ var n = param[1]; return n; } - var Lex_error = [248, _eM_, caml_fresh_oo_id(0)]; + var Lex_error = [248, _e$_, caml_fresh_oo_id(0)]; function lex_error(err){ throw caml_maybe_attach_backtrace([0, Lex_error, err], 1); } @@ -13594,11 +13839,11 @@ return [0, start[2], cnum, enum$0]; } function string2num(s){ - try{var _rx_ = [3, caml_int_of_string(s)]; return _rx_;} - catch(_ry_){ - var _rw_ = caml_wrap_exception(_ry_); - if(_rw_[1] === Failure) return [2, s]; - throw caml_maybe_attach_backtrace(_rw_, 0); + try{var _r6_ = [3, caml_int_of_string(s)]; return _r6_;} + catch(_r7_){ + var _r5_ = caml_wrap_exception(_r7_); + if(_r5_[1] === Failure) return [2, s]; + throw caml_maybe_attach_backtrace(_r5_, 0); } } function update_pos(lexbuf){ @@ -13614,7 +13859,7 @@ else if(71 > c) return (c - 65 | 0) + 10 | 0; } else if(9 >= c - 48 >>> 0) return c - 48 | 0; - return lex_error(symbol_concat(_eO_, symbol_concat(make$1(1, c), _eN_))); + return lex_error(symbol_concat(_fb_, symbol_concat(make$1(1, c), _fa_))); } function utf8_of_code(buf, idx, u){ var i = [0, idx]; @@ -13670,16 +13915,16 @@ if(c) var c$0 = c[1], - cs = symbol_concat(_eQ_, symbol_concat(make$1(1, c$0), _eP_)); + cs = symbol_concat(_fd_, symbol_concat(make$1(1, c$0), _fc_)); else - var cs = _eT_; + var cs = _fg_; return lex_error (symbol_concat (msg, symbol_concat - (_eS_, + (_ff_, symbol_concat - (offs, symbol_concat(cs, symbol_concat(_eR_, s)))))); + (offs, symbol_concat(cs, symbol_concat(_fe_, s)))))); } function unescape_string(s){ var @@ -13689,76 +13934,76 @@ u1 = [0, 0], u2 = [0, 0], state = [0, 748194550], - _rn_ = l - 1 | 0, - _rm_ = 0; - if(_rn_ >= 0){ - var i = _rm_; + _rW_ = l - 1 | 0, + _rV_ = 0; + if(_rW_ >= 0){ + var i = _rV_; for(;;){ - var _ro_ = state[1]; + var _rX_ = state[1]; a: - if(308570827 <= _ro_) - if(308570829 <= _ro_) - if(748194550 <= _ro_) - if(945120947 <= _ro_) + if(308570827 <= _rX_) + if(308570829 <= _rX_) + if(748194550 <= _rX_) + if(945120947 <= _rX_) if(117 === caml_string_get(s, i)) state[1] = 308570827; else - escaping_error(_eV_, s, [0, caml_string_get(s, i)], i); + escaping_error(_fi_, s, [0, caml_string_get(s, i)], i); else{ var c = caml_string_get(s, i); if(92 === c) state[1] = 258914209; else{caml_bytes_unsafe_set(s$0, j[1], c); j[1] = j[1] + 1 | 0;} } - else if(308570830 <= _ro_){ + else if(308570830 <= _rX_){ state[1] = 748194550; - var _rq_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _rq_; + var _rZ_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _rZ_; if(56320 <= u2[1] && 57343 >= u2[1]){ j[1] = utf8_of_surrogate_pair(s$0, j[1], u1[1], u2[1]); break a; } - escaping_error(_eW_, s, 0, i); + escaping_error(_fj_, s, 0, i); } else{ - var _rr_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _rr_; + var _r0_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _r0_; state[1] = 308570830; } - else if(308570828 <= _ro_){ - var _rs_ = int_of_hexchar(caml_string_get(s, i)); - u2[1] = u2[1] << 4 | _rs_; + else if(308570828 <= _rX_){ + var _r1_ = int_of_hexchar(caml_string_get(s, i)); + u2[1] = u2[1] << 4 | _r1_; state[1] = 308570829; } else{ u2[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 308570828; } - else if(297481261 <= _ro_) - if(297481263 <= _ro_) - if(308569555 <= _ro_) + else if(297481261 <= _rX_) + if(297481263 <= _rX_) + if(308569555 <= _rX_) if(92 === caml_string_get(s, i)) state[1] = 945120947; else - escaping_error(_eX_, s, [0, caml_string_get(s, i)], i); + escaping_error(_fk_, s, [0, caml_string_get(s, i)], i); else{ - var _rt_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _rt_; + var _r2_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _r2_; if(55296 <= u1[1] && 56319 >= u1[1]){state[1] = 308569555; break a;} j[1] = utf8_of_code(s$0, j[1], u1[1]); state[1] = 748194550; } - else if(297481262 <= _ro_){ - var _ru_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _ru_; + else if(297481262 <= _rX_){ + var _r3_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _r3_; state[1] = 297481263; } else{ - var _rv_ = int_of_hexchar(caml_string_get(s, i)); - u1[1] = u1[1] << 4 | _rv_; + var _r4_ = int_of_hexchar(caml_string_get(s, i)); + u1[1] = u1[1] << 4 | _r4_; state[1] = 297481262; } - else if(297481260 <= _ro_){ + else if(297481260 <= _rX_){ u1[1] = int_of_hexchar(caml_string_get(s, i)); state[1] = 297481261; } @@ -13818,15 +14063,15 @@ j[1] = j[1] + 1 | 0; break b; } - escaping_error(_eY_, s, [0, caml_string_get(s, i)], i); + escaping_error(_fl_, s, [0, caml_string_get(s, i)], i); } } - var _rp_ = i + 1 | 0; - if(_rn_ === i) break; - i = _rp_; + var _rY_ = i + 1 | 0; + if(_rW_ === i) break; + i = _rY_; } } - if(748194550 !== state[1]) escaping_error(_eU_, s, 0, l); + if(748194550 !== state[1]) escaping_error(_fh_, s, 0, l); return j[1] !== l ? unsafe_to_string(sub(s$0, 0, j[1])) : s; } function engine(tbl, state, buf){ @@ -13835,11 +14080,11 @@ } function Make$3(Compliance){ function read$0(counter, lexbuf){ - var _rl_ = 0; + var _rU_ = 0; if(counter >= 50) - return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _rl_]); + return caml_trampoline_return(ocaml_lex_read_rec, [0, lexbuf, _rU_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_rec(counter$0, lexbuf, _rl_); + return ocaml_lex_read_rec(counter$0, lexbuf, _rU_); } function read(lexbuf){return caml_trampoline(read$0(0, lexbuf));} function ocaml_lex_read_rec(counter, lexbuf, ocaml_lex_state){ @@ -13850,9 +14095,9 @@ if(26 >= ocaml_lex_state$1 >>> 0) switch(ocaml_lex_state$1){ case 0: - return _eZ_; + return _fm_; case 1: - return _e0_; + return _fn_; case 2: return 2; case 3: @@ -13867,22 +14112,22 @@ return caml_call1(Compliance[5], 13) ? 13 : lex_error - (symbol_concat(_e2_, symbol_concat(lexeme(lexbuf), _e1_))); + (symbol_concat(_fp_, symbol_concat(lexeme(lexbuf), _fo_))); case 8: return caml_call1(Compliance[5], 14) ? 14 : lex_error - (symbol_concat(_e4_, symbol_concat(lexeme(lexbuf), _e3_))); + (symbol_concat(_fr_, symbol_concat(lexeme(lexbuf), _fq_))); case 9: return caml_call1(Compliance[6], 11) ? 11 : lex_error - (symbol_concat(_e6_, symbol_concat(lexeme(lexbuf), _e5_))); + (symbol_concat(_ft_, symbol_concat(lexeme(lexbuf), _fs_))); case 10: return caml_call1(Compliance[6], 12) ? 12 : lex_error - (symbol_concat(_e8_, symbol_concat(lexeme(lexbuf), _e7_))); + (symbol_concat(_fv_, symbol_concat(lexeme(lexbuf), _fu_))); case 11: return 7; case 12: @@ -13906,10 +14151,10 @@ } return tok; case 18: - var _rk_ = [4, caml_float_of_string(lexeme(lexbuf))]; - return caml_call1(Compliance[2], _rk_); + var _rT_ = [4, caml_float_of_string(lexeme(lexbuf))]; + return caml_call1(Compliance[2], _rT_); case 19: - return _e9_; + return _fw_; case 20: var s = sub_lexeme(lexbuf, lexbuf[5] + 1 | 0, lexbuf[6] - 1 | 0); return [0, unescape_string(s)]; @@ -13943,19 +14188,19 @@ return read$0(counter$3, lexbuf); default: return lex_error - (symbol_concat(_e$_, symbol_concat(lexeme(lexbuf), _e__))); + (symbol_concat(_fy_, symbol_concat(lexeme(lexbuf), _fx_))); } caml_call1(lexbuf[1], lexbuf); ocaml_lex_state$0 = ocaml_lex_state$1; } } function read_comment$0(counter, lexbuf){ - var _rj_ = 88; + var _rS_ = 88; if(counter >= 50) return caml_trampoline_return - (ocaml_lex_read_comment_rec, [0, lexbuf, _rj_]); + (ocaml_lex_read_comment_rec, [0, lexbuf, _rS_]); var counter$0 = counter + 1 | 0; - return ocaml_lex_read_comment_rec(counter$0, lexbuf, _rj_); + return ocaml_lex_read_comment_rec(counter$0, lexbuf, _rS_); } function read_comment(lexbuf){ return caml_trampoline(read_comment$0(0, lexbuf)); @@ -13976,7 +14221,7 @@ var counter$0 = counter + 1 | 0; return read_comment$0(counter$0, lexbuf); case 2: - return lex_error(_fa_); + return lex_error(_fz_); default: if(counter >= 50) return caml_trampoline_return(read_comment$0, [0, lexbuf]); @@ -13989,7 +14234,7 @@ } return [0, read]; } - var Json_error_info = [248, _fb_, caml_fresh_oo_id(0)]; + var Json_error_info = [248, _fA_, caml_fresh_oo_id(0)]; function create_from_lexbuf(lexbuf, emsg){ var match = error_pos(lexbuf), @@ -14005,81 +14250,81 @@ var is_int = (f | 0) == f ? 1 : 0; if(is_int && Math.abs(f) <= max_json_int){ var int_value = f | 0; - return symbol_concat(string_of_int(int_value), _fc_); + return symbol_concat(string_of_int(int_value), _fB_); } var s = caml_format_float("%.16g", f), s$0 = caml_float_of_string(s) == f ? s : caml_format_float("%.17g", f); if(! contains(s$0, 46) && ! contains(s$0, 101)) - return symbol_concat(s$0, _fd_); + return symbol_concat(s$0, _fC_); return s$0; } function token_error(tok){ if(typeof tok === "number") switch(tok){ case 0: - var err = _fe_; break; + var err = _fD_; break; case 1: - var err = _ff_; break; + var err = _fE_; break; case 2: - var err = _fg_; break; + var err = _fF_; break; case 3: - var err = _fh_; break; + var err = _fG_; break; case 4: - var err = _fi_; break; + var err = _fH_; break; case 5: - var err = _fj_; break; + var err = _fI_; break; case 6: - var err = _fk_; break; + var err = _fJ_; break; case 7: - var err = _fl_; break; + var err = _fK_; break; case 8: - var err = _fm_; break; + var err = _fL_; break; case 9: - var err = _fn_; break; + var err = _fM_; break; case 10: - var err = _fo_; break; + var err = _fN_; break; case 11: - var err = _fp_; break; + var err = _fO_; break; case 12: - var err = _fq_; break; + var err = _fP_; break; case 13: - var err = _fr_; break; - default: var err = _fs_; + var err = _fQ_; break; + default: var err = _fR_; } else switch(tok[0]){ case 0: - var s = tok[1], err = symbol_concat(_fu_, symbol_concat(s, _ft_)); + var s = tok[1], err = symbol_concat(_fT_, symbol_concat(s, _fS_)); break; case 1: var s$0 = tok[1], err = s$0; break; case 2: - var s$1 = tok[1], err = symbol_concat(_fw_, symbol_concat(s$1, _fv_)); + var s$1 = tok[1], err = symbol_concat(_fV_, symbol_concat(s$1, _fU_)); break; case 3: var i = tok[1], - err = symbol_concat(_fy_, symbol_concat(string_of_int(i), _fx_)); + err = symbol_concat(_fX_, symbol_concat(string_of_int(i), _fW_)); break; case 4: var f = tok[1], - err = symbol_concat(_fA_, symbol_concat(string_of_float(f), _fz_)); + err = symbol_concat(_fZ_, symbol_concat(string_of_float(f), _fY_)); break; case 5: - var s$2 = tok[1], err = symbol_concat(_fC_, symbol_concat(s$2, _fB_)); + var s$2 = tok[1], err = symbol_concat(_f1_, symbol_concat(s$2, _f0_)); break; default: var b = tok[1], - _ri_ = b ? _fE_ : _fG_, - err = symbol_concat(_fF_, symbol_concat(_ri_, _fD_)); + _rR_ = b ? _f3_ : _f5_, + err = symbol_concat(_f4_, symbol_concat(_rR_, _f2_)); } return [0, 148000204, err]; } function Make$4(Compliance){ - var Parse_error = [248, _fH_, caml_fresh_oo_id(0)]; + var Parse_error = [248, _f6_, caml_fresh_oo_id(0)]; function json_value(reader){ function token_value(tok){ if(typeof tok === "number") @@ -14130,8 +14375,8 @@ if(typeof tok$0 === "number"){ if(7 === tok$0) return array_values([0, v, acc]); if(10 === tok$0){ - var _rh_ = rev([0, v, acc]); - return caml_call1(Compliance[16], _rh_); + var _rQ_ = rev([0, v, acc]); + return caml_call1(Compliance[16], _rQ_); } } throw caml_maybe_attach_backtrace @@ -14144,8 +14389,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(10 === tok){ - var _rg_ = rev([0, v, acc$0]); - return caml_call1(Compliance[16], _rg_); + var _rP_ = rev([0, v, acc$0]); + return caml_call1(Compliance[16], _rP_); } } throw caml_maybe_attach_backtrace @@ -14162,8 +14407,8 @@ var v = colon_value(tok, 0), tok$0 = caml_call1(reader, 0); if(typeof tok$0 === "number"){ if(1 === tok$0){ - var _rf_ = rev([0, v, acc]); - return caml_call1(Compliance[15], _rf_); + var _rO_ = rev([0, v, acc]); + return caml_call1(Compliance[15], _rO_); } if(7 === tok$0) return object_values([0, v, acc]); } @@ -14176,8 +14421,8 @@ var v = key_colon_value(0), tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(1 === tok){ - var _re_ = rev([0, v, acc$0]); - return caml_call1(Compliance[15], _re_); + var _rN_ = rev([0, v, acc$0]); + return caml_call1(Compliance[15], _rN_); } if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} } @@ -14218,7 +14463,7 @@ ([0, Parse_error, token_error(tok$0)], 1); } if(14 <= tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _fI_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _f7_], 1); } throw caml_maybe_attach_backtrace([0, Parse_error, token_error(tok)], 1); } @@ -14229,8 +14474,8 @@ if(typeof tok === "number"){ if(7 === tok){var acc$1 = [0, v, acc$0]; acc$0 = acc$1; continue;} if(14 <= tok){ - var _rd_ = rev([0, v, acc$0]); - return caml_call1(Compliance[17], _rd_); + var _rM_ = rev([0, v, acc$0]); + return caml_call1(Compliance[17], _rM_); } } throw caml_maybe_attach_backtrace @@ -14241,7 +14486,7 @@ var tok = caml_call1(reader, 0); if(typeof tok === "number"){ if(12 === tok) - throw caml_maybe_attach_backtrace([0, Parse_error, _fJ_], 1); + throw caml_maybe_attach_backtrace([0, Parse_error, _f8_], 1); } else if(0 === tok[0]){ var k = tok[1], tok$0 = caml_call1(reader, 0); @@ -14275,7 +14520,7 @@ var exn = caml_wrap_exception(exn$0); if(exn[1] === Parse_error){ var match = exn[2]; - if(typeof match === "number") return _fK_; + if(typeof match === "number") return _f9_; var err = match[2]; return [1, err]; } @@ -14288,22 +14533,22 @@ return [0, Compliance, decode]; } function nibble_to_hex(i){ - var _rc_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_rc_); + var _rL_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_rL_); } function add_hex_byte(add_char, i){ caml_call1(add_char, nibble_to_hex((i >>> 4 | 0) & 15)); return caml_call1(add_char, nibble_to_hex(i & 15)); } function escape(add_char, add_string, s){ - var l = caml_ml_string_length(s), _ra_ = l - 1 | 0, _q$_ = 0; - if(_ra_ >= 0){ - var i = _q$_; + var l = caml_ml_string_length(s), _rJ_ = l - 1 | 0, _rI_ = 0; + if(_rJ_ >= 0){ + var i = _rI_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - caml_call1(add_string, _fL_); + caml_call1(add_string, _f__); else{ b: { @@ -14313,17 +14558,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - caml_call1(add_string, _fN_); break; + caml_call1(add_string, _ga_); break; case 1: - caml_call1(add_string, _fO_); break; + caml_call1(add_string, _gb_); break; case 2: - caml_call1(add_string, _fP_); break; + caml_call1(add_string, _gc_); break; case 4: - caml_call1(add_string, _fQ_); break; + caml_call1(add_string, _gd_); break; case 5: - caml_call1(add_string, _fR_); break; + caml_call1(add_string, _ge_); break; case 26: - caml_call1(add_string, _fS_); break; + caml_call1(add_string, _gf_); break; case 24: case 25: break c; @@ -14336,12 +14581,12 @@ caml_call1(add_char, caml_string_get(s, i)); break a; } - caml_call1(add_string, _fM_); + caml_call1(add_string, _f$_); add_hex_byte(add_char, c); } - var _rb_ = i + 1 | 0; - if(_ra_ === i) break; - i = _rb_; + var _rK_ = i + 1 | 0; + if(_rJ_ === i) break; + i = _rK_; } } return; @@ -14349,8 +14594,8 @@ function Make$5(Compliance){ function to_json_string(s){ var buf = create$1(100); - function add_char$0(_q__){return add_char(buf, _q__);} - function add_string$0(_q9_){return add_string(buf, _q9_);} + function add_char$0(_rH_){return add_char(buf, _rH_);} + function add_string$0(_rG_){return add_string(buf, _rG_);} function add_quote_string(s){ add_char$0(34); escape(add_char$0, add_string$0, s); @@ -14361,68 +14606,68 @@ } function pp_list(sep, ppx, out, l){ function pp_sep(out, param){ - return caml_call1(fprintf$0(out)(_fT_), sep); + return caml_call1(fprintf$0(out)(_gg_), sep); } return pp_print_list([0, pp_sep], ppx, out, l); } function format(out, json){ - if(typeof json === "number") return pp_print_string(out, _fU_); - var _q0_ = json[1]; - if(726928360 <= _q0_){ - if(737456202 === _q0_){var b = json[2]; return pp_print_bool(out, b);} - if(928231259 > _q0_){ - if(848054398 <= _q0_){ + if(typeof json === "number") return pp_print_string(out, _gh_); + var _rx_ = json[1]; + if(726928360 <= _rx_){ + if(737456202 === _rx_){var b = json[2]; return pp_print_bool(out, b);} + if(928231259 > _rx_){ + if(848054398 <= _rx_){ var l$0 = json[2]; return l$0 ? caml_call2 - (fprintf$0(out)(_fZ_), - function(_q7_, _q8_){ - return pp_list(_fY_, format, _q7_, _q8_); + (fprintf$0(out)(_gm_), + function(_rE_, _rF_){ + return pp_list(_gl_, format, _rE_, _rF_); }, l$0) - : pp_print_string(out, _f0_); + : pp_print_string(out, _gn_); } var l$1 = json[2]; return 0 === l$1 - ? pp_print_string(out, _f1_) + ? pp_print_string(out, _go_) : caml_call2 - (fprintf$0(out)(_f3_), - function(_q5_, _q6_){ - return pp_list(_f2_, format, _q5_, _q6_); + (fprintf$0(out)(_gq_), + function(_rC_, _rD_){ + return pp_list(_gp_, format, _rC_, _rD_); }, l$1); } - if(963043957 <= _q0_){ + if(963043957 <= _rx_){ var l = json[2]; return l ? caml_call2 - (fprintf$0(out)(_fW_), - function(_q3_, _q4_){ - return pp_list(_fV_, format_field, _q3_, _q4_); + (fprintf$0(out)(_gj_), + function(_rA_, _rB_){ + return pp_list(_gi_, format_field, _rA_, _rB_); }, l) - : pp_print_string(out, _fX_); + : pp_print_string(out, _gk_); } } else{ - if(3654863 === _q0_){ + if(3654863 === _rx_){ var i = json[2]; return pp_print_string(out, string_of_int(i)); } - if(365180284 <= _q0_){ - if(708012133 > _q0_){ + if(365180284 <= _rx_){ + if(708012133 > _rx_){ var f = json[2], s$2 = caml_call1(Compliance[8], f); return pp_print_string(out, s$2); } - var _q1_ = json[2], match = _q1_[2], s$0 = _q1_[1]; + var _ry_ = json[2], match = _ry_[2], s$0 = _ry_[1]; if(match){ var json$0 = match[1], s$1 = to_json_string(s$0); - return caml_call3(fprintf$0(out)(_f4_), s$1, format, json$0); + return caml_call3(fprintf$0(out)(_gr_), s$1, format, json$0); } - var _q2_ = to_json_string(s$0); - return caml_call1(fprintf$0(out)(_f5_), _q2_); + var _rz_ = to_json_string(s$0); + return caml_call1(fprintf$0(out)(_gs_), _rz_); } - if(-752863768 > _q0_){ + if(-752863768 > _rx_){ var s$3 = json[2]; return pp_print_string(out, to_json_string(s$3)); } @@ -14431,18 +14676,18 @@ return pp_print_string(out, s); } function format_field(out, param){ - var json = param[2], name = param[1], _qZ_ = to_json_string(name); - return caml_call3(fprintf$0(out)(_f6_), _qZ_, format, json); + var json = param[2], name = param[1], _rw_ = to_json_string(name); + return caml_call3(fprintf$0(out)(_gt_), _rw_, format, json); } function pretty_print(out, json){ - return caml_call2(fprintf$0(out)(_f7_), format, json); + return caml_call2(fprintf$0(out)(_gu_), format, json); } function pretty_print_to_string(json){ - return caml_call2(asprintf(_f8_), pretty_print, json); + return caml_call2(asprintf(_gv_), pretty_print, json); } function pretty_print_to_channel(oc, json){ var fmt = formatter_of_out_channel(oc); - return caml_call2(fprintf$0(fmt)(_f9_), pretty_print, json); + return caml_call2(fprintf$0(fmt)(_gw_), pretty_print, json); } return [0, , @@ -14453,68 +14698,68 @@ pretty_print_to_string, pretty_print_to_channel]; } - function _f__(_qX_){ - var _qY_ = Make$5(_qX_); - return [0, _qY_[5], _qY_[6], _qY_[7]]; + function _gx_(_ru_){ + var _rv_ = Make$5(_ru_); + return [0, _rv_[5], _rv_[6], _rv_[7]]; } - function error$1(msg, json){ + function error$2(msg, json){ throw caml_maybe_attach_backtrace([0, Failure, msg], 1); } function Strict(M){ function to_assoc(json){ if(typeof json !== "number" && 963043957 === json[1]){var obj = json[2]; return obj;} - return error$1(_f$_, json); + return error$2(_gy_, json); } function to_string(json){ if(typeof json !== "number" && -976970511 === json[1]){var s = json[2]; return s;} - return error$1(_ga_, json); + return error$2(_gz_, json); } return [0, , , , to_assoc, , , to_string]; } function null$1(param){return 870828711;} var M = [0, null$1], - _gb_ = Strict(M), - to_assoc = _gb_[4], - to_string$3 = _gb_[7]; + _gA_ = Strict(M), + to_assoc = _gA_[4], + to_string$3 = _gA_[7]; function token_to_string(tok){ if(typeof tok === "number") switch(tok){ case 0: - return _gc_; + return _gB_; case 1: - return _gd_; + return _gC_; case 2: - return _ge_; + return _gD_; case 3: - return _gf_; + return _gE_; case 4: - return _gg_; + return _gF_; case 5: - return _gh_; + return _gG_; case 6: - return _gi_; + return _gH_; case 7: - return _gj_; + return _gI_; case 8: - return _gk_; + return _gJ_; case 9: - return _gl_; + return _gK_; case 10: - return _gm_; + return _gL_; case 11: - return _gn_; + return _gM_; case 12: - return _go_; + return _gN_; case 13: - return _gp_; - default: return _gq_; + return _gO_; + default: return _gP_; } switch(tok[0]){ case 0: var s = tok[1]; return s; case 1: - var err = tok[1]; return symbol_concat(_gs_, symbol_concat(err, _gr_)); + var err = tok[1]; return symbol_concat(_gR_, symbol_concat(err, _gQ_)); case 2: var s$0 = tok[1]; return s$0; case 3: @@ -14523,7 +14768,7 @@ var f = tok[1]; return string_of_float(f); case 5: var err$0 = tok[1]; return err$0; - default: var b = tok[1]; return b ? _gt_ : _gu_; + default: var b = tok[1]; return b ? _gS_ : _gT_; } } function Make$6(Lexxer, Parser){ @@ -14532,7 +14777,7 @@ var match = caml_call1(Parser[2], reader); if(0 !== match[0]){var s = match[1]; return [1, s];} var match$0 = match[1]; - if(! match$0) return _gw_; + if(! match$0) return _gV_; var res = match$0[1]; try{var tok = reader(0);} catch(exn$0){ @@ -14542,7 +14787,7 @@ return [1, err]; } if(typeof tok === "number" && 6 === tok) return [0, res]; - return [1, symbol_concat(_gv_, token_to_string(tok))]; + return [1, symbol_concat(_gU_, token_to_string(tok))]; } function read_json_error_info(lexbuf){ var res = read_json(lexbuf); @@ -14581,27 +14826,27 @@ var res = match$0[1]; a: if(stream) - var _qT_ = [0, [0, res]]; + var _rq_ = [0, [0, res]]; else{ try{var tok = reader(0);} catch(exn$0){ var exn = caml_wrap_exception(exn$0); if(exn[1] !== Lex_error) throw caml_maybe_attach_backtrace(exn, 0); - var err = exn[2], _qV_ = [1, err], _qT_ = _qV_; + var err = exn[2], _rs_ = [1, err], _rq_ = _rs_; break a; } b: { - if(typeof tok === "number" && 6 === tok){var _qW_ = [0, [0, res]]; break b;} - var _qW_ = [1, symbol_concat(_gx_, token_to_string(tok))]; + if(typeof tok === "number" && 6 === tok){var _rt_ = [0, [0, res]]; break b;} + var _rt_ = [1, symbol_concat(_gW_, token_to_string(tok))]; } - var _qT_ = _qW_; + var _rq_ = _rt_; } - var _qU_ = _qT_; + var _rr_ = _rq_; } else - var _qU_ = stream ? _gy_ : _gz_; - var res$0 = _qU_; + var _rr_ = stream ? _gX_ : _gY_; + var res$0 = _rr_; } else var s$0 = match[1], res$0 = [1, s$0]; @@ -14680,24 +14925,24 @@ } function Make$7(Compliance){ function nibble_to_hex(i){ - var _qS_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_qS_); + var _rp_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_rp_); } function add_hex_byte(oc, i){ _j_(oc, nibble_to_hex((i >>> 4 | 0) & 15)); return _j_(oc, nibble_to_hex(i & 15)); } function escape(oc, s){ - function add_char(_qR_){return _j_(oc, _qR_);} - function add_string(_qQ_){return output_string(oc, _qQ_);} - var l = caml_ml_string_length(s), _qO_ = l - 1 | 0, _qN_ = 0; - if(_qO_ >= 0){ - var i = _qN_; + function add_char(_ro_){return _j_(oc, _ro_);} + function add_string(_rn_){return output_string(oc, _rn_);} + var l = caml_ml_string_length(s), _rl_ = l - 1 | 0, _rk_ = 0; + if(_rl_ >= 0){ + var i = _rk_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string(_gA_); + add_string(_gZ_); else{ b: { @@ -14707,17 +14952,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string(_gC_); break; + add_string(_g1_); break; case 1: - add_string(_gD_); break; + add_string(_g2_); break; case 2: - add_string(_gE_); break; + add_string(_g3_); break; case 4: - add_string(_gF_); break; + add_string(_g4_); break; case 5: - add_string(_gG_); break; + add_string(_g5_); break; case 26: - add_string(_gH_); break; + add_string(_g6_); break; case 24: case 25: break c; @@ -14730,19 +14975,19 @@ add_char(caml_string_get(s, i)); break a; } - add_string(_gB_); + add_string(_g0_); add_hex_byte(oc, c); } - var _qP_ = i + 1 | 0; - if(_qO_ === i) break; - i = _qP_; + var _rm_ = i + 1 | 0; + if(_rl_ === i) break; + i = _rm_; } } return; } function json_to_channel_fmt(oc, json, eol, incr, psep){ - function add_char(_qM_){return _j_(oc, _qM_);} - function add_string(_qL_){return output_string(oc, _qL_);} + function add_char(_rj_){return _j_(oc, _rj_);} + function add_string(_ri_){return output_string(oc, _ri_);} function add_quote_string(s){ add_char(34); escape(oc, s); @@ -14750,13 +14995,13 @@ } function add_int(i){return add_string(string_of_int(i));} function add_float(f){return add_string(caml_call1(Compliance[8], f));} - var psep$0 = symbol_concat(_gI_, psep); + var psep$0 = symbol_concat(_g7_, psep); function fmt(off, value){ - if(typeof value === "number") return add_string(_gJ_); - var _qK_ = value[1]; - if(708012133 <= _qK_){ - if(737456202 > _qK_){ - if(726928360 <= _qK_){ + if(typeof value === "number") return add_string(_g8_); + var _rh_ = value[1]; + if(708012133 <= _rh_){ + if(737456202 > _rh_){ + if(726928360 <= _rh_){ var t = value[2], ldr$1 = make$1(off, 32); add_char(40); add_string(eol); @@ -14773,8 +15018,8 @@ add_string(ldr$2); return add_char(62); } - if(928231259 <= _qK_){ - if(963043957 <= _qK_){ + if(928231259 <= _rh_){ + if(963043957 <= _rh_){ var o = value[2], ldr = make$1(off, 32); add_char(123); add_string(eol); @@ -14786,7 +15031,7 @@ var s = value[2]; return add_string(s); } - if(848054398 <= _qK_){ + if(848054398 <= _rh_){ var l = value[2], ldr$0 = make$1(off, 32); add_char(91); add_string(eol); @@ -14798,13 +15043,13 @@ var b = value[2]; return add_string(string_of_bool(b)); } - if(-752863768 === _qK_){var s$0 = value[2]; return add_string(s$0);} - if(3654863 <= _qK_){ - if(365180284 <= _qK_){var f = value[2]; return add_float(f);} + if(-752863768 === _rh_){var s$0 = value[2]; return add_string(s$0);} + if(3654863 <= _rh_){ + if(365180284 <= _rh_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _qK_){var s$1 = value[2]; return add_string(s$1);} + if(-375152890 <= _rh_){var s$1 = value[2]; return add_string(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } @@ -14812,7 +15057,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol_concat(_gK_, symbol_concat(eol, ldr)); + newsep = symbol_concat(_g9_, symbol_concat(eol, ldr)); return iter$0 (function(v){ add_string(sep[1]); @@ -14831,7 +15076,7 @@ var ldr = make$1(off, 32), sep = [0, ldr], - newsep = symbol_concat(_gL_, symbol_concat(eol, ldr)); + newsep = symbol_concat(_g__, symbol_concat(eol, ldr)); return iter$0 (function(v){ add_string(sep[1]); @@ -14851,11 +15096,11 @@ fmt(0, json); return add_string(eol); } - function json_to_channel(_qD_){ - function _qE_(_qG_, _qH_, _qI_, _qJ_){ - return json_to_channel_fmt(_qD_, _qG_, _qH_, _qI_, _qJ_); + function json_to_channel(_ra_){ + function _rb_(_rd_, _re_, _rf_, _rg_){ + return json_to_channel_fmt(_ra_, _rd_, _re_, _rf_, _rg_); } - return function(_qF_){return _qE_(_qF_, _gN_, 0, _gM_);}; + return function(_rc_){return _rb_(_rc_, _ha_, 0, _g$_);}; } function json_to_file_exn(file, json){ var oc = open_out(file); @@ -14870,24 +15115,24 @@ } function Make$8(Compliance){ function nibble_to_hex(i){ - var _qC_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; - return char_of_int(_qC_); + var _q$_ = 9 < i ? (65 + i | 0) - 10 | 0 : 48 + i | 0; + return char_of_int(_q$_); } function add_hex_byte(buf, i){ add_char(buf, nibble_to_hex((i >>> 4 | 0) & 15)); return add_char(buf, nibble_to_hex(i & 15)); } function escape(buf, s){ - function add_char$0(_qB_){return add_char(buf, _qB_);} - function add_string$0(_qA_){return add_string(buf, _qA_);} - var l = caml_ml_string_length(s), _qy_ = l - 1 | 0, _qx_ = 0; - if(_qy_ >= 0){ - var i = _qx_; + function add_char$0(_q__){return add_char(buf, _q__);} + function add_string$0(_q9_){return add_string(buf, _q9_);} + var l = caml_ml_string_length(s), _q7_ = l - 1 | 0, _q6_ = 0; + if(_q7_ >= 0){ + var i = _q6_; for(;;){ var c = caml_string_get(s, i); a: if(92 === c) - add_string$0(_gO_); + add_string$0(_hb_); else{ b: { @@ -14897,17 +15142,17 @@ if(8 > c) break b; switch(c - 8 | 0){ case 0: - add_string$0(_gQ_); break; + add_string$0(_hd_); break; case 1: - add_string$0(_gR_); break; + add_string$0(_he_); break; case 2: - add_string$0(_gS_); break; + add_string$0(_hf_); break; case 4: - add_string$0(_gT_); break; + add_string$0(_hg_); break; case 5: - add_string$0(_gU_); break; + add_string$0(_hh_); break; case 26: - add_string$0(_gV_); break; + add_string$0(_hi_); break; case 24: case 25: break c; @@ -14920,19 +15165,19 @@ add_char$0(caml_string_get(s, i)); break a; } - add_string$0(_gP_); + add_string$0(_hc_); add_hex_byte(buf, c); } - var _qz_ = i + 1 | 0; - if(_qy_ === i) break; - i = _qz_; + var _q8_ = i + 1 | 0; + if(_q7_ === i) break; + i = _q8_; } } return; } function json_to_buffer(buf, json){ - function add_char$0(_qw_){return add_char(buf, _qw_);} - function add_string$0(_qv_){return add_string(buf, _qv_);} + function add_char$0(_q5_){return add_char(buf, _q5_);} + function add_string$0(_q4_){return add_string(buf, _q4_);} function add_quote_string(s){ add_char$0(34); escape(buf, s); @@ -14941,11 +15186,11 @@ function add_int(i){return add_string$0(string_of_int(i));} function add_float(f){return add_string$0(caml_call1(Compliance[8], f));} function fmt(value){ - if(typeof value === "number") return add_string$0(_gW_); - var _qu_ = value[1]; - if(708012133 <= _qu_){ - if(737456202 > _qu_){ - if(726928360 <= _qu_){ + if(typeof value === "number") return add_string$0(_hj_); + var _q3_ = value[1]; + if(708012133 <= _q3_){ + if(737456202 > _q3_){ + if(726928360 <= _q3_){ var t = value[2]; add_char$0(40); json_list(t); @@ -14956,8 +15201,8 @@ variant(v); return add_char$0(62); } - if(928231259 <= _qu_){ - if(963043957 <= _qu_){ + if(928231259 <= _q3_){ + if(963043957 <= _q3_){ var o = value[2]; add_char$0(123); json_assoc(o); @@ -14966,7 +15211,7 @@ var s = value[2]; return add_string$0(s); } - if(848054398 <= _qu_){ + if(848054398 <= _q3_){ var l = value[2]; add_char$0(91); json_list(l); @@ -14975,22 +15220,22 @@ var b = value[2]; return add_string$0(string_of_bool(b)); } - if(-752863768 === _qu_){var s$0 = value[2]; return add_string$0(s$0);} - if(3654863 <= _qu_){ - if(365180284 <= _qu_){var f = value[2]; return add_float(f);} + if(-752863768 === _q3_){var s$0 = value[2]; return add_string$0(s$0);} + if(3654863 <= _q3_){ + if(365180284 <= _q3_){var f = value[2]; return add_float(f);} var i = value[2]; return add_int(i); } - if(-375152890 <= _qu_){var s$1 = value[2]; return add_string$0(s$1);} + if(-375152890 <= _q3_){var s$1 = value[2]; return add_string$0(s$1);} var s$2 = value[2]; return add_quote_string(s$2); } function json_assoc(o){ - var sep = [0, _gX_]; + var sep = [0, _hk_]; return iter$0 (function(v){ add_string$0(sep[1]); - sep[1] = _gY_; + sep[1] = _hl_; return pair(v); }, o); @@ -15002,11 +15247,11 @@ return fmt(v); } function json_list(l){ - var sep = [0, _gZ_]; + var sep = [0, _hm_]; return iter$0 (function(v){ add_string$0(sep[1]); - sep[1] = _g0_; + sep[1] = _hn_; return fmt(v); }, l); @@ -15028,7 +15273,7 @@ } return [0, , , json_to_string, , , , , , , , json_to_buffer]; } - var Json_error = [248, _g1_, caml_fresh_oo_id(0)]; + var Json_error = [248, _ho_, caml_fresh_oo_id(0)]; function json_error(msg){ throw caml_maybe_attach_backtrace([0, Json_error, msg], 1); } @@ -15036,7 +15281,7 @@ var Lexxer = Make$3(Compliance), Parser = Make$4(Compliance), - include = function(_qt_){return Make$6(Lexxer, _qt_);}(Parser), + include = function(_q2_){return Make$6(Lexxer, _q2_);}(Parser), json_of_string_error_info = include[15], json_of_file_error_info = include[16], json_of_channel_error_info = include[17], @@ -15082,18 +15327,18 @@ function error_to_string(error_info, fname, lnum){ if(lnum) var lnum$0 = lnum[1], lnum$1 = lnum$0; else var lnum$1 = 1; var - _qp_ = error_info[4], - _qq_ = error_info[3], - _qr_ = error_info[2], - _qs_ = (lnum$1 + error_info[1] | 0) - 1 | 0; + _qY_ = error_info[4], + _qZ_ = error_info[3], + _q0_ = error_info[2], + _q1_ = (lnum$1 + error_info[1] | 0) - 1 | 0; if(fname) var name = fname[1], - fname$0 = symbol_concat(_g3_, symbol_concat(name, _g2_)); + fname$0 = symbol_concat(_hq_, symbol_concat(name, _hp_)); else - var fname$0 = _g5_; - var loc = caml_call4(sprintf(_g4_), fname$0, _qs_, _qr_, _qq_); - return symbol_concat(loc, _qp_); + var fname$0 = _hs_; + var loc = caml_call4(sprintf(_hr_), fname$0, _q1_, _q0_, _qZ_); + return symbol_concat(loc, _qY_); } function apply_and_handle_errors(f, a, fname, lnum){ var match = caml_call1(f, a); @@ -15108,13 +15353,13 @@ } function Common_writer(Compliance){ var - _qk_ = Make$8(Compliance), - to_string = _qk_[3], - to_buffer = _qk_[11], - _ql_ = Make$7(Compliance), - to_file = _ql_[9], - to_channel = _ql_[11], - include = _f__(Compliance), + _qT_ = Make$8(Compliance), + to_string = _qT_[3], + to_buffer = _qT_[11], + _qU_ = Make$7(Compliance), + to_file = _qU_[9], + to_channel = _qU_[11], + include = _gx_(Compliance), pretty_print = include[1], pretty_print_to_string = include[2], pretty_print_to_channel = include[3], @@ -15154,14 +15399,14 @@ function to_standard(json){ function map(node){ if(typeof node === "number") return 870828711; - var _qo_ = node[1]; - if(708012133 > _qo_){ - if(-752863768 === _qo_){ + var _qX_ = node[1]; + if(708012133 > _qX_){ + if(-752863768 === _qX_){ var v$1 = node[2]; return [0, -976970511, v$1]; } - if(3654863 <= _qo_) return 365180284 <= _qo_ ? node : node; - if(-375152890 > _qo_) return node; + if(3654863 <= _qX_) return 365180284 <= _qX_ ? node : node; + if(-375152890 > _qX_) return node; var s = node[2]; return 1 < caml_ml_string_length(s) >>> 0 ? [0, @@ -15169,8 +15414,8 @@ sub$0(s, 1, caml_ml_string_length(s) - 2 | 0)] : [0, -976970511, s]; } - if(737456202 > _qo_){ - if(726928360 <= _qo_){ + if(737456202 > _qX_){ + if(726928360 <= _qX_){ var tpl = node[2]; return [0, 848054398, map$1(map, tpl)]; } @@ -15179,12 +15424,12 @@ var v$0 = jopt[1]; return [0, 848054398, [0, [0, -976970511, name], [0, map(v$0), 0]]]; } - if(928231259 > _qo_){ - if(848054398 > _qo_) return node; + if(928231259 > _qX_){ + if(848054398 > _qX_) return node; var l = node[2]; return [0, 848054398, map$1(map, l)]; } - if(963043957 <= _qo_){ + if(963043957 <= _qX_){ var a = node[2]; return [0, 963043957, @@ -15200,26 +15445,26 @@ } return map(json); } - function to_string$0(param, _qm_, opt, json){ + function to_string$0(param, _qV_, opt, json){ if(opt) var sth = opt[1], std = sth; else var std = 0; if(! std) return Internal_writer[3].call(null, json); - var _qn_ = to_standard(json); - return Internal_writer[3].call(null, _qn_); + var _qW_ = to_standard(json); + return Internal_writer[3].call(null, _qW_); } return [0, , , to_string$0]; } function lex_string(s){return unescape_string(s);} function lex_number(token){return token;} function lex_integer(token){return token;} - function lex_largeint(param){return _g6_;} + function lex_largeint(param){return _ht_;} function lex_variant(param){return 0;} function lex_tuple(param){return 0;} - function comment_check(param){return _g7_;} + function comment_check(param){return _hu_;} function number_to_string(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _g8_ : _g9_ - : 4 <= match ? _g__ : string_of_float_json(f); + ? f < 0. ? _hv_ : _hw_ + : 4 <= match ? _hx_ : string_of_float_json(f); } function largeint(s){return [0, 365180284, caml_float_of_string(s)];} function integer(i){return [0, 3654863, i];} @@ -15229,10 +15474,10 @@ function assoc(a){return [0, 963043957, a];} function list(l){return [0, 848054398, l];} function tuple(l){ - throw caml_maybe_attach_backtrace([0, Failure, _g$_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hy_], 1); } function variant(l){ - throw caml_maybe_attach_backtrace([0, Failure, _ha_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hz_], 1); } function number(param){ if(typeof param === "number") @@ -15243,7 +15488,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _hb_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hA_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -15252,16 +15497,16 @@ function object_start(param){return 17732;} function object_end(param){return 17718;} function tuple_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _hc_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hB_], 1); } function tuple_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _hd_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hC_], 1); } function variant_start(param){ - throw caml_maybe_attach_backtrace([0, Failure, _he_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hD_], 1); } function variant_end(param){ - throw caml_maybe_attach_backtrace([0, Failure, _hf_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hE_], 1); } function name$0(s){return [0, 869834347, s];} Common_reader @@ -15342,12 +15587,12 @@ function lex_largeint$0(token){return token;} function lex_variant$0(param){return 1;} function lex_tuple$0(param){return 1;} - function comment_check$0(param){return _hg_;} + function comment_check$0(param){return _hF_;} function number_to_string$0(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _hh_ : _hi_ - : 4 <= match ? _hj_ : string_of_float_json(f); + ? f < 0. ? _hG_ : _hH_ + : 4 <= match ? _hI_ : string_of_float_json(f); } function largeint$0(s){return [0, -752863768, s];} function integer$0(i){return [0, 3654863, i];} @@ -15367,7 +15612,7 @@ ? [0, 365180284, Infinity] : [0, 365180284, -Infinity]; if(928231259 <= param[1]) - throw caml_maybe_attach_backtrace([0, Failure, _hk_], 1); + throw caml_maybe_attach_backtrace([0, Failure, _hJ_], 1); var f = param[2]; return [0, 365180284, f]; } @@ -15458,19 +15703,19 @@ name$1]]), to_string$4 = include[3]; function lex_string$1(s){ - return symbol_concat(_hm_, symbol_concat(s, _hl_)); + return symbol_concat(_hL_, symbol_concat(s, _hK_)); } function lex_number$1(token){return token;} function lex_integer$1(token){return token;} function lex_largeint$1(token){return token;} function lex_variant$1(param){return 1;} function lex_tuple$1(param){return 1;} - function comment_check$1(param){return _hn_;} + function comment_check$1(param){return _hM_;} function number_to_string$1(f){ var match = caml_classify_float(f); return 3 === match - ? f < 0. ? _ho_ : _hp_ - : 4 <= match ? _hq_ : string_of_float_json(f); + ? f < 0. ? _hN_ : _hO_ + : 4 <= match ? _hP_ : string_of_float_json(f); } function largeint$1(s){return [0, -752863768, s];} function integer$1(i){return [0, -752863768, string_of_int(i)];} @@ -15483,7 +15728,7 @@ function variant$1(k, v){return [0, 708012133, [0, k, v]];} function number$1(param){ if(typeof param === "number") - return 3900603 === param ? _hr_ : 874173192 <= param ? _hs_ : _ht_; + return 3900603 === param ? _hQ_ : 874173192 <= param ? _hR_ : _hS_; if(928231259 <= param[1]){var f = param[2]; return [0, 928231259, f];} var f$0 = param[2]; return [0, 928231259, string_of_float(f$0)]; @@ -15579,114 +15824,114 @@ r3 = caml_call1(rand, 0), r4 = caml_call1(rand, 0), u = caml_create_bytes(16), - _oQ_ = 0; - function _oR_(_qj_, _qi_, _qh_){caml_bytes_set(_qj_, _qi_, _qh_); return;} - (function(_qg_){return _oR_(u, _oQ_, _qg_);}(r0 & 255)); - var _oS_ = 1; - function _oT_(_qf_, _qe_, _qd_){caml_bytes_set(_qf_, _qe_, _qd_); return;} - (function(_qc_){return _oT_(u, _oS_, _qc_);}((r0 >>> 8 | 0) & 255)); - var _oU_ = 2; - function _oV_(_qb_, _qa_, _p$_){caml_bytes_set(_qb_, _qa_, _p$_); return;} - (function(_p__){return _oV_(u, _oU_, _p__);}((r0 >>> 16 | 0) & 255)); - var _oW_ = 3; - function _oX_(_p9_, _p8_, _p7_){caml_bytes_set(_p9_, _p8_, _p7_); return;} - (function(_p6_){return _oX_(u, _oW_, _p6_);}(r1 & 255)); - var _oY_ = 4; - function _oZ_(_p5_, _p4_, _p3_){caml_bytes_set(_p5_, _p4_, _p3_); return;} - (function(_p2_){return _oZ_(u, _oY_, _p2_);}((r1 >>> 8 | 0) & 255)); - var _o0_ = 5; - function _o1_(_p1_, _p0_, _pZ_){caml_bytes_set(_p1_, _p0_, _pZ_); return;} - (function(_pY_){return _o1_(u, _o0_, _pY_);}((r1 >>> 16 | 0) & 255)); - var _o2_ = 6; - function _o3_(_pX_, _pW_, _pV_){caml_bytes_set(_pX_, _pW_, _pV_); return;} - (function(_pU_){return _o3_(u, _o2_, _pU_);}(64 | (r1 >>> 24 | 0) & 15)); - var _o4_ = 7; - function _o5_(_pT_, _pS_, _pR_){caml_bytes_set(_pT_, _pS_, _pR_); return;} - (function(_pQ_){return _o5_(u, _o4_, _pQ_);}(r2 & 255)); - var _o6_ = 8; - function _o7_(_pP_, _pO_, _pN_){caml_bytes_set(_pP_, _pO_, _pN_); return;} - (function(_pM_){return _o7_(u, _o6_, _pM_);}(128 | (r2 >>> 24 | 0) & 63)); - var _o8_ = 9; - function _o9_(_pL_, _pK_, _pJ_){caml_bytes_set(_pL_, _pK_, _pJ_); return;} - (function(_pI_){return _o9_(u, _o8_, _pI_);}((r2 >>> 8 | 0) & 255)); - var _o__ = 10; - function _o$_(_pH_, _pG_, _pF_){caml_bytes_set(_pH_, _pG_, _pF_); return;} - (function(_pE_){return _o$_(u, _o__, _pE_);}((r2 >>> 16 | 0) & 255)); - var _pa_ = 11; - function _pb_(_pD_, _pC_, _pB_){caml_bytes_set(_pD_, _pC_, _pB_); return;} - (function(_pA_){return _pb_(u, _pa_, _pA_);}(r3 & 255)); - var _pc_ = 12; - function _pd_(_pz_, _py_, _px_){caml_bytes_set(_pz_, _py_, _px_); return;} - (function(_pw_){return _pd_(u, _pc_, _pw_);}((r3 >>> 8 | 0) & 255)); - var _pe_ = 13; - function _pf_(_pv_, _pu_, _pt_){caml_bytes_set(_pv_, _pu_, _pt_); return;} - (function(_ps_){return _pf_(u, _pe_, _ps_);}((r3 >>> 16 | 0) & 255)); - var _pg_ = 14; - function _ph_(_pr_, _pq_, _pp_){caml_bytes_set(_pr_, _pq_, _pp_); return;} - (function(_po_){return _ph_(u, _pg_, _po_);}(r4 & 255)); - var _pi_ = 15; - function _pj_(_pn_, _pm_, _pl_){caml_bytes_set(_pn_, _pm_, _pl_); return;} - (function(_pk_){return _pj_(u, _pi_, _pk_);}((r4 >>> 8 | 0) & 255)); + _pn_ = 0; + function _po_(_qS_, _qR_, _qQ_){caml_bytes_set(_qS_, _qR_, _qQ_); return;} + (function(_qP_){return _po_(u, _pn_, _qP_);}(r0 & 255)); + var _pp_ = 1; + function _pq_(_qO_, _qN_, _qM_){caml_bytes_set(_qO_, _qN_, _qM_); return;} + (function(_qL_){return _pq_(u, _pp_, _qL_);}((r0 >>> 8 | 0) & 255)); + var _pr_ = 2; + function _ps_(_qK_, _qJ_, _qI_){caml_bytes_set(_qK_, _qJ_, _qI_); return;} + (function(_qH_){return _ps_(u, _pr_, _qH_);}((r0 >>> 16 | 0) & 255)); + var _pt_ = 3; + function _pu_(_qG_, _qF_, _qE_){caml_bytes_set(_qG_, _qF_, _qE_); return;} + (function(_qD_){return _pu_(u, _pt_, _qD_);}(r1 & 255)); + var _pv_ = 4; + function _pw_(_qC_, _qB_, _qA_){caml_bytes_set(_qC_, _qB_, _qA_); return;} + (function(_qz_){return _pw_(u, _pv_, _qz_);}((r1 >>> 8 | 0) & 255)); + var _px_ = 5; + function _py_(_qy_, _qx_, _qw_){caml_bytes_set(_qy_, _qx_, _qw_); return;} + (function(_qv_){return _py_(u, _px_, _qv_);}((r1 >>> 16 | 0) & 255)); + var _pz_ = 6; + function _pA_(_qu_, _qt_, _qs_){caml_bytes_set(_qu_, _qt_, _qs_); return;} + (function(_qr_){return _pA_(u, _pz_, _qr_);}(64 | (r1 >>> 24 | 0) & 15)); + var _pB_ = 7; + function _pC_(_qq_, _qp_, _qo_){caml_bytes_set(_qq_, _qp_, _qo_); return;} + (function(_qn_){return _pC_(u, _pB_, _qn_);}(r2 & 255)); + var _pD_ = 8; + function _pE_(_qm_, _ql_, _qk_){caml_bytes_set(_qm_, _ql_, _qk_); return;} + (function(_qj_){return _pE_(u, _pD_, _qj_);}(128 | (r2 >>> 24 | 0) & 63)); + var _pF_ = 9; + function _pG_(_qi_, _qh_, _qg_){caml_bytes_set(_qi_, _qh_, _qg_); return;} + (function(_qf_){return _pG_(u, _pF_, _qf_);}((r2 >>> 8 | 0) & 255)); + var _pH_ = 10; + function _pI_(_qe_, _qd_, _qc_){caml_bytes_set(_qe_, _qd_, _qc_); return;} + (function(_qb_){return _pI_(u, _pH_, _qb_);}((r2 >>> 16 | 0) & 255)); + var _pJ_ = 11; + function _pK_(_qa_, _p$_, _p__){caml_bytes_set(_qa_, _p$_, _p__); return;} + (function(_p9_){return _pK_(u, _pJ_, _p9_);}(r3 & 255)); + var _pL_ = 12; + function _pM_(_p8_, _p7_, _p6_){caml_bytes_set(_p8_, _p7_, _p6_); return;} + (function(_p5_){return _pM_(u, _pL_, _p5_);}((r3 >>> 8 | 0) & 255)); + var _pN_ = 13; + function _pO_(_p4_, _p3_, _p2_){caml_bytes_set(_p4_, _p3_, _p2_); return;} + (function(_p1_){return _pO_(u, _pN_, _p1_);}((r3 >>> 16 | 0) & 255)); + var _pP_ = 14; + function _pQ_(_p0_, _pZ_, _pY_){caml_bytes_set(_p0_, _pZ_, _pY_); return;} + (function(_pX_){return _pQ_(u, _pP_, _pX_);}(r4 & 255)); + var _pR_ = 15; + function _pS_(_pW_, _pV_, _pU_){caml_bytes_set(_pW_, _pV_, _pU_); return;} + (function(_pT_){return _pS_(u, _pR_, _pT_);}((r4 >>> 8 | 0) & 255)); return unsafe_to_string(u); } function v4_gen(seed){ - function rand$0(_oP_){return rand(seed, _oP_);} + function rand$0(_pm_){return rand(seed, _pm_);} return function(param){return v4_ocaml_random_uuid(rand$0);}; } function to_string$5(opt, u){ if(opt) var sth = opt[1], upper = sth; else var upper = 0; var hbase = upper ? 55 : 87; function hex(hbase, i){return 10 <= i ? hbase + i | 0 : 48 + i | 0;} - var s = of_string(_hu_), i = [0, 0], j = [0, 0]; + var s = of_string(_hT_), i = [0, 0], j = [0, 0]; function byte$0(s, i, c){ - function _oE_(_oO_, _oN_, _oM_){ - caml_bytes_set(_oO_, _oN_, _oM_); + function _pb_(_pl_, _pk_, _pj_){ + caml_bytes_set(_pl_, _pk_, _pj_); return; } - (function(_oL_){return _oE_(s, i, _oL_);}(hex(hbase, c >>> 4 | 0))); - var _oF_ = i + 1 | 0; - function _oG_(_oK_, _oJ_, _oI_){ - caml_bytes_set(_oK_, _oJ_, _oI_); + (function(_pi_){return _pb_(s, i, _pi_);}(hex(hbase, c >>> 4 | 0))); + var _pc_ = i + 1 | 0; + function _pd_(_ph_, _pg_, _pf_){ + caml_bytes_set(_ph_, _pg_, _pf_); return; } - return function(_oH_){return _oG_(s, _oF_, _oH_);}(hex(hbase, c & 15)); + return function(_pe_){return _pd_(s, _pc_, _pe_);}(hex(hbase, c & 15)); } for(;;){ if(4 <= j[1]) break; - var _oD_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _oD_); + var _pa_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _pa_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(6 <= j[1]) break; - var _oC_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _oC_); + var _o$_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _o$_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(8 <= j[1]) break; - var _oB_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _oB_); + var _o__ = caml_string_get(u, j[1]); + byte$0(s, i[1], _o__); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(10 <= j[1]) break; - var _oA_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _oA_); + var _o9_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _o9_); i[1] = i[1] + 2 | 0; j[1]++; } i[1]++; for(;;){ if(16 <= j[1]) return unsafe_to_string(s); - var _oz_ = caml_string_get(u, j[1]); - byte$0(s, i[1], _oz_); + var _o8_ = caml_string_get(u, j[1]); + byte$0(s, i[1], _o8_); i[1] = i[1] + 2 | 0; j[1]++; } @@ -15694,10 +15939,10 @@ function RA_queue(Key){ var Map = _Y_(Key); function size(t){return size$0(t[1]);} - function create(param){return [0, empty$1, Map[1]];} + function create(param){return [0, empty$2, Map[1]];} function add(t, k, x){ - var _oy_ = Map[4].call(null, k, x, t[2]); - return [0, cons$2(k, t[1]), _oy_]; + var _o7_ = Map[4].call(null, k, x, t[2]); + return [0, cons$2(k, t[1]), _o7_]; } function take_opt(t){ var match = take_back(t[1]); @@ -15723,20 +15968,20 @@ var t$0 = t; for(;;){ var - _ov_ = RA_queue$0[6].call(null, t$0[2]), - _ow_ = _ov_[2], - q2 = _ov_[1]; - if(! _ow_){ + _o4_ = RA_queue$0[6].call(null, t$0[2]), + _o5_ = _o4_[2], + q2 = _o4_[1]; + if(! _o5_){ if(counter >= 50) return caml_trampoline_return(evict_q1, [0, on_evict, t$0]); var counter$0 = counter + 1 | 0; return evict_q1(counter$0, on_evict, t$0); } var - _ox_ = _ow_[1], - match = _ox_[2], + _o6_ = _o5_[1], + match = _o6_[2], elt = match[1], - k = _ox_[1], + k = _o6_[1], visited = match[2]; if(! visited[1]){ caml_call1(on_evict, elt); @@ -15755,20 +16000,20 @@ var t$0 = t; for(;;){ var - _os_ = RA_queue$0[6].call(null, t$0[1]), - _ot_ = _os_[2], - q1 = _os_[1]; - if(! _ot_){ + _o1_ = RA_queue$0[6].call(null, t$0[1]), + _o2_ = _o1_[2], + q1 = _o1_[1]; + if(! _o2_){ if(counter >= 50) return caml_trampoline_return(evict_q2$0, [0, on_evict, t$0]); var counter$0 = counter + 1 | 0; return evict_q2$0(counter$0, on_evict, t$0); } var - _ou_ = _ot_[1], - match = _ou_[2], + _o3_ = _o2_[1], + match = _o3_[2], elt = match[1], - k = _ou_[1], + k = _o3_[1], visited = match[2]; if(! visited[1]){ caml_call1(on_evict, elt); @@ -15784,8 +16029,8 @@ var t$0 = t; for(;;){ var - _or_ = RA_queue$0[2].call(null, t$0[2]), - size = RA_queue$0[2].call(null, t$0[1]) + _or_ | 0; + _o0_ = RA_queue$0[2].call(null, t$0[2]), + size = RA_queue$0[2].call(null, t$0[1]) + _o0_ | 0; if(0 < size && t$0[3] < size){ var t$1 = evict_one(on_evict, t$0); t$0 = t$1; @@ -15794,15 +16039,15 @@ return t$0; } } - function insert(t, opt, _oo_, k, x){ + function insert(t, opt, _oX_, k, x){ if(opt) var sth = opt[1], on_insert = sth; else - var on_insert = function(_oq_){return;}; - if(_oo_) - var sth$0 = _oo_[1], on_evict = sth$0; + var on_insert = function(_oZ_){return;}; + if(_oX_) + var sth$0 = _oX_[1], on_evict = sth$0; else - var on_evict = function(_op_){return 0;}; + var on_evict = function(_oY_){return 0;}; var match = RA_queue$0[7].call(null, t[1], k); if(match){var visited = match[1][2]; visited[1] = 1; return [0, t, 0];} var match$0 = RA_queue$0[7].call(null, t[2], k); @@ -15817,21 +16062,21 @@ } return [0, create, insert]; } - var include$0 = _eJ_([0, compare$0]); + var include$0 = _e8_([0, compare$0]); function to_jstr$1(t){return encode(t);} function of_jstr$0(jstr){ var match = decode(jstr); if(0 === match[0]){var v = match[1]; return [0, v];} var err = match[1]; - error$0([0, err, 0]); - return _hv_; + error$1([0, err, 0]); + return _hU_; } function of_jv(jv){return of_jstr$0(jv);} var random_state = get_state(0); function new_uuid_v4(param){return v4_gen(random_state)(0);} function tee(f, x){caml_call1(f, x); return x;} var - empty$3 = include$0[1], + empty$4 = include$0[1], union = include$0[7], of_list$2 = include$0[29], to_list$3 = include$0[49]; @@ -15840,29 +16085,29 @@ (function(c){return [0, 80, class$1(caml_jsstring_of_string(c))];}, to_list$3(t)); } - var empty$4 = [0, empty$3, 0]; + var empty$5 = [0, empty$4, 0]; function to_at$0(id, t){ var - _ol_ = to_at(t[1]), - _om_ = t[2], - at = function(_on_){return rev_append(_om_, _on_);}(_ol_); + _oU_ = to_at(t[1]), + _oV_ = t[2], + at = function(_oW_){return rev_append(_oV_, _oW_);}(_oU_); if(! id) return at; var id$0 = id[1]; return [0, [0, 80, id$1(caml_jsstring_of_string(id$0))], at]; } - function classes(l){var _ok_ = empty$4[2]; return [0, of_list$2(l), _ok_];} - function union$0(param, _oi_){ + function classes(l){var _oT_ = empty$5[2]; return [0, of_list$2(l), _oT_];} + function union$0(param, _oR_){ var - a = _oi_[2], - c = _oi_[1], + a = _oR_[2], + c = _oR_[1], attrs = param[2], classes = param[1], - _oj_ = rev_append(attrs, a); - return [0, union(classes, c), _oj_]; + _oS_ = rev_append(attrs, a); + return [0, union(classes, c), _oS_]; } function add$1(at_name, v, at){ - var _of_ = v[1]; - if(82 === _of_) + var _oO_ = v[1]; + if(82 === _oO_) var v$0 = v[2], a = @@ -15871,18 +16116,18 @@ func (v$0, function(v){ - return function(_og_){return v$1(at_name, _og_);} + return function(_oP_){return v$1(at_name, _oP_);} (caml_jsstring_of_string(v)); })]; - else if(83 <= _of_) - var a = failwith(_hw_); + else if(83 <= _oO_) + var a = failwith(_hV_); else var v$2 = v[2], a = [0, 80, - function(_oh_){return v$1(at_name, _oh_);} + function(_oQ_){return v$1(at_name, _oQ_);} (caml_jsstring_of_string(v$2))]; return [0, a, at]; } @@ -15893,14 +16138,14 @@ return [0, [0, 80, - function(_oe_){return v$1(at_name, _oe_);} + function(_oN_){return v$1(at_name, _oN_);} (caml_jsstring_of_string(v$0))], at]; } function map_col(f, param){ - var _od_ = param[1]; - if(82 === _od_){var v = param[2]; return [0, 82, func(v, f)];} - if(83 <= _od_){var v$0 = param[2]; return [0, 83, map$4(f, v$0)];} + var _oM_ = param[1]; + if(82 === _oM_){var v = param[2]; return [0, 82, func(v, f)];} + if(83 <= _oM_){var v$0 = param[2]; return [0, 83, map$4(f, v$0)];} var v$1 = param[2]; return [0, 80, caml_call1(f, v$1)]; } @@ -15919,31 +16164,31 @@ function v$5(at){return cons$3(at, 0);} function symbol$14(at, t){return cons$3(at, t);} function of_string$1(s){ - var match = chop_suffix(_hx_, s); + var match = chop_suffix(_hW_, s); if(match){ var i = match[1], match$0 = of_string$0(i); if(match$0){var i$0 = match$0[1]; return [0, [0, i$0]];} - var _n9_ = function(i){return [0, i];}; - return function(_oc_){return symbol$10(_n9_, _oc_);}(of_string_opt(i)); + var _oG_ = function(i){return [0, i];}; + return function(_oL_){return symbol$10(_oG_, _oL_);}(of_string_opt(i)); } - var match$1 = chop_suffix(_hy_, s); + var match$1 = chop_suffix(_hX_, s); if(match$1){ - var f = match$1[1], _n__ = function(f){return [1, f];}; - return function(_ob_){return symbol$10(_n__, _ob_);}(of_string_opt(f)); + var f = match$1[1], _oH_ = function(f){return [1, f];}; + return function(_oK_){return symbol$10(_oH_, _oK_);}(of_string_opt(f)); } - var match$2 = chop_suffix(_hz_, s); + var match$2 = chop_suffix(_hY_, s); if(! match$2) return 0; var f$0 = match$2[1]; - function _n$_(f){return [1, f];} - return function(_oa_){return symbol$10(_n$_, _oa_);}(of_string_opt(f$0)); + function _oI_(f){return [1, f];} + return function(_oJ_){return symbol$10(_oI_, _oJ_);}(of_string_opt(f$0)); } function to_string$6(param){ switch(param[0]){ case 0: - var i = param[1]; return caml_call1(sprintf(_hA_), i); + var i = param[1]; return caml_call1(sprintf(_hZ_), i); case 1: - var f = param[1]; return caml_call1(sprintf(_hB_), f); - default: var f$0 = param[1]; return caml_call1(sprintf(_hC_), f$0); + var f = param[1]; return caml_call1(sprintf(_h0_), f); + default: var f$0 = param[1]; return caml_call1(sprintf(_h1_), f$0); } } function to_px(opt){ @@ -15958,7 +16203,7 @@ match = of_string$1(font_size); if(! match) return 16.; var match$0 = match[1]; - if(0 !== match$0[0]) return failwith(_hD_); + if(0 !== match$0[0]) return failwith(_h2_); var i = match$0[1]; return i; } @@ -15977,12 +16222,12 @@ }}; } function map3(f, a, b, c){ - function _n4_(_n7_, _n8_){return map2(c, _n7_, _n8_);} - function _n5_(c, param){ + function _oB_(_oE_, _oF_){return map2(c, _oE_, _oF_);} + function _oC_(c, param){ var b = param[2], a = param[1]; return caml_call3(f, a, b, c); } - return function(_n6_){return _n4_(_n6_, _n5_);} + return function(_oD_){return _oB_(_oD_, _oC_);} (map2(a, b, function(a, b){return [0, a, b];})); } function triple(a, b, c){ @@ -16001,8 +16246,8 @@ func (get$4(active), function(param){return param ? [1, class$1("locked")] : [1, void$0];}), - at$0 = symbol$14(_hE_, symbol$14([0, 82, active_class], at)), - at$1 = class$2(_hF_); + at$0 = symbol$14(_h3_, symbol$14([0, 82, active_class], at)), + at$1 = class$2(_h4_); function on_click(param){return symbol$1(active, 1);} var handler$0 = handler(0, click, on_click), @@ -16012,14 +16257,14 @@ (0, [0, at$1], [0, ev], - [0, [0, 82, button$0(0, 0, 0, [0, [0, 80, txt(0, _hG_)], 0])], 0]), + [0, [0, 82, button$0(0, 0, 0, [0, [0, 80, txt(0, _h5_)], 0])], 0]), on_wheel = handler (0, wheel, function(ev){ - var _n3_ = peek(active); - return _n3_ ? symbol$1(active, 0) : _n3_; + var _oA_ = peek(active); + return _oA_ ? symbol$1(active, 0) : _oA_; }), state = triple(elt, get$4(active), scroll_target), elt$0 = @@ -16027,7 +16272,7 @@ (state, function(param){ var pos = param[3], active = param[2], elt = param[1]; - if(active) iter(function(_n2_){return js_scroll(elt, _n2_);}, pos); + if(active) iter(function(_oz_){return js_scroll(elt, _oz_);}, pos); return elt; }); return div$1 @@ -16053,12 +16298,12 @@ var template = to_string$2 - (_hH_, function(param){var css_size = param[2]; return css_size;}, t); - return caml_call2(sprintf(_hJ_), _hI_, template); + (_h6_, function(param){var css_size = param[2]; return css_size;}, t); + return caml_call2(sprintf(_h8_), _h7_, template); } function style$2(t){ var style = style$1(t[1][1]); - return concat(_hK_, [0, style, 0]); + return concat(_h9_, [0, style, 0]); } function header(t){ var @@ -16068,25 +16313,29 @@ [0, 80, style$0 - (caml_jsstring_of_string(caml_call1(sprintf(_hL_), row_height)))], + (caml_jsstring_of_string(caml_call1(sprintf(_h__), row_height)))], 0], - _nY_ = [0, at], - _nX_ = to_header(t[1][1]); - return function(_nZ_){ - return function(_n0_, _n1_){ - return div$1(_nZ_, _nY_, _n0_, _n1_);}; + _ov_ = [0, at], + _ou_ = to_header(t[1][1]); + return function(_ow_){ + return function(_ox_, _oy_){ + return div$1(_ow_, _ov_, _ox_, _oy_);}; } (0) - (0, _nX_); + (0, _ou_); } - to_px(0)(_hM_); + to_px(0)(_h$_); var Cache = Make$9([0, compare$1]); function make$6(ui_table, opt, scroll_target){ - return function(data_source){ - var row_size = to_string$6(ui_table[2]); - function height_n(n){return caml_call2(sprintf(_hN_), row_size, n);} + return function(param){ + var + render = param[3], + fetch = param[2], + total_items = param[1], + row_size = to_string$6(ui_table[2]); + function height_n(n){return caml_call2(sprintf(_ia_), row_size, n);} var - height$0 = caml_call1(sprintf(_hO_), row_size), + height$0 = caml_call1(sprintf(_ib_), row_size), table = make$3(0), row_index = create$2(0, 2048); function unload(i){ @@ -16106,7 +16355,7 @@ function add(fetch, opt, indexes){ var cache = cache_ref[1]; function load(indexes){ - let$2 + let$1 (caml_call1(fetch, indexes), function(data){ return iter2 @@ -16120,12 +16369,12 @@ if(! data) throw caml_maybe_attach_backtrace(Not_found, 1); var data$0 = data[1], - _nU_ = row_data[2], - _nV_ = - 1 - function(_nW_){return poly(_nU_, _nW_);}([0, data$0]); - return _nV_ + _or_ = row_data[2], + _os_ = + 1 - function(_ot_){return poly(_or_, _ot_);}([0, data$0]); + return _os_ ? symbol$2(row, [0, row_data[1], [0, data$0], row_data[3]]) - : _nV_; + : _os_; }); }); return 0; @@ -16163,8 +16412,8 @@ last_scroll_y[1] = scroll_y$0; var visible_height = height(div), - _nR_ = ui_table[2], - header_height = to_px([0, div])(_nR_), + _oo_ = ui_table[2], + header_height = to_px([0, div])(_oo_), number_of_visible_rows = visible_height / header_height | 0, scroll_y$1 = scroll_y$0 - header_height, first_visible_row = (scroll_y$1 / header_height | 0) + 1 | 0, @@ -16173,9 +16422,9 @@ 19067 === direction ? number_of_visible_rows : number_of_visible_rows / 2 | 0, - _nS_ = 0, + _op_ = 0, first = - function(_nT_){return max(_nS_, _nT_);} + function(_oq_){return max(_op_, _oq_);} (first_visible_row - bleeding | 0), bleeding$0 = 759637122 === direction @@ -16211,27 +16460,18 @@ } } var + last_scroll_y = [0, 0.], populate_on_scroll = - func - (data_source, - function(param){ - var - render = param[3], - fetch = param[2], - total_items = param[1], - last_scroll_y = [0, 0.]; + map2 + (total_items, + fetch, + function(total_items, fetch){ function update(div){ var visible_rows = compute_visible_rows(last_scroll_y, div); return add(fetch, [0, 4 * length(visible_rows) | 0], visible_rows); } - return let$0 - (total_items, - function(total_items){ - if(0 !== total_items[0]) return function(_nQ_){return 0;}; - var total_items$0 = total_items[1]; - prepare(total_items$0, render); - return update; - }); + prepare(total_items, render); + return update; }), scroll_handler = func @@ -16241,27 +16481,23 @@ (0, scroll, function(ev){ - let$0 - (update, - function(update){ - var last_update = [0, 0.], timeout = [0, -1]; - function reset_ticker(div){ - var debouncing_interval = 500, now = now_ms(performance); - if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); - timeout[1] = - set_timeout - (debouncing_interval, - function(param){return caml_call1(update, div);}); - var - _nP_ = symbol$8(now - last_update[1], debouncing_interval); - return _nP_ - ? (last_update[1] = now, caml_call1(update, div)) - : _nP_; - } - function scroll_handler(div){return reset_ticker(div);} - var div = target(ev); - return scroll_handler(div); - }); + var last_update = [0, 0.], timeout = [0, -1]; + function reset_ticker(div){ + var debouncing_interval = 500, now = now_ms(performance); + if(symbol$7(timeout[1], 0)) stop_timer(timeout[1]); + timeout[1] = + set_timeout + (debouncing_interval, + function(param){return caml_call1(update, div);}); + var + _on_ = symbol$8(now - last_update[1], debouncing_interval); + return _on_ + ? (last_update[1] = now, caml_call1(update, div)) + : _on_; + } + function scroll_handler(div){return reset_ticker(div);} + var div = target(ev); + scroll_handler(div); return 0; }); }), @@ -16274,11 +16510,10 @@ set_on_invalidate (root, function(param){ - var _nN_ = quick_sample(root), _nO_ = _nN_[2]; - if(! _nO_) return 0; - var div = _nO_[1][2], update = _nN_[1]; - return await$1 - (update, function(update){return caml_call1(update, div);}); + var _ol_ = quick_sample(root), _om_ = _ol_[2]; + if(! _om_) return 0; + var div = _om_[1][2], update = _ol_[1]; + return caml_call1(update, div); }); quick_sample(root); function make_spacer(n){ @@ -16287,33 +16522,46 @@ style = style$0(caml_jsstring_of_string(height_n(n))); return div$0(0, [0, [0, style, at]], 0); } - function render(param, _nM_){ + function render$0(row, param){ var - render = _nM_[3], - content = _nM_[2], - index = _nM_[1], - at = add$1(class$0, _hP_, 0), + render = param[3], + content = param[2], + index = param[1], + at = add$1(class$0, _ic_, 0), style = [0, 80, style$0(caml_jsstring_of_string(height$0))]; - if(! content) return [0, 1, empty$0, 0]; - var data = content[1]; + if(! content) return [0, 1, empty$1, 0]; + var + data = content[1], + rendered_row = + func + (render, + function(render){ + return of_list$1 + (symbol$9 + (function(elt){return div$1(0, 0, 0, [0, elt, 0]);}, + caml_call2(render, index, data))); + }); return [0, 0, element (div$1 - (0, [0, [0, style, at]], 0, caml_call2(render, index, data))), + (0, + [0, [0, style, at]], + 0, + [0, [0, 83, lift(rendered_row)], 0])), 0]; } var rows = map_reduce$0 - (render, + (render$0, [0, - [0, 0, empty$0, 0], - function(param, _nK_){ + [0, 0, empty$1, 0], + function(param, _oj_){ var - q = _nK_[3], - s = _nK_[2], - p = _nK_[1], + q = _oj_[3], + s = _oj_[2], + p = _oj_[1], m = param[3], s$0 = param[2], n = param[1], @@ -16329,7 +16577,7 @@ var spacer = pure(make_spacer(m + p | 0)), s$1 = - function(_nL_){return concat$1(s$0, _nL_);} + function(_ok_){return concat$1(s$0, _ok_);} (concat$1(element(spacer), s)); else var s$1 = concat$1(s$0, s); @@ -16367,22 +16615,22 @@ ? symbol$1(table_height, [0, [0, height$0, div]]) : 0; }), - at = to_at$0(0, classes(_hQ_)), + at = to_at$0(0, classes(_id_)), grid_style = style$2(ui_table), s = style$0(caml_jsstring_of_string(grid_style)), at$0 = [0, [0, 80, s], at]; - function arg(_nI_, _nJ_){return observe(observer, _nI_, _nJ_);} - function _nD_(eta){return arg(0, eta);} - function _nE_(_nH_){return tee(_nD_, _nH_);} + function arg(_oh_, _oi_){return observe(observer, _oh_, _oi_);} + function _oc_(eta){return arg(0, eta);} + function _od_(_og_){return tee(_oc_, _og_);} var table$0 = - function(_nG_){return func(_nG_, _nE_);} + function(_of_){return func(_of_, _od_);} (div$1 (0, [0, at$0], [0, [0, [0, 82, scroll_handler], 0]], [0, [0, 82, table_header], [0, [0, 83, lift(table_body)], 0]])), - at$1 = v$5(_hR_); + at$1 = v$5(_ie_); if(! scroll_target) return div$1(0, [0, at$1], 0, [0, [0, 82, table$0], 0]); var @@ -16393,8 +16641,8 @@ scroll_target$0, function(parent, i){ var - _nF_ = ui_table[2], - row_height = of_float(to_px([0, parent])(_nF_)); + _oe_ = ui_table[2], + row_height = of_float(to_px([0, parent])(_oe_)); return [0, [0, caml_mul(i, row_height)]]; }); return make$5([0, at$1], scroll_target$1, table$0);}; @@ -16406,19 +16654,19 @@ var keys = create$2(0, 64); function check_key(key){ return mem(keys, key) - ? failwith(caml_call1(sprintf(_hS_), key)) + ? failwith(caml_call1(sprintf(_if_), key)) : add$0(keys, key, 0); } var local_storage = local(window); function store(key, value){ - return function(_nC_){return set_item(local_storage, key, _nC_);} + return function(_ob_){return set_item(local_storage, key, _ob_);} (to_jstr$1(value)); } function fetch$0(key){ var match = get_item(local_storage, key); - function _nA_(encoded_value){return of_jstr$0(encoded_value);} - if(match) var v = match[1], _nB_ = [0, v]; else var _nB_ = _hT_; - return symbol_bind$1(_nB_, _nA_); + function _n$_(encoded_value){return of_jstr$0(encoded_value);} + if(match) var v = match[1], _oa_ = [0, v]; else var _oa_ = _ig_; + return symbol_bind$1(_oa_, _n$_); } function initial_value(key, f){ var match = fetch$0(key); @@ -16469,19 +16717,19 @@ d, opt, ev, - _nx_, + _n8_, value_change_event, pattern$0, type, default_value){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_nx_) var sth$0 = _nx_[1], required = sth$0; else var required = 0; + if(_n8_) var sth$0 = _n8_[1], required = sth$0; else var required = 0; var type$1 = type$0(caml_jsstring_of_string(type)), at$0 = [0, [0, 80, type$1], at], at$1 = - function(_ny_){return add_opt(pattern, pattern$0, _ny_);} - (function(_nz_){return add_bool(required$0, required, _nz_);}(at$0)), + function(_n9_){return add_opt(pattern, pattern$0, _n9_);} + (function(_n__){return add_bool(required$0, required, _n__);}(at$0)), validate$0 = value$3(validate, function(v){return [0, v];}), match = make_handler(value, value_change_event, default_value), value$0 = match[2], @@ -16495,8 +16743,8 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_nv_){return add_opt(value$1, default_value, _nv_);} - (function(_nw_){return add_opt(placeholder, placeholder$0, _nw_);}(at)); + function(_n6_){return add_opt(value$1, default_value, _n6_);} + (function(_n7_){return add_opt(placeholder, placeholder$0, _n7_);}(at)); return make_input (value$0, validate, @@ -16506,7 +16754,7 @@ required, keyup, pattern, - _hU_, + _ih_, default_value); } function password_input @@ -16514,7 +16762,7 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_nu_){return add_opt(placeholder, placeholder$0, _nu_);}(at); + function(_n5_){return add_opt(placeholder, placeholder$0, _n5_);}(at); return make_input (value$0, validate, @@ -16524,14 +16772,14 @@ required, keyup, pattern, - _hV_, + _ii_, 0); } function submit$0(d, opt, ev, text){ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = add$1(value$1, text, at); return make_input - (function(_nt_){return 0;}, + (function(_n4_){return 0;}, 0, d, [0, at$0], @@ -16539,7 +16787,7 @@ 0, change, 0, - _hW_, + _ij_, 0); } function field$0(field, setter){ @@ -16548,16 +16796,16 @@ function create$8(d, at, ev, Form){ return function(on_submit){ var - _nm_ = + _nX_ = [0, - [0, empty$0, function(_ns_){return _ns_;}], - function(param, _nr_){ - var f = _nr_[2], elts = _nr_[1], f$0 = param[2], elts$0 = param[1]; + [0, empty$1, function(_n3_){return _n3_;}], + function(param, _n2_){ + var f = _n2_[2], elts = _n2_[1], f$0 = param[2], elts$0 = param[1]; return [0, concat$1(elts$0, elts), function(t){return caml_call1(f, caml_call1(f$0, t));}]; }]; - function _nn_(param){ + function _nY_(param){ var mapper = param[2], field = param[1]; function value(param){ var match = peek(field[2]); @@ -16568,13 +16816,13 @@ return [0, element(field[1]), function(t){ - var _nq_ = value(0); - return caml_call1(caml_call1(mapper, t), _nq_); + var _n1_ = value(0); + return caml_call1(caml_call1(mapper, t), _n1_); }]; } var fields = - function(_np_){return fold_monoid(_nn_, _nm_, _np_);}(lift(Form[2])), + function(_n0_){return fold_monoid(_nY_, _nX_, _n0_);}(lift(Form[2])), handler$0 = func (fields, @@ -16591,30 +16839,30 @@ ev$0 = map_or ([0, on_submit$0, 0], - function(_no_){return cons(on_submit$0, _no_);}, + function(_nZ_){return cons(on_submit$0, _nZ_);}, ev); return form$0(d, at, [0, ev$0], [0, [0, 83, lift(elts)], 0]);}; } function name$3(id, base_name){ return id - ? caml_call1(sprintf(_hX_), base_name) - : caml_call1(sprintf(_hY_), base_name); + ? caml_call1(sprintf(_ik_), base_name) + : caml_call1(sprintf(_il_), base_name); } - function make$8(opt, _nh_, desc){ + function make$8(opt, _nS_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_nh_) var sth$0 = _nh_[1], ev = sth$0; else var ev = 0; + if(_nS_) var sth$0 = _nS_[1], ev = sth$0; else var ev = 0; var id = name$3(1, desc[1]), name$0 = name$3(0, desc[1]), var$0 = var$1(id, desc[2]), - _ni_ = desc[3]; + _nT_ = desc[3]; label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _ni_); + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _nT_); var - _nj_ = [0, 80, name$0], + _nU_ = [0, 80, name$0], at$0 = - function(_nk_){return add$1(type, _hZ_, _nk_);} - (function(_nl_){return add$1(name, _nj_, _nl_);} + function(_nV_){return add$1(type, _im_, _nV_);} + (function(_nW_){return add$1(name, _nU_, _nW_);} (add$1(id$0, [0, 80, id], at))), match = peek(var$0); if(match) @@ -16637,24 +16885,24 @@ return [0, field, , get$4(var$0)]; } function name$4(id, base_name){ - return id ? caml_call1(sprintf(_h0_), base_name) : base_name; + return id ? caml_call1(sprintf(_in_), base_name) : base_name; } - function make$9(opt, _nc_, desc){ + function make$9(opt, _nN_, desc){ if(opt) var sth = opt[1], at = sth; else var at = 0; - if(_nc_) var sth$0 = _nc_[1], ev = sth$0; else var ev = 0; + if(_nN_) var sth$0 = _nN_[1], ev = sth$0; else var ev = 0; return function(options){ var id = name$4(1, desc[1]), name$0 = name$4(0, desc[1]), var$0 = var$1(id, desc[2]), - _nd_ = desc[3]; + _nO_ = desc[3]; label$0 - (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _nd_); + (0, [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, _nO_); var - _ne_ = [0, 80, name$0], + _nP_ = [0, 80, name$0], at$0 = - function(_nf_){return add$1(type, _h1_, _nf_);} - (function(_ng_){return add$1(name, _ne_, _ng_);} + function(_nQ_){return add$1(type, _io_, _nQ_);} + (function(_nR_){return add$1(name, _nP_, _nR_);} (add$1(id$0, [0, 80, id], at))), on_change = handler @@ -16688,8 +16936,8 @@ } function name$5(g, n, id, base_name){ return id - ? caml_call3(sprintf(_h2_), base_name, g, n) - : caml_call3(sprintf(_h3_), base_name, g, n); + ? caml_call3(sprintf(_ip_), base_name, g, n) + : caml_call3(sprintf(_iq_), base_name, g, n); } function make$10(t){ function make_check(g, n, value, label, checked){ @@ -16703,10 +16951,10 @@ [0, [0, [0, 80, for$1(caml_jsstring_of_string(id))], 0]], 0, label), - _m__ = [0, 80, name$0], + _nJ_ = [0, 80, name$0], at = - function(_na_){return add$1(type, _h4_, _na_);} - (function(_nb_){return add$1(name, _m__, _nb_);} + function(_nL_){return add$1(type, _ir_, _nL_);} + (function(_nM_){return add$1(name, _nJ_, _nM_);} (add$1(id$0, [0, 80, id], 0))), checked$1 = func @@ -16721,7 +16969,7 @@ return symbol$1(var$0, result(checked | 0)); }), ev = [0, [0, 80, on_change], 0], - _m$_ = get$4(var$0); + _nK_ = get$4(var$0); return [0, div$1 (0, @@ -16730,7 +16978,7 @@ [0, [0, 82, input$1(0, [0, at$0], [0, ev], 0)], [0, [0, 82, lbl], 0]]), - _m$_]; + _nK_]; } function make_all(g, desc){ var n = [0, 0]; @@ -16751,11 +16999,11 @@ var all = make_all(0, t[2]), elts = map$4(function(param){var elt = param[1]; return elt;}, all); - function _m6_(_m9_){return _m9_;} + function _nF_(_nI_){return _nI_;} var value = - function(_m7_){return func(_m7_, to_list$1);} - (function(_m8_){return filter_map$0(_m6_, _m8_);} + function(_nG_){return func(_nG_, to_list$1);} + (function(_nH_){return filter_map$0(_nF_, _nH_);} (lift (fold_monoid (function(param){var v = param[2]; return element(v);}, @@ -16767,14 +17015,14 @@ if(opt) var sth = opt[1], at = sth; else var at = 0; var at$0 = - function(_m5_){return add$1(value$1, value, _m5_);} - (add$1(type, _h5_, at)); + function(_nE_){return add$1(value$1, value, _nE_);} + (add$1(type, _is_, at)); return input$1(d, [0, at$0], ev, 0); } function handler$0(opts, type, func){return [0, opts, type, func];} function apply_state(state, f){return caml_call1(f, state);} function with_state(opt, S){ - if(opt) var sth = opt[1], base = sth; else var base = empty$4; + if(opt) var sth = opt[1], base = sth; else var base = empty$5; return function(opt, d, at){ if(opt) var sth = opt[1], state = sth; else var state = S[1]; return function(ev, content){ @@ -16802,18 +17050,18 @@ map_or (base, function(at){ - return function(_m4_){return union$0(base, _m4_);} + return function(_nD_){return union$0(base, _nD_);} (apply_state(state, at)); }, at), at$1 = to_at$0(0, at$0); - function _m1_(param){ - var _m3_ = param[1]; - if(82 === _m3_){ + function _nA_(param){ + var _nC_ = param[1]; + if(82 === _nC_){ var h = param[2]; return [0, 82, func(h, with_state)]; } - if(83 <= _m3_){ + if(83 <= _nC_){ var h$0 = param[2]; return [0, 83, map$4(with_state, h$0)]; } @@ -16822,7 +17070,7 @@ } var ev$0 = - symbol$10(function(_m2_){return symbol$9(_m1_, _m2_);}, ev); + symbol$10(function(_nB_){return symbol$9(_nA_, _nB_);}, ev); return button$0(d, [0, at$1], ev$0, caml_call1(content, state)); }); return [0, elt, get_state, set_state];};}; @@ -16841,7 +17089,7 @@ return [0, 848054398, rev(rev_map(yojson_of_a, lst))]; } var - Of_yojson_error = [248, _h6_, caml_fresh_oo_id(0)], + Of_yojson_error = [248, _it_, caml_fresh_oo_id(0)], record_check_extra_fields = [0, 1]; function of_yojson_error(what, yojson){ throw caml_maybe_attach_backtrace @@ -16849,11 +17097,11 @@ } function string_of_yojson(yojson){ if(typeof yojson !== "number" && -976970511 === yojson[1]){var str = yojson[2]; return str;} - return of_yojson_error(_h7_, yojson); + return of_yojson_error(_iu_, yojson); } function int_of_yojson(yojson){ if(typeof yojson !== "number" && 3654863 === yojson[1]){var v = yojson[2]; return v;} - return of_yojson_error(_h8_, yojson); + return of_yojson_error(_iv_, yojson); } function option_of_yojson(a_of_yojson, yojson){ return 870828711 === yojson ? 0 : [0, caml_call1(a_of_yojson, yojson)]; @@ -16863,39 +17111,39 @@ var lst = yojson[2], rev_lst = rev_map(a_of_yojson, lst); return rev(rev_lst); } - return of_yojson_error(_h9_, yojson); + return of_yojson_error(_iw_, yojson); } function stag_no_args(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _h__), yojson); + return of_yojson_error(symbol_concat(loc, _ix_), yojson); } function nested_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _h$_), yojson); + return of_yojson_error(symbol_concat(loc, _iy_), yojson); } function empty_list_invalid_sum(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _ia_), yojson); + return of_yojson_error(symbol_concat(loc, _iz_), yojson); } function unexpected_stag(loc, yojson){ - return of_yojson_error(symbol_concat(loc, _ib_), yojson); + return of_yojson_error(symbol_concat(loc, _iA_), yojson); } function record_superfluous_fields(what, loc, rev_fld_names, yojson){ var - fld_names_str = concat(_ic_, rev(rev_fld_names)), - msg = caml_call3(sprintf(_id_), loc, what, fld_names_str); + fld_names_str = concat(_iB_, rev(rev_fld_names)), + msg = caml_call3(sprintf(_iC_), loc, what, fld_names_str); return of_yojson_error(msg, yojson); } function record_duplicate_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_ie_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_iD_, loc, rev_fld_names, yojson); } function record_extra_fields(loc, rev_fld_names, yojson){ - return record_superfluous_fields(_if_, loc, rev_fld_names, yojson); + return record_superfluous_fields(_iE_, loc, rev_fld_names, yojson); } function record_get_undefined_loop(fields, param){ var fields$0 = fields, param$0 = param; for(;;){ - if(! param$0) return concat(_ig_, rev(fields$0)); - var _m0_ = param$0[1]; - if(_m0_[1]){ - var rest = param$0[2], field = _m0_[2], fields$1 = [0, field, fields$0]; + if(! param$0) return concat(_iF_, rev(fields$0)); + var _nz_ = param$0[1]; + if(_nz_[1]){ + var rest = param$0[2], field = _nz_[2], fields$1 = [0, field, fields$0]; fields$0 = fields$1; param$0 = rest; } @@ -16905,11 +17153,11 @@ function record_undefined_elements(loc, yojson, lst){ var undefined$0 = record_get_undefined_loop(0, lst), - msg = caml_call2(sprintf(_ih_), loc, undefined$0); + msg = caml_call2(sprintf(_iG_), loc, undefined$0); return of_yojson_error(msg, yojson); } function record_list_instead_atom(loc, yojson){ - var msg = symbol_concat(loc, _ii_); + var msg = symbol_concat(loc, _iH_); return of_yojson_error(msg, yojson); } function symbol$15(x){return x[1];} @@ -16988,12 +17236,12 @@ return [0, name_value, server_id_value, v$0, id_value]; } var - _mY_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _ij_], 0], - _mZ_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _ik_], _mY_]; + _nx_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _iI_], 0], + _ny_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iJ_], _nx_]; return record_undefined_elements (tp_loc, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _il_], _mZ_]); + [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _iK_], _ny_]); } return record_list_instead_atom(tp_loc, yojson); } @@ -17004,13 +17252,13 @@ v_server_id = param[2], v_name = param[1], arg = yojson_of_string(v_id), - bnds = [0, [0, _im_, arg], 0], + bnds = [0, [0, _iL_, arg], 0], arg$0 = yojson_of_option(yojson_of_string, v_server_name), - bnds$0 = [0, [0, _in_, arg$0], bnds], + bnds$0 = [0, [0, _iM_, arg$0], bnds], arg$1 = yojson_of_string(v_server_id), - bnds$1 = [0, [0, _io_, arg$1], bnds$0], + bnds$1 = [0, [0, _iN_, arg$1], bnds$0], arg$2 = yojson_of_string(v_name), - bnds$2 = [0, [0, _ip_, arg$2], bnds$1]; + bnds$2 = [0, [0, _iO_, arg$2], bnds$1]; return [0, 963043957, bnds$2]; } function params_of_yojson(yojson){ @@ -17061,11 +17309,11 @@ var pw_value = match$0[1], username_value = match[1]; return [0, username_value, pw_value]; } - var _mX_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _iq_], 0]; + var _nw_ = [0, [0, 0 === symbol$15(pw_field) ? 1 : 0, _iP_], 0]; return record_undefined_elements (tp_loc$0, yojson, - [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _ir_], _mX_]); + [0, [0, 0 === symbol$15(username_field) ? 1 : 0, _iQ_], _nw_]); } return record_list_instead_atom(tp_loc$0, yojson); } @@ -17074,9 +17322,9 @@ v_pw = param[2], v_username = param[1], arg = yojson_of_string(v_pw), - bnds = [0, [0, _is_, arg], 0], + bnds = [0, [0, _iR_, arg], 0], arg$0 = yojson_of_string(v_username), - bnds$0 = [0, [0, _it_, arg$0], bnds]; + bnds$0 = [0, [0, _iS_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function response_of_yojson(yojson){ @@ -17140,12 +17388,12 @@ return [0, user_value, access_token_value, server_id_value]; } var - _mV_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iu_], 0], - _mW_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _iv_], _mV_]; + _nu_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _iT_], 0], + _nv_ = [0, [0, 0 === symbol$15(access_token_field) ? 1 : 0, _iU_], _nu_]; return record_undefined_elements (tp_loc$1, yojson, - [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _iw_], _mW_]); + [0, [0, 0 === symbol$15(user_field) ? 1 : 0, _iV_], _nv_]); } return record_list_instead_atom(tp_loc$1, yojson); } @@ -17155,14 +17403,14 @@ v_access_token = param[2], v_user = param[1], arg = yojson_of_string(v_server_id), - bnds = [0, [0, _ix_, arg], 0], + bnds = [0, [0, _iW_, arg], 0], arg$0 = yojson_of_string(v_access_token), - bnds$0 = [0, [0, _iy_, arg$0], bnds], + bnds$0 = [0, [0, _iX_, arg$0], bnds], arg$1 = yojson_of_user(v_user), - bnds$1 = [0, [0, _iz_, arg$1], bnds$0]; + bnds$1 = [0, [0, _iY_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } - function endpoint(param){return _iA_;} + function endpoint(param){return _iZ_;} function image_blur_hash_of_yojson(y){ var assoc = to_assoc(y); return map$1 @@ -17226,7 +17474,7 @@ var v = v_primary[1], arg = yojson_of_image_blur_hash(v), - bnd = [0, _iB_, arg], + bnd = [0, _i0_, arg], bnds$0 = [0, bnd, bnds]; else var bnds$0 = bnds; @@ -17234,105 +17482,105 @@ } function type_of_yojson(yojson){ if(typeof yojson !== "number" && 848054398 === yojson[1]){ - var _mR_ = yojson[2]; - if(! _mR_) return empty_list_invalid_sum(tp_loc$3, yojson); - var _mS_ = _mR_[1]; - if(typeof _mS_ !== "number"){ - var _mT_ = _mS_[1]; - if(-976970511 === _mT_){ + var _nq_ = yojson[2]; + if(! _nq_) return empty_list_invalid_sum(tp_loc$3, yojson); + var _nr_ = _nq_[1]; + if(typeof _nr_ !== "number"){ + var _ns_ = _nr_[1]; + if(-976970511 === _ns_){ var - _mU_ = _mS_[2], - switch$0 = caml_string_compare(_mU_, cst_MusicGenre); + _nt_ = _nr_[2], + switch$0 = caml_string_compare(_nt_, cst_MusicGenre); if(0 <= switch$0){ if(0 >= switch$0) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 18; - var switch$1 = caml_string_compare(_mU_, cst_Series); + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 18; + var switch$1 = caml_string_compare(_nt_, cst_Series); if(0 <= switch$1){ if(0 >= switch$1) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 28; - if(_mU_ === cst_Studio) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 29; - if(_mU_ === cst_Trailer) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 30; - if(_mU_ === cst_TvChannel) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 31; - if(_mU_ === cst_TvProgram) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 32; - if(_mU_ === cst_UserRootFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 33; - if(_mU_ === cst_UserView) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 34; - if(_mU_ === cst_Video) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 35; - if(_mU_ === cst_Year) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 36; + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 28; + if(_nt_ === cst_Studio) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 29; + if(_nt_ === cst_Trailer) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 30; + if(_nt_ === cst_TvChannel) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 31; + if(_nt_ === cst_TvProgram) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 32; + if(_nt_ === cst_UserRootFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 33; + if(_nt_ === cst_UserView) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 34; + if(_nt_ === cst_Video) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 35; + if(_nt_ === cst_Year) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 36; } else{ - if(_mU_ === cst_MusicVideo) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 19; - if(_mU_ === cst_Person) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 20; - if(_mU_ === cst_Photo) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 21; - if(_mU_ === cst_PhotoAlbum) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 22; - if(_mU_ === cst_Playlist) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 23; - if(_mU_ === cst_PlaylistsFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 24; - if(_mU_ === cst_Program) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 25; - if(_mU_ === cst_Recording) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 26; - if(_mU_ === cst_Season) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 27; + if(_nt_ === cst_MusicVideo) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 19; + if(_nt_ === cst_Person) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 20; + if(_nt_ === cst_Photo) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 21; + if(_nt_ === cst_PhotoAlbum) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 22; + if(_nt_ === cst_Playlist) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 23; + if(_nt_ === cst_PlaylistsFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 24; + if(_nt_ === cst_Program) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 25; + if(_nt_ === cst_Recording) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 26; + if(_nt_ === cst_Season) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 27; } } else{ - var switch$2 = caml_string_compare(_mU_, cst_Episode); + var switch$2 = caml_string_compare(_nt_, cst_Episode); if(0 <= switch$2){ if(0 >= switch$2) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 9; - if(_mU_ === cst_Folder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 10; - if(_mU_ === cst_Genre) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 11; - if(_mU_ === cst_LiveTvChannel) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 12; - if(_mU_ === cst_LiveTvProgram) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 13; - if(_mU_ === cst_ManualPlaylistsFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 14; - if(_mU_ === cst_Movie) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 15; - if(_mU_ === cst_MusicAlbum) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 16; - if(_mU_ === cst_MusicArtist) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 17; + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 9; + if(_nt_ === cst_Folder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 10; + if(_nt_ === cst_Genre) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 11; + if(_nt_ === cst_LiveTvChannel) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 12; + if(_nt_ === cst_LiveTvProgram) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 13; + if(_nt_ === cst_ManualPlaylistsFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 14; + if(_nt_ === cst_Movie) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 15; + if(_nt_ === cst_MusicAlbum) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 16; + if(_nt_ === cst_MusicArtist) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 17; } else{ - if(_mU_ === cst_AggregateFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 0; - if(_mU_ === cst_Audio) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 1; - if(_mU_ === cst_AudioBook) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 2; - if(_mU_ === cst_BasePluginFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 3; - if(_mU_ === cst_Book) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 4; - if(_mU_ === cst_BoxSet) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 5; - if(_mU_ === cst_Channel) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 6; - if(_mU_ === cst_ChannelFolderItem) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 7; - if(_mU_ === cst_CollectionFolder) - return _mR_[2] ? stag_no_args(tp_loc$3, yojson) : 8; + if(_nt_ === cst_AggregateFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 0; + if(_nt_ === cst_Audio) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 1; + if(_nt_ === cst_AudioBook) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 2; + if(_nt_ === cst_BasePluginFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 3; + if(_nt_ === cst_Book) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 4; + if(_nt_ === cst_BoxSet) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 5; + if(_nt_ === cst_Channel) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 6; + if(_nt_ === cst_ChannelFolderItem) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 7; + if(_nt_ === cst_CollectionFolder) + return _nq_[2] ? stag_no_args(tp_loc$3, yojson) : 8; } } } - else if(848054398 === _mT_) + else if(848054398 === _ns_) return nested_list_invalid_sum(tp_loc$3, yojson); } } @@ -17341,78 +17589,78 @@ function yojson_of_type(param){ switch(param){ case 0: - return _iC_; + return _i1_; case 1: - return _iD_; + return _i2_; case 2: - return _iE_; + return _i3_; case 3: - return _iF_; + return _i4_; case 4: - return _iG_; + return _i5_; case 5: - return _iH_; + return _i6_; case 6: - return _iI_; + return _i7_; case 7: - return _iJ_; + return _i8_; case 8: - return _iK_; + return _i9_; case 9: - return _iL_; + return _i__; case 10: - return _iM_; + return _i$_; case 11: - return _iN_; + return _ja_; case 12: - return _iO_; + return _jb_; case 13: - return _iP_; + return _jc_; case 14: - return _iQ_; + return _jd_; case 15: - return _iR_; + return _je_; case 16: - return _iS_; + return _jf_; case 17: - return _iT_; + return _jg_; case 18: - return _iU_; + return _jh_; case 19: - return _iV_; + return _ji_; case 20: - return _iW_; + return _jj_; case 21: - return _iX_; + return _jk_; case 22: - return _iY_; + return _jl_; case 23: - return _iZ_; + return _jm_; case 24: - return _i0_; + return _jn_; case 25: - return _i1_; + return _jo_; case 26: - return _i2_; + return _jp_; case 27: - return _i3_; + return _jq_; case 28: - return _i4_; + return _jr_; case 29: - return _i5_; + return _js_; case 30: - return _i6_; + return _jt_; case 31: - return _i7_; + return _ju_; case 32: - return _i8_; + return _jv_; case 33: - return _i9_; + return _jw_; case 34: - return _i__; + return _jx_; case 35: - return _i$_; - default: return _ja_; + return _jy_; + default: return _jz_; } } function type_str_of_yojson(j){ @@ -17422,10 +17670,10 @@ function yojson_of_type_str(ts){ var match = yojson_of_type(ts); if(typeof match !== "number" && 848054398 === match[1]){ - var _mQ_ = match[2]; - if(_mQ_ && ! _mQ_[2]){var json = _mQ_[1]; return json;} + var _np_ = match[2]; + if(_np_ && ! _np_[2]){var json = _np_[1]; return json;} } - throw caml_maybe_attach_backtrace([0, Assert_failure, _jb_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _jA_], 1); } function t_of_yojson(yojson){ if(typeof yojson !== "number" && 963043957 === yojson[1]){ @@ -17575,15 +17823,15 @@ v$0]; } var - _mM_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _jc_], 0], - _mN_ = - [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _jd_], _mM_], - _mO_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _je_], _mN_], - _mP_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _jf_], _mO_]; + _nl_ = [0, [0, 0 === symbol$15(type_field) ? 1 : 0, _jB_], 0], + _nm_ = + [0, [0, 0 === symbol$15(image_blur_hashes_field) ? 1 : 0, _jC_], _nl_], + _nn_ = [0, [0, 0 === symbol$15(server_id_field) ? 1 : 0, _jD_], _nm_], + _no_ = [0, [0, 0 === symbol$15(id_field) ? 1 : 0, _jE_], _nn_]; return record_undefined_elements (tp_loc$4, yojson, - [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _jg_], _mP_]); + [0, [0, 0 === symbol$15(name_field) ? 1 : 0, _jF_], _no_]); } return record_list_instead_atom(tp_loc$4, yojson); } @@ -17605,22 +17853,22 @@ else var arg$8 = - function(_mL_){return yojson_of_option(yojson_of_string, _mL_);} + function(_nk_){return yojson_of_option(yojson_of_string, _nk_);} (v_collection_type), - bnd$3 = [0, _jq_, arg$8], + bnd$3 = [0, _jP_, arg$8], bnds$0 = [0, bnd$3, bnds]; var arg = yojson_of_type_str(v_type), - bnds$1 = [0, [0, _jh_, arg], bnds$0], + bnds$1 = [0, [0, _jG_, arg], bnds$0], arg$0 = yojson_of_image_blur_hashes(v_image_blur_hashes), - bnds$2 = [0, [0, _ji_, arg$0], bnds$1], + bnds$2 = [0, [0, _jH_, arg$0], bnds$1], arg$1 = yojson_of_string(v_server_id), - bnds$3 = [0, [0, _jj_, arg$1], bnds$2]; + bnds$3 = [0, [0, _jI_, arg$1], bnds$2]; if(v_parent_id) var v = v_parent_id[1], arg$2 = yojson_of_option(yojson_of_string, v), - bnd = [0, _jk_, arg$2], + bnd = [0, _jJ_, arg$2], bnds$4 = [0, bnd, bnds$3]; else var bnds$4 = bnds$3; @@ -17628,7 +17876,7 @@ var v$0 = v_album_id[1], arg$3 = yojson_of_string(v$0), - bnd$0 = [0, _jl_, arg$3], + bnd$0 = [0, _jK_, arg$3], bnds$5 = [0, bnd$0, bnds$4]; else var bnds$5 = bnds$4; @@ -17636,35 +17884,35 @@ var v$1 = v_path[1], arg$4 = yojson_of_string(v$1), - bnd$1 = [0, _jm_, arg$4], + bnd$1 = [0, _jL_, arg$4], bnds$6 = [0, bnd$1, bnds$5]; else var bnds$6 = bnds$5; var arg$5 = yojson_of_string(v_id), - bnds$7 = [0, [0, _jn_, arg$5], bnds$6]; + bnds$7 = [0, [0, _jM_, arg$5], bnds$6]; if(v_sort_name) var v$2 = v_sort_name[1], arg$6 = yojson_of_string(v$2), - bnd$2 = [0, _jo_, arg$6], + bnd$2 = [0, _jN_, arg$6], bnds$8 = [0, bnd$2, bnds$7]; else var bnds$8 = bnds$7; var arg$7 = yojson_of_string(v_name), - bnds$9 = [0, [0, _jp_, arg$7], bnds$8]; + bnds$9 = [0, [0, _jO_, arg$7], bnds$8]; return [0, 963043957, bnds$9]; } var session_uuid = [0, 0]; function set_session_uuid(s){session_uuid[1] = [0, s]; return;} function authorization(token, param){ if(token) - var t = token[1], token$0 = caml_call1(sprintf(_jr_), t); + var t = token[1], token$0 = caml_call1(sprintf(_jQ_), t); else - var token$0 = _ju_; - var session_uuid$0 = value(session_uuid[1], _js_); - return caml_call2(sprintf(_jt_), session_uuid$0, token$0); + var token$0 = _jT_; + var session_uuid$0 = value(session_uuid[1], _jR_); + return caml_call2(sprintf(_jS_), session_uuid$0, token$0); } function request$1(base_url, token, headers, Q){ return function(params, path_params){ @@ -17673,10 +17921,10 @@ base_path_segments = get_ok(path_segments(base_uri)), endpoint_path_segments = map$1 - (function(_mK_){return caml_jsstring_of_string(_mK_);}, + (function(_nj_){return caml_jsstring_of_string(_nj_);}, caml_call1(Q[6], path_params)), path_segments$0 = - caml_equal(base_path_segments, [0, empty, 0]) + caml_equal(base_path_segments, [0, empty$0, 0]) ? endpoint_path_segments : flatten([0, base_path_segments, [0, endpoint_path_segments, 0]]), uri = with_path_segments(base_uri, path_segments$0), @@ -17730,19 +17978,19 @@ init$1(0, 0, 0, [0, headers$0], 0, 0, [0, method], 0, 0, 0, 0, 0, 0), url$0 = url$1, init = init$0; - return let$1 + return let$0 (request$0(v$3([0, init], url$0)), function(res){ - return let$2 + return let$1 (text(res), function(json){ var yojson = from_string$0(0, 0, 0, caml_string_of_jsstring(json)); - try{var _mJ_ = caml_call1(Q[4], yojson); return _mJ_;} + try{var _ni_ = caml_call1(Q[4], yojson); return _ni_;} catch(e$0){ var e = caml_wrap_exception(e$0); - log([0, _jv_, [0, json, 0]]); + log([0, _jU_, [0, json, 0]]); log([0, e, 0]); throw caml_maybe_attach_backtrace(e, 0); } @@ -17756,7 +18004,7 @@ username = credentials[2], base_url = credentials[1], auth = [0, username, password]; - return let$2 + return let$1 (request$1 (base_url, 0, @@ -17812,14 +18060,14 @@ return caml_call1(f, data); } var match$0 = message[1], v = match$0[2], e = match$0[1]; - function _mH_(f){return caml_call1(f, v);} - return function(_mI_){return iter$0(_mH_, _mI_);} + function _ng_(f){return caml_call1(f, v);} + return function(_nh_){return iter$0(_ng_, _nh_);} (find_all$0(listeners, tag_of(e))); }); return 0; } - var _mF_ = 0; - (function(_mG_){return listen(_mF_, message, on_message, _mG_);}(worker)); + var _ne_ = 0; + (function(_nf_){return listen(_ne_, message, on_message, _nf_);}(worker)); return [0, , , , query, listen$0]; } function Make_worker(W){ @@ -17829,7 +18077,7 @@ (of_jstr$0(data(ev)), function(param){ var data = param[2], uuid = param[1]; - return let$2 + return let$1 (caml_call1(W$0[1], data), function(result){ var data = to_jstr$1(result); @@ -17843,16 +18091,16 @@ } return [0, Start_client, , Make_worker]; } - function _jw_(_mB_){ - var _mC_ = Make$10(_mB_)[1]; + function _jV_(_na_){ + var _nb_ = Make$10(_na_)[1]; return [0, - function(_mD_){ - var _mE_ = _mC_(_mD_); - return [0, , _mE_[4], _mE_[5]]; + function(_nc_){ + var _nd_ = _nb_(_nc_); + return [0, , _nd_[4], _nd_[5]]; }]; } function random(size){ - var tbl = init$0(size, function(_mA_){return _mA_;}); + var tbl = init$0(size, function(_m$_){return _m$_;}); shuffle$0(tbl); return [0, tbl]; } @@ -17865,10 +18113,10 @@ return param !== cst_date_added ? param !== cst_name ? 0 : 1 : 0; } function item_count(t){return t[4] - t[3] | 0;} - function req(kind, opt, _mz_, _my_, param){ + function req(kind, opt, _m__, _m9_, param){ if(opt) var sth = opt[1], src_views = sth; else var src_views = 0; - if(_mz_) var sth$0 = _mz_[1], sort = sth$0; else var sort = 0; - if(_my_) var sth$1 = _my_[1], filters = sth$1; else var filters = 0; + if(_m__) var sth$0 = _m__[1], sort = sth$0; else var sort = 0; + if(_m9_) var sth$1 = _m9_[1], filters = sth$1; else var filters = 0; return [0, kind, src_views, sort, filters]; } function t_to_jv(encoder, t){ @@ -17946,12 +18194,12 @@ return [0, date_added_value, views_value, sort_name_value]; } var - _mw_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _jx_], 0], - _mx_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _jy_], _mw_]; + _m7_ = [0, [0, 0 === symbol$15(sort_name_field) ? 1 : 0, _jW_], 0], + _m8_ = [0, [0, 0 === symbol$15(views_field) ? 1 : 0, _jX_], _m7_]; return record_undefined_elements (tp_loc$5, yojson, - [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _jz_], _mx_]); + [0, [0, 0 === symbol$15(date_added_field) ? 1 : 0, _jY_], _m8_]); } return record_list_instead_atom(tp_loc$5, yojson); } @@ -17961,11 +18209,11 @@ v_views = param[2], v_date_added = param[1], arg = yojson_of_string(v_sort_name), - bnds = [0, [0, _jA_, arg], 0], + bnds = [0, [0, _jZ_, arg], 0], arg$0 = yojson_of_list(yojson_of_string, v_views), - bnds$0 = [0, [0, _jB_, arg$0], bnds], + bnds$0 = [0, [0, _j0_, arg$0], bnds], arg$1 = yojson_of_int(v_date_added), - bnds$1 = [0, [0, _jC_, arg$1], bnds$0]; + bnds$1 = [0, [0, _j1_, arg$1], bnds$0]; return [0, 963043957, bnds$1]; } function t_of_yojson$0(yojson){ @@ -18016,11 +18264,11 @@ var item_value = match$0[1], sorts_value = match[1]; return [0, sorts_value, item_value]; } - var _mv_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _jD_], 0]; + var _m6_ = [0, [0, 0 === symbol$15(item_field) ? 1 : 0, _j2_], 0]; return record_undefined_elements (tp_loc$6, yojson, - [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _jE_], _mv_]); + [0, [0, 0 === symbol$15(sorts_field) ? 1 : 0, _j3_], _m6_]); } return record_list_instead_atom(tp_loc$6, yojson); } @@ -18029,9 +18277,9 @@ v_item = param[2], v_sorts = param[1], arg = yojson_of_t(v_item), - bnds = [0, [0, _jF_, arg], 0], + bnds = [0, [0, _j4_, arg], 0], arg$0 = yojson_of_sorts(v_sorts), - bnds$0 = [0, [0, _jG_, arg$0], bnds]; + bnds$0 = [0, [0, _j5_, arg$0], bnds]; return [0, 963043957, bnds$0]; } function compare$2(t$0, t){return compare$0(t$0[1][3], t[1][3]);} @@ -18040,15 +18288,15 @@ views = param[3], sort_name = param[2], id = param[1], - id$0 = _cW_(id), - sort_name$0 = _cW_(sort_name), - views$0 = of_list$0(_cW_, views); + id$0 = _cX_(id), + sort_name$0 = _cX_(sort_name), + views$0 = of_list$0(_cX_, views); return caml_js_from_array([0, id$0, sort_name$0, views$0]); } function of_jv$0(j){ var match = caml_js_to_array(j), len = match.length - 1; if(3 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jH_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _j6_], 1); var id = match[1], sort_name = match[2], @@ -18058,69 +18306,111 @@ views$0 = to_list$0(value$0, views); return [0, id$0, sort_name$0, views$0]; } - var path$0 = [1, [0, _jK_, _jJ_, _jI_]]; + var path$0 = [1, [0, _j9_, _j8_, _j7_]]; function to_jv$1(k){return k;} function of_jv$1(j){return j;} - function to_jv$2(k){return _cW_(k);} + function to_jv$2(k){return _cX_(k);} function of_jv$2(j){return value$0(j);} function to_jv$3(k){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jL_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _j__], 1); } function of_jv$3(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jM_], 1); - var type = match[1], views = match[2], _mu_ = to_list$0(value$0, views); - return [0, value$0(type), _mu_]; + throw caml_maybe_attach_backtrace([0, Assert_failure, _j$_], 1); + var type = match[1], views = match[2], _m5_ = to_list$0(value$0, views); + return [0, value$0(type), _m5_]; } - var path$3 = [1, [0, _jO_, _jN_]]; + var path$3 = [1, [0, _kb_, _ka_]]; function to_jv$4(t){ - throw caml_maybe_attach_backtrace([0, Assert_failure, _jP_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _kc_], 1); } function of_jv$4(j){ var match = caml_js_to_array(j), len = match.length - 1; if(2 !== len) - throw caml_maybe_attach_backtrace([0, Assert_failure, _jQ_], 1); + throw caml_maybe_attach_backtrace([0, Assert_failure, _kd_], 1); var collection_type = match[1], sort_name = match[2], - _mt_ = value$0(sort_name); - return [0, value$0(collection_type), _mt_]; + _m4_ = value$0(sort_name); + return [0, value$0(collection_type), _m4_]; } - var path$4 = [1, [0, _jS_, _jR_]]; + var path$4 = [1, [0, _kf_, _ke_]]; function to_jv$5(t){return t_to_jv(yojson_of_t$0, t);} function of_jv$5(j){return get_exn(jv_to_t(t_of_yojson$0, j));} function get_key(t){return [0, t[2][3], t[1][3], t[1][2]];} var - _jT_ = + _kg_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jU_(_mr_, _ms_){return _do_(undef, _mr_, _ms_);} - (function(_mq_){return _jU_(_jT_, _mq_);}([0, path$1, to_jv$1, of_jv$1])); + function _kh_(_m2_, _m3_){return _dp_(undef, _m2_, _m3_);} + (function(_m1_){return _kh_(_kg_, _m1_);}([0, path$1, to_jv$1, of_jv$1])); var - _jV_ = + _ki_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jW_(_mo_, _mp_){return _do_(undef, _mo_, _mp_);} - (function(_mn_){return _jW_(_jV_, _mn_);}([0, path$3, to_jv$3, of_jv$3])); + function _kj_(_mZ_, _m0_){return _dp_(undef, _mZ_, _m0_);} + (function(_mY_){return _kj_(_ki_, _mY_);}([0, path$3, to_jv$3, of_jv$3])); var - _jX_ = + _kk_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _jY_(_ml_, _mm_){return _do_(undef, _ml_, _mm_);} - (function(_mk_){return _jY_(_jX_, _mk_);}([0, path$2, to_jv$2, of_jv$2])); + function _kl_(_mW_, _mX_){return _dp_(undef, _mW_, _mX_);} + (function(_mV_){return _kl_(_kk_, _mV_);}([0, path$2, to_jv$2, of_jv$2])); var - _jZ_ = + _km_ = [0, [0, path$0, to_jv$0, of_jv$0], name$6, to_jv$5, of_jv$5, get_key]; - function _j0_(_mi_, _mj_){return _do_(undef, _mi_, _mj_);} - (function(_mh_){return _j0_(_jZ_, _mh_);}([0, path$4, to_jv$4, of_jv$4])); + function _kn_(_mT_, _mU_){return _dp_(undef, _mT_, _mU_);} + (function(_mS_){return _kn_(_km_, _mS_);}([0, path$4, to_jv$4, of_jv$4])); + function status_to_string(param){ + if(typeof param === "number") + switch(param){ + case 0: + return _ko_; + case 1: + return _kp_; + default: return _kq_; + } + if(0 === param[0]){ + var + last_source_item_key = param[3], + first_unfetched_key = param[2], + first_missing_key = param[1]; + return caml_call3 + (sprintf$1(_kr_), + last_source_item_key, + first_missing_key, + first_unfetched_key); + } + var first_unfetched_key$0 = param[1]; + return caml_call2 + (sprintf$1(_ks_), first_unfetched_key$0, first_unfetched_key$0); + } + function pp_progress(fmt, param){ + var remaining = param[2], total = param[1]; + return caml_call2(fprintf$0(fmt)(_kt_), remaining, total); + } + function pp_report(fmt, param){ + var + sync_progress = param[2], + status = param[1], + status$0 = status_to_string(status), + _mP_ = 0; + return caml_call3 + (fprintf$0(fmt)(_ku_), + status$0, + function(_mQ_, _mR_){ + return pp_print_option(_mP_, pp_progress, _mQ_, _mR_); + }, + sync_progress); + } var Queries = [0], - include$1 = _jw_(Queries), + include$1 = _jV_(Queries), Start_client = include$1[1], - _j1_ = [0, compare$0]; - function MMap(_mg_){return _eK_(_j1_, _mg_);} + _kv_ = [0, compare$0]; + function MMap(_mO_){return _e9_(_kv_, _mO_);} MMap([0, compare$2]); var active_layout = var$0(0), active = var$0(0); function get$7(lang, string){ - return function(_mf_){return value(_mf_, string);} + return function(_mN_){return value(_mN_, string);} (assoc_opt([0, lang, string], strings)); } var @@ -18129,7 +18419,20 @@ include$2 = Start_client([0, url$0]), query = include$2[2], listen$1 = include$2[3], - connexions = var$1(_j2_, empty$0); + servers_status = var$0([0, _kw_, initial_report]); + listen$1 + (0, + function(param){ + var report = param[2], id = param[1]; + log([0, caml_call3(asprintf(_kx_), id, pp_report, report), 0]); + return symbol$1(servers_status, [0, id, report]); + }); + function create_view(v){ + var var$1 = var$0(0); + await$1(query([5, v]), function(v){return symbol$1(var$1, [0, v]);}); + return get$4(var$1); + } + var connexions = var$1(_ky_, empty$1); function connect$0(param){ var match = param[2], @@ -18144,21 +18447,21 @@ report = param[2], id = param[1], previous_status = peek(status), - _mb_ = symbol$0(server_id, id); - if(_mb_){ + _mJ_ = symbol$0(server_id, id); + if(_mJ_){ symbol$1(status, report); - var _mc_ = previous_status[2], _md_ = report[2]; - if(_mc_){ - var remaining = _mc_[1][2]; - if(! _md_) return symbol$1(refresh, 0); - var remaining$0 = _md_[1][2]; + var _mK_ = previous_status[2], _mL_ = report[2]; + if(_mK_){ + var remaining = _mK_[1][2]; + if(! _mL_) return symbol$1(refresh, 0); + var remaining$0 = _mL_[1][2]; if(symbol$4(remaining, remaining$0)) return symbol$1(refresh, 0); } - var _me_ = 0; + var _mM_ = 0; } else - var _me_ = _mb_; - return _me_; + var _mM_ = _mJ_; + return _mM_; }); query([1, [0, [0, server_id, connexion], 0]]); return; @@ -18178,7 +18481,7 @@ }, get$4(connexions)); function new_connexion(base_url, username, password){ - return let$2 + return let$1 (connect([0, base_url, username, password]), function(connexion){ var server_id = connexion[2][3]; @@ -18192,18 +18495,18 @@ var url_field = field$0 - (pure(text_input(0, 0, 0, 0, _j4_, 0, 0, _j3_)), + (pure(text_input(0, 0, 0, 0, _kA_, 0, 0, _kz_)), function(t, v){return [0, v, t[2], t[3]];}), username_field = field$0 - (pure(text_input(0, 0, 0, 0, _j6_, 0, 0, _j5_)), + (pure(text_input(0, 0, 0, 0, _kC_, 0, 0, _kB_)), function(t, v){return [0, t[1], v, t[3]];}), password_field = field$0 - (pure(password_input(0, 0, 0, 0, _j7_, 0, 0, 0)), + (pure(password_input(0, 0, 0, 0, _kD_, 0, 0, 0)), function(t, v){return [0, t[1], t[2], v];}), submit$1 = - field$0(pure(submit$0(0, 0, 0, _j8_)), function(t, v){return t;}), + field$0(pure(submit$0(0, 0, 0, _kE_)), function(t, v){return t;}), fields$0 = return$1 (of_list$1 @@ -18214,21 +18517,21 @@ function ui_form(param){ return create$8(0, 0, 0, Connect_form) (function(t){ - log([0, _j9_, [0, t, 0]]); - var _l$_ = t[1]; + log([0, _kF_, [0, t, 0]]); + var _mH_ = t[1]; a: - if(typeof _l$_ !== "number" && 1 !== _l$_[0]){ - var _ma_ = t[2], url = _l$_[1]; - if(typeof _ma_ !== "number" && 1 !== _ma_[0]){ - var username = _ma_[1], match = t[3]; + if(typeof _mH_ !== "number" && 1 !== _mH_[0]){ + var _mI_ = t[2], url = _mH_[1]; + if(typeof _mI_ !== "number" && 1 !== _mI_[0]){ + var username = _mI_[1], match = t[3]; if(typeof match !== "number" && 1 !== match[0]){ var password = match[1]; - log([0, _ka_, [0, url, [0, username, 0]]]); + log([0, _kI_, [0, url, [0, username, 0]]]); new_connexion(url, username, password); return 0; } - log([0, _j__, [0, url, [0, username, 0]]]); - new_connexion(url, username, _j$_); + log([0, _kG_, [0, url, [0, username, 0]]]); + new_connexion(url, username, _kH_); return 0; } break a; @@ -18244,20 +18547,20 @@ function(param){ var sync_progress = param[2], status = param[1]; if(typeof status === "number" && 1 === status && ! sync_progress) - return txt(0, _kd_); - if(! sync_progress) return txt(0, _kc_); + return txt(0, _kL_); + if(! sync_progress) return txt(0, _kK_); var match = sync_progress[1], remaining = match[2], total = match[1]; return txt - (0, caml_call2(sprintf(_kb_), total - remaining | 0, total)); + (0, caml_call2(sprintf(_kJ_), total - remaining | 0, total)); }); return status; } function fut_to_lwd(init, f){ var v = var$0(init); - await$1(f, function(_l__){return symbol$1(v, _l__);}); + await$1(f, function(_mG_){return symbol$1(v, _mG_);}); return get$4(v); } function seq_share(cmp, prev, next){ @@ -18306,9 +18609,9 @@ map$4 (function(param){ var refresh = param[2][3], server_id = param[1]; - log(_ke_); + log(_kM_); var previous_value = [0, 0]; - function _lZ_(v){ + function _mv_(v){ var new_value = map_or @@ -18320,20 +18623,20 @@ } var views = - function(_l0_){return func(_l0_, _lZ_);} + function(_mw_){return func(_mw_, _mv_);} (bind$1 (get$4(refresh), function(param){ - function _l1_(_l9_){return get_or(_l9_, 0);} - function _l2_(l){log([0, _kf_, [0, l, 0]]); return l;} + function _mx_(_mF_){return get_or(_mF_, 0);} + function _my_(l){log([0, _kN_, [0, l, 0]]); return l;} var - _l3_ = - function(_l6_){return map$3(of_list$1, _l6_);} - (function(_l7_){return map$3(_l2_, _l7_);} - (function(_l8_){return map$3(_l1_, _l8_);} + _mz_ = + function(_mC_){return map$3(of_list$1, _mC_);} + (function(_mD_){return map$3(_my_, _mD_);} + (function(_mE_){return map$3(_mx_, _mE_);} (query([4, server_id])))), - _l4_ = value$3(previous_value[1], empty$0); - return function(_l5_){return fut_to_lwd(_l4_, _l5_);}(_l3_); + _mA_ = value$3(previous_value[1], empty$1); + return function(_mB_){return fut_to_lwd(_mA_, _mB_);}(_mz_); })); return [0, server_id, views]; }, @@ -18350,30 +18653,30 @@ function(s){ return typeof view(s) === "number" ? element(div$1(0, 0, 0, [0, [0, 82, ui_form(0)], 0])) - : empty$0; + : empty$1; }), - _lY_ = [0, [0, 83, lift(statuses)], 0]; - return div$1(0, 0, 0, [0, [0, 83, lift(ui_form$0)], _lY_]); + _mu_ = [0, [0, 83, lift(statuses)], 0]; + return div$1(0, 0, 0, [0, [0, 83, lift(ui_form$0)], _mu_]); } - var _kg_ = var$0(0), _kh_ = var$0(0), now_playing = var$0(0); + var _kO_ = var$0(0), _kP_ = var$0(0), now_playing = var$0(0); function audio_url(server, item_id){ - var _lW_ = server[2][2], _lX_ = server[1]; - return caml_call3(sprintf(_ki_), _lX_, item_id, _lW_); + var _ms_ = server[2][2], _mt_ = server[1]; + return caml_call3(sprintf(_kQ_), _mt_, item_id, _ms_); } function Playback_controller(P){ function set_play_url(playlist, current_index){ if(! playlist) return ok(0); var playlist$0 = playlist[1]; - return let$2 - (let$2 + return let$1 + (let$1 (caml_call2(P[1], playlist$0, [0, current_index]), function(result){ var len = result.length - 1; if(1 === len){ - var _lU_ = result[1]; - if(_lU_){ + var _mq_ = result[1]; + if(_mq_){ var - item = _lU_[1][2], + item = _mq_[1][2], server_id = item[7], album_id = item[5], id = item[3], @@ -18381,13 +18684,13 @@ servers = to_list$1(peek(connexions)), connexion = assq(server_id, servers), url = audio_url(connexion, id); - log([0, _kj_, [0, name, [0, _cW_(url), 0]]]); + log([0, _kR_, [0, name, [0, _cX_(url), 0]]]); var session = of_navigator(navigator), image_id = value$3(album_id, id), - _lV_ = connexion[1], - img_src = caml_call2(sprintf(_kk_), _lV_, image_id), - artwork = [0, [0, img_src, _km_, _kl_], 0]; + _mr_ = connexion[1], + img_src = caml_call2(sprintf(_kS_), _mr_, image_id), + artwork = [0, [0, img_src, _kU_, _kT_], 0]; set_metadata(session, [0, name, artist, album, artwork]); return [0, item, url]; } @@ -18398,14 +18701,14 @@ } function reset_playlist(playlist){ set_play_url([0, playlist], 0); - symbol$1(_kh_, [0, playlist]); - return symbol$1(_kg_, 0); + symbol$1(_kP_, [0, playlist]); + return symbol$1(_kO_, 0); } function make(param){ var - _lK_ = [0, v$1("preload", "auto"), 0], - _lL_ = [0, v$1("autoplay", cst_true), _lK_], - audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _lL_]], 0); + _mg_ = [0, v$1("preload", "auto"), 0], + _mh_ = [0, v$1("autoplay", cst_true), _mg_], + audio_elt = audio$0(0, [0, [0, v$1("controls", cst_true), _mh_]], 0); function set_src(url){ return set_at(cst_src, [0, caml_jsstring_of_string(url)], audio_elt); } @@ -18421,26 +18724,26 @@ quick_sample(root); function next(param){ var - playlist = peek(_kh_), - current_index = peek(_kg_), + playlist = peek(_kP_), + current_index = peek(_kO_), next_index = current_index + 1 | 0; set_play_url(playlist, next_index); - return symbol$1(_kg_, next_index); + return symbol$1(_kO_, next_index); } function prev(param){ var - playlist = peek(_kh_), - current_index = peek(_kg_), + playlist = peek(_kP_), + current_index = peek(_kO_), next_index = max(0, current_index - 1 | 0); set_play_url(playlist, next_index); - return symbol$1(_kg_, next_index); + return symbol$1(_kO_, next_index); } var session = of_navigator(navigator); function set_position_state$0(param){ var duration = prop(float$0(cst_duration), audio_elt), - _lT_ = 1 - is_nan(duration); - if(! _lT_) return _lT_; + _mp_ = 1 - is_nan(duration); + if(! _mp_) return _mp_; var playback_rate = prop(float$0(cst_playbackRate), audio_elt), position = prop(float$0("currentTime"), audio_elt); @@ -18452,17 +18755,17 @@ function on_error(ev){ stop_immediate_propagation(ev); prevent_default(ev); - log([0, _kn_, [0, ev, 0]]); + log([0, _kV_, [0, ev, 0]]); return next(0); } function next$0(param){return next(0);} listen(0, ended, next$0, audio_elt); - listen(0, error, on_error, audio_elt); + listen(0, error$0, on_error, audio_elt); listen (0, play, function(param){return set_position_state$0(0);}, audio_elt); var btn_next = - v$7(0, 0, [0, [0, [0, 80, handler(0, click, next$0)], 0]], _ko_), + v$7(0, 0, [0, [0, [0, 80, handler(0, click, next$0)], 0]], _kW_), style$0 = func (get$4(now_playing), @@ -18476,39 +18779,39 @@ image_id = value$3(album_id, id), servers = to_list$1(peek(connexions)), connexion = assq(server_id, servers), - _lS_ = connexion[1], - src = caml_call2(sprintf(_kp_), _lS_, image_id); + _mo_ = connexion[1], + src = caml_call2(sprintf(_kX_), _mo_, image_id); else - var src = _kr_; - return caml_call1(sprintf(_kq_), src); + var src = _kZ_; + return caml_call1(sprintf(_kY_), src); }), - _lM_ = [0, 82, style$0], + _mi_ = [0, 82, style$0], at = - function(_lR_){return add$1(style, _lM_, _lR_);} - (add$1(class$0, _ks_, 0)), + function(_mn_){return add$1(style, _mi_, _mn_);} + (add$1(class$0, _k0_, 0)), on_click = handler (0, click, function(param){ - var _lP_ = peek(active_layout) ? 0 : 1; - return function(_lQ_){return symbol$1(active_layout, _lQ_);}(_lP_); + var _ml_ = peek(active_layout) ? 0 : 1; + return function(_mm_){return symbol$1(active_layout, _mm_);}(_ml_); }), track_cover = div$1(0, [0, at], [0, [0, [0, 80, on_click], 0]], 0), - at$0 = add$1(class$0, _kt_, 0), + at$0 = add$1(class$0, _k1_, 0), txt$0 = func (get$4(now_playing), function(param){ - if(! param) return txt(0, _ku_); + if(! param) return txt(0, _k2_); var name = param[1][1][1]; return txt(0, name); }), title = span$1(0, 0, 0, [0, [0, 82, txt$0], 0]), track_details = div$1(0, [0, at$0], 0, [0, [0, 82, title], 0]), at$1 = - function(_lO_){return add$1(class$0, _kw_, _lO_);} - (add$1(class$0, _kv_, 0)), + function(_mk_){return add$1(class$0, _k4_, _mk_);} + (add$1(class$0, _k3_, 0)), now_playing$0 = div$1 (0, @@ -18516,8 +18819,8 @@ 0, [0, [0, 82, track_cover], [0, [0, 82, track_details], 0]]), at$2 = - function(_lN_){return add$1(class$0, _ky_, _lN_);} - (add$1(class$0, _kx_, 0)); + function(_mj_){return add$1(class$0, _k6_, _mj_);} + (add$1(class$0, _k5_, 0)); return div$1 (0, [0, at$2], @@ -18528,45 +18831,45 @@ } return [0, , reset_playlist, make]; } - var base = classes(_kz_); - function at(param){return param ? classes(_kA_) : classes(_kB_);} + var base = classes(_k7_); + function at(param){return param ? classes(_k8_) : classes(_k9_);} function make$11(on_click){ var on_click$0 = handler$0(0, click, on_click), - _lG_ = [0, at], - _lH_ = [0, [0, [0, 80, on_click$0], 0]]; - return function(_lJ_, _lI_){ - return caml_call1(two_state([0, base])(_lJ_, _lI_, _lG_), _lH_);}; + _mc_ = [0, at], + _md_ = [0, [0, [0, 80, on_click$0], 0]]; + return function(_mf_, _me_){ + return caml_call1(two_state([0, base])(_mf_, _me_, _mc_), _md_);}; } - classes(_kC_); + classes(_k__); function columns(param){ var - _lB_ = - function(_lF_){return v$6(_kF_, _kE_, _lF_);} - ([0, [0, 80, txt(0, _kD_)], 0]), - _lC_ = - function(_lE_){return v$6(_kI_, _kH_, _lE_);} - ([0, [0, 80, txt(0, _kG_)], 0]); + _l9_ = + function(_mb_){return v$6(_lb_, _la_, _mb_);} + ([0, [0, 80, txt(0, _k$_)], 0]), + _l__ = + function(_ma_){return v$6(_le_, _ld_, _ma_);} + ([0, [0, 80, txt(0, _lc_)], 0]); return [0, - function(_lD_){return v$6(_kL_, _kK_, _lD_);} - ([0, [0, 80, txt(0, _kJ_)], 0]), - _lC_, - _lB_]; + function(_l$_){return v$6(_lh_, _lg_, _l$_);} + ([0, [0, 80, txt(0, _lf_)], 0]), + _l__, + _l9_]; } - function make$12(reset_playlist, fetch, scroll_target, view){ + function make$12(reset_playlist, fetch, scroll_target, ranged_view){ function img_url(server_id, item_id){ var servers = to_list$1(peek(connexions)); try{ var connexion = assq(server_id, servers), - _ly_ = connexion[1], - _lz_ = caml_call2(sprintf(_kN_), _ly_, item_id), - url = _lz_; + _l6_ = connexion[1], + _l7_ = caml_call2(sprintf(_lj_), _l6_, item_id), + url = _l7_; } - catch(_lA_){ - var _lx_ = caml_wrap_exception(_lA_); - if(_lx_ !== Not_found) throw caml_maybe_attach_backtrace(_lx_, 0); - var url = _kM_; + catch(_l8_){ + var _l5_ = caml_wrap_exception(_l8_); + if(_l5_ !== Not_found) throw caml_maybe_attach_backtrace(_l5_, 0); + var url = _li_; } return src$0(caml_jsstring_of_string(url)); } @@ -18578,29 +18881,40 @@ album_id = match[5], id = match[3], name = match[1]; - function play_from(param){ - let$2 + function play_from(view, param){ + symbol$11 (view, function(view){ - var _lw_ = view[1]; - return caml_call1 - (reset_playlist, - [0, - [0, _lw_[1], _lw_[2], view[1][3] + start_index | 0, _lw_[4]], - view[2], - view[3], - view[4]]); + return symbol$13 + (view, + function(view){ + var _l4_ = view[1]; + return caml_call1 + (reset_playlist, + [0, + [0, _l4_[1], _l4_[2], view[1][3] + start_index | 0, _l4_[4]], + view[2], + view[3], + view[4]]); + }); }); return 0; } - var play_on_click = handler(0, click, play_from); + var + play_on_click = + func + (view, + function(view){ + return handler + (0, click, function(_l3_){return play_from(view, _l3_);}); + }); a: { if(image_blur_hashes[1] && album_id){ var id$0 = album_id[1], - _lt_ = return$1(img_url(server_id, id$0)), - img_url$0 = _lt_; + _l0_ = return$1(img_url(server_id, id$0)), + img_url$0 = _l0_; break a; } var img_url$0 = return$1(src$0(cst_track_png)); @@ -18613,14 +18927,14 @@ if(param){ var item_id = param[1][1][3]; if(symbol$0(item_id, id)){ - var _lv_ = [0, txt(0, _kO_), 0]; - return div$0(0, [0, [0, class$1("playing"), 0]], _lv_); + var _l2_ = [0, txt(0, _lk_), 0]; + return div$0(0, [0, [0, class$1("playing"), 0]], _l2_); } } return div$0 (0, 0, [0, txt(0, string_of_int(start_index + 1 | 0)), 0]); }), - _lu_ = + _l1_ = [0, [0, 80, div$0(0, 0, [0, span$0(0, 0, [0, txt(0, name), 0]), 0])], 0]; @@ -18632,7 +18946,7 @@ div$1 (0, 0, - [0, [0, [0, 80, play_on_click], 0]], + [0, [0, [0, 82, play_on_click], 0]], [0, [0, 82, @@ -18642,43 +18956,57 @@ 0, 0)], 0])], - _lu_]]; + _l1_]]; } function placeholder(i){return 0;} var - ui_table = [0, [0, columns(0)], _kP_], - data_source = + ui_table = [0, [0, columns(0)], _ll_], + total_items = func - (view, - function(view){ - function _lp_(view){return item_count(view[1]);} - var - total_items = - map$3(function(_ls_){return symbol$12(_lp_, _ls_);}, view); - function fetch$0(i){ - return let$1 - (view, function(view){return caml_call2(fetch, view, i);}); + (ranged_view, + function(param){ + if(param){ + var match = param[1]; + if(0 === match[0]){ + var ranged = match[1]; + return item_count(ranged[1]); + } } - function render$0(_lq_, _lr_){return render(view, _lq_, _lr_);} - return [0, total_items, fetch$0, render$0]; - }); + return 0; + }), + fetch$0 = + func + (ranged_view, + function(view, i){ + if(view){ + var match = view[1]; + if(0 === match[0]){ + var view$0 = match[1]; + return caml_call2(fetch, view$0, i); + } + } + return error(_lm_); + }), + render$0 = + pure(function(_lY_, _lZ_){return render(ranged_view, _lY_, _lZ_);}), + data_source = [0, total_items, fetch$0, render$0]; return make$6(ui_table, [0, placeholder], scroll_target)(data_source); } - function make_now_playing(reset_playlist, fetch, view){ - var scroll_target = get$4(_kg_); - return make$12(reset_playlist, fetch, [0, scroll_target], view); + function make_now_playing(reset_playlist, fetch, ranged_view){ + var scroll_target = get$4(_kO_); + return make$12(reset_playlist, fetch, [0, scroll_target], ranged_view); } var session_uuid$0 = - var_f(_kQ_, function(param){return to_string$5(0, new_uuid_v4(0));}), + var_f(_ln_, function(param){return to_string$5(0, new_uuid_v4(0));}), uuid = peek(session_uuid$0); set_session_uuid(uuid); query([0, peek(session_uuid$0)]); function fetch$1(ranged_view, i){ return query([6, ranged_view[1], ranged_view[4], i]); } - var P = Playback_controller([0, fetch$1]), playlist = var$1(_kR_, 0); - function on_click(param, _lo_){ + var P = Playback_controller([0, fetch$1]), playlist = var$1(_lo_, 0); + function on_click(param, _lX_){ symbol$1(playlist, peek(playlist) + 1 | 0); set$1(1); return 1; @@ -18692,15 +19020,15 @@ func (get$4(playlist), function(pl){ - return txt(0, symbol_concat(_kS_, string_of_int(pl))); + return txt(0, symbol_concat(_lp_, string_of_int(pl))); })], 0]; }); var - _kT_ = [0, [0, 82, ui(0)], 0], - _kV_ = [0, [0, 80, h1$0(0, 0, [0, txt(0, _kU_), 0])], _kT_], + _lq_ = [0, [0, 82, ui(0)], 0], + _ls_ = [0, [0, 80, h1$0(0, 0, [0, txt(0, _lr_), 0])], _lq_], status = - div$1(0, [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], 0, _kV_), + div$1(0, [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], 0, _ls_), player = P[3].call(null, 0), player_ui = div$1 @@ -18708,11 +19036,11 @@ [0, [0, [0, 80, style$0(cst_grid_column_1_1)], 0]], 0, [0, [0, 82, player], 0]), - f_search = make$8(0, 0, _kW_), - options = pure(of_list$1(_kX_)), - f_sort = make$9(0, 0, _kY_)(options), - options$0 = pure(of_list$1(_kZ_)), - f_order = make$9(0, 0, _k0_)(options$0), + f_search = make$8(0, 0, _lt_), + options = pure(of_list$1(_lu_)), + f_sort = make$9(0, 0, _lv_)(options), + options$0 = pure(of_list$1(_lw_)), + f_order = make$9(0, 0, _lx_)(options$0), f_sort_order = pair(f_sort[3], f_order[3]), choices = fold_monoid @@ -18720,19 +19048,19 @@ var l = param[2]; return map$4 (function(l){ - var _ln_ = [0, [0, 80, txt(0, l[2][1])], 0]; - return [0, l[2][3], _ln_, 1]; + var _lW_ = [0, [0, 80, txt(0, l[2][1])], 0]; + return [0, l[2][3], _lW_, 1]; }, l); }, [0, - return$1(empty$0), - function(_li_){ - function _lj_(_ll_, _lm_){return map2(_li_, _ll_, _lm_);} - return function(_lk_){return _lj_(_lk_, concat$1);}; + return$1(empty$1), + function(_lR_){ + function _lS_(_lU_, _lV_){return map2(_lR_, _lU_, _lV_);} + return function(_lT_){return _lS_(_lT_, concat$1);}; }], servers_libraries), - f_libraries = make$10([0, _k1_, join(choices)]), + f_libraries = make$10([0, _ly_, join(choices)]), filters = div$1 (0, @@ -18744,35 +19072,47 @@ [0, 82, f_order[1]], [0, [0, 82, f_search[1]], [0, [0, 82, f_libraries[1]], 0]]]]), f_value = f_libraries[2], - main_view = + view$0 = map3 (function(l, t, param){ var - o = param[2], s = param[1], filters = symbol$10(function(s){return [0, [0, s], 0];}, t), - _lg_ = [0, _cW_(s), 0], - _lh_ = [0, of_list$0(_cW_, l), _lg_]; - log([0, _k3_, [0, of_option(_cW_(_k2_), _cW_, t), _lh_]]); + _lP_ = [0, _cX_(s), 0], + _lQ_ = [0, of_list$0(_cX_, l), _lP_]; + log([0, _lA_, [0, of_option(_cX_(_lz_), _cX_, t), _lQ_]]); var sort = of_string$3(s); - return let$2 - (query([5, req(0, [0, [0, l]], [0, sort], filters, 0)]), - function(view){ - var order = of_string$2(view[4], o); - return [0, view, 0, view[4], order]; - }); + return create_view(req(0, [0, [0, l]], [0, sort], filters, 0)); }, f_value, f_search[3], f_sort_order), + view$1 = join(view$0), + main_view = + map2 + (view$1, + f_sort_order, + function(view, param){ + var order = param[2]; + return symbol$10 + (function(view){ + return symbol$13 + (view, + function(view){ + var size = view[4], order$0 = of_string$2(size, order); + return [0, view, 0, 0, order$0]; + }); + }, + view); + }), main_list = make$12(P[2], fetch$1, 0, main_view), playlist$0 = func - (get$4(_kh_), + (get$4(_kP_), function(param){ - if(! param) return span$1(0, 0, 0, [0, [0, 80, txt(0, _k4_)], 0]); - var playlist = param[1], _lf_ = pure(ok(playlist)); - return make_now_playing(P[2], fetch$1, _lf_); + if(! param) return span$1(0, 0, 0, [0, [0, 80, txt(0, _lB_)], 0]); + var playlist = param[1], _lO_ = pure([0, return$2(playlist)]); + return make_now_playing(P[2], fetch$1, _lO_); }), now_playing$0 = join(playlist$0), display_none = @@ -18792,12 +19132,12 @@ image_id = value$3(album_id, id), servers = to_list$1(peek(connexions)), connexion = assq(server_id, servers), - _le_ = connexion[1], - src = caml_call2(sprintf(_k5_), _le_, image_id); + _lN_ = connexion[1], + src = caml_call2(sprintf(_lC_), _lN_, image_id); else - var src = _k7_; + var src = _lE_; return style$0 - (caml_jsstring_of_string(caml_call1(sprintf(_k6_), src))); + (caml_jsstring_of_string(caml_call1(sprintf(_lD_), src))); }), at$0 = [0, [0, 82, display_none], [0, [0, 80, class$1("big-cover")], 0]], big_cover = @@ -18806,7 +19146,7 @@ [0, at$0], 0, [0, [0, 82, div$1(0, [0, [0, [0, 82, style$3], 0]], 0, 0)], 0]), - _k8_ = + _lF_ = [0, [0, 82, @@ -18816,7 +19156,7 @@ 0, [0, [0, 82, now_playing$0], 0])], [0, [0, 82, player_ui], 0]], - _k9_ = + _lG_ = [0, [0, 82, status], [0, @@ -18829,23 +19169,23 @@ [0, [0, 82, big_cover], [0, [0, 82, filters], [0, [0, 82, main_list], 0]]])], - _k8_]], + _lF_]], app = div$1 (0, - [0, function(_ld_){return to_at$0(_k__, _ld_);}(classes(0))], + [0, function(_lM_){return to_at$0(_lH_, _lM_);}(classes(0))], 0, - _k9_), + _lG_), is_storage_persistent = persist(manager(navigator)); function on_load(param){ - log([0, _k$_, [0, is_storage_persistent, 0]]); + log([0, _lI_, [0, is_storage_persistent, 0]]); var app$0 = observe$0(0, app); function on_invalidate(param){ request_animation_frame(function(param){quick_sample(app$0); return 0;}); return 0; } - var _lc_ = [0, quick_sample(app$0), 0]; - append_children(body(global_document), _lc_); + var _lL_ = [0, quick_sample(app$0), 0]; + append_children(body(global_document), _lL_); return set_on_invalidate(app$0, on_invalidate); } listen(0, dom_content_loaded, on_load, as_target(window)); @@ -18854,4 +19194,4 @@ } (globalThis)); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfc3ViIiwiYSIsImkiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsInYiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJncyIsImFyZ3NMZW4iLCJnIiwibmFyZ3MiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIiLCJvcmlnaW4iLCJldmVudCIsInplcm9fcG9zIiwibG9jZm10IiwiZW1wdHkkMSIsImVtcHR5JDIiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJwYXRoJDEiLCJwYXRoJDIiLCJuYW1lJDYiLCJpbml0aWFsX3JlcG9ydCIsInN0cmluZ3MiLCJ1cmwkMCIsImRlZmF1bHQkMSIsImFsYnVtIiwiYXJ0aXN0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwiYWJzIiwibG5vdCIsIm1heF9pbnQiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwic3RyaW5nX29mX2ludCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibG9vcCIsImkkMCIsImkkMSIsInN0cmluZ19vZl9mbG9hdCIsInN5bWJvbCIsImwxIiwibDIiLCJ0bCIsImhkIiwic3Rkb3V0Iiwic3RkZXJyIiwib3Blbl9vdXRfZ2VuIiwicGVybSIsIm9wZW5fb3V0IiwiZmx1c2hfYWxsIiwiaXRlciIsIm91dHB1dF9zdHJpbmciLCJvYyIsIm91dHB1dF9zdWJzdHJpbmciLCJjbG9zZV9vdXQiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJpYyIsInByZXJyX2VuZGxpbmUiLCJleGl0X2Z1bmN0aW9uIiwiZl95ZXRfdG9fcnVuIiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4kMCIsIm9sZF9leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiaXNfYmxvY2siLCJyYWlzZV91bmRlZmluZWQiLCJmb3JjZV9sYXp5X2Jsb2NrIiwiYmxrIiwiY2xvc3VyZSIsImUkMCIsImZyb21fdmFsIiwidmFsdWUiLCJkZWZhdWx0JDAiLCJnZXQkMCIsIm1hcCIsImlzX3NvbWUiLCJnZXRfb2siLCJtYXAkMCIsIm9mX2ludF9leG4iLCJzJDAiLCJsZW5ndGhfYXV4IiwibGVuJDAiLCJjb25zIiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X3RhaWxyZWNfYXV4IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsImluaXRfYXV4Iiwicm1hcF9mIiwiYWNjdSQwIiwiYWNjdSIsImwkMCIsImwkMSIsImFjY3UkMSIsImZpbmQiLCJhdXgiLCJwYXJ0IiwieWVzJDAiLCJubyQwIiwiY21wIiwicmV2X21lcmdlIiwidDIiLCJoMiIsInQxIiwiaDEiLCJhY2N1JDIiLCJhY2N1JDMiLCJyZXZfbWVyZ2VfcmV2Iiwic29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsImMkMCIsImMkMSIsImMkMiIsImMkMyIsImMkNCIsImMkNSIsIm4xIiwibjIiLCJyZXZfc29ydCIsInRsJDAiLCJjb21wYXJlIiwibWluIiwibWF4JDAiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImVuc3VyZV9nZSIsInN1bV9sZW5ndGhzIiwic2VwbGVuIiwidW5zYWZlX2JsaXRzIiwiZHN0IiwicG9zJDAiLCJlc2NhcGVfaWZfbmVlZGVkIiwiaW5kZXhfcmVjIiwibGltIiwidG9saXN0IiwicmVzJDAiLCJyZXMkMSIsImxpc3RfbGVuZ3RoIiwiZmlsbCIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJzaW5nbGV0b24iLCJhZGRfbWluX2VsZW1lbnQiLCJhZGRfbWF4X2VsZW1lbnQiLCJqb2luIiwicmgiLCJsaCIsIm1pbl9lbHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsIm1lcmdlIiwiY29uY2F0Iiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwiZW1wdHkiLCJpc19lbXB0eSIsInJlbW92ZSIsInVuaW9uIiwidjIiLCJ2MSIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJkaWZmIiwiY29uc19lbnVtIiwiZSQxIiwiY29tcGFyZV9hdXgiLCJlMSIsImUyIiwiZTEkMCIsImUyJDAiLCJlMiQxIiwiZTEkMSIsImUyJDIiLCJlMSQyIiwiZXF1YWwiLCJzdWJzZXQiLCJzMSQwIiwiczIkMCIsImZvbGQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsIm9mX3NvcnRlZF9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibGVmdCIsIm1pZCIsImwkMiIsInJpZ2h0Iiwib2ZfbGlzdCIsIng0IiwibGQiLCJscmQiLCJybGQiLCJmaW5kX29wdCIsIm1lbSIsIm1pbl9iaW5kaW5nIiwicmVtb3ZlX21pbl9iaW5kaW5nIiwibSQwIiwiZm9yX2FsbCIsImFkZF9taW5fYmluZGluZyIsImFkZF9tYXhfYmluZGluZyIsImNvbmNhdF9vcl9qb2luIiwiZCQwIiwiZDEiLCJkMiIsImQyJDAiLCJkMSQwIiwibTEiLCJtMiIsImVxdWFsX2F1eCIsImNsZWFyIiwicHVzaCIsInBvcF9vcHQiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiZnJvbSIsImNyZWF0ZSQxIiwibiQwIiwibiQxIiwic3ViJDIiLCJsZW5ndGgkMCIsInJlc2V0IiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3RyaW5nIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2Zjb252IiwiY0YiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfZm10dHkiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJmbXR0eSQ0IiwiZm10dHkkNSIsImZtdHR5JDYiLCJmbXR0eSQ3IiwiZm10dHkkOCIsImZtdHR5JDkiLCJzdWJfZm10dHkiLCJmbXR0eSQxMCIsInN1Yl9mbXR0eSQwIiwiZm10dHkkMTEiLCJmbXR0eSQxMiIsImZtdHR5JDEzIiwiZm10dHkkMTQiLCJmbXR0eSQxNSIsInN5bW0iLCJmbXR0eV9yZWxfZGV0IiwiZGUiLCJlZCIsImFmIiwiZmEiLCJkZSQwIiwiZWQkMCIsImFmJDAiLCJmYSQwIiwiZGUkMSIsImVkJDEiLCJhZiQxIiwiZmEkMSIsImRlJDIiLCJlZCQyIiwiYWYkMiIsImZhJDIiLCJkZSQzIiwiZWQkMyIsImFmJDMiLCJmYSQzIiwiZGUkNCIsImVkJDQiLCJhZiQ0IiwiZmEkNCIsImRlJDUiLCJlZCQ1IiwiYWYkNSIsImZhJDUiLCJkZSQ2IiwiZWQkNiIsImFmJDYiLCJmYSQ2IiwiZGUkNyIsImVkJDciLCJhZiQ3IiwiZmEkNyIsImRlJDgiLCJlZCQ4IiwiYWYkOCIsImZhJDgiLCJ0cmFucyIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwicmVzdDEiLCJyZXN0MiIsInJlc3QxJDAiLCJyZXN0MiQwIiwicmVzdDEkMSIsInJlc3QyJDEiLCJyZXN0MSQyIiwicmVzdDIkMiIsInJlc3QxJDMiLCJyZXN0MiQzIiwicmVzdDEkNCIsInJlc3QyJDQiLCJyZXN0MSQ1IiwicmVzdDIkNSIsInJlc3QxJDYiLCJyZXN0MiQ2IiwicmVzdDEkNyIsInR5MSQwIiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDEkOCIsInR5MTIiLCJ0eTExIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QxJDkiLCJyZXN0MiQ5IiwicmVzdDEkMTAiLCJyZXN0MiQxMCIsInJlc3QxJDExIiwicmVzdDIkMTEiLCJyZXN0MSQxMiIsInJlc3QyJDEyIiwicmVzdDEkMTMiLCJyZXN0MiQxMyIsInR5cGVfcGFkZGluZyIsInBhZHR5IiwicGFkdHkkMCIsInR5cGVfcGFkcHJlYyIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10JDAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJmbXR0eV9yZXN0JDAiLCJmbXRfcmVzdCQwIiwiZm10JDEiLCJmbXRfcmVzdCQxIiwiZm10dHlfcmVzdCQxIiwiZm10JDIiLCJmbXRfcmVzdCQyIiwiZm10dHlfcmVzdCQyIiwiZm10JDMiLCJmbXRfcmVzdCQzIiwiZm10dHlfcmVzdCQzIiwiZm10JDQiLCJmbXRfcmVzdCQ0IiwiZm10dHlfcmVzdCQ0IiwiZm10JDUiLCJmbXRfcmVzdCQ1IiwiZm10dHlfcmVzdCQ1IiwicHJlYyQ0IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwicGFkJDkiLCJwYWQkMTAiLCJmbXR0eV9yZXN0JDYiLCJwcmVjJDYiLCJmbXQkNyIsImZtdF9yZXN0JDciLCJwcmVjJDciLCJwYWQkMTEiLCJwYWQkMTIiLCJmbXR0eV9yZXN0JDciLCJwcmVjJDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJwYWQkMTMiLCJwYWQkMTQiLCJmbXR0eV9yZXN0JDgiLCJmbXQkOSIsImZtdF9yZXN0JDkiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdCQxMSIsImZtdF9yZXN0JDExIiwiZm10JDEyIiwiZm10dHlfcmVzdCQ5IiwiZm10X3Jlc3QkMTIiLCJwYWRfb3B0IiwiZm10JDEzIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwicGFkX29wdCQwIiwiZm10JDE0IiwiZm10dHlfcmVzdCQxMSIsImZtdF9yZXN0JDE0IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsInR5cGVfZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW0iLCJmbXQwIiwiZm10dHkwIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwidHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpIiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDUiLCJzdWJfZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkNyIsInN1Yl9mbXR0eV9yZXN0JDgiLCJzdWJfZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJzdWJfZm10dHlfcmVzdCQxNCIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE2Iiwic3ViMl9mbXR0eSQxIiwic3ViMV9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE3Iiwic3ViMl9mbXR0eSQyIiwic3ViMV9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJzdWJfZm10dHlfcmVzdCQxOSIsInN1Yl9mbXR0eV9yZXN0JDIwIiwic3ViX2ZtdHR5X3Jlc3QkMjEiLCJzdWJfZm10dHlfcmVzdCQyMiIsInN1Yl9mbXR0eV9yZXN0JDIzIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJzdWJfZm10dHlfcmVzdCQyNSIsInN1Yl9mbXR0eV9yZXN0JDI2IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9pY29udiIsImZvcm1hdF9vZl9pY29udkwiLCJmb3JtYXRfb2ZfaWNvbnZsIiwiZm9ybWF0X29mX2ljb252biIsImZvcm1hdF9vZl9mY29udiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwiY29udmVydF9pbnQiLCJjb252ZXJ0X2ludDMyIiwiY29udmVydF9uYXRpdmVpbnQiLCJjb252ZXJ0X2ludDY0IiwiY29udmVydF9mbG9hdCIsImhleCIsImFkZF9kb3RfaWZfbmVlZGVkIiwiaXNfdmFsaWQiLCJjYW1sX3NwZWNpYWxfdmFsIiwiZm9ybWF0X2NhbWxfY2hhciIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmJDAiLCJrJDAiLCJuZXdfYWNjIiwibWFrZV9wcmludGYiLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24iLCJhY2MkMiIsImFjYyQzIiwiYWNjJDQiLCJrJDEiLCJrYWNjIiwiayQyIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsInAkMCIsInAkMSIsImFyaXR5JDAiLCJtYWtlX2N1c3RvbSIsIm91dHB1dF9hY2MiLCJwJDMiLCJwJDQiLCJwJDUiLCJwJDIiLCJzdHJwdXRfYWNjIiwiZmFpbHdpdGhfbWVzc2FnZSIsIm9wZW5fYm94X29mX3N0cmluZyIsImludmFsaWRfYm94IiwicGFyc2Vfc3BhY2VzIiwicGFyc2VfbHdvcmQiLCJqJDAiLCJqJDEiLCJwYXJzZV9pbnQiLCJ3c3RhcnQiLCJ3ZW5kIiwiYm94X25hbWUiLCJuc3RhcnQiLCJuZW5kIiwiaW5kZW50IiwiZXhwX2VuZCIsImJveF90eXBlIiwia2ZwcmludGYiLCJmcHJpbnRmIiwiZXByaW50ZiIsImtzcHJpbnRmIiwic3ByaW50ZiIsInByaW50ZXJzIiwiZmllbGQiLCJvdGhlcl9maWVsZHMiLCJmaWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJjb252IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyJDAiLCJsaW5lIiwiY2hhciQxIiwibGluZSQwIiwiZmlsZSQwIiwiY2hhciQyIiwibGluZSQxIiwiZmlsZSQxIiwiY29uc3RydWN0b3IiLCJ0b19zdHJpbmckMCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImJ0IiwiZm9ybWF0X2JhY2t0cmFjZV9zbG90Iiwic2xvdCIsImluZm8iLCJpc19yYWlzZSIsInByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2UiLCJvdXRjaGFuIiwiYmFja3RyYWNlIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2UiLCJyZWdpc3Rlcl9wcmludGVyIiwiZm4iLCJvbGRfcHJpbnRlcnMiLCJuZXdfcHJpbnRlcnMiLCJlcnJvcnMiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJzdGF0dXMiLCJlbXB0eV9iYWNrdHJhY2UiLCJ0cnlfZ2V0X3Jhd19iYWNrdHJhY2UiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIiwiZGVidWdnZXJfaW5fdXNlIiwiZXhuJDEiLCJleG4kMCIsInJhd19iYWNrdHJhY2UkMCIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24kMCIsIm5ld19zdGF0ZSIsImFzc2lnbiIsInN0MSIsInN0MiIsImZ1bGxfaW5pdCIsImNvbWJpbmUiLCJleHRyYWN0Iiwic2VlZCQwIiwibWFrZSQyIiwibWFrZV9zZWxmX2luaXQiLCJjb3B5JDAiLCJiaXRzIiwiY3VydmFsIiwibmV3dmFsIiwibmV3dmFsMzAiLCJpbnRhdXgiLCJpbnQkMCIsImJvdW5kIiwiaW50JDEiLCJvbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInBybmciLCJwb3dlcl8yX2Fib3ZlIiwieCQwIiwieCQxIiwiaW5pdGlhbF9zaXplIiwicmFuZG9tIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImluc2VydF9idWNrZXQiLCJjZWxsJDAiLCJjZWxsJDEiLCJuaWR4IiwicmVzaXplJDAiLCJvc2l6ZSIsImtleV9pbmRleCIsInJlbW92ZV9idWNrZXQiLCJmaW5kX3JlYyIsIm5leHQxIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2luX2J1Y2tldCIsInJlcGxhY2VfYnVja2V0IiwibWVtX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV9ib3giLCJwcF9vcGVuX3N0YWciLCJwcF9jbG9zZV9zdGFnIiwicHBfY2xvc2VfdGFnIiwicHBfcmluaXQiLCJjbGVhcl90YWdfc3RhY2siLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfY3VzdG9tX2JyZWFrIiwicHBfcHJpbnRfYnJlYWsiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwibWFrZV9mb3JtYXR0ZXIiLCJvdXRwdXQiLCJmbHVzaCIsInBwZiIsImZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCIsImZvcm1hdHRlcl9vZl9idWZmZXIiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkYnVmIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfcHJpbnRfbGlzdCIsInBwX3YiLCJvcHQkMCIsInBwX3NlcCIsIm9wdCQxIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiZiQwIiwicCQ2IiwicCQ3Iiwia2ZwcmludGYkMCIsImZwcmludGYkMCIsImthc3ByaW50ZiIsImFzcHJpbnRmIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInZhbHVlJDAiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlIiwiYm94IiwiYm94JDAiLCJjcmVhdGUkNyIsImNhbGxiYWNrIiwiY2FsbGJhY2skMCIsImVudHJpZXMiLCJvYnNlcnZlciIsImVudHJpZXMkMCIsIm9mX25hdmlnYXRvciIsImltZ190b19qdiIsImltZyIsInRvX2p2IiwiYXJ0d29yayIsInNldF9tZXRhZGF0YSIsIm1ldGFkYXRhIiwibmV4dF90cmFjayIsInByZXZpb3VzX3RyYWNrIiwic2V0X2FjdGlvbl9oYW5kbGVyIiwiYWN0aW9uIiwic2V0X3Bvc2l0aW9uX3N0YXRlIiwiZHVyYXRpb24iLCJwbGF5YmFja19yYXRlIiwicG9zaXRpb24iLCJtYXliZV9mbG9hdCIsImR1cmF0aW9uJDAiLCJwbGF5YmFja19yYXRlJDAiLCJwb3NpdGlvbiQwIiwic3RhdGVfZGljdCIsInN1Ym1pdCIsInBhdHRlcm4iLCJwZXJzaXN0IiwibWFuYWdlciIsImFueSIsInJldHVybiQxIiwicHVyZSIsImlzX3B1cmUiLCJkdW1teSIsIm9wZXJhdG9yIiwiZGVzYyIsImZ1bmMiLCJ2eCIsIm1hcDIiLCJ2eSIsImNoaWxkIiwiYmluZCQxIiwiYWRkX2lkeCIsInBhcmFtIiwicmVtX2lkeF9yZWMiLCJzZWxmIiwicmVtX2lkeCIsInRyYWNlX2lkeCIsInRyYWNlX2lkeCQwIiwiaWR4JDAiLCJtb3ZfaWR4X3JlYyIsIm9sZGlkeCIsIm5ld2lkeCIsIm1vdl9pZHgiLCJnZXRfaWR4X3JlYyIsImdldF9pZHgiLCJpbnZhbGlkYXRlX25vZGUkMCIsInNlbnNpdGl2aXR5Iiwibm9kZSIsInNlbnNpdGl2aXR5JDAiLCJpbnZhbGlkYXRlX3RyYWNlIiwiaW52YWxpZGF0ZV9ub2RlIiwieiIsInkkMCIsInokMCIsInkkMSIsIngkMiIsImFjdGl2ZSIsImRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciIsImNhbGxzdGFjayIsImRvX2ludmFsaWRhdGUiLCJ1bnNhZmUiLCJ2YXIkMCIsImdldCQ0IiwicGVlayIsInVwZGF0ZSIsInByaW0iLCJhY3F1aXJlIiwicmVsZWFzZSIsImdldF9wcmltIiwiaW52YWxpZGF0ZSIsInN1Yl9yZWxlYXNlIiwiZmFpbHVyZXMkMCIsIm9yaWdpbiQxIiwib3JpZ2luJDAiLCJ0cmFjZSIsInRyYWNlJDAiLCJ4JDQiLCJ4JDUiLCJ4JDYiLCJyZXZpZHgiLCJzZWxmJDAiLCJzZWxmJDEiLCJzZWxmJDIiLCJzZWxmJDMiLCJpbnRlcm1lZGlhdGUiLCJmYWlsdXJlcyQ0IiwiY2hpbGQkMCIsIngkMyIsIndydCIsInNlbGYkNCIsInN1Yl9hY3F1aXJlIiwidHJhY2UkMSIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib2JzZXJ2ZSQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJmbHVzaF9yZWxlYXNlX3F1ZXVlIiwicXVldWUkMCIsInNhbXBsZSIsInNldF9vbl9pbnZhbGlkYXRlIiwiZmx1c2hfb3JfZmFpbCIsIm1haW5fZXhuIiwiZmFpbHVyZXMiLCJxdWlja19zYW1wbGUiLCJtYXBfcmVkdWNlIiwiaW5qIiwiaXRlbXMiLCJwbHVzIiwiY29uc19tb25vaWQiLCJ4cyIsInhzJDAiLCJ2JDAiLCJ4cyQxIiwidiQxIiwidiQyIiwiY29uc19tb25vaWQkMCIsIm5vdF9vcmlnaW4iLCJtYWtlJDMiLCJzZXRfcGFyZW50IiwibWFrZV9ub2RlIiwic2V0IiwiYmluZGluZyIsInJhd19pbnZhbGlkYXRlIiwiYXBwZW5kJDAiLCJnZXQkNSIsImludmFsaWRhdGVfYmluZGluZyIsInNldF9iaW5kaW5nIiwidW5zZXQiLCJzbWFsbGVyX2VsbCIsInNtaW4iLCJzbWF4IiwiZGlzYmFsYW5jZWQiLCJyZXBhcmVudCIsIm9sZGNoaWxkIiwibmV3Y2hpbGQiLCJyb3RfbGVmdCQwIiwidmVyc2lvbiIsInNuIiwicm4iLCJybCQwIiwiYmFsYW5jZSIsImJhbGFuY2UkMCIsInJvdF9sZWZ0Iiwicm90X3JpZ2h0JDAiLCJsbiIsImxyJDAiLCJyb3RfcmlnaHQiLCJpbmNfbGVmdCIsImluY19yaWdodCIsInNsIiwic3IiLCJjb21wdXRlX3N1Yl9zaXplIiwicmVzZXRfdmVyc2lvbiIsInJlYmFsYW5jZSIsInZlcnNpb24kMCIsImV4dHJhY3RfYmluZGluZ3MiLCJ0cmVlIiwicm5vZGUiLCJmdWxsX3JlYnVpbGQiLCJyZWQiLCJiaW5kaW5ncyIsImJpbmRpbmdzJDAiLCJyZWR1Y3Rpb24iLCJiaW5kaW5nJDAiLCJyZWR1Y3Rpb24kMCIsImFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0ZSQwIiwiZXh0cmFjdF9mcmluZ2UiLCJpbmNyZW1lbnRhbF9yZWJ1aWxkIiwiZnJpbmdlIiwiZnJpbmdlJDAiLCJmcmluZ2UkMSIsImV2YWwkMCIsIm9wYXF1ZSIsIm1hcF9yZWR1Y2UkMCIsIm1hcHBlciIsIm1vbm9pZCIsInNvdXJjZSIsInByaW0kMCIsImxlZnRfbW9zdCIsIndhbGtfcm9vdCIsInBhcmVudCQwIiwiZW1wdHkkMCIsImVsZW1lbnQiLCJtYXhpIiwicmFuayIsImNvbmNhdCQxIiwibWFza19vbGQiLCJtYXNrX25ldyIsIm1hc2tfYm90aCIsImlzX3NoYXJlZCIsImlzX25vdF9zaGFyZWQiLCJpc19ib3RoIiwiaXNfb2xkIiwiaXNfbmV3Iiwic2V0X2JvdGgiLCJnZXRfaW5kZXgiLCJ3aXRoX2luZGV4X25ldyIsInVubWFyayIsIm1hcmtlZCIsInNoYXJlZCIsImJsb2NrZWQiLCJta19zdGF0cyIsIm5ld19tYXJrZWQiLCJzdGF0cyIsIm5ld19zaGFyZWQiLCJuZXdfYmxvY2tlZCIsImJsb2NrIiwibWFzayIsIm1hcmsiLCJtYXJrJDAiLCJlbnF1ZXVlIiwiZGVxdWV1ZSIsInRyYXZlcnNlMSIsInRyYXZlcnNlIiwic29sZCIsInNuZXciLCJxb2xkIiwicW5ldyIsIm9sZF9zdGF0cyIsInRyIiwibmV3X3N0YXRzIiwidW5zYWZlX3RyYXZlcnNlIiwib2xkX3Jvb3QiLCJuZXdfcm9vdCIsIm9sZF9xdWV1ZSIsIm5ld19xdWV1ZSIsInJlc3RvcmUiLCJuZXh0X3NoYXJlZF9pbmRleCIsInN0IiwidW5ibG9jayIsInQkMCIsInVubWFya19vbGQiLCJpbmRleCQwIiwiZHJvcHBlZF9sZWFmIiwiYSQwIiwiYiQwIiwiaW5kZXgkMSIsImluZGV4JDIiLCJkcm9wcGVkX2pvaW4iLCJwcmVwYXJlX3NoYXJlZCIsInVubWFya19uZXciLCJub19kcm9wcGVkIiwiZ2V0X2Ryb3BwZWQiLCJ4b2xkIiwidG5ldyIsInRyYXZlcnNhbCIsIm5iX2Ryb3BwZWQiLCJuYl9zaGFyZWQiLCJuYl9kcm9wcGVkJDAiLCJ4bGVhZiIsInhqb2luIiwiZXZhbCQxIiwib3RoZXIiLCJtYWtlJDQiLCJyZWR1Y2UiLCJ1cGRhdGUkMCIsIm5ld190cmVlIiwib2xkX3RyZWUiLCJ1cGRhdGVfYW5kX2dldF9kcm9wcGVkIiwiZHJvcHBlZCIsImZvbGRfZHJvcHBlZCIsImJvdW5kJDAiLCJwdXJlX21hcF9yZWR1Y2UiLCJmb2xkX21vbm9pZCIsInNlcSIsInJlZHVjZSQwIiwicmVkdWNlciIsInJlZHVjZXIkMCIsInRyYW5zZm9ybV9saXN0Iiwib2ZfbGlzdCQxIiwidG9fbGlzdCQxIiwibHdkX2VtcHR5IiwibHdkX21vbm9pZCIsIm1hcCQ0IiwiZmlsdGVyX21hcCQwIiwic2VsZWN0IiwiYmluZCQyIiwibGlmdCIsIm9wdHMiLCJ0eXBlIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsImNvbnN1bWVfY2hpbGRyZW4iLCJjaGlsZF9ub2RlIiwiY2hpbGRfam9pbiIsImp2X2FwcGVuZCIsImp2X2JlZm9yZSIsImp2X3JlbW92ZSIsImp2X2NvbnRhaW5zIiwiY29udGFpbnNfZm9jdXMiLCJlbCIsInVwZGF0ZV9jaGlsZHJlbiIsImNoaWxkcmVuIiwic2NoZWR1bGVfZm9yX3JlbW92YWwiLCJwcmVzZXJ2ZV9mb2N1cyIsInNoaWZ0X3NpYmxpbmdzIiwic2libGluZyIsInJlbW92ZV9jaGlsZCIsInB1cmVfdW5pdCIsImR1bW15X2t2X2F0IiwiYXR0YWNoX2F0dHJpYnMiLCJhdHRyaWJzIiwic2V0X2t2IiwidW5zZXRfa3YiLCJzZXRfbHdkX2F0IiwicHJldiIsImF0IiwicGFpciIsImF0cyIsInNldF9hdCIsImt2IiwibGlzdGVuJDAiLCJhdHRhY2hfZXZlbnRzIiwiZXZlbnRzIiwiY2FjaGVkIiwidiQ0Iiwic3RoJDAiLCJldiIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQxIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJjb21wYXJlJDEiLCJvZl9zdHJpbmckMCIsIm9mX2Zsb2F0Iiwic3ltYm9sJDEwIiwibWFwX29yIiwiaXNfc29tZSQxIiwiZmxhdF9tYXAiLCJzeW1ib2xfYmluZCQwIiwidmFsdWUkMyIsInRvX2xpc3QkMiIsInN5bWJvbCQxMSIsInN5bWJvbCQxMiIsImdldF9leG4iLCJnZXRfb3IiLCJmbGF0X21hcCQwIiwic3ltYm9sJDEzIiwic3ltYm9sX2JpbmQkMSIsInN1ZiIsImNoZWNrIiwic2luZ2xlIiwiZGVlcCIsIm1pZGRsZSIsImlzX2VtcHR5JDEiLCJjb25zJDIiLCJ6JDEiLCJtaWRkbGUkMCIsInokMiIsInkkMyIsInokMyIsInokNCIsInkkNCIsInEkMCIsInkkMiIsInRha2VfYmFja19leG4iLCJxJDEiLCJ0YWtlX2JhY2siLCJzaXplX2RpZ2l0IiwibGV4X2Vycm9yIiwiZXJyb3JfcG9zIiwiY251bSIsImVudW0kMCIsInN0cmluZzJudW0iLCJ1cGRhdGVfcG9zIiwiaW50X29mX2hleGNoYXIiLCJ1dGY4X29mX2NvZGUiLCJ1IiwibWF4X3VzZWRfYml0cyIsInV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIiLCJoaWdoIiwibG93IiwiaGlnaCQwIiwibG93JDAiLCJlc2NhcGluZ19lcnJvciIsIm9mZnMiLCJ1bmVzY2FwZV9zdHJpbmciLCJ1MSIsInUyIiwicmVhZCQwIiwib2NhbWxfbGV4X3JlYWRfcmVjIiwib2NhbWxfbGV4X3N0YXRlIiwib2NhbWxfbGV4X3N0YXRlJDAiLCJvY2FtbF9sZXhfc3RhdGUkMSIsInJlYWRfY29tbWVudCIsInJlYWRfY29tbWVudCQwIiwib2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMiLCJjcmVhdGVfZnJvbV9sZXhidWYiLCJlbXNnIiwiZWNoYXIiLCJzY2hhciIsImVsaW5lIiwibG9nMiIsImJpdHMkMCIsIm1heF9qc29uX2ludCIsInN0cmluZ19vZl9mbG9hdF9qc29uIiwiaXNfaW50IiwiaW50X3ZhbHVlIiwidG9rZW5fZXJyb3IiLCJzJDEiLCJzJDIiLCJqc29uX3ZhbHVlIiwidG9rZW5fdmFsdWUiLCJvYmplY3RfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZV9zdGFydCIsInZhcmlhbnRfdmFsdWVfc3RhcnQiLCJ0dXBsZV92YWx1ZV9zdGFydCIsImFycmF5X3ZhbHVlc19zdGFydCIsInRvayQwIiwiYXJyYXlfdmFsdWVzIiwib2JqZWN0X3ZhbHVlc19zdGFydCIsImNvbG9uX3ZhbHVlIiwib2JqZWN0X3ZhbHVlcyIsImtleV9jb2xvbl92YWx1ZSIsInR1cGxlX3ZhbHVlcyIsInZhcmlhbnRfZW5kIiwiZGVjb2RlIiwiZXJyJDAiLCJuaWJibGVfdG9faGV4IiwiYWRkX2hleF9ieXRlIiwiZXNjYXBlIiwidG9fanNvbl9zdHJpbmciLCJhZGRfY2hhciQwIiwiYWRkX3N0cmluZyQwIiwiYWRkX3F1b3RlX3N0cmluZyIsInBwX2xpc3QiLCJwcHgiLCJvdXQiLCJmb3JtYXQiLCJqc29uIiwiZm9ybWF0X2ZpZWxkIiwianNvbiQwIiwicyQzIiwicHJldHR5X3ByaW50IiwicHJldHR5X3ByaW50X3RvX3N0cmluZyIsInByZXR0eV9wcmludF90b19jaGFubmVsIiwiZXJyb3IkMSIsInRvX2Fzc29jIiwibnVsbCQxIiwidG9rZW5fdG9fc3RyaW5nIiwicmVhZF9qc29uIiwicmVhZF9qc29uX2Vycm9yX2luZm8iLCJlcnJfaW5mbyIsImpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8iLCJqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyIsImluYyIsImpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIiwiZmlsZW5hbWUiLCJqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXAiLCJzdHJlYW0iLCJyZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8iLCJmaW4iLCJzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2ZpbGVfZXJyb3JfaW5mbyIsInN0cmVhbV9mcm9tX2xleGJ1Zl9lcnJvcl9pbmZvIiwianNvbl90b19jaGFubmVsX2ZtdCIsImVvbCIsImluY3IiLCJwc2VwIiwiYWRkX2ludCIsImFkZF9mbG9hdCIsInBzZXAkMCIsImxkciQxIiwianNvbl9saXN0IiwibGRyJDIiLCJsZHIiLCJqc29uX2Fzc29jIiwibGRyJDAiLCJuZXdzZXAiLCJqc29uX3RvX2NoYW5uZWwiLCJqc29uX3RvX2ZpbGVfZXhuIiwianNvbl90b19idWZmZXIiLCJqc29uX3RvX3N0cmluZyIsImpzb25fZXJyb3IiLCJlcnJvcl90b19zdHJpbmciLCJlcnJvcl9pbmZvIiwiZm5hbWUiLCJsbnVtIiwibG51bSQwIiwibG51bSQxIiwiZm5hbWUkMCIsImxvYyIsImFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIiwiZnJvbV9zdHJpbmciLCJ0b19zdGFuZGFyZCIsInRwbCIsImpvcHQiLCJzdGQiLCJsZXhfc3RyaW5nIiwibGV4X251bWJlciIsImxleF9pbnRlZ2VyIiwibGV4X2xhcmdlaW50IiwibGV4X3ZhcmlhbnQiLCJsZXhfdHVwbGUiLCJjb21tZW50X2NoZWNrIiwibnVtYmVyX3RvX3N0cmluZyIsImxhcmdlaW50IiwiaW50ZWdlciIsIm51bGwkMiIsInN0cmluZyQwIiwiYm9vbCIsImFzc29jIiwibGlzdCIsInR1cGxlIiwibnVtYmVyIiwiYXJyYXlfc3RhcnQiLCJhcnJheV9lbmQiLCJvYmplY3Rfc3RhcnQiLCJvYmplY3RfZW5kIiwidHVwbGVfc3RhcnQiLCJ0dXBsZV9lbmQiLCJ2YXJpYW50X3N0YXJ0IiwibmFtZSQwIiwibGV4X3N0cmluZyQwIiwibGV4X251bWJlciQwIiwibGV4X2ludGVnZXIkMCIsImxleF9sYXJnZWludCQwIiwibGV4X3ZhcmlhbnQkMCIsImxleF90dXBsZSQwIiwiY29tbWVudF9jaGVjayQwIiwibnVtYmVyX3RvX3N0cmluZyQwIiwibGFyZ2VpbnQkMCIsImludGVnZXIkMCIsIm51bGwkMyIsInN0cmluZyQxIiwiYm9vbCQwIiwiYXNzb2MkMCIsImxpc3QkMCIsInR1cGxlJDAiLCJ2YXJpYW50JDAiLCJudW1iZXIkMCIsImFycmF5X3N0YXJ0JDAiLCJhcnJheV9lbmQkMCIsIm9iamVjdF9zdGFydCQwIiwib2JqZWN0X2VuZCQwIiwidHVwbGVfc3RhcnQkMCIsInR1cGxlX2VuZCQwIiwidmFyaWFudF9zdGFydCQwIiwidmFyaWFudF9lbmQkMCIsIm5hbWUkMSIsImZyb21fc3RyaW5nJDAiLCJ0b19zdHJpbmckNCIsImxleF9zdHJpbmckMSIsImxleF9udW1iZXIkMSIsImxleF9pbnRlZ2VyJDEiLCJsZXhfbGFyZ2VpbnQkMSIsImxleF92YXJpYW50JDEiLCJsZXhfdHVwbGUkMSIsImNvbW1lbnRfY2hlY2skMSIsIm51bWJlcl90b19zdHJpbmckMSIsImxhcmdlaW50JDEiLCJpbnRlZ2VyJDEiLCJudWxsJDQiLCJzdHJpbmckMiIsImJvb2wkMSIsImFzc29jJDEiLCJsaXN0JDEiLCJ0dXBsZSQxIiwidmFyaWFudCQxIiwibnVtYmVyJDEiLCJhcnJheV9zdGFydCQxIiwiYXJyYXlfZW5kJDEiLCJvYmplY3Rfc3RhcnQkMSIsIm9iamVjdF9lbmQkMSIsInR1cGxlX3N0YXJ0JDEiLCJ0dXBsZV9lbmQkMSIsInZhcmlhbnRfc3RhcnQkMSIsInZhcmlhbnRfZW5kJDEiLCJuYW1lJDIiLCJxMSIsInEyIiwiZXZpY3Rfb25lIiwib25fZXZpY3QiLCJldmljdF9xMiIsImV2aWN0X3EyJDAiLCJldmljdF9xMSIsImVsdCIsInZpc2l0ZWQiLCJ0JDEiLCJldmljdCIsImluc2VydCIsIm9uX2luc2VydCIsInZpc2l0ZWQkMCIsInRvX2pzdHIkMSIsIm9mX2pzdHIkMCIsImpzdHIiLCJvZl9qdiIsImp2IiwicmFuZG9tX3N0YXRlIiwibmV3X3V1aWRfdjQiLCJ0ZWUiLCJ0b19hdCIsImVtcHR5JDQiLCJ0b19hdCQwIiwiaWQkMCIsImNsYXNzZXMiLCJ1bmlvbiQwIiwiYXR0cnMiLCJhZGQkMSIsImF0X25hbWUiLCJhZGRfYm9vbCIsImFkZF9vcHQiLCJtYXBfY29sIiwib2ZfYXQiLCJjb25zJDMiLCJjbGFzcyQyIiwidiQ1Iiwic3ltYm9sJDE0Iiwib2Zfc3RyaW5nJDEiLCJ0b19zdHJpbmckNiIsInRvX3B4IiwiZ2V0X2ZvbnRfc2l6ZV9pbl9weCIsImZvbnRfc2l6ZSIsImZvbnRfc2l6ZSQwIiwibWFwMyIsInRyaXBsZSIsImpzX3Njcm9sbCIsIm1ha2UkNSIsInNjcm9sbF90YXJnZXQiLCJhY3RpdmVfY2xhc3MiLCJhdCQxIiwib25fY2xpY2siLCJoYW5kbGVyJDAiLCJjb250cm9scyIsIm9uX3doZWVsIiwiZWx0JDAiLCJ2JDYiLCJjc3Nfc2l6ZSIsInRvX2hlYWRlciIsImNlbGxzIiwic3R5bGUkMSIsInRlbXBsYXRlIiwic3R5bGUkMiIsImhlYWRlciIsInJvd19oZWlnaHQiLCJtYWtlJDYiLCJ1aV90YWJsZSIsImRhdGFfc291cmNlIiwicm93X3NpemUiLCJoZWlnaHRfbiIsImhlaWdodCQwIiwidGFibGUiLCJyb3dfaW5kZXgiLCJ1bmxvYWQiLCJyb3ciLCJyb3dfZGF0YSIsIm5ld19jYWNoZSIsImNhY2hlX3JlZiIsImZldGNoIiwiaW5kZXhlcyIsImNhY2hlIiwibG9hZCIsImRhdGEkMCIsImluc2VydGVkIiwiY2FjaGUkMCIsInRvX2xvYWQiLCJ0YWJsZV9oZWlnaHQiLCJjb21wdXRlX3Zpc2libGVfcm93cyIsImxhc3Rfc2Nyb2xsX3kiLCJkaXYiLCJzY3JvbGxfeSQwIiwiZGlyZWN0aW9uIiwidmlzaWJsZV9oZWlnaHQiLCJoZWFkZXJfaGVpZ2h0IiwibnVtYmVyX29mX3Zpc2libGVfcm93cyIsInNjcm9sbF95JDEiLCJmaXJzdF92aXNpYmxlX3JvdyIsImxhc3RfdmlzaWJsZV9yb3ciLCJibGVlZGluZyIsImJsZWVkaW5nJDAiLCJsYXN0IiwicHJlcGFyZSIsInJlbmRlciIsImN1cnJlbnRfcm93Iiwicm93JDAiLCJwb3B1bGF0ZV9vbl9zY3JvbGwiLCJ0b3RhbF9pdGVtcyIsInZpc2libGVfcm93cyIsInRvdGFsX2l0ZW1zJDAiLCJzY3JvbGxfaGFuZGxlciIsImxhc3RfdXBkYXRlIiwidGltZW91dCIsInJlc2V0X3RpY2tlciIsImRlYm91bmNpbmdfaW50ZXJ2YWwiLCJyZXBvcHVsYXRlX2RlcHMiLCJtYWtlX3NwYWNlciIsInJvd3MiLCJzcGFjZXIiLCJ0YWJsZV9ib2R5IiwiZmlyc3Rfc3BhY2VyIiwibGFzdF9zcGFjZXIiLCJ0YWJsZV9oZWFkZXIiLCJyZWN0IiwiZ3JpZF9zdHlsZSIsInRhYmxlJDAiLCJzY3JvbGxfdGFyZ2V0JDAiLCJzY3JvbGxfdGFyZ2V0JDEiLCJtYWtlJDciLCJDIiwibGFuZyIsImtleXMiLCJjaGVja19rZXkiLCJsb2NhbF9zdG9yYWdlIiwic3RvcmUiLCJmZXRjaCQwIiwiZW5jb2RlZF92YWx1ZSIsImluaXRpYWxfdmFsdWUiLCJtYWtlX3BlcnNpc3RlbnRfdmFyIiwidmFyJDEiLCJuZXdfdmFsdWUiLCJ2YXJfZiIsImtleSQwIiwibWFrZV9oYW5kbGVyIiwidmFsdWVfY2hhbmdlX2V2ZW50IiwiZGVmYXVsdF92YWx1ZSIsIm9uX2NoYW5nZSIsIm1ha2VfaW5wdXQiLCJ2YWxpZGF0ZSIsInBhdHRlcm4kMCIsInJlcXVpcmVkIiwidHlwZSQxIiwidmFsaWRhdGUkMCIsInRleHRfaW5wdXQiLCJwbGFjZWhvbGRlciQwIiwicGFzc3dvcmRfaW5wdXQiLCJzdWJtaXQkMCIsImZpZWxkJDAiLCJzZXR0ZXIiLCJjcmVhdGUkOCIsIkZvcm0iLCJvbl9zdWJtaXQiLCJlbHRzIiwiZWx0cyQwIiwib25fc3VibWl0JDAiLCJuYW1lJDMiLCJiYXNlX25hbWUiLCJtYWtlJDgiLCJuYW1lJDQiLCJtYWtlJDkiLCJvcHRpb25zIiwib3B0aW9ucyQwIiwic2VsZWN0ZWQiLCJuYW1lJDUiLCJtYWtlJDEwIiwibWFrZV9jaGVjayIsImxhYmVsIiwiY2hlY2tlZCIsImxibCIsImNoZWNrZWQkMSIsIm1ha2VfYWxsIiwiYWxsIiwidiQ3IiwiYXBwbHlfc3RhdGUiLCJ3aXRoX3N0YXRlIiwiUyIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJmdW5jJDAiLCJoJDEiLCJuZXh0JDAiLCJ0d29fc3RhdGUiLCJ5b2pzb25fb2Zfc3RyaW5nIiwieW9qc29uX29mX2ludCIsInlvanNvbl9vZl9vcHRpb24iLCJ5b2pzb25fb2ZfYSIsInlvanNvbl9vZl9saXN0IiwibHN0IiwicmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyIsIm9mX3lvanNvbl9lcnJvciIsIndoYXQiLCJ5b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQxNSIsImpzdHJfb2ZfbWV0aG9kIiwidXNlcl9vZl95b2pzb24iLCJmaWVsZF95b2pzb25zIiwibmFtZV9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsInNlcnZlcl9uYW1lX2ZpZWxkIiwiaWRfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwic2VydmVyX25hbWVfdmFsdWUiLCJpZF92YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsIm5hbWVfdmFsdWUiLCJ5b2pzb25fb2ZfdXNlciIsInZfaWQiLCJ2X3NlcnZlcl9uYW1lIiwidl9zZXJ2ZXJfaWQiLCJ2X25hbWUiLCJibmRzIiwiYXJnJDAiLCJibmRzJDAiLCJhcmckMSIsImJuZHMkMSIsImFyZyQyIiwiYm5kcyQyIiwicGFyYW1zX29mX3lvanNvbiIsInVzZXJuYW1lX2ZpZWxkIiwicHdfZmllbGQiLCJwd192YWx1ZSIsInVzZXJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfcHciLCJ2X3VzZXJuYW1lIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwidXNlcl9maWVsZCIsImFjY2Vzc190b2tlbl9maWVsZCIsImFjY2Vzc190b2tlbl92YWx1ZSIsInVzZXJfdmFsdWUiLCJ5b2pzb25fb2ZfcmVzcG9uc2UiLCJ2X2FjY2Vzc190b2tlbiIsInZfdXNlciIsImVuZHBvaW50IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJwcmltYXJ5X2ZpZWxkIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsInRfb2ZfeW9qc29uIiwic29ydF9uYW1lX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X3NvcnRfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDMiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5Iiwic2Vzc2lvbl91dWlkIiwic2V0X3Nlc3Npb25fdXVpZCIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwic2Vzc2lvbl91dWlkJDAiLCJyZXF1ZXN0JDEiLCJiYXNlX3VybCIsImhlYWRlcnMiLCJRIiwicGF0aF9wYXJhbXMiLCJiYXNlX3VyaSIsImJhc2VfcGF0aF9zZWdtZW50cyIsImVuZHBvaW50X3BhdGhfc2VnbWVudHMiLCJwYXRoX3NlZ21lbnRzJDAiLCJ1cmkiLCJ1cmkkMCIsImF1dGhvcml6YXRpb24kMCIsImhlYWRlcnMkMCIsIm1ldGhvZCIsImJvZHkiLCJwYXJhbXMkMCIsInVyaV93aXRoX3BhcmFtcyIsInVybCQxIiwiaW5pdCQwIiwiY29ubmVjdCIsImNyZWRlbnRpYWxzIiwicGFzc3dvcmQiLCJ1c2VybmFtZSIsImF1dGgiLCJhdXRoX3Jlc3BvbnNlIiwidGFnX29mIiwiZnV0dXJlcyIsImxpc3RlbmVycyIsIndvcmtlciIsInF1ZXJ5IiwidXVpZCIsImZ1dCIsInNldCQwIiwicXVlcnkkMCIsIm9uX21lc3NhZ2UiLCJtZXNzYWdlIiwib2Zfc3RyaW5nJDIiLCJvZl9zdHJpbmckMyIsIml0ZW1fY291bnQiLCJyZXEiLCJzcmNfdmlld3MiLCJzdGgkMSIsImZpbHRlcnMiLCJ0X3RvX2p2IiwiZW5jb2RlciIsImp2X3RvX3QiLCJkZWNvZGVyIiwic29ydHNfb2ZfeW9qc29uIiwiZGF0ZV9hZGRlZF9maWVsZCIsInZpZXdzX2ZpZWxkIiwidmlld3NfdmFsdWUiLCJkYXRlX2FkZGVkX3ZhbHVlIiwieW9qc29uX29mX3NvcnRzIiwidl92aWV3cyIsInZfZGF0ZV9hZGRlZCIsInRfb2ZfeW9qc29uJDAiLCJzb3J0c19maWVsZCIsIml0ZW1fZmllbGQiLCJpdGVtX3ZhbHVlIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidl9zb3J0cyIsImNvbXBhcmUkMiIsInRvX2p2JDAiLCJ2aWV3cyIsInNvcnRfbmFtZSIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDAiLCJwYXRoJDAiLCJ0b19qdiQxIiwib2ZfanYkMSIsInRvX2p2JDIiLCJvZl9qdiQyIiwidG9fanYkMyIsIm9mX2p2JDMiLCJwYXRoJDMiLCJ0b19qdiQ0Iiwib2ZfanYkNCIsImNvbGxlY3Rpb25fdHlwZSIsInBhdGgkNCIsInRvX2p2JDUiLCJvZl9qdiQ1IiwiZ2V0X2tleSIsImFjdGl2ZV9sYXlvdXQiLCJnZXQkNyIsInN0cmluZyIsInNldCQxIiwiY29ubmV4aW9ucyIsImNvbm5lY3QkMCIsInJlZnJlc2giLCJjb25uZXhpb24iLCJzZXJ2ZXJfaWQiLCJyZXBvcnQiLCJwcmV2aW91c19zdGF0dXMiLCJyZW1haW5pbmciLCJyZW1haW5pbmckMCIsInNlcnZlcnNfd2l0aF9zdGF0dXMiLCJzZXJ2ZXIiLCJuZXdfY29ubmV4aW9uIiwic2VydmVycyIsInVybF9maWVsZCIsInBhc3N3b3JkX2ZpZWxkIiwic3VibWl0JDEiLCJ1aV9mb3JtIiwidXJsIiwidWlfc3RhdHVzIiwic3luY19wcm9ncmVzcyIsImZ1dF90b19sd2QiLCJzZXFfc2hhcmUiLCJsX3NhbWUiLCJyX3NhbWUiLCJyJDEiLCJsaWJfZGlmZiIsInNlcnZlcnNfbGlicmFyaWVzIiwicHJldmlvdXNfdmFsdWUiLCJ1aSIsInN0YXR1c2VzIiwidWlfZm9ybSQwIiwibm93X3BsYXlpbmciLCJhdWRpb191cmwiLCJpdGVtX2lkIiwic2V0X3BsYXlfdXJsIiwicGxheWxpc3QiLCJjdXJyZW50X2luZGV4IiwicGxheWxpc3QkMCIsIml0ZW0iLCJhbGJ1bV9pZCIsInNlc3Npb24iLCJpbWFnZV9pZCIsImltZ19zcmMiLCJyZXNldF9wbGF5bGlzdCIsIm1ha2UiLCJhdWRpb19lbHQiLCJzZXRfc3JjIiwibmV4dF9pbmRleCIsInNldF9wb3NpdGlvbl9zdGF0ZSQwIiwib25fZXJyb3IiLCJidG5fbmV4dCIsInN0eWxlJDAiLCJucCIsInRyYWNrX2NvdmVyIiwidHh0JDAiLCJ0aXRsZSIsInRyYWNrX2RldGFpbHMiLCJub3dfcGxheWluZyQwIiwiYXQkMiIsIm1ha2UkMTEiLCJvbl9jbGljayQwIiwiY29sdW1ucyIsIm1ha2UkMTIiLCJpbWdfdXJsIiwic3RhcnRfaW5kZXgiLCJpbWFnZV9ibHVyX2hhc2hlcyIsInBsYXlfZnJvbSIsInBsYXlfb25fY2xpY2siLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsInJlbmRlciQwIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJyYW5nZWRfdmlldyIsInBsIiwicGxheWVyIiwicGxheWVyX3VpIiwiZl9zZWFyY2giLCJmX3NvcnQiLCJmX29yZGVyIiwiZl9zb3J0X29yZGVyIiwiY2hvaWNlcyIsImZfbGlicmFyaWVzIiwiZl92YWx1ZSIsIm1haW5fdmlldyIsIm9yZGVyIiwibWFpbl9saXN0IiwiZGlzcGxheV9ub25lIiwic3R5bGUkMyIsImJpZ19jb3ZlciIsImFwcCIsImlzX3N0b3JhZ2VfcGVyc2lzdGVudCIsIm9uX2xvYWQiLCJhcHAkMCJdLCJzb3VyY2VzIjpbIi9idWlsdGluLythcnJheS5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytiYWNrdHJhY2UuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2pzbGliLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8raWVlZV83NTQuanMiLCIvYnVpbHRpbi8rb2JqLmpzIiwiL2J1aWx0aW4vK2ludDY0LmpzIiwiL2J1aWx0aW4vK2JpZ2FycmF5LmpzIiwiL2J1aWx0aW4vK2ludHMuanMiLCIvYnVpbHRpbi8raGFzaC5qcyIsIi9idWlsdGluLyttYXJzaGFsLmpzIiwiL2J1aWx0aW4vK2NvbXBhcmUuanMiLCIvYnVpbHRpbi8rZm9ybWF0LmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rZnMuanMiLCIvYnVpbHRpbi8rdW5peC5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2xleGluZy5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sZXhpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMtZGF0YS9DQ0ZRdWV1ZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9jb21wbGlhbnRfbGV4eGVyLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYXRhX3NvdXJjZS9qZWxseWZpbl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3N0b3Jlcy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3luYy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vbGFuZy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vd29ya2VyX2NsaWVudC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vc2VydmVycy5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vcGxheWVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0QmFzaWNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RkbGliLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xpc3QubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9vYmoubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxMYXp5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGF6eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NDaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2hhci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2ludC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2J5dGVzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYXJyYXkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9tYXAubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3F1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnVmZmVyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvcHB4X3lvanNvbl9jb252X2xpYi95b2pzb25fY29udl9lcnJvci5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Z1bi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2RpZ2VzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYWxsYmFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9kb21fcmVjdF9yZWFkX29ubHkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL3Jlc2l6ZV9vYnNlcnZlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvYnJyZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvYnJyLWx3ZC9lbHdkLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDTGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NPcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy1kYXRhL0NDTXVsdGlNYXAubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL0ZGQ2FjaGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvYXR0cnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdXRpbHMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvY29udHJvbGxlZF9zY3JvbGwubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdGFibGUvc2NoZW1hLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9wZXJzaXN0ZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGRfdGV4dGlucHV0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkX3NlbGVjdC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9maWVsZF9jaGVja2JveGVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2J1dHRvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3BweF95b2pzb25fY29udl9saWIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi93b3JrZXJfYXBpL3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3ZpZXcubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiX3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vYXBwX3N0YXRlLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi91aS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWlfcGxheWxpc3QubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL21haW4ubWwiLCIvaG9tZS9ydW5uZXIv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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7OztHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SXFCNU9JRzs7SUN0SEFDOzs7Ozs7Ozs7Ozs7Ozs7O0lDVUFDO0lBSUFDO0lDSEFDOzs7Ozs7Ozs7Ozs7O0lDSEpDO0lBb0JFQztJQUdBQztJQXNCQUM7SUFLQUM7SUFtSEFDO0lDeEpBQztJQUdBQztJQWdDTUM7SUFRQUM7SUFvQ0ZDO0lDWEZDO0lDekdFQzs7OztJQ0pBQztJQ3VEQUM7SUNRY0M7SUFDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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U2xNLEtBQXNCO1lBSS9Cc3BDO0lBcnRCQTlDLGVBMFZBMEI7SUE0WEYsT0F0dEJFMUIsZUEyVkEyQjtHQTRYNkI7RzNCaDFCekJuNEIsUTJCODBCSnM1QjtZQ2gyQ0FDLG1CQUFtQjVzQyxNQUNqQnRHO0lBQUosSUFDSTZtQyxPQUFVLGFBRFY3bUMsZUFBQUEsTUFBQUE7SUFFSiwwQkFIcUJzRyxNQUVqQnVnQztJQUNKO0dBQThCO0dDd0k5QjtHRDNJRXFNO0dDK0lxQixlLFU7Rzt3QixxQjs7STtJLE87RztHOzJCLE8sYzs7STtJLE87Rzs7STtJOzs7O0ksTztHO3lCLE8sc0IsYzswQixpQzttQyxPLHlCOzhCO0c7RyxJLGU7dUIsNEI7NEIsaUM7O0k7STtHO3lCLHNCOztJLDRCO0c7O0ksWTs7SSxPOztHOztJLFk7O0k7STs7Rzt3QixNLE87eUIsYyxPOztJLFk7O0k7O3dCLFk7d0IsWTsyQixVLE87O0ksWTs7STs7OEI7d0IsOEI7d0IscUI7O0k7SSw2QixPLHVCO0c7Ozs7O29COztNLFU7Ozs7OztJO0c7O0k7SSxXOztJO0k7Rzs7STtJLE8seUIsVTtHO0c7OztLLE87NkIsTyxPLGUsTyxPO0k7SSxtQjtHO3VCLE8sbUI7O0ksTztJO0c7eUIsTyxPLHNDOztJLE87YTthO0c7O0ksTztHO1lDbkduQkMsYzt1QjttQixnQjt5QixrQjs7STtLLE07STtJLHVCLCtDO0k7SSxxQyw4QjtJO29CLHVEO0k7RzswQixnQzt3Qix1Qjs7STs7OzJCLGlCLG1CO0c7O0ksNkIsZ0IsbUI7RztrQix3Qjs7cUIsbUIsb0I7SSxvQixtQix1QjtJO0c7O0kscUM7Rzt5QixvQjs7SSxzQjs7YyxlOztjLE87YTtHOztJLDRCLE90QjNDRnh3QjtHO0c7c0IscUI7MEMsOEI7RzsrQixvQixTOztJO0ksVTs7SztLO0k7STtJO0c7K0IsTyx3QjtHO0k7STtJO0k7STtJO0k7STtJO0c7RztHO0c7RztzQixPLGtCOztJLEksUTs7Ozs7Szs7STtHO0c7RztHO0k7STtJOztJLFc7O0k7RztHO29CLHNCOzsyQixPLG9CO0k7SztNO007TTtLOzs7Ozs7Szs7Rzs7MkIsc0IscUI7STtLLEksa0I7SztLO0s7Ozs7OztLOztHO0c7dUIsTyxhO3NCLGtCOztJO0k7STtHO3lCLE8sYTtzQixpQjtHO3dCLHVCO3NCLHFCO3dCLGlDOzBCO0c7STtJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO3VCLHVCO3FCLHFCO29CLG9CO0csSSwrQjtxQixtQjt1QixxQjtzQixvQjt1Qix1Qjt1Qix1QjtHO3dCLDBCO0csK0I7dUIsa0IsUzs7Ozs7O08sNkJMbUNBVztPOztNOzs7Szs7O007Ozs7OzRCOzs7VTs7OztJO0k7SSxRO0k7SSxzQjtJO0c7O0k7SSxPO0c7O0k7STtHOztJLGtCOzBCLHdCO0k7STtHOzJCLGdDOztJLDBDO0c7dUIsb0IsTyx1Qjs7SSxZLCtCO0c7O0k7SSxJLFEsdUI7STtHO3dCLHNCOztJO0k7STtJO0c7RztJO0k7STtJO0k7STtJO0k7STtJO0k7b0MsNEI7RyxtQztHLGlDO0csZ0M7RyxrQztvQiw4Qjs7STtJOzs7OztHOztJLGdDO0c7a0Msa0MsTztHOztJOzs7b0I7O007TTs7Ozs7SSxPO0c7cUIsZ0Q7eUIsZ0Q7c0IsZ0Q7eUIsUztzQixPLFE7RztHO0k7STtJO0c7O0ksTyxrQjtHOzRCLDBCLE87O0ksNkI7STtHO0c7RzswQjs7SSxtQyxlO0c7Rzs7STtJLFM7STs7SztLOztJLHNCO0k7Rzs7Ozs7Ozs7Ozs7Ozs7O0k7SSxvRDtJO0k7SSxxQklwQ0FkLG1CO0k7STtJO0k7STtJO0k7SSxvRDtJO0c7Rzs7STtJO0c7RztHOzt3QjtJLHNCLGtDO0c7RztHO0c7RztHO29CLGlCO0c7cUIseUI7O3dCO0ksc0IsK0I7Rzs7SSxJLGlCOzs7MEI7OztHO0c7Rzs7STtJO0c7O0k7STtJO0c7Rzs7STtJO0k7RztHO0c7RztZd0JoQkFxRixPQUFPcHBCLEdBQUksT0FBSkEsWUFBa0M7dUI7WUNpQnZDMjBDLGFBQWEzMEMsR0FBSSxZQUFKQSxrQkFBc0Q7WUFLbkU0MEMsU0FBTzUwQyxHQUFJLE9BQUpBLGNBQWlDO1lBSzFDNjBDO0lB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RG9RcUJoNkM7O1UsTzs7b0I0RHBRckJnNkM7OEQ1RG9RcUJoNkM7O1UsTzs7b0I0RHBRckJnNkM7OEQ1RG9RcUJoNkM7O1U7O1U7O1UsTzs7VSxPOztVLE87O1UsTzs7VSxVNER4UHJCbzZDLGtCNUR3UHFCcDZDOzs7O2MsTzs7YyxPOztVOztVLGUsNEJBQUFBO1UsTzs7VTs7VUE0SHZCLG1CQTVIdUJBLFFBQUFBLG1CQUFBQTtVLFc0RDdLckJpN0M7O1U7O1U7VyxPLHVCNUQyS0lHLFlBRWlCcDdDOztVLE9BRmpCbzdDLGtCQUVpQnA3Qzs7VTREcFByQnE2QyxXNURvUHFCcjZDO1U7VyxPLHVCQUZqQm83QyxZQUVpQnA3Qzs7VSxPQUZqQm83QyxrQkFFaUJwN0M7O1UsWTtpRDtVQTBLckJ5N0MsYUExS3FCejdDO1U7VyxPLHVCQUZqQm83QyxZQUVpQnA3Qzs7VSxPQUZqQm83QyxrQkFFaUJwN0M7O1UsYzt1RDtVO1csTyx1QkFGakJvN0MsWUFFaUJwN0M7O1UsT0FGakJvN0Msa0JBRWlCcDdDOztVLE80RHBRckJnNkM7NEQ1RG9RcUJoNkM7O01BdUtBLFdBdktBQSxXQUFBQTtNQUFPdTdDLG9CQUFBQzs7SUF3S21CO2FBRS9DRSx3QkFBYTE3QztLQUNkO0tBQUE7TUFBQSxPQUFBO2VBQ0MyN0MsZ0NBRmEzN0M7O0tBQ2QsT0FDQzI3QyxzQ0FGYTM3QztJQUN3QjthQURyQ3k3QyxhQUFhejdDO0ssdUJBQWIwN0Msa0JBQWExN0M7O2FBRWIyN0Msb0NBQTZCMzdDLFFBQU9zN0M7S0FDdEMsSUFEc0NDLG9CQUFBRDtLQUN0QztNQUFNO09BRGdDRSwyQkFwWnBDcjBDLGtCQW9ab0NvMEMsbUJBQVB2N0M7Y0FBT3c3QztjQUFBQTs7VTs7VTREaGFwQ25CLFc1RGdhNkJyNkM7VTtXLE8sdUJBRjdCMDdDLG9CQUU2QjE3Qzs7VSxPQUY3QjA3QywwQkFFNkIxN0M7O1UsTzREaGI3Qmc2Qzs7VTtXLE8sdUI1RDhhQTBCLG9CQUU2QjE3Qzs7VSxPQUY3QjA3QywwQkFFNkIxN0M7O01Bc0JSLFdBdEJRQSxXQUFB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T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7OztNQXBERjFCO01BQ0FDO01BQ0FDO01BQ0FDO01BR0FFO01BREFEO01BR0FFO01BRUFDO01BbUJBVTtNQVRBUjtNQURBRDtNQUVBRTtNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQztNQUNBQzs7T0FFQUM7T0FUQVI7T0FEQUQ7T0FFQUU7T0FDQUM7T0FDQUM7T0FxQkVNO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOzJCLE81RGhZSm54QixRO0dBVEFGOztJO0ssSztLLEs7SyxLO0ssSztLLEs7SyxJOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCOztvQztJLGdCO0k7Rzs7SSxzQjtJLHVCLG9DO0c7O0k7STtJLHVCLDRDO0ksSSxxQixZOzs7TTs7O0ssZ0I7Szs7TTs7O0ssc0I7STs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7O0ssVztLOzs7Ozs7b0I7SyxXO0s7Ozs7Rzs7O2E2RGpEQXprQyxLQUFLM0YsR0FBSSxPMUU2S1g4dkMsTzBFN0tPOXZDLE1BQXNCO2FBQzNCcXBCLGNBQVksVzFFYWQ3TixpQjBFYnVEO2FBRXJEeEYsSUFBSWhXLEdBQUU4RSxHQUFFbkU7S0FBMkMsNkJBQTdDbUUsR0FBRW5FLEdBQUpYO0tBQVEsVzFFbUNWeXRELE8wRW5DSTNvRCxHQUFGOUU7SUFBbUU7YUFFdkVtd0IsU0FBU253QjtLQUNMLFkxRTZITnF1RCxVMEU5SFdydUQ7aUJBRUQsV0FGQ0E7S0FJQzs7TUFERzhFO01BQVBrTjtNQUNBclIsdUJBRE9tRSxHQUhKOUU7S0FLUCxlQUZJZ1MseUJBQU9sTixHQUhKOUUsZ0JBR0k4RSxHQUNQbkU7SUFDZ0Q7YUFFdEQ4a0IsS0FBS3psQixHQUFFOEUs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Qm5TQTZSLHNCQUlBRTs7O0lzQjRJQTBlLHdCckRqSU1qbEMsUUFHRkM7WXFEa0lGaWxDO0lBQ0Ysa0JBTEFEO0lBTVUsSUFBTkUsUXBEa2JKLy9CLGFvRDNrQkE0L0I7SUEwSkEsU0FBSTMvQjtLQUNGLHdDcERzZkZXLGFvRHhmSW0vQixRQUdvQixTQUFvQjtLQURoQztJQUNnQztJQUVFLGVwRG1mOUNuL0IsYW9EeGZJbS9CO0lBS0o7SUFBQSxPcER5ZUF2L0Isa0JvRDllSXUvQixPQUNBOS9CO0dBS21DO0dBRXpDLDhCQVZJNi9CO0d2RjBYRjM0RDs7RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gQXJyYXlcblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zdWIgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9zdWIgKGEsIGksIGxlbikge1xuICB2YXIgYTIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBhMlswXT0wO1xuICBmb3IodmFyIGkyID0gMSwgaTE9IGkrMTsgaTIgPD0gbGVuOyBpMisrLGkxKysgKXtcbiAgICBhMltpMl09YVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2FwcGVuZCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgdmFyIGwxID0gYTEubGVuZ3RoLCBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMStsMi0xXG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gMDtcbiAgdmFyIGkgPSAxLGogPSAxO1xuICBmb3IoO2k8bDE7aSsrKSBhW2ldPWExW2ldO1xuICBmb3IoO2k8bDtpKyssaisrKSBhW2ldPWEyW2pdO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X2dldCAoYXJyYXksIGluZGV4KSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5W2luZGV4KzFdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpe1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIGFycmF5W29mcytpKzFdID0gdjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KHMubCk7XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkobCk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZihsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJ5dGVzLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9hcnJheSAoYSkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoYSwwLGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGEpIHtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vQWxpYXM6IGNhbWxfZmlsbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgaWYgKChpMiA9PSAwKSAmJlxuICAgICAgKGxlbiA+PSBzMi5sIHx8IChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsZW4gPj0gczIuYy5sZW5ndGgpKSkge1xuICAgIHMyLmMgPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIGlmIChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBpMiA9PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSB7XG4gICAgaWYgKHMyLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMyKTtcbiAgICB2YXIgYzEgPSBzMS5jLCBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT0gNCAvKiBBUlJBWSAqLykge1xuICAgICAgaWYgKGkyIDw9IGkxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4gKGxlbiwgYzEubGVuZ3RoIC0gaTEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGMyIFtpMiArIGldID0gYzEuY2hhckNvZGVBdChpMSArIGkpO1xuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLGIsYyxkLGUpIHtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykgeyByZXR1cm4gcy5sIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChhLGIpIHsgcmV0dXJuIGEgKyBiIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBNbEJ5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoczEsczIpe1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoczEudCxzMS5jK3MyLmMsczEubCtzMi5sKVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gcy5jaGFyQ29kZUF0KGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gcy5sZW5ndGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPy0xOihzMSA+IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8PSBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhbiBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMuYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNhbWxfanNieXRlc19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSB7XG4gIGlmKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIHM7XG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICBpZiAoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKVxuICBlbHNlIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfdXRmOF9vZl91dGYxNihzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIG5ldyBNbEJ5dGVzKDAscyxzLmxlbmd0aCk7IH1cblxuXG4vLyBUaGUgc2VjdGlvbiBiZWxvdyBzaG91bGQgYmUgdXNlZCB3aGVuIHVzZS1qcy1zdHJpbmc9ZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocyxpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocyxpLGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19jb21wYXJlXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19jb21wYXJlKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB7IHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKXtcbiAgcmV0dXJuIHMudG9VdGYxNigpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiAocyBpbnN0YW5jZW9mIE1sQnl0ZXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfY29udGVudChzKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmM7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcy5jXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3QocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9pc19tbF9ieXRlcyhzKTtcbn1cblxuLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZGVwcmVjYXRlZFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbmV3X3N0cmluZyAocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19mcm9tX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3RvX2pzX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdG9fc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9ieXRlcyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHgpIH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N5c19leGl0IChjb2RlKSB7XG4gIGlmKGdsb2JhbFRoaXMucXVpdCkgZ2xvYmFsVGhpcy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQpXG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb24sIGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgY2FtbF9jYWxsYmFjayhoYW5kbGVyLCBbZXJyLGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZihhdF9leGl0KSBjYW1sX2NhbGxiYWNrKGF0X2V4aXQsIFswXSk7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiBcIiArIG1zZyk7XG4gICAgICBpZihlcnIuanNfZXJyb3IpIHRocm93IGVyci5qc19lcnJvcjtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZXRfc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLHYpe1xuICBpZighZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYpXG4gICAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYgPSB7fVxuICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuZnVuY3Rpb24ganNvb19zeXNfZ2V0ZW52KG4pIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIC8vbm9kZWpzIGVudlxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuZW52XG4gICAgICYmIHByb2Nlc3MuZW52W25dICE9IHVuZGVmaW5lZClcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbl07XG4gIGlmKGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52XG4gICAgICYmIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dKVxuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xuICBpZihyID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9ub3RfZm91bmQgKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSl7XG4gIHJldHVybiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKChmdW5jdGlvbiAoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICB2YXIgbWFpbiA9IFwiYS5vdXRcIjtcbiAgdmFyIGFyZ3MgPSBbXVxuXG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5hcmd2XG4gICAgICYmIHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3ZcbiAgICAvL25vZGVqc1xuICAgIG1haW4gPSBhcmd2WzFdO1xuICAgIGFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICB9XG5cbiAgdmFyIHAgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhtYWluKTtcbiAgdmFyIGFyZ3MyID0gWzAsIHBdO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICBhcmdzMi5wdXNoKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFyZ3NbaV0pKTtcbiAgcmV0dXJuIGFyZ3MyO1xufSkoKSlcblxuLy9Qcm92aWRlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxudmFyIGNhbWxfZXhlY3V0YWJsZV9uYW1lID0gY2FtbF9hcmd2WzFdXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2IChhKSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YgKGEpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKXtcbiAgY2FtbF9hcmd2ID0gYXJnO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuZnVuY3Rpb24gY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lKGEpe1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWVcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICB2YXIgY21kID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoY21kKTtcbiAgaWYgKHR5cGVvZiByZXF1aXJlICE9IFwidW5kZWZpbmVkXCIpe1xuICAgIHZhciBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICAgIGlmKGNoaWxkX3Byb2Nlc3MgJiYgY2hpbGRfcHJvY2Vzcy5leGVjU3luYylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoY21kLHtzdGRpbzogJ2luaGVyaXQnfSk7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gIH1cbiAgZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWUgbXV0YWJsZVxudmFyIGNhbWxfaW5pdGlhbF90aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSAoKSB7XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oYikge1xuICByZXR1cm4gY2FtbF9zeXNfdGltZSgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yYW5kb21fc2VlZCBtdXRhYmxlXG4vL1RoZSBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYW4gYXJyYXkgc2luY2UgT0NhbWwgNC4wLi4uXG5mdW5jdGlvbiBjYW1sX3N5c19yYW5kb21fc2VlZCAoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICAgdmFyIGEgPSBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IEludDMyQXJyYXkoNCkpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgICB2YXIgYSA9IG5ldyBJbnQzMkFycmF5KGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS5idWZmZXIpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH1cbiAgfVxuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiBvc190eXBlID09IFwiVW5peFwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJXaW4zMlwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIkN5Z3dpblwiID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbnZhciBvc190eXBlID0gKGdsb2JhbFRoaXMucHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSA/IFwiQ3lnd2luXCIgOiBcIlVuaXhcIjtcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG9zX3R5cGUpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xudmFyIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyAoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQgKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3J1bnRpbWVfd2FybmluZ3M7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfZW5hYmxlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9lbmFibGVkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lKF9jaGFubmVsKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJTcGFjZXRpbWUgcHJvZmlsaW5nIG9ubHkgd29ya3MgZm9yIG5hdGl2ZSBjb2RlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5pc0ZpbGUocm9vdC5yZXN0KTtcbn1cbi8vQWx3YXlzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIGlmKHByb2Nlc3MgJiYgcHJvY2Vzcy5vbikge1xuICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gKGVyciwgb3JpZ2luKSB7XG4gICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0ICgyKTtcbiAgICB9KVxuICB9XG4gIGVsc2UgaWYoZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKXtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgaWYoZXZlbnQuZXJyb3Ipe1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbnZhciBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IEZMQUcoXCJ3aXRoLWpzLWVycm9yXCIpO1xuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihcIk9DQU1MUlVOUEFSQU1cIilcbiAgaWYociAhPT0gdW5kZWZpbmVkKXtcbiAgICB2YXIgbCA9IHIuc3BsaXQoXCIsXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKGxbaV0gPT0gXCJiXCIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSAxOyBicmVhayB9XG4gICAgICBlbHNlIGlmIChsW2ldLnN0YXJ0c1dpdGgoXCJiPVwiKSkge1xuICAgICAgICBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9ICsobFtpXS5zbGljZSgyKSl9XG4gICAgICBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkgKClcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYmFja3RyYWNlX3N0YXR1c1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoX3VuaXQpIHsgcmV0dXJuIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlIChiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gYjsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciBnID0gZi5hcHBseShudWxsLGFyZ3Muc2xpY2UoMCxuKSk7XG4gICAgaWYodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGc7XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZyxhcmdzLnNsaWNlKG4pKTtcbiAgfVxuICBlbHNlIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIG5hcmdzW2FyZ3MubGVuZ3RoK2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKSB7XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbiAtIDFdO1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIG4pO1xuICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gayhnKTtcbiAgICAgIHZhciBhcmdzID0gcmVzdC5zbGljZSgpO1xuICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdID0gaztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3MpOyB9O1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NMZW4tLTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSwgeil7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDJdID0gejtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIGV4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrIClcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQgKyAxO1xuICAgIHJldHVybiBrKGcpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnVpbGRfc3ltYm9scyhzeW1iKSB7XG4gIHZhciByID0ge307XG4gIGlmKHN5bWIpIHtcbiAgICBmb3IodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKyl7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IHN5bWJbaV1bMl1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX2NhbGxiYWNrLCBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChuLCB2LCBuYW1lX29wdCkge1xuICBpZiAobmFtZV9vcHQpIHtcbiAgICB2YXIgbmFtZSA9IG5hbWVfb3B0O1xuICAgIGlmKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jLCBbbmFtZV0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpIHtcbiAgICAgIGlmKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpXG4gICAgICB9XG4gICAgICB2YXIgbmlkID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV1cbiAgICAgIGlmKG5pZCA+PSAwKVxuICAgICAgICBuID0gbmlkXG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfcmVnaXN0ZXJfZ2xvYmFsOiBjYW5ub3QgbG9jYXRlIFwiICsgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbWxfZ2xvYmFsX2RhdGFbbiArIDFdID0gdjtcbiAgaWYobmFtZV9vcHQpIGNhbWxfZ2xvYmFsX2RhdGFbbmFtZV9vcHRdID0gdjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfZ2xvYmFsX2RhdGEgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9nZXRfZ2xvYmFsX2RhdGEgKCkgeyByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3ByaW50YWJsZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2lzX3ByaW50YWJsZShjKSB7IHJldHVybiArKGMgPiAzMSAmJiBjIDwgMTI3KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX3ByaW50X3N0YXRzXG5mdW5jdGlvbiBjYW1sX21heWJlX3ByaW50X3N0YXRzKHVuaXQpIHsgcmV0dXJuIDAgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgbGlicmFyeVxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEpzbGliXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfcHVyZV9leHByIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3B1cmVfZXhwciAoZikgeyByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfanNfc2V0KG8sZix2KSB7IG9bZl09djtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0IChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0KG8sZikgeyByZXR1cm4gb1tmXTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobyxmKSB7IGRlbGV0ZSBvW2ZdOyByZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19pbnN0YW5jZW9mIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2luc3RhbmNlb2YobyxjKSB7IHJldHVybiAobyBpbnN0YW5jZW9mIGMpID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc190eXBlb2YgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190eXBlb2YobykgeyByZXR1cm4gdHlwZW9mIG87IH1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZShyZXMpIHtcbiAgdmFyIGMgPSAxO1xuICB3aGlsZShyZXMgJiYgcmVzLmpvb190cmFtcCl7XG4gICAgcmVzID0gcmVzLmpvb190cmFtcC5hcHBseShudWxsLCByZXMuam9vX2FyZ3MpO1xuICAgIGMrKztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZixhcmdzKSB7XG4gIHJldHVybiB7am9vX3RyYW1wOmYsam9vX2FyZ3M6YXJnc307XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19kZXB0aFxuLy9JZjogZWZmZWN0c1xudmFyIGNhbWxfc3RhY2tfZGVwdGggPSAwO1xuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfY2hlY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aFxuZnVuY3Rpb24gY2FtbF9zdGFja19jaGVja19kZXB0aCgpIHtcbiAgICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGgsIGNhbWxfY2FsbF9nZW4sIGNhbWxfZXhuX3N0YWNrLCBjYW1sX2ZpYmVyX3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9mcmVzaF9vb19pZCwgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF9jYWxsYmFjayhmLGFyZ3MpIHtcbiAgZnVuY3Rpb24gdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXIoZWZmLGssbXMpIHtcbiAgICAvLyBSZXN1bWVzIHRoZSBjb250aW51YXRpb24gayBieSByYWlzaW5nIGV4Y2VwdGlvbiBVbmhhbmRsZWQuXG4gICAgY2FtbF9yZXN1bWVfc3RhY2soa1sxXSxtcyk7XG4gICAgdmFyIGV4biA9IGNhbWxfbmFtZWRfdmFsdWUoXCJFZmZlY3QuVW5oYW5kbGVkXCIpO1xuICAgIGlmKGV4bikgY2FtbF9yYWlzZV93aXRoX2FyZyhleG4sIGVmZik7XG4gICAgZWxzZSB7XG4gICAgICBleG4gPSBbMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJFZmZlY3QuVW5oYW5kbGVkXCIpLCBjYW1sX2ZyZXNoX29vX2lkKDApXTtcbiAgICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoZXhuKTtcbiAgICB9XG4gIH1cbiAgdmFyIHNhdmVkX3N0YWNrX2RlcHRoID0gY2FtbF9zdGFja19kZXB0aDtcbiAgdmFyIHNhdmVkX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrO1xuICB2YXIgc2F2ZWRfZmliZXJfc3RhY2sgPSBjYW1sX2ZpYmVyX3N0YWNrO1xuICB0cnkge1xuICAgIGNhbWxfZXhuX3N0YWNrID0gMDtcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID1cbiAgICAgIHtoOlswLCAwLCAwLCB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcl0sIHI6e2s6MCwgeDowLCBlOjB9fTtcbiAgICB2YXIgcmVzID0ge2pvb190cmFtcDogZixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBhcmdzLmNvbmNhdChmdW5jdGlvbiAoeCl7cmV0dXJuIHg7fSl9O1xuICAgIGRvIHtcbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGNhbWxfY2FsbF9nZW4ocmVzLmpvb190cmFtcCwgcmVzLmpvb19hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogSGFuZGxlIGV4Y2VwdGlvbiBjb21pbmcgZnJvbSBKYXZhU2NyaXB0IG9yIGZyb20gdGhlIHJ1bnRpbWUuICovXG4gICAgICAgIGlmICghY2FtbF9leG5fc3RhY2spIHRocm93IGU7XG4gICAgICAgIHZhciBoYW5kbGVyID0gY2FtbF9leG5fc3RhY2tbMV07XG4gICAgICAgIGNhbWxfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2tbMl07XG4gICAgICAgIHJlcyA9IHtqb29fdHJhbXA6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlKHJlcyAmJiByZXMuam9vX2FyZ3MpXG4gIH0gZmluYWxseSB7XG4gICAgY2FtbF9zdGFja19kZXB0aCA9IHNhdmVkX3N0YWNrX2RlcHRoO1xuICAgIGNhbWxfZXhuX3N0YWNrID0gc2F2ZWRfZXhuX3N0YWNrO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPSBzYXZlZF9maWJlcl9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2pzXG5mdW5jdGlvbiBjYW1sX2lzX2pzKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc19lZmZlY3RzKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcImVmZmVjdHNcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAobXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsY2FtbF9uYW1lZF92YWx1ZVxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmIChGTEFHKFwiZXhjd3JhcFwiKSkge1xuICAgIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gICAgdmFyIGV4bjtcbiAgICAvL1N0YWNrX292ZXJmbG93OiBjaHJvbWUsIHNhZmFyaVxuICAgIGlmKGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL21heGltdW0gY2FsbCBzdGFjay9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9TdGFja19vdmVyZmxvdzogZmlyZWZveFxuICAgIGVsc2UgaWYoZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvdG9vIG11Y2ggcmVjdXJzaW9uL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gICAgZWxzZSBpZihlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvciAmJiBjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSlcbiAgICAgIGV4biA9IFswLGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLGVdO1xuICAgIGVsc2VcbiAgICAgIC8vZmFsbGJhY2s6IHdyYXBwZWQgaW4gRmFpbHVyZVxuICAgICAgZXhuID0gWzAsY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcilcbiAgICAgIGV4bi5qc19lcnJvciA9IGU7XG4gICAgcmV0dXJuIGV4bjtcbiAgfSBlbHNlXG4gICAgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICBpZihjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4blxufVxuXG4vLyBFeHBlcmltZW50YWxcbi8vUHJvdmlkZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIC8vbmV2ZXIgcmVyYWlzZSBmb3IgY29uc3RhbnQgZXhuXG4gIGlmKCFleG4uanNfZXJyb3IgfHwgZm9yY2UgfHwgZXhuWzBdID09IDI0OCkgZXhuLmpzX2Vycm9yID0gbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmKGV4bi5qc19lcnJvcikgeyByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07IH1cbiAgcmV0dXJuIDA7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7IHJldHVybiAhIXg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Jvb2woeCkgeyByZXR1cm4gK3g7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21faW50MzJcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19pbnQzMiBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc190b19pbnQzMih4KSB7IHJldHVybiB4fDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYXJyYXkoYSkge1xuICByZXR1cm4gYS5zbGljZSgxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYXJyYXkoYSkge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYlswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8bGVuO2krKykgYltpKzFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKXtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGk9YS5sZW5ndGggLSAxOyBpPj0wOyBpLS0pe1xuICAgIHZhciBlID0gYVtpXTtcbiAgICBsID0gWzAsZSxsXTtcbiAgfVxuICByZXR1cm4gbFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3RfdG9fanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3RfdG9fanNfYXJyYXkobCl7XG4gIHZhciBhID0gW107XG4gIGZvcig7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmKCF4Lm1hdGNoKC9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKFxcLlthLXpBLVpfJF1bYS16QS1aXyQwLTldKikqJC8pKXtcbiAgICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc192YXI6IFxcXCJcIiArIHggKyBcIlxcXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLlwiKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICByZXR1cm4gZXZhbCh4KTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfY2FsbCAoY29uc3QsIG11dGFibGUsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfY2FsbChmLCBvLCBhcmdzKSB7IHJldHVybiBmLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuX2NhbGwgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2Z1bl9jYWxsKGYsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBmKCk7XG4gIGNhc2UgMjogcmV0dXJuIGYgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBmIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIHJldHVybiBmLmFwcGx5KG51bGwsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX21ldGhfY2FsbCAobXV0YWJsZSwgY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX21ldGhfY2FsbChvLCBmLCBhcmdzKSB7XG4gIHJldHVybiBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGYpXS5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19uZXcgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX25ldyhjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDA6IHJldHVybiBuZXcgYztcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGMgKGFbMF0pO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGEpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmKGxlbiA+IDApe1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIC0gMTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuICgoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpKSAtIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcgKHMpIHtyZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9wdXJlX2pzX2V4cHIgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcHVyZV9qc19leHByIChzKXtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50ICh0YWcpIHsgdGhyb3cgdGFnOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGFyZykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZywgYXJnXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyAodGFnLCBhcmdzKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnXS5jb25jYXQoYXJncykpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKHRhZywgbXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhtc2cpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYWlsd2l0aCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZhaWx3aXRoIChtc2cpIHtcbiAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSlcbiAgICBjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmU9WzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRmFpbHVyZVwiKSwtM107XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBtc2cpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuSW52YWxpZF9hcmd1bWVudCwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5FbmRfb2ZfZmlsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5Ob3RfZm91bmQpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgZmxvYXQzMmFbMF0gPSB4O1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoZmxvYXQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGludDMyYVswXSB8IDA7XG59XG5cbi8vRlAgbGl0ZXJhbHMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGhleGFkZWNpbWFsXG4vL25vdGF0aW9uIDB4PG1hbnRpc3NhIGluIGhleD5wPGV4cG9uZW50PiBmcm9tIElTTyBDOTkuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1oZXhmbG9hdC9ibG9iL21hc3Rlci9oZXhmbG9hdC5qc1xuLy9Qcm92aWRlczogY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0ICh4LCBwcmVjLCBzdHlsZSkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nICgoeCA+IDApP1wiaW5maW5pdHlcIjpcIi1pbmZpbml0eVwiKTtcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzE6KHg+PTApPzA6MTtcbiAgaWYoc2lnbikgeCA9IC14O1xuICB2YXIgZXhwID0gMDtcbiAgaWYgKHggPT0gMCkgeyB9XG4gIGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSAgeyB4ICo9IDI7IGV4cC0tIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoeCA+PSAyKSB7IHggLz0gMjsgZXhwKysgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyAnJyA6ICcrJztcbiAgdmFyIHNpZ25fc3RyID0gJyc7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9ICctJ1xuICBlbHNlIHtcbiAgICBzd2l0Y2goc3R5bGUpe1xuICAgIGNhc2UgNDMgLyogJysnICovOiBzaWduX3N0ciA9ICcrJzsgYnJlYWs7XG4gICAgY2FzZSAzMiAvKiAnICcgKi86IHNpZ25fc3RyID0gJyAnOyBicmVhaztcbiAgICBkZWZhdWx0OiBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLHByZWMgKiA0KTtcbiAgICB4ID0gTWF0aC5yb3VuZCh4ICogY3N0KSAvIGNzdDtcbiAgfVxuICB2YXIgeF9zdHIgPSB4LnRvU3RyaW5nKDE2KTtcbiAgaWYocHJlYyA+PSAwKXtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZignLicpO1xuICAgIGlmKGlkeDwwKSB7XG4gICAgICB4X3N0ciArPSAnLicgKyBjYW1sX3N0cl9yZXBlYXQocHJlYywgJzAnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgc2l6ZSA9IGlkeCsxK3ByZWM7XG4gICAgICBpZih4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgJzAnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeF9zdHIgPSB4X3N0ci5zdWJzdHIoMCxzaXplKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzaWduX3N0ciArICcweCcgKyB4X3N0ciArICdwJyArIGV4cF9zaWduICsgZXhwLnRvU3RyaW5nKDEwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIHZhciBleHAgPSAoaGkgJiAweDdmZmYpID4+IDQ7XG4gIGlmIChleHAgPT0gMjA0Nykge1xuICAgIGlmICgobG98bWl8KGhpJjB4ZikpID09IDApXG4gICAgICByZXR1cm4gKGhpICYgMHg4MDAwKT8oLUluZmluaXR5KTpJbmZpbml0eTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwtMjQpO1xuICB2YXIgcmVzID0gKGxvKmsrbWkpKmsrKGhpJjB4Zik7XG4gIGlmIChleHAgPiAwKSB7XG4gICAgcmVzICs9IDE2O1xuICAgIHJlcyAqPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgfSBlbHNlXG4gICAgcmVzICo9IE1hdGgucG93KDIsLTEwMjYpO1xuICBpZiAoaGkgJiAweDgwMDApIHJlcyA9IC0gcmVzO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCAoeCx5KSB7XG4gIGlmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gTmFOO1xuICBpZih4PT15KSByZXR1cm4geTtcbiAgaWYoeD09MCl7XG4gICAgaWYoeSA8IDApXG4gICAgICByZXR1cm4gLU1hdGgucG93KDIsIC0xMDc0KVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBNYXRoLnBvdygyLCAtMTA3NClcbiAgfVxuICB2YXIgYml0cyA9IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh4KTtcbiAgdmFyIG9uZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoMSk7XG4gIGlmICgoeDx5KSA9PSAoeD4wKSlcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9hZGQoYml0cywgb25lKVxuICBlbHNlXG4gICAgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSlcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhiaXRzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF90cnVuY19mbG9hdFxuZnVuY3Rpb24gY2FtbF90cnVuY19mbG9hdCh4KXtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoeCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheShpbnQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGZsb2F0MzJhWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NsYXNzaWZ5X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NsYXNzaWZ5X2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9IDApIHJldHVybiAxO1xuICAgIHJldHVybiAyO1xuICB9XG4gIHJldHVybiBpc05hTih4KT80OjM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgdmFyIG5lZyA9ICgxL3gpIDwgMDtcbiAgICB4ID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yICh4KTtcbiAgICB2YXIgZiA9IHggLSBpO1xuICAgIGlmIChuZWcpIHsgaSA9IC1pOyBmID0gLWY7IH1cbiAgICByZXR1cm4gWzAsIGYsIGldO1xuICB9XG4gIGlmIChpc05hTiAoeCkpIHJldHVybiBbMCwgTmFOLCBOYU5dO1xuICByZXR1cm4gWzAsIDEveCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0ICh4LGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7ICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfZnJleHBfZmxvYXQgKHgpIHtcbiAgaWYgKCh4ID09IDApIHx8ICFpc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLSB4O1xuICB2YXIgZXhwID0gTWF0aC5tYXgoLTEwMjMsIGpzb29fZmxvb3JfbG9nMih4KSArIDEpO1xuICB4ICo9IE1hdGgucG93KDIsLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLSB4O1xuICByZXR1cm4gWzAsIHgsIGV4cF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbG9hdF9jb21wYXJlICh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSByZXR1cm4gMDtcbiAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gIGlmICh4ID4geSkgcmV0dXJuIDE7XG4gIGlmICh4ID09PSB4KSByZXR1cm4gMTtcbiAgaWYgKHkgPT09IHkpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29weXNpZ25fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29weXNpZ25fZmxvYXQgKHgsIHkpIHtcbiAgaWYgKHkgPT0gMCkgeSA9IDEgLyB5O1xuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHJldHVybiAoeSA8IDApPygteCk6eDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zaWduYml0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PSAwKSB4ID0gMSAvIHg7XG4gIHJldHVybiAoeCA8IDApPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5leHBtMSh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5wb3coMiwgeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMXBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMXBfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cxcCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cyKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0ICh4LCB5KSB7IHJldHVybiBNYXRoLmh5cG90KHgsIHkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmxvZzEwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFjb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5zaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFzaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC50YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmF0YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0ICh4KSB7XG4gIGlmICh4ID49IDApIHtcbiAgICB2YXIgeSA9IE1hdGguZmxvb3IoeCk7XG4gICAgcmV0dXJuICh4IC0geSA+PSAwLjUpPyh5ICsgMSk6eVxuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiAoeSAtIHggPj0gMC41KT8oeSAtIDEpOnlcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jYnJ0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NicnRfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY2JydCh4KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9lcmZfZmxvYXQoeCkge1xuICB2YXIgYTEgPSAwLjI1NDgyOTU5MjtcbiAgdmFyIGEyID0gLTAuMjg0NDk2NzM2O1xuICB2YXIgYTMgPSAxLjQyMTQxMzc0MTtcbiAgdmFyIGE0ID0gLTEuNDUzMTUyMDI3O1xuICB2YXIgYTUgPSAxLjA2MTQwNTQyOTtcbiAgdmFyIHAgPSAwLjMyNzU5MTE7XG5cbiAgdmFyIHNpZ24gPSAxO1xuICBpZiAoeCA8IDApIHtcbiAgICBzaWduID0gLTE7XG4gIH1cbiAgeCA9IE1hdGguYWJzKHgpO1xuICB2YXIgdCA9IDEuMCAvICgxLjAgKyBwICogeCk7XG4gIHZhciB5ID0gMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZtYV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbWFfZmxvYXQoeCwgeSwgeikge1xuICB2YXIgU1BMSVQgPSBNYXRoLnBvdygyLCAyNykgKyAxO1xuICB2YXIgTUlOX1ZBTFVFID0gTWF0aC5wb3coMiwgLTEwMjIpO1xuICB2YXIgRVBTSUxPTiA9IE1hdGgucG93KDIsIC01Mik7XG4gIHZhciBDID0gNDE2O1xuICB2YXIgQSA9IE1hdGgucG93KDIsICtDKTtcbiAgdmFyIEIgPSBNYXRoLnBvdygyLCAtQyk7XG5cbiAgZnVuY3Rpb24gbXVsdGlwbHkgKGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSAoKGFoaSAqIGJoaSAtIHApICsgYWhpICogYmxvICsgYWxvICogYmhpKSArIGFsbyAqIGJsbztcbiAgICByZXR1cm4ge1xuICAgICAgcDogcCxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHZhciBzID0gYSArIGI7XG4gICAgdmFyIHYgPSBzIC0gYTtcbiAgICB2YXIgZSA9IChhIC0gKHMgLSB2KSkgKyAoYiAtIHYpO1xuICAgIHJldHVybiB7XG4gICAgICBzOiBzLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRqdXN0ICh4LCB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgJiYgeSAhPT0gMCAmJiBTUExJVCAqIHggLSAoU1BMSVQgKiB4IC0geCkgPT09IHggPyB4ICogKDEgKyAoeCA8IDAgPyAtMSA6ICsxKSAqICh5IDwgMCA/IC0xIDogKzEpICogRVBTSUxPTikgOiB4O1xuICB9O1xuXG4gIGlmICh4ID09PSAwIHx8IHggIT09IHggfHwgeCA9PT0gKzEgLyAwIHx8IHggPT09IC0xIC8gMCB8fFxuICAgICAgeSA9PT0gMCB8fCB5ICE9PSB5IHx8IHkgPT09ICsxIC8gMCB8fCB5ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICh6ICE9PSB6IHx8IHogPT09ICsxIC8gMCB8fCB6ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciBzY2FsZSA9IDE7XG4gIHdoaWxlIChNYXRoLmFicyh4KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHggKj0gQjtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB5ICo9IEI7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAxIC8gMCkge1xuICAgIHJldHVybiB4ICogeSAqIHNjYWxlO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh4KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHggKj0gQTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB5ICo9IEE7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgeHMgPSB4O1xuICB2YXIgeXMgPSB5O1xuICB2YXIgenMgPSB6IC8gc2NhbGU7XG5cbiAgaWYgKE1hdGguYWJzKHpzKSA+IE1hdGguYWJzKHhzICogeXMpICogNCAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OIC8gNCAqIEVQU0lMT04gLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZmxvYXQgKGZtdCwgeCkge1xuICBmdW5jdGlvbiB0b0ZpeGVkKHgsZHApIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPCAxLjApIHtcbiAgICAgIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZSA9IHBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdCgnKycpWzFdKTtcbiAgICAgIGlmIChlID4gMjApIHtcbiAgICAgICAgZSAtPSAyMDtcbiAgICAgICAgeCAvPSBNYXRoLnBvdygxMCxlKTtcbiAgICAgICAgeCArPSAobmV3IEFycmF5KGUrMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgaWYoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyAnLicgKyAobmV3IEFycmF5KGRwKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApXG4gICAgfVxuICB9XG4gIHZhciBzLCBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSAoZi5wcmVjIDwgMCk/NjpmLnByZWM7XG4gIGlmICh4IDwgMCB8fCAoeCA9PSAwICYmIDEveCA9PSAtSW5maW5pdHkpKSB7IGYuc2lnbiA9IC0xOyB4ID0gLXg7IH1cbiAgaWYgKGlzTmFOKHgpKSB7IHMgPSBcIm5hblwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlIGlmICghaXNGaW5pdGUoeCkpIHsgcyA9IFwiaW5mXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgIGNhc2UgJ2UnOlxuICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAvLyBleHBvbmVudCBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0c1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aDtcbiAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZic6XG4gICAgICBzID0gdG9GaXhlZCh4LCBwcmVjKTsgYnJlYWs7XG4gICAgY2FzZSAnZyc6XG4gICAgICBwcmVjID0gcHJlYz9wcmVjOjE7XG4gICAgICBzID0geC50b0V4cG9uZW50aWFsKHByZWMgLSAxKTtcbiAgICAgIHZhciBqID0gcy5pbmRleE9mKCdlJyk7XG4gICAgICB2YXIgZXhwID0gK3Muc2xpY2UoaiArIDEpO1xuICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgIHZhciBpID0gaiAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSkgKyBzLnNsaWNlKGopO1xuICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHAgPSBwcmVjO1xuICAgICAgICBpZiAoZXhwIDwgMCkgeyBwIC09IGV4cCArIDE7IHMgPSB4LnRvRml4ZWQocCk7IH1cbiAgICAgICAgZWxzZSB3aGlsZSAocyA9IHgudG9GaXhlZChwKSwgcy5sZW5ndGggPiBwcmVjICsgMSkgcC0tO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHJlcztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocylcbiAgcmVzID0gK3M7XG4gIGlmICgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSByZXR1cm4gcmVzO1xuICBzID0gcy5yZXBsYWNlKC9fL2csXCJcIik7XG4gIHJlcyA9ICtzO1xuICBpZiAoKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHx8IC9eWystXT9uYW4kL2kudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgdmFyIG0gPSAvXiAqKFsrLV0/KTB4KFswLTlhLWZdKylcXC4/KFswLTlhLWZdKikocChbKy1dP1swLTldKykpPy9pLmV4ZWMocyk7XG4gIC8vICAgICAgICAgIDEgICAgICAgIDIgICAgICAgICAgICAgMyAgICAgICAgICAgNVxuICBpZihtKXtcbiAgICB2YXIgbTMgPSBtWzNdLnJlcGxhY2UoLzArJC8sJycpO1xuICAgIHZhciBtYW50aXNzYSA9IHBhcnNlSW50KG1bMV0gKyBtWzJdICsgbTMsIDE2KTtcbiAgICB2YXIgZXhwb25lbnQgPSAobVs1XXwwKSAtIDQqbTMubGVuZ3RoO1xuICAgIHJlcyA9IG1hbnRpc3NhICogTWF0aC5wb3coMiwgZXhwb25lbnQpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIEluZmluaXR5O1xuICBpZigvXi1pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gLUluZmluaXR5O1xuICBjYW1sX2ZhaWx3aXRoKFwiZmxvYXRfb2Zfc3RyaW5nXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15ICh4LCB5KSB7XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIHZhciBpID0geS5sZW5ndGg7IHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmICh4KSB7IHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfYmxvY2sgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfYmxvY2sgKHgpIHsgcmV0dXJuICsoeCBpbnN0YW5jZW9mIEFycmF5KTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyAoeCkge1xuICBpZiAoKHggaW5zdGFuY2VvZiBBcnJheSkgJiYgeFswXSA9PSAoeFswXSA+Pj4gMCkpXG4gICAgcmV0dXJuIHhbMF1cbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoKHggaW5zdGFuY2VvZiBGdW5jdGlvbikgfHwgdHlwZW9mIHggPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAyNDdcbiAgZWxzZSBpZiAoeCAmJiB4LmNhbWxfY3VzdG9tKVxuICAgIHJldHVybiAyNTVcbiAgZWxzZVxuICAgIHJldHVybiAxMDAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF90YWcgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3RhZyAoeCwgdGFnKSB7IHhbMF0gPSB0YWc7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX29ial9ibG9jayBjb25zdCAoY29uc3QsY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9ibG9jayAodGFnLCBzaXplKSB7XG4gIHZhciBvID0gbmV3IEFycmF5KHNpemUrMSk7XG4gIG9bMF09dGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzaXplOyBpKyspIG9baV0gPSAwO1xuICByZXR1cm4gbztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfd2l0aF90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3dpdGhfdGFnKHRhZyx4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IodmFyIGkgPSAxOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LGksb2xkLG4pe1xuICBpZih4W2krMV0gPT0gb2xkKSB7XG4gICAgeFtpKzFdID0gbjtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19zaGFyZWRcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZCh4KXtcbiAgcmV0dXJuIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgKHYpIHsgcmV0dXJuIFsyNTAsIHZdOyB9XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbnZhciBjYW1sX21ldGhvZF9jYWNoZSA9IFtdO1xuZnVuY3Rpb24gY2FtbF9nZXRfcHVibGljX21ldGhvZCAob2JqLCB0YWcsIGNhY2hlaWQpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgb2ZzID0gY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF07XG4gIGlmIChvZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgbm90IHNwYXJzZVxuICAgIGZvciAodmFyIGkgPSBjYW1sX21ldGhvZF9jYWNoZS5sZW5ndGg7IGkgPCBjYWNoZWlkOyBpKyspXG4gICAgICBjYW1sX21ldGhvZF9jYWNoZVtpXSA9IDA7XG4gIH0gZWxzZSBpZiAobWV0aHNbb2ZzXSA9PT0gdGFnKSB7XG4gICAgcmV0dXJuIG1ldGhzW29mcyAtIDFdO1xuICB9XG4gIHZhciBsaSA9IDMsIGhpID0gbWV0aHNbMV0gKiAyICsgMSwgbWk7XG4gIHdoaWxlIChsaSA8IGhpKSB7XG4gICAgbWkgPSAoKGxpK2hpKSA+PiAxKSB8IDE7XG4gICAgaWYgKHRhZyA8IG1ldGhzW21pKzFdKSBoaSA9IG1pLTI7XG4gICAgZWxzZSBsaSA9IG1pO1xuICB9XG4gIGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdID0gbGkgKyAxO1xuICAvKiByZXR1cm4gMCBpZiB0YWcgaXMgbm90IHRoZXJlICovXG4gIHJldHVybiAodGFnID09IG1ldGhzW2xpKzFdID8gbWV0aHNbbGldIDogMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb29fbGFzdF9pZFxudmFyIGNhbWxfb29fbGFzdF9pZCA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X29vX2lkXG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfc2V0X29vX2lkIChiKSB7XG4gIGJbMl09Y2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobyxpKSB7IHJldHVybiBvW2krMV0gfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkKG8saSx2KSB7IHJldHVybiBvW2krMV0gPSB2IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXG5mdW5jdGlvbiBjYW1sX29ial9yZWFjaGFibGVfd29yZHMobykgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KHYsb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX29ial91cGRhdGVfdGFnKGIsbyxuKSB7XG4gICAgaWYoYlswXT09bykgeyBiWzBdID0gbjsgcmV0dXJuIDEgfVxuICAgIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nKG8pIHtcbiAgaWYgKChvIGluc3RhbmNlb2YgQXJyYXkpICYmIG9bMF0gPT0gKG9bMF0gPj4+IDApICYmXG4gICAgICBjYW1sX29ial91cGRhdGVfdGFnKG8sIDI0NiwgMjQ0KSkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuICBmdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmQobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI1MCk7XG4gIHJldHVybiAwOyAvLyB1bml0XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenlcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNDYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3JlYWRfcmVzdWx0XG4vL1JlcXVpcmVzOiBjYW1sX29ial90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiAoY2FtbF9vYmpfdGFnKG8pID09IDI1MCk/b1sxXTpvO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA8IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuICh0ID09IDI0NSkgPyAxIDogMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mZnNldFxudmFyIGNhbWxfaW50NjRfb2Zmc2V0ID0gTWF0aC5wb3coMiwgLTI0KTtcblxuLy9Qcm92aWRlczogTWxJbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIE1sSW50NjQgKGxvLG1pLGhpKSB7XG4gIHRoaXMubG8gPSBsbyAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IGhpICYgMHhmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBcIl9qXCJcbk1sSW50NjQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvLHRoaXMubWksdGhpcy5oaSk7XG59XG5cbk1sSW50NjQucHJvdG90eXBlLnVjb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMuaGkgPCB4LmhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGhpID0gdGhpcy5oaSA8PCAxNjtcbiAgdmFyIHhoaSA9IHguaGkgPDwgMTY7XG4gIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gIGlmIChoaSA8IHhoaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbG8gPSAtIHRoaXMubG87XG4gIHZhciBtaSA9IC0gdGhpcy5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IC0gdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKyB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgKyB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgLSB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSAtIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICogeC5sbztcbiAgdmFyIG1pID0gKChsbyAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5taSAqIHgubG8gKyB0aGlzLmxvICogeC5taTtcbiAgdmFyIGhpID0gKChtaSAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5oaSAqIHgubG8gKyB0aGlzLm1pICogeC5taSArIHRoaXMubG8gKiB4LmhpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5sb3x0aGlzLm1pfHRoaXMuaGkpID09IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmhpIDw8IDE2KSA8IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvfHgubG8sIHRoaXMubWl8eC5taSwgdGhpcy5oaXx4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvXngubG8sIHRoaXMubWleeC5taSwgdGhpcy5oaV54LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X2xlZnQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNCkge1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5sbyA8PCBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5oaSA8PCBzKSB8ICh0aGlzLm1pID4+ICgyNCAtIHMpKSk7XG4gIH1cbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvIDw8IChzIC0gMjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KDAsIDAsIHRoaXMubG8gPDwgKHMgLSA0OCkpXG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodF91bnNpZ25lZCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gcykpO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiAocyAtIDI0KSksXG4gICAgICAwKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmhpID4+IChzIC0gNDgpLCAwLCAwKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKGggPDwgKDI0IC0gcykpLFxuICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYpO1xuICB2YXIgc2lnbiA9ICh0aGlzLmhpIDw8IDE2KSA+PiAzMTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMjQpID4+IDE2LFxuICAgICAgc2lnbiAmIDB4ZmZmZik7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMzIpLCBzaWduLCBzaWduKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzbDEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGkgPSAodGhpcy5oaSA8PCAxKSB8ICh0aGlzLm1pID4+IDIzKTtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5sbyA9ICh0aGlzLmxvIDw8IDEpICYgMHhmZmZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc3IxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvID0gKCh0aGlzLmxvID4+PiAxKSB8ICh0aGlzLm1pIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSB0aGlzLmhpID4+PiAxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudWRpdm1vZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBvZmZzZXQgPSAwO1xuICB2YXIgbW9kdWx1cyA9IHRoaXMuY29weSgpO1xuICB2YXIgZGl2aXNvciA9IHguY29weSgpO1xuICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLDAsMCk7XG4gIHdoaWxlIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID4gMCkge1xuICAgIG9mZnNldCsrO1xuICAgIGRpdmlzb3IubHNsMSgpO1xuICB9XG4gIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgIG9mZnNldCAtLTtcbiAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgaWYgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPj0gMCkge1xuICAgICAgcXVvdGllbnQubG8gKys7XG4gICAgICBtb2R1bHVzID0gbW9kdWx1cy5zdWIoZGl2aXNvcik7XG4gICAgfVxuICAgIGRpdmlzb3IubHNyMSgpO1xuICB9XG4gIHJldHVybiB7IHF1b3RpZW50IDogcXVvdGllbnQsIG1vZHVsdXMgOiBtb2R1bHVzIH07XG59XG5NbEludDY0LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgcSA9IHEubmVnKCk7XG4gIHJldHVybiBxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciByID0geC51ZGl2bW9kKHkpLm1vZHVsdXM7XG4gIGlmIChzaWduICYgMHg4MDAwKSByID0gci5uZWcoKTtcbiAgcmV0dXJuIHI7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAodGhpcy5taSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0Zsb2F0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkpICsgdGhpcy5sbztcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbdGhpcy5oaSA+PiA4LFxuICAgICAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgPj4gMTYsXG4gICAgICAgICAgKHRoaXMubWkgPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gPj4gMTYsXG4gICAgICAgICAgKHRoaXMubG8gPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gJiAweGZmXTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxvMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaGkzMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5taSA+Pj4gOCkgJiAweGZmZmYpIHwgKHRoaXMuaGkgPDwgMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VsdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bHQoeCx5KSB7IHJldHVybiB4LnVjb21wYXJlKHkpIDwgMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LHksIHRvdGFsKSB7IHJldHVybiB4LmNvbXBhcmUoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X25lZyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9uZWcgKHgpIHsgcmV0dXJuIHgubmVnKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FkZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hZGQgKHgsIHkpIHsgcmV0dXJuIHguYWRkKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViICh4LCB5KSB7IHJldHVybiB4LnN1Yih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbXVsIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tdWwoeCx5KSB7IHJldHVybiB4Lm11bCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfemVybyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc196ZXJvKHgpIHsgcmV0dXJuICt4LmlzWmVybygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkgeyByZXR1cm4gK3guaXNOZWcoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQgKHgsIHkpIHsgcmV0dXJuIHguYW5kKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IgKHgsIHkpIHsgcmV0dXJuIHgub3IoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yICh4LCB5KSB7IHJldHVybiB4Lnhvcih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfbGVmdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X2xlZnQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZGl2IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2RpdiAoeCwgeSkgeyByZXR1cm4geC5kaXYoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21vZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tb2QgKHgsIHkpIHsgcmV0dXJuIHgubW9kKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9pbnQzMiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoeCAmIDB4ZmZmZmZmLCAoeCA+PiAyNCkgJiAweGZmZmZmZiwgKHggPj4gMzEpICYgMHhmZmZmKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2ludDMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2ludDMyICh4KSB7IHJldHVybiB4LnRvSW50KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2Zsb2F0ICh4KSB7IHJldHVybiB4LnRvRmxvYXQgKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoeCkge1xuICBpZiAoeCA8IDApIHggPSBNYXRoLmNlaWwoeCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICB4ICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQgKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQgKGZtdCwgeCkge1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSkge1xuICAgIGYuc2lnbiA9IC0xOyB4ID0gY2FtbF9pbnQ2NF9uZWcoeCk7XG4gIH1cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIHZhciB3YmFzZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZi5iYXNlKTtcbiAgdmFyIGN2dGJsID0gXCIwMTIzNDU2Nzg5YWJjZGVmXCI7XG4gIGRvIHtcbiAgICB2YXIgcCA9IHgudWRpdm1vZCh3YmFzZSk7XG4gICAgeCA9IHAucXVvdGllbnQ7XG4gICAgYnVmZmVyID0gY3Z0YmwuY2hhckF0KGNhbWxfaW50NjRfdG9faW50MzIocC5tb2R1bHVzKSkgKyBidWZmZXI7XG4gIH0gd2hpbGUgKCEgY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBidWZmZXIubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgYnVmZmVyID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9XG4gICAgICBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmZmLCAweGZmZmYpLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgZm9yICg7Oykge1xuICAgIGkrKztcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgICBkID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgICByZXMgPSBjYW1sX2ludDY0X2FkZChjYW1sX2ludDY0X211bChiYXNlNjQsIHJlcyksIGQpO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBhZGRpdGlvbiAoYmFzZSAqIHJlcykgKyBkICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHJlcywgZCkpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChiYXNlID09IDEwICYmIGNhbWxfaW50NjRfdWx0KG5ldyBNbEludDY0KDAsIDAsIDB4ODAwMCksIHJlcykpXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChzaWduIDwgMCkgcmVzID0gY2FtbF9pbnQ2NF9uZWcocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSlcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2xvMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbG8zMih2KXsgcmV0dXJuIHYubG8zMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oaTMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hpMzIodil7IHJldHVybiB2LmhpMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoYVs3XSA8PCAwIHwgKGFbNl0gPDwgOCkgfCAoYVs1XSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzRdIDw8IDAgfCAoYVszXSA8PCA4KSB8IChhWzJdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbMV0gPDwgMCB8IChhWzBdIDw8IDgpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkgeyByZXR1cm4geC50b0FycmF5KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hhc2ggY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGFzaCh2KXtcbiAgcmV0dXJuICh2LmxvMzIoKSkgXiAodi5oaTMyKCkpXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCl7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSA3OiBjYXNlIDEwOiBjYXNlIDExOiByZXR1cm4gMjtcbiAgZGVmYXVsdDogcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKXtcbiAgdmFyIHZpZXc7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAwOiAgdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTogIHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gSW50OEFycmF5OyBicmVhaztcbiAgY2FzZSAzOiAgdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDQ6ICB2aWV3ID0gSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBVaW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNjogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA3OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgOTogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMDogdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDEyOiB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIH1cbiAgaWYgKCF2aWV3KSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHZhciBkYXRhID0gbmV3IHZpZXcoc2l6ZSAqIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA8IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyYXlcIlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246ID49IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIlxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSwgY2FtbF9pbnQ2NF9oaTMyLCBjYW1sX2ludDY0X2xvMzJcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5IChraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuXG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gY2FtbF9iYV9jdXN0b21fbmFtZTtcblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIG9mcyA9IDA7XG4gIGlmKHR5cGVvZiBhcmcgPT09IFwibnVtYmVyXCIpIGFyZyA9IFthcmddO1xuICBpZiAoISAoYXJnIGluc3RhbmNlb2YgQXJyYXkpKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJiaWdhcnJheS5qczogaW52YWxpZCBvZmZzZXRcIik7XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGFyZy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZ2V0L3NldDogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICBpZih0aGlzLmxheW91dCA9PSAwIC8qIGNfbGF5b3V0ICovKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pXG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgYXJnW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMSB8fCBhcmdbaV0gPiB0aGlzLmRpbXNbaV0pe1xuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICB9XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIChhcmdbaV0gLSAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9mcztcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBsID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGwsaCk7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGkgPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBbMjU0LCByLCBpXTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gdGhpcy5kYXRhW29mc11cbiAgfVxufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gdlsxXTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB2YXIgYiA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBpZihhID09IGIpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gYSA6IGI7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIGltID0gdlsxXTtcbiAgICB2YXIgcmUgPSB2WzJdO1xuICAgIGlmKGltID09IHJlKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGltKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBpbSA6IHJlO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICBicmVhaztcbiAgfVxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIsIHRvdGFsKSB7XG4gIGlmICh0aGlzLmxheW91dCAhPSBiLmxheW91dCB8fCB0aGlzLmtpbmQgIT0gYi5raW5kKSB7XG4gICAgdmFyIGsxID0gdGhpcy5raW5kIHwgKHRoaXMubGF5b3V0IDw8IDgpO1xuICAgIHZhciBrMiA9ICAgIGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICByZXR1cm4gazIgLSBrMTtcbiAgfVxuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBiLmRpbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmICh0aGlzLmRpbXNbaV0gIT0gYi5kaW1zW2ldKVxuICAgICAgcmV0dXJuICh0aGlzLmRpbXNbaV0gPCBiLmRpbXNbaV0pID8gLTEgOiAxO1xuICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgY2FzZSAxMDpcbiAgY2FzZSAxMTpcbiAgICAvLyBGbG9hdHNcbiAgICB2YXIgeCwgeTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgeCA9IHRoaXMuZGF0YVtpXTtcbiAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICBpZiAoeCA8IHkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh4ID4geSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoeCAhPSB5KSB7XG4gICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgIGlmICh4ID09IHgpIHJldHVybiAxO1xuICAgICAgICBpZiAoeSA9PSB5KSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrPTIpIHtcbiAgICAgIC8vIENoZWNrIGhpZ2hlc3QgYml0cyBmaXJzdFxuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdIDwgYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA+IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA8IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPiAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDI6XG4gIGNhc2UgMzpcbiAgY2FzZSA0OlxuICBjYXNlIDU6XG4gIGNhc2UgNjpcbiAgY2FzZSA4OlxuICBjYXNlIDk6XG4gIGNhc2UgMTI6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPiBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSAgID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUgPSBuZXcgTWxfQmlnYXJyYXkoKVxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgaWYodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIil7XG4gICAgaWYoKGFyZyBpbnN0YW5jZW9mIEFycmF5KSAmJiBhcmcubGVuZ3RoID09IDEpXG4gICAgICBhcmcgPSBhcmdbMF07XG4gICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gIH1cbiAgaWYgKGFyZyA8IDAgfHwgYXJnID49IHRoaXMuZGltc1swXSlcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcmc7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gIHJldHVybiAwXG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgdGhpcy5kYXRhLmZpbGwodik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9iYV9jb21wYXJlKGEsYix0b3RhbCl7XG4gIHJldHVybiBhLmNvbXBhcmUoYix0b3RhbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSl7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKTtcbiAgaWYoY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSAqIHNpemVfcGVyX2VsZW1lbnQgIT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmKGxheW91dCA9PSAwICYmIC8vIGNfbGF5b3V0XG4gICAgIGRpbXMubGVuZ3RoID09IDEgJiYgLy8gQXJyYXkxXG4gICAgIHNpemVfcGVyX2VsZW1lbnQgPT0gMSkgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcblxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZShraW5kLCBsYXlvdXQsIGRpbXNfbWwpIHtcbiAgdmFyIGRpbXMgPSBjYW1sX2pzX2Zyb21fYXJyYXkoZGltc19tbCk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIGNhbWxfYmFfZ2V0X3NpemUoZGltcykpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY2hhbmdlX2xheW91dFxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2NoYW5nZV9sYXlvdXQoYmEsIGxheW91dCkge1xuICBpZihiYS5sYXlvdXQgPT0gbGF5b3V0KSByZXR1cm4gYmE7XG4gIHZhciBuZXdfZGltcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbYmEuZGltcy5sZW5ndGggLSBpIC0gMV07XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgbGF5b3V0LCBuZXdfZGltcywgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kKGJhKSB7XG4gIHJldHVybiBiYS5raW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2xheW91dFxuZnVuY3Rpb24gY2FtbF9iYV9sYXlvdXQoYmEpIHtcbiAgcmV0dXJuIGJhLmxheW91dDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9udW1fZGltc1xuZnVuY3Rpb24gY2FtbF9iYV9udW1fZGltcyhiYSkge1xuICByZXR1cm4gYmEuZGltcy5sZW5ndGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZGltKGJhLCBpKSB7XG4gIGlmIChpIDwgMCB8fCBpID49IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMgKyAxKTtcbiAgcmV0dXJuIChiMSB8IChiMiA8PCA4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MzIoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHJldHVybiAoIChiMSA8PCAwKSAgfFxuICAgICAgICAgICAoYjIgPDwgOCkgIHxcbiAgICAgICAgICAgKGIzIDw8IDE2KSB8XG4gICAgICAgICAgIChiNCA8PCAyNCkgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQ2NChiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgdmFyIGI1ID0gYmEuZ2V0KG9mcys0KTtcbiAgdmFyIGI2ID0gYmEuZ2V0KG9mcys1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcys2KTtcbiAgdmFyIGI4ID0gYmEuZ2V0KG9mcys3KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW2I4LGI3LGI2LGI1LGI0LGIzLGIyLGIxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzEoYmEsIGkwKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KGkwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzIoYmEsIGkwLCBpMSkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxLGkyXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0X2dlbmVyaWMoYmEsIGksIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMrMywgKHYgPj4+IDI0KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQ2NChiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBiYS5zZXQob2ZzK2ksIHZbNy1pXSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMihiYSwgaTAsIGkxLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMyhiYSwgaTAsIGkxLCBpMiwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZmlsbFxuZnVuY3Rpb24gY2FtbF9iYV9maWxsKGJhLCB2KSB7XG4gIGJhLmZpbGwodik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9ibGl0KHNyYywgZHN0KSB7XG4gIGlmIChkc3QuZGltcy5sZW5ndGggIT0gc3JjLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkc3QuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoZHN0LmRpbXNbaV0gIT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IChiYS5kaW1zLmxlbmd0aCAtIDEpOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCAob2ZzICsgbGVuKSA+IGJhLmRpbXNbY2hhbmdlZF9kaW1dKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zdWI6IGJhZCBzdWItYXJyYXlcIik7XG4gIH1cbiAgdmFyIG5ld19kaW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAwO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZShudW1faW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyArIGldID0gdmluZFtpXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMTtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UoMCwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyk7XG4gIH1cbiAgb2ZzID0gYmEub2Zmc2V0KGluZGV4KTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKHN1Yl9kaW1zKTtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIHNpemVfcGVyX2VsZW1lbnQsIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgc3ViX2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9yZXNoYXBlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG5mdW5jdGlvbiBjYW1sX2JhX3Jlc2hhcGUoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG5ld19kaW0gPSBbXTtcbiAgdmFyIG51bV9kaW1zID0gdmluZC5sZW5ndGg7XG5cbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPSBzaXplKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IHNpemUgbWlzbWF0Y2hcIik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF90b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX3NlcmlhbGl6ZSh3cml0ZXIsIGJhLCBzeikge1xuICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXMubGVuZ3RoKTtcbiAgd3JpdGVyLndyaXRlKDMyLCAoYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpKTtcbiAgaWYoYmEuY2FtbF9jdXN0b20gPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYoYmEuZGltc1tpXSA8IDB4ZmZmZilcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHdyaXRlci53cml0ZSgzMixiYS5kaW1zW2ldKVxuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoOCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB3cml0ZXIud3JpdGUoOCwwKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhiYS5nZXQoaSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgaiA9IGJhLmdldChpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMV0pKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsxXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMl0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogNDtcbiAgc3pbMV0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGVzZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlcywgY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKXtcbiAgdmFyIG51bV9kaW1zID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogd3JvbmcgbnVtYmVyIG9mIGJpZ2FycmF5IGRpbWVuc2lvbnNcIik7XG4gIHZhciB0YWcgPSByZWFkZXIucmVhZDMycygpO1xuICB2YXIga2luZCA9IHRhZyAmIDB4ZmZcbiAgdmFyIGxheW91dCA9ICh0YWcgPj4gOCkgJiAxO1xuICB2YXIgZGltcyA9IFtdXG4gIGlmKG5hbWUgPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICAgIHZhciBzaXplX2RpbSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICBpZihzaXplX2RpbSA9PSAweGZmZmYpe1xuICAgICAgICB2YXIgc2l6ZV9kaW1faGkgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICB2YXIgc2l6ZV9kaW1fbG8gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICBpZihzaXplX2RpbV9oaSAhPSAwKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogYmlnYXJyYXkgZGltZW5zaW9uIG92ZXJmbG93IGluIDMyYml0XCIpO1xuICAgICAgICBzaXplX2RpbSA9IHNpemVfZGltX2xvO1xuICAgICAgfVxuICAgICAgZGltcy5wdXNoKHNpemVfZGltKTtcbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIGRpbXMucHVzaChyZWFkZXIucmVhZDMydSgpKTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGRpbXMpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKTtcbiAgdmFyIGJhID0gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDhzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgdmFyIHNpeHR5ID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIGlmKHNpeHR5KSBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNhbm5vdCByZWFkIGJpZ2FycmF5IHdpdGggNjQtYml0IE9DYW1sIGludHNcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogLy8gKGludDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICBiYS5zZXQoaSxpbnQ2NCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrXG4gIH1cbiAgc3pbMF0gPSAoNCArIG51bV9kaW1zKSAqIDQ7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9EZXByZWNhdGVkXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIGpzdHlwLCBraW5kLCBsYXlvdXQsIGRpbXMpe1xuICBpZihkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09IDIpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfY3JlYXRlX2Zyb206IHVzZSByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlXCIpO1xuICB9XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaGFzaCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfaGFzaChiYSl7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyA0IDw9IGJhLmRhdGEubGVuZ3RoOyBpKz00KXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDgpIHwgKGJhLmRhdGFbaSsyXSA8PCAxNikgfCAoYmEuZGF0YVtpKzNdIDw8IDI0KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICB3ID0gMDtcbiAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgIGNhc2UgMzogdyAgPSBiYS5kYXRhW2krMl0gPDwgMTY7ICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAyOiB3IHw9IGJhLmRhdGFbaSsxXSA8PCA4OyAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDE6IHcgfD0gYmEuZGF0YVtpKzBdO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgMiA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9Mil7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCAxNik7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgaWYgKChudW1fZWx0cyAmIDEpICE9IDApXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgbnVtX2VsdHMgKj0gMlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9iYV90b190eXBlZF9hcnJheShiYSl7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZDtcbiAgaWYgICAgICAodGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkga2luZCA9IDE7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50OEFycmF5KSBraW5kID0gMjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MTZBcnJheSkga2luZCA9IDQ7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXk6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHJldHVybiBraW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAgIC8qIE5lZWRlZCB0byBhdm9pZCB1bnNpZ25lZCBzZXR0ZXJzIG92ZXJmbG93aW5nXG4gICAgICAgICB0aGUgcmFuZ2Ugb2YgT0NhbWwgW2ludDMyXSB2YWx1ZXMuICovXG4gICAgICB0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ID9cbiAgICAgIG5ldyBJbnQzMkFycmF5KHRhLmJ1ZmZlciAsdGEuYnl0ZU9mZnNldCwgdGEubGVuZ3RoKSA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9pbnQgY29uc3QgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nLCBjYW1sX3N0cl9yZXBlYXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2ludChmbXQsIGkpIHtcbiAgaWYgKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KSA9PSBcIiVkXCIpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIraSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7IGlmIChmLnNpZ25lZGNvbnYpIHsgZi5zaWduID0gLTE7IGkgPSAtaTsgfSBlbHNlIGkgPj4+PSAwOyB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIHMubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgcyA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpIHtcbiAgdmFyIGkgPSAwLCBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyksIGJhc2UgPSAxMCwgc2lnbiA9IDE7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSkpIHtcbiAgICBjYXNlIDQ1OiBpKys7IHNpZ24gPSAtMTsgYnJlYWs7XG4gICAgY2FzZSA0MzogaSsrOyBzaWduID0gMTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChpICsgMSA8IGxlbiAmJiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpID09IDQ4KVxuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMSkpIHtcbiAgICBjYXNlIDEyMDogY2FzZSA4ODogYmFzZSA9IDE2OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTExOiBjYXNlIDc5OiBiYXNlID0gIDg7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAgOTg6IGNhc2UgNjY6IGJhc2UgPSAgMjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExNzogY2FzZSA4NTogaSArPSAyOyBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSAgcmV0dXJuIGMgLSA0ODtcbiAgaWYgKGMgPj0gNjUgJiYgYyA8PSA5MCkgIHJldHVybiBjIC0gNTU7XG4gIGlmIChjID49IDk3ICYmIGMgPD0gMTIyKSByZXR1cm4gYyAtIDg3O1xuICByZXR1cm4gLTE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9wYXJzZV9kaWdpdCwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9pbnRfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSAoaSA8IGxlbik/Y2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTowO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gZDtcbiAgZm9yIChpKys7aTxsZW47aSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIHJlcyA9IGJhc2UgKiByZXMgKyBkO1xuICAgIGlmIChyZXMgPiB0aHJlc2hvbGQpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGxlbikgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIC8vIEZvciBiYXNlIGRpZmZlcmVudCBmcm9tIDEwLCB3ZSBleHBlY3QgYW4gdW5zaWduZWQgcmVwcmVzZW50YXRpb24sXG4gIC8vIGhlbmNlIGFueSB2YWx1ZSBvZiAncmVzJyAobGVzcyB0aGFuICd0aHJlc2hvbGQnKSBpcyBhY2NlcHRhYmxlLlxuICAvLyBCdXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZSByZXN1bHQgYmFjayB0byBhIHNpZ25lZCBpbnRlZ2VyLlxuICByZXMgPSBzaWduICogcmVzO1xuICBpZiAoKGJhc2UgPT0gMTApICYmICgocmVzIHwgMCkgIT0gcmVzKSlcbiAgICAvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gZXhwZWN0ZWQsIGFsbG93IC0yXihuYml0cy0xKSB0byAyXihuYml0cy0xKSAtIDEgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbXVsIGNvbnN0XG5mdW5jdGlvbiBjYW1sX211bChhLGIpe1xuICByZXR1cm4gTWF0aC5pbXVsKGEsYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX2Rpdih4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuICh4L3kpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX21vZCh4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuIHgleTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ic3dhcDE2XG5mdW5jdGlvbiBjYW1sX2Jzd2FwMTYoeCkge1xuICByZXR1cm4gKCgoKHggJiAweDAwRkYpIDw8IDgpIHxcbiAgICAgICAgICAgKCh4ICYgMHhGRjAwKSA+PiA4KSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoKCh4ICYgMHgwMDAwMDBGRikgPDwgMjQpIHxcbiAgICAgICAgICAoKHggJiAweDAwMDBGRjAwKSA8PCA4KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMEZGMDAwMCkgPj4+IDgpIHxcbiAgICAgICAgICAoKHggJiAweEZGMDAwMDAwKSA+Pj4gMjQpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYnN3YXBcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYnN3YXAoeCkge1xuICB2YXIgeSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoeCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFt5WzddLCB5WzZdLCB5WzVdLCB5WzRdLCB5WzNdLCB5WzJdLCB5WzFdLCB5WzBdXSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEhhc2h0YmxcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfdW5pdl9wYXJhbSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vVmVyc2lvbjogPCA0LjEyXG5mdW5jdGlvbiBjYW1sX2hhc2hfdW5pdl9wYXJhbSAoY291bnQsIGxpbWl0LCBvYmopIHtcbiAgdmFyIGhhc2hfYWNjdSA9IDA7XG4gIGZ1bmN0aW9uIGhhc2hfYXV4IChvYmopIHtcbiAgICBsaW1pdCAtLTtcbiAgICBpZiAoY291bnQgPCAwIHx8IGxpbWl0IDwgMCkgcmV0dXJuO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSAmJiBvYmpbMF0gPT09IChvYmpbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAob2JqWzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmpbMl0pIHwgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBsaW1pdCsrOyBoYXNoX2F1eChvYmopOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBvYmpbMF0pIHwgMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IG9iai5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSBoYXNoX2F1eCAob2JqW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMob2JqKSkge1xuICAgICAgY291bnQgLS07XG4gICAgICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudChvYmopO1xuICAgICAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZm9yICh2YXIgYiA9IGNvbnRlbnQsIGwgPSBiLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgICB9IGVsc2UgeyAvKiBBUlJBWSAqL1xuICAgICAgICBmb3IgKHZhciBhID0gY29udGVudCwgbCA9IGEubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBhW2ldKSB8IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhvYmopKSB7XG4gICAgICB2YXIganNieXRlcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob2JqKTtcbiAgICAgIGZvciAodmFyIGIgPSBqc2J5dGVzLCBsID0ganNieXRlcy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAodmFyIGIgPSBvYmosIGwgPSBvYmoubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IChvYmp8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGNvdW50IC0tO1xuICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09ICtvYmopIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBjb3VudC0tO1xuICAgICAgdmFyIHAgPSBjYW1sX2ludDY0X3RvX2J5dGVzIChjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKG9iaikpO1xuICAgICAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgaS0tKSBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBwW2ldKSB8IDA7XG4gICAgfSBlbHNlIGlmKG9iaiAmJiBvYmouY2FtbF9jdXN0b20pIHtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGggPSBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKG9iaikgfCAwO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBoKSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGhhc2hfYXV4IChvYmopO1xuICByZXR1cm4gaGFzaF9hY2N1ICYgMHgzRkZGRkZGRjtcbn1cblxuLy9mdW5jdGlvbiBST1RMMzIoeCxuKSB7IHJldHVybiAoKHggPDwgbikgfCAoeCA+Pj4gKDMyLW4pKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQoaCxkKSB7XG4gIGQgPSBjYW1sX211bChkLCAweGNjOWUyZDUxfDApO1xuICBkID0gKChkIDw8IDE1KSB8IChkID4+PiAoMzItMTUpKSk7IC8vIFJPVEwzMihkLCAxNSk7XG4gIGQgPSBjYW1sX211bChkLCAweDFiODczNTkzKTtcbiAgaCBePSBkO1xuICBoID0gKChoIDw8IDEzKSB8IChoID4+PiAoMzItMTMpKSk7ICAgLy9ST1RMMzIoaCwgMTMpO1xuICByZXR1cm4gKCgoaCArIChoIDw8IDIpKXwwKSArICgweGU2NTQ2YjY0fDApKXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9maW5hbChoKSB7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIGggPSBjYW1sX211bCAoaCwgMHg4NWViY2E2YnwwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsIChoLCAweGMyYjJhZTM1fDApO1xuICBoIF49IGggPj4+IDE2O1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2hhc2hfbWl4X2ludDY0XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0IChoLCB2MCkge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9pbnQ2NChoLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHYwKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9sbzMyLCBjYW1sX2ludDY0X2hpMzJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50NjQgKGgsIHYpIHtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfbG8zMih2KSk7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2hpMzIodikpO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzLmNoYXJDb2RlQXQoaSlcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDgpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNilcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gcy5jaGFyQ29kZUF0KGkrMikgPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzLmNoYXJDb2RlQXQoaSsxKSA8PCA4O1xuICBjYXNlIDE6XG4gICAgdyB8PSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gc1tpXVxuICAgICAgfCAoc1tpKzFdIDw8IDgpXG4gICAgICB8IChzW2krMl0gPDwgMTYpXG4gICAgICB8IChzW2krM10gPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzW2krMl0gPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzW2krMV0gPDwgODtcbiAgY2FzZSAxOiB3IHw9IHNbaV07XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsIHYpIHtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQodik7XG4gIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY29udGVudClcbiAgZWxzZSAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQsIGNhbWxfaGFzaF9taXhfc3RyaW5nLCBjYW1sX2hhc2hfbWl4X2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2hhc2ggKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07IHJkID0gMDsgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2ICYmIHYuY2FtbF9jdXN0b20pe1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoaCA9IGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKHYpO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQgKGgsIGhoKTtcbiAgICAgICAgbnVtIC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgIG51bS0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIHF1ZXVlWy0tcmRdID0gdlsxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpIHtcbiAgICAgICAgICAvKiBBbGwgY29udGludWF0aW9ucyBoYXNoIHRvIHRoZSBzYW1lIHZhbHVlLFxuICAgICAgICAgICAgIHNpbmNlIHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZGlzdGluZ3Vpc2ggdGhlbS4gKi9cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnID0gKCh2Lmxlbmd0aCAtIDEpIDw8IDEwKSB8IHZbMF07XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHdyID49IHN6KSBicmVhaztcbiAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9ieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHYgPT09ICh2fDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdit2KzEpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsdik7XG4gICAgICBudW0tLTtcbiAgICB9XG4gIH1cbiAgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9maW5hbCwgY2FtbF9oYXNoX21peF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdil7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KTtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIFVJbnQ4QXJyYXlSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gczsgdGhpcy5pID0gaTsgfVxuVUludDhBcnJheVJlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV1cbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0ID4+IDE2KSB8IHNbaSArIDFdO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgICAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM10pID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkodGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBNbFN0cmluZ1JlYWRlciAocywgaSkgeyB0aGlzLnMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpOyB0aGlzLmkgPSBpOyB9XG5NbFN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCA+PiAxNikgfCBzLmNoYXJDb2RlQXQoaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5zLnN1YnN0cmluZyhpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBiW2pdID0gcy5jaGFyQ29kZUF0KGkgKyBqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gYjtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoaSk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLmRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICB9XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoY2FtbF9pbnQ2NF9vZl9ieXRlcyAoYSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKHMsIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAoY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocyksIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gIHNpemVbMF0gPSA4O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyAodCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tYXJzaGFsKHdyaXRlciwgdiwgc2l6ZXMpIHtcbiAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzICh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSAoOCwgYltpXSk7XG4gIHNpemVzWzBdID0gODsgc2l6ZXNbMV0gPSA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX3VubWFyc2hhbFxuZnVuY3Rpb24gY2FtbF9pbnQzMl91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1ICgpKSB7XG4gIGNhc2UgMTpcbiAgICBzaXplWzBdID0gNDtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gIGNhc2UgMjpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IG5hdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvbyBsYXJnZVwiKTtcbiAgZGVmYXVsdDogY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG5hdGl2ZSBpbnRlZ2VyXCIpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF91bm1hcnNoYWwsIGNhbWxfaW50NjRfbWFyc2hhbCwgY2FtbF9pbnQ2NF9jb21wYXJlLCBjYW1sX2ludDY0X2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsLCBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfYmFfc2VyaWFsaXplLCBjYW1sX2JhX2Rlc2VyaWFsaXplLCBjYW1sX2JhX2NvbXBhcmUsIGNhbWxfYmFfaGFzaFxudmFyIGNhbWxfY3VzdG9tX29wcyA9XG4gICAge1wiX2pcIjoge1xuICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDY0X3VubWFyc2hhbCxcbiAgICAgIHNlcmlhbGl6ZSAgOiBjYW1sX2ludDY0X21hcnNoYWwsXG4gICAgICBmaXhlZF9sZW5ndGggOiA4LFxuICAgICAgY29tcGFyZSA6IGNhbWxfaW50NjRfY29tcGFyZSxcbiAgICAgIGhhc2ggOiBjYW1sX2ludDY0X2hhc2hcbiAgICB9LFxuICAgICBcIl9pXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50MzJfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX25cIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycmF5XCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnJheVwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9LFxuICAgICBcIl9iaWdhcnIwMlwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyMDJcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfVxuICAgIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcykge1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUgKClcbiAgc3dpdGNoKG1hZ2ljKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDA7XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IGRhdGFfbGVuO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBjb21wcmVzc2VkID0gMTtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gYSAzMi1iaXQgcGxhdGZvcm1cIik7XG4gICAgYnJlYWtcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogYmFkIG9iamVjdFwiKTtcbiAgICBicmVhaztcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjIChyZWFkZXIpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmKGNvbXByZXNzZWQpIHtcbiAgICBpZihjYW1sX2RlY29tcHJlc3NfaW5wdXQpIHtcbiAgICAgIHZhciBkYXRhID0gcmVhZGVyLnJlYWR1aW50OGFycmF5KGRhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBuZXcgVWludDhBcnJheSh1bmNvbXByZXNzZWRfZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IGNhbWxfZGVjb21wcmVzc19pbnB1dChkYXRhLCByZXMpO1xuICAgICAgdmFyIHJlYWRlciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKHJlcywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29tcHJlc3NlZCBvYmplY3QsIGNhbm5vdCBkZWNvbXByZXNzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcmVzID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgc2l6ZSA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciB2ID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIGQgPSB2Lmxlbmd0aDtcbiAgICBpZiAoZCA8IHNpemUpIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgdltkXSA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBvZnMhPVwibnVtYmVyXCIpIG9mc1swXSA9IHJlYWRlci5pO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA+PSA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDE2XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHN3aXRjaChyLnJlYWQzMnUoKSl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGRhdGFfbGVuID0gci5yZWFkMzJ1KCk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgICBicmVha1xuICB9XG4gIHJldHVybiBoZWFkZXJfbGVuIC0gY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplICsgZGF0YV9sZW47XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzLk1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qIHBvbHlmaWxsICh1c2luZyBsaW5lYXIgc2VhcmNoKSAqL1xuICAgIGZ1bmN0aW9uIE5haXZlTG9va3VwKG9ianMpIHsgdGhpcy5vYmpzID0gb2JqczsgfVxuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbih2KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5vYmpzW2ldID09PSB2KSByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9O1xuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgaGVyZS4gW01sT2JqZWN0VGFibGUuc3RvcmVdIHdpbGwgcHVzaCB0byBbdGhpcy5vYmpzXSBkaXJlY3RseS5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgTmFpdmVMb29rdXAodGhpcy5vYmpzKTtcbiAgICB9O1xuICB9KCk7XG59XG5lbHNlIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IGdsb2JhbFRoaXMuTWFwKCk7XG4gIH07XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnN0b3JlID0gZnVuY3Rpb24odikge1xuICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gIHRoaXMub2Jqcy5wdXNoKHYpO1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5yZWNhbGwgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICByZXR1cm4gKGkgPT09IHVuZGVmaW5lZClcbiAgICA/IHVuZGVmaW5lZCA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAgIC8qIGluZGV4IGlzIHJlbGF0aXZlICovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IGZ1bmN0aW9uICgpe1xuICBmdW5jdGlvbiBXcml0ZXIgKCkgeyB0aGlzLmNodW5rID0gW107IH1cbiAgV3JpdGVyLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua19pZHg6MjAsIGJsb2NrX2xlbjowLCBvYmpfY291bnRlcjowLCBzaXplXzMyOjAsIHNpemVfNjQ6MCxcbiAgICB3cml0ZTpmdW5jdGlvbiAoc2l6ZSwgdmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2F0OmZ1bmN0aW9uIChwb3MsIHNpemUsIHZhbHVlKSB7XG4gICAgICB2YXIgcG9zID0gcG9zO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2NvZGU6ZnVuY3Rpb24gKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX3NoYXJlZDpmdW5jdGlvbiAob2Zmc2V0KSB7XG4gICAgICBpZiAob2Zmc2V0IDwgKDEgPDwgOCkpIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgKDEgPDwgMTYpKSB0aGlzLndyaXRlX2NvZGUoMTYsIDB4MDUgLypjc3QuQ09ERV9TSEFSRUQxNiovLCBvZmZzZXQpO1xuICAgICAgZWxzZSB0aGlzLndyaXRlX2NvZGUoMzIsIDB4MDYgLypjc3QuQ09ERV9TSEFSRUQzMiovLCBvZmZzZXQpO1xuICAgIH0sXG4gICAgcG9zOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2h1bmtfaWR4IH0sXG4gICAgZmluYWxpemU6ZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSB0aGlzLmNodW5rX2lkeCAtIDIwO1xuICAgICAgdGhpcy5jaHVua19pZHggPSAwO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIDB4ODQ5NUE2QkUpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLm9ial9jb3VudGVyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfMzIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gKGZsYWdzLmluZGV4T2YoMCAvKk1hcnNoYWwuTm9fc2hhcmluZyovKSAhPT0gLTEpLFxuICAgICAgICBjbG9zdXJlcyA9ICAoZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTEpO1xuICAgIC8qIE1hcnNoYWwuQ29tcGF0XzMyIGlzIHJlZHVuZGFudCBzaW5jZSBpbnRlZ2VycyBhcmUgMzItYml0IGFueXdheSAqL1xuXG4gICAgaWYgKGNsb3N1cmVzKVxuICAgICAgY29uc29sZS53YXJuKFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlciAoKTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgaW50ZXJuX29ial90YWJsZSA9IG5vX3NoYXJpbmcgPyBudWxsIDogbmV3IE1sT2JqZWN0VGFibGUoKTtcblxuICAgIGZ1bmN0aW9uIG1lbW8odikge1xuICAgICAgaWYgKG5vX3NoYXJpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBleGlzdGluZ19vZmZzZXQgPSBpbnRlcm5fb2JqX3RhYmxlLnJlY2FsbCh2KTtcbiAgICAgIGlmIChleGlzdGluZ19vZmZzZXQpIHsgd3JpdGVyLndyaXRlX3NoYXJlZChleGlzdGluZ19vZmZzZXQpOyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IGludGVybl9vYmpfdGFibGUuc3RvcmUodik7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWMgKHYpIHtcbiAgICAgIGlmICh2LmNhbWxfY3VzdG9tKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBuYW1lID0gdi5jYW1sX2N1c3RvbTtcbiAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tuYW1lXTtcbiAgICAgICAgdmFyIHN6XzMyXzY0ID0gWzAsMF07XG4gICAgICAgIGlmKCFvcHMuc2VyaWFsaXplKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEN1c3RvbSlcIik7XG4gICAgICAgIGlmKG9wcy5maXhlZF9sZW5ndGggPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIGhlYWRlcl9wb3MgPSB3cml0ZXIucG9zICgpO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MsIDMyLCBzel8zMl82NFswXSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA0LCAzMiwgMCk7IC8vIHplcm9cbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDgsIDMyLCBzel8zMl82NFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE5IC8qY3N0LkNPREVfQ1VTVE9NX0ZJWEVEKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSB3cml0ZXIucG9zKCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPSB3cml0ZXIucG9zKCkgLSBvbGRfcG9zKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgICAgaWYgKHZbMF0gPT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLyArIHZbMF0gKyAoKHYubGVuZ3RoIC0gMSk8PDQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDA4IC8qY3N0LkNPREVfQkxPQ0szMiovLCAoKHYubGVuZ3RoLTEpIDw8IDEwKSB8IHZbMF0pO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2ggKHYsIDEpO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICAgIGlmKCEoY2FtbF9pc19tbF9ieXRlcyhjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpKSkpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodiAhPSAodnwwKSl7XG4gICAgICAgICAgdmFyIHR5cGVfb2ZfdiA9IHR5cGVvZiB2O1xuICAgICAgICAgIGlmKHR5cGVfb2ZfdiAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gSWYgYSBmbG9hdCBoYXBwZW5zIHRvIGJlIGFuIGludGVnZXIgaXQgaXMgc2VyaWFsaXplZCBhcyBhbiBpbnRlZ2VyXG4gICAgICAgICAgLy8gKEpzX29mX29jYW1sIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHR5cGUgb2YgYW4gaW50ZWdlciBudW1iZXIgaXNcbiAgICAgICAgICAvLyBmbG9hdCBvciBpbnRlZ2VyLikgVGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgY3Jhc2hlcyB3aGVuXG4gICAgICAgICAgLy8gdW5tYXJzaGFsbGluZyB1c2luZyB0aGUgc3RhbmRhcmQgcnVudGltZS5cbiAgICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0ID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodikpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgwQyAvKmNzdC5DT0RFX0RPVUJMRV9MSVRUTEUqLyk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaTw4OyBpKyspe3dyaXRlci53cml0ZSg4LHRbNyAtIGldKX1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzXG4gICAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPj0gMCAmJiB2IDwgMHg0MCkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMFg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8gKyB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodiA+PSAtKDEgPDwgNykgJiYgdiA8ICgxIDw8IDcpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwMCAvKmNzdC5DT0RFX0lOVDgqLywgdik7XG4gICAgICAgICAgZWxzZSBpZiAodiA+PSAtKDEgPDwgMTUpICYmIHYgPCAoMSA8PCAxNSkpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDAyIC8qY3N0LkNPREVfSU5UMzIqLywgdik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZXh0ZXJuX3JlYyAodik7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBpID0gc3RhY2sucG9wICgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AgKCk7XG4gICAgICBpZiAoaSArIDEgPCB2Lmxlbmd0aCkgc3RhY2sucHVzaCAodiwgaSArIDEpO1xuICAgICAgZXh0ZXJuX3JlYyAodltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB3cml0ZXIuY2h1bms7XG4gIH1cbn0gKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9ibGl0X2J5dGVzXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIgKHMsIG9mcywgbGVuLCB2LCBmbGFncykge1xuICB2YXIgdCA9IGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGggKFwiTWFyc2hhbC50b19idWZmZXI6IGJ1ZmZlciBvdmVyZmxvd1wiKTtcbiAgY2FtbF9ibGl0X2J5dGVzKHQsIDAsIHMsIG9mcywgdC5sZW5ndGgpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSl7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpIHJldHVybiAyNTI7IC8vIHN0cmluZ190YWdcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoYSkpIHJldHVybiAxMjUyOyAvLyBvY2FtbCBzdHJpbmcgKGlmIGRpZmZlcmVudCBmcm9tIGJ5dGVzKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgQXJyYXkgJiYgYVswXSA9PT0gKGFbMF0+Pj4wKSAmJiBhWzBdIDw9IDI1NSkge1xuICAgIC8vIExvb2sgbGlrZSBhbiBvY2FtbCBibG9ja1xuICAgIHZhciB0YWcgPSBhWzBdIHwgMDtcbiAgICAvLyBpZ25vcmUgZG91YmxlX2FycmF5X3RhZyBiZWNhdXNlIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IHNldFxuICAgIC8vIHRoaXMgdGFnIHdoZW4gd2UgY3JlYXRlIGFuIGFycmF5IG9mIGZsb2F0LlxuICAgIHJldHVybiAodGFnID09IDI1NCk/MDp0YWdcbiAgfVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBOdW1iZXIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChhICYmIGEuY2FtbF9jdXN0b20pIHJldHVybiAxMjU1OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAoYSAmJiBhLmNvbXBhcmUpIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN5bWJvbFwiKSByZXR1cm4gMTI1MTtcbiAgcmV0dXJuIDEwMDE7IC8vb3V0X29mX2hlYXBfdGFnXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSl7XG4gIHJldHVybiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20obnVtLCBjdXN0b20sIHN3YXAsIHRvdGFsKSB7XG4gIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGN1c3RvbSk7XG4gIGlmKGNvbXApIHtcbiAgICB2YXIgeCA9IChzd2FwID4gMCk/Y29tcChjdXN0b20sbnVtLHRvdGFsKTpjb21wKG51bSxjdXN0b20sdG90YWwpO1xuICAgIGlmKHRvdGFsICYmIHggIT0geCkgcmV0dXJuIHN3YXA7IC8vIHRvdGFsICYmIG5hblxuICAgIGlmKCt4ICE9ICt4KSByZXR1cm4gK3g7IC8vIG5hblxuICAgIGlmKCh4IHwgMCkgIT0gMCkgcmV0dXJuICh4IHwgMCk7IC8vICFuYW5cbiAgfVxuICByZXR1cm4gc3dhcFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsIChjb25zdCwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnRfY29tcGFyZSwgY2FtbF9zdHJpbmdfY29tcGFyZSwgY2FtbF9ieXRlc19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSwgY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0b3RhbCkge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKCEodG90YWwgJiYgYSA9PT0gYikpIHtcbiAgICAgIHZhciB0YWdfYSA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGEpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2EgPT0gMjUwKSB7IGEgPSBhWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2IgPT0gMjUwKSB7IGIgPSBiWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIC8vIHRhZ3MgYXJlIGRpZmZlcmVudFxuICAgICAgaWYodGFnX2EgIT09IHRhZ19iKSB7XG4gICAgICAgIGlmKHRhZ19hID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYiA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGEsIGIsIC0xLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmKHRhZ19iID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYSA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGIsIGEsIDEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRhZ19hIDwgdGFnX2IpPy0xOjE7XG4gICAgICB9XG4gICAgICBzd2l0Y2godGFnX2Epe1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICBjYXNlIDI0NzogLy8gQ2xvc3VyZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNDg6IC8vIE9iamVjdFxuICAgICAgICB2YXIgeCA9IGNhbWxfaW50X2NvbXBhcmUoYVsyXSwgYlsyXSk7XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEZvcndhcmRfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MTogLy9BYnN0cmFjdFxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTI6IC8vIE9DYW1sIGJ5dGVzXG4gICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYik7XG4gICAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfYXJyYXlfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjU1OiAvLyBDdXN0b21fdGFnXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgQ3VzdG9tX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjQ3OiAvLyBGdW5jdGlvblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NTogLy8gQ3VzdG9tXG4gICAgICAgIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpO1xuICAgICAgICBpZihjb21wICE9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShiKSl7XG4gICAgICAgICAgcmV0dXJuIChhLmNhbWxfY3VzdG9tPGIuY2FtbF9jdXN0b20pPy0xOjE7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIWNvbXApXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIHZhciB4ID0gY29tcChhLGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NjogLy8gY29tcGFyZSBmdW5jdGlvblxuICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KSB7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgYSA9ICthO1xuICAgICAgICBiID0gK2I7XG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDE6IC8vIFRoZSByZXN0XG4gICAgICAgIC8vIEhlcmUgd2UgY2FuIGJlIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDIuIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDMuIEphdmFTY3JpcHQgb2JqZWN0IHRoYW4gY2Fubm90IGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vICgzKSB3aWxsIHJhaXNlIGEgW1R5cGVFcnJvcl1cbiAgICAgICAgLy8gKDIpIHdpbGwgY29lcmNlIHRvIHByaW1pdGl2ZSB0eXBlcyB1c2luZyBbdmFsdWVPZl0gb3IgW3RvU3RyaW5nXVxuICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgLy8gLSBpZiBhIGFuZCBiIGFyZSBzdHJpbmdzLCBhcHBseSBsZXhpY29ncmFwaGljIGNvbXBhcmlzb25cbiAgICAgICAgLy8gLSBpZiBhIG9yIGIgYXJlIG5vdCBzdHJpbmdzLCBjb252ZXJ0IGEgYW5kIGIgdG8gbnVtYmVyXG4gICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRXhjZXB0aW9uOiBgIT1gIHdpbGwgbm90IGNvZXJjZS9jb252ZXJ0IGlmIGJvdGggYSBhbmQgYiBhcmUgb2JqZWN0c1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUxOiAvLyBKYXZhU2NyaXB0IFN5bWJvbCwgbm8gb3JkZXJpbmcuXG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyOiAvLyBvY2FtbCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGIpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTIwOiAvLyBqYXZhc2NyaXB0IHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0NjogLy8gTGF6eV90YWdcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlcbiAgICAgIGRlZmF1bHQ6IC8vIEJsb2NrIHdpdGggb3RoZXIgdGFnXG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0YWdfYSkpIHtcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gKGEubGVuZ3RoIDwgYi5sZW5ndGgpPy0xOjE7XG4gICAgICAgIGlmIChhLmxlbmd0aCA+IDEpIHN0YWNrLnB1c2goYSwgYiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHJldHVybiAwO1xuICAgIHZhciBpID0gc3RhY2sucG9wKCk7XG4gICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoaSArIDEgPCBhLmxlbmd0aCkgc3RhY2sucHVzaChhLCBiLCBpICsgMSk7XG4gICAgYSA9IGFbaV07XG4gICAgYiA9IGJbaV07XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlIChhLCBiKSB7IHJldHVybiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0cnVlKTsgfVxuLy9Qcm92aWRlczogY2FtbF9pbnRfY29tcGFyZSBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2ludF9jb21wYXJlIChhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuICgtMSk7IGlmIChhID09IGIpIHJldHVybiAwOyByZXR1cm4gMTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9lcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgIT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcmVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcmVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVydGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3NlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPD0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc3RoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzdGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPCAwKTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBGb3JtYXRcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9mb3JtYXRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9mb3JtYXQgKGZtdCkge1xuICBmbXQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCk7XG4gIHZhciBsZW4gPSBmbXQubGVuZ3RoO1xuICBpZiAobGVuID4gMzEpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImZvcm1hdF9pbnQ6IGZvcm1hdCB0b28gbG9uZ1wiKTtcbiAgdmFyIGYgPVxuICAgICAgeyBqdXN0aWZ5OicrJywgc2lnbnN0eWxlOictJywgZmlsbGVyOicgJywgYWx0ZXJuYXRlOmZhbHNlLFxuICAgICAgICBiYXNlOjAsIHNpZ25lZGNvbnY6ZmFsc2UsIHdpZHRoOjAsIHVwcGVyY2FzZTpmYWxzZSxcbiAgICAgICAgc2lnbjoxLCBwcmVjOi0xLCBjb252OidmJyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgIGNhc2UgJy0nOlxuICAgICAgZi5qdXN0aWZ5ID0gJy0nOyBicmVhaztcbiAgICBjYXNlICcrJzogY2FzZSAnICc6XG4gICAgICBmLnNpZ25zdHlsZSA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJzAnOlxuICAgICAgZi5maWxsZXIgPSAnMCc7IGJyZWFrO1xuICAgIGNhc2UgJyMnOlxuICAgICAgZi5hbHRlcm5hdGUgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6XG4gICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6XG4gICAgICBmLndpZHRoID0gMDtcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnLic6XG4gICAgICBmLnByZWMgPSAwO1xuICAgICAgaSsrO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgIGNhc2UgJ2QnOiBjYXNlICdpJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAndSc6XG4gICAgICBmLmJhc2UgPSAxMDsgYnJlYWs7XG4gICAgY2FzZSAneCc6XG4gICAgICBmLmJhc2UgPSAxNjsgYnJlYWs7XG4gICAgY2FzZSAnWCc6XG4gICAgICBmLmJhc2UgPSAxNjsgZi51cHBlcmNhc2UgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICdvJzpcbiAgICAgIGYuYmFzZSA9IDg7IGJyZWFrO1xuICAgIGNhc2UgJ2UnOiBjYXNlICdmJzogY2FzZSAnZyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLmNvbnYgPSBjOyBicmVhaztcbiAgICBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi51cHBlcmNhc2UgPSB0cnVlO1xuICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSAoKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHJhd2J1ZmZlcikge1xuICBpZiAoZi51cHBlcmNhc2UpIHJhd2J1ZmZlciA9IHJhd2J1ZmZlci50b1VwcGVyQ2FzZSgpO1xuICB2YXIgbGVuID0gcmF3YnVmZmVyLmxlbmd0aDtcbiAgLyogQWRqdXN0IGxlbiB0byByZWZsZWN0IGFkZGl0aW9uYWwgY2hhcnMgKHNpZ24sIGV0YykgKi9cbiAgaWYgKGYuc2lnbmVkY29udiAmJiAoZi5zaWduIDwgMCB8fCBmLnNpZ25zdHlsZSAhPSAnLScpKSBsZW4rKztcbiAgaWYgKGYuYWx0ZXJuYXRlKSB7XG4gICAgaWYgKGYuYmFzZSA9PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09IDE2KSBsZW4gKz0gMjtcbiAgfVxuICAvKiBEbyB0aGUgZm9ybWF0dGluZyAqL1xuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJyAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9ICctJztcbiAgICBlbHNlIGlmIChmLnNpZ25zdHlsZSAhPSAnLScpIGJ1ZmZlciArPSBmLnNpZ25zdHlsZTtcbiAgfVxuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDgpIGJ1ZmZlciArPSAnMCc7XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZT9cIjBYXCI6XCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKVxufVxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIGZhbHNlXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2Uocm9vdCkge1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMubWtkaXJTeW5jKHRoaXMubm0obmFtZSkse21vZGU6bW9kZX0pO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ybWRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnJlYWRkaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0RpcmVjdG9yeSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYiA9IHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gICAgdGhpcy5mcy51bmxpbmtTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiBiO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmLCByYWlzZV91bml4KSB7XG4gIHZhciBjb25zdHMgPSByZXF1aXJlKCdjb25zdGFudHMnKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvcih2YXIga2V5IGluIGYpe1xuICAgIHN3aXRjaChrZXkpe1xuICAgIGNhc2UgXCJyZG9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fUkRPTkxZOyBicmVhaztcbiAgICBjYXNlIFwid3Jvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1dST05MWTsgYnJlYWs7XG4gICAgY2FzZSBcImFwcGVuZFwiICA6XG4gICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZIHwgY29uc3RzLk9fQVBQRU5EO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNyZWF0ZVwiICAgOiByZXMgfD0gY29uc3RzLk9fQ1JFQVQ7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0cnVuY2F0ZVwiIDogcmVzIHw9IGNvbnN0cy5PX1RSVU5DOyAgICBicmVhaztcbiAgICBjYXNlIFwiZXhjbFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19FWENMOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJpbmFyeVwiICAgOiByZXMgfD0gY29uc3RzLk9fQklOQVJZOyAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0ZXh0XCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX1RFWFQ7ICAgICBicmVhaztcbiAgICBjYXNlIFwibm9uYmxvY2tcIiA6IHJlcyB8PSBjb25zdHMuT19OT05CTE9DSzsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMpO1xuICAgIHZhciBpc0NoYXJhY3RlckRldmljZSA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzQ2hhcmFjdGVyRGV2aWNlKCk7XG4gICAgZi5pc0NoYXJhY3RlckRldmljZSA9IGlzQ2hhcmFjdGVyRGV2aWNlO1xuICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMub3BlbmRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmFpc2Vfbm9kZWpzX2Vycm9yID0gZnVuY3Rpb24oZXJyLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZShcIlVuaXguVW5peF9lcnJvclwiKTtcbiAgaWYgKHJhaXNlX3VuaXggJiYgdW5peF9lcnJvcikge1xuICAgIHZhciBhcmdzID0gbWFrZV91bml4X2Vycl9hcmdzKGVyci5jb2RlLCBlcnIuc3lzY2FsbCwgZXJyLnBhdGgsIGVyci5lcnJubyk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXRzX2Zyb21fanMgPSBmdW5jdGlvbihqc19zdGF0cykge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vLFxuICAgIGZpbGVfa2luZCxcbiAgICBqc19zdGF0cy5tb2RlLFxuICAgIGpzX3N0YXRzLm5saW5rLFxuICAgIGpzX3N0YXRzLnVpZCxcbiAgICBqc19zdGF0cy5naWQsXG4gICAganNfc3RhdHMucmRldixcbiAgICBqc19zdGF0cy5zaXplLFxuICAgIGpzX3N0YXRzLmF0aW1lTXMsXG4gICAganNfc3RhdHMubXRpbWVNcyxcbiAgICBqc19zdGF0cy5jdGltZU1zXG4gICk7XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVEZXZpY2VcblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2UoKSB7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZkKGZkLCBmbGFncyl7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLmZkID0gZmQ7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sTm9kZUZkLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbE5vZGVGZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVGZDtcblxuTWxOb2RlRmQucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCxsZW58MCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxhLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgICByZXR1cm4gcmVhZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVGZCgpe1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vUmVxdWlyZXM6IE1sTm9kZUZkXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIGlmKGZsYWdzLm5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgdmFyIGZkMiA9IGZzLm9wZW5TeW5jKGZsYWdzLm5hbWUsIFwicnNcIik7XG4gICAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkMiwgZmxhZ3MpO1xuICAgIH0gY2F0Y2goZSkgeyAgfVxuICB9XG4gIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGZsYWdzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpe1xuICByZXR1cm4gKG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIikgPyAobmFtZSArIFwiL1wiKSA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCcvJyk7XG5lbHNlXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gIFwiL3N0YXRpY1wiO1xuY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2goY2FtbF9jdXJyZW50X2Rpcik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3Jvb3Rcbi8vUmVxdWlyZXM6IHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfZ2V0X3Jvb3QocGF0aCl7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCJ9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9IGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHwgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuXG4vL1Byb3ZpZGVzOiBNbEZpbGVcbmZ1bmN0aW9uIE1sRmlsZSgpeyAgfVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHJldHVybiBbXCJcIiwgcGF0aC5zdWJzdHJpbmcoMSldO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdpbjMyKHBhdGgpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iM2ZjYzI0NWZiMjU1Mzk5MDllZjFkNWVhYTAxZGJmOTJlMTY4NjMzL2xpYi9wYXRoLmpzI0w1NlxuICAgIHZhciBzcGxpdERldmljZVJlID0gL14oW2EtekEtWl06fFtcXFxcL117Mn1bXlxcXFwvXStbXFxcXC9dK1teXFxcXC9dKyk/KFtcXFxcL10pPyhbXFxzXFxTXSo/KSQvO1xuICAgIHZhciByZXN1bHQgPSBzcGxpdERldmljZVJlLmV4ZWMocGF0aCk7XG4gICAgdmFyIGRldmljZSA9IHJlc3VsdFsxXSB8fCAnJztcbiAgICB2YXIgaXNVbmMgPSBCb29sZWFuKGRldmljZSAmJiBkZXZpY2UuY2hhckF0KDEpICE9PSAnOicpO1xuXG4gICAgLy8gVU5DIHBhdGhzIGFyZSBhbHdheXMgYWJzb2x1dGVcbiAgICBpZiAoQm9vbGVhbihyZXN1bHRbMl0gfHwgaXNVbmMpKSB7XG4gICAgICB2YXIgcm9vdCA9IChyZXN1bHRbMV0gfHwgJycpO1xuICAgICAgdmFyIHNlcCA9IChyZXN1bHRbMl0gfHwgJycpO1xuICAgICAgcmV0dXJuIFtyb290LCBwYXRoLnN1YnN0cmluZyhyb290Lmxlbmd0aCArIHNlcC5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4zMiA6IHBvc2l4O1xuICB9XG4gIGVsc2UgcmV0dXJuIHBvc2l4XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoIChuYW1lKSB7XG4gIG5hbWU9Y2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmKCAhcGF0aF9pc19hYnNvbHV0ZShuYW1lKSApXG4gICAgbmFtZSA9IGNhbWxfY3VycmVudF9kaXIgKyBuYW1lO1xuICB2YXIgY29tcDAgPSBwYXRoX2lzX2Fic29sdXRlKG5hbWUpO1xuICB2YXIgY29tcCA9IGNvbXAwWzFdLnNwbGl0KFwiL1wiKTtcbiAgdmFyIG5jb21wID0gW11cbiAgZm9yKHZhciBpID0gMDsgaTxjb21wLmxlbmd0aDsgaSsrKXtcbiAgICBzd2l0Y2goY29tcFtpXSl7XG4gICAgY2FzZSBcIi4uXCI6IGlmKG5jb21wLmxlbmd0aD4xKSBuY29tcC5wb3AoKTsgYnJlYWs7XG4gICAgY2FzZSBcIi5cIjogYnJlYWs7XG4gICAgY2FzZSBcIlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gcGF0aC5qb2luKFwiL1wiKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpO1xuICB2YXIgcmVzO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZihuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09IDBcbiAgICAgICAmJiAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKSlcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gIH1cbiAgaWYoICFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGRpcikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfYV9kaXIobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmlsZV9leGlzdHNcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19maWxlX2V4aXN0cyAobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9hX2RpciwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLnJlYWRkaXIocm9vdC5yZXN0KTtcbiAgdmFyIGwgPSBuZXcgQXJyYXkoYS5sZW5ndGggKyAxKTtcbiAgbFswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKVxuICAgIGxbaSsxXSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYVtpXSk7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW1vdmVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgb2sgPSByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0KTtcbiAgaWYob2sgPT0gMCkgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiBhPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVuYW1lKG8sbil7XG4gIHZhciBvX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShvKTtcbiAgdmFyIG5fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG4pO1xuICBpZihvX3Jvb3QuZGV2aWNlICE9IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZighb19yb290LmRldmljZS5yZW5hbWUpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm8gaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfc3lzX21rZGlyKG5hbWUsIHBlcm0pe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QscGVybSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vdF9hX2RpclxuZnVuY3Rpb24gY2FtbF9zeXNfcm1kaXIobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndixhcmduKXtcbiAgcmV0dXJuIGNhbWxfYmFfbWFwX2ZpbGUoYXJndlswXSxhcmd2WzFdLGFyZ3ZbMl0sYXJndlszXSxhcmd2WzRdLGFyZ3ZbNV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlX2V4dGVyblxuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZV9leHRlcm4obmFtZSxjb250ZW50KXtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKVxuICAgIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZighZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCkgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICAgIGdsb2JhbFRoaXMuY2FtbF9mc190bXAucHVzaCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCAoKXtcbiAgdmFyIHRtcD1nbG9iYWxUaGlzLmNhbWxfZnNfdG1wXG4gIGlmKHRtcCl7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKyl7XG4gICAgICBqc29vX2NyZWF0ZV9maWxlKHRtcFtpXS5uYW1lLHRtcFtpXS5jb250ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlID0ganNvb19jcmVhdGVfZmlsZTtcbiAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKCEgcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LGNvbnRlbnQpO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9maWxlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgbmFtZSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk7XG4gIHZhciBjb250ZW50ID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjb250ZW50KTtcbiAgcmV0dXJuIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSwgY29udGVudCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWFkX2ZpbGVfY29udGVudCAobmFtZSkge1xuICB2YXIgbmFtZSA9ICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKT9jYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpOm5hbWU7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKDAsYnVmLDAsbGVuKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYnVmKVxuICB9XG4gIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF9nZXR0aW1lb2ZkYXlcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkge1xuICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF90aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nbXRpbWVcbi8vQWxpYXM6IHVuaXhfZ210aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ210aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0VVRDU2Vjb25kcygpLCBkLmdldFVUQ01pbnV0ZXMoKSwgZC5nZXRVVENIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXRlKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIGZhbHNlIHwgMCAvKiBmb3IgVVRDIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpcyBmYWxzZSAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXREYXRlKCksIGQuZ2V0TW9udGgoKSwgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWt0aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X21rdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X21rdGltZSh0bSl7XG4gIHZhciBkID0gKG5ldyBEYXRlKHRtWzZdKzE5MDAsdG1bNV0sdG1bNF0sdG1bM10sdG1bMl0sdG1bMV0pKS5nZXRUaW1lKCk7XG4gIHZhciB0ID0gTWF0aC5mbG9vcihkIC8gMTAwMCk7XG4gIHZhciB0bTIgPSBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhcnR1cCBjb25zdFxuLy9BbGlhczogd2luX3N0YXJ0dXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGFydHVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NsZWFudXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9jbGVhbnVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQgY29uc3Rcbi8vQWxpYXM6IHdpbl9oYW5kbGVfZmRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG4gICAgcmV0dXJuIHR0eS5pc2F0dHkoZmlsZURlc2NyaXB0b3IpPzE6MDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBtYWtlX3VuaXhfZXJyX2FyZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgdW5peF9lcnJvciA9IFtcbiAgLyogPT09VW5peC5lcnJvcj09PVxuICAgKlxuICAgKiBUaGlzIGFycmF5IGlzIGluIG9yZGVyIG9mIHRoZSB2YXJpYW50IGluIE9DYW1sXG4gICAqL1xuICBcIkUyQklHXCIsIFwiRUFDQ0VTXCIsIFwiRUFHQUlOXCIsIFwiRUJBREZcIiwgXCJFQlVTWVwiLCBcIkVDSElMRFwiLCBcIkVERUFETEtcIiwgXCJFRE9NXCIsXG4gIFwiRUVYSVNUXCIsIFwiRUZBVUxUXCIsIFwiRUZCSUdcIiwgXCJFSU5UUlwiLCBcIkVJTlZBTFwiLCBcIkVJT1wiLCBcIkVJU0RJUlwiLCBcIkVNRklMRVwiLFxuICBcIkVNTElOS1wiLCBcIkVOQU1FVE9PTE9OR1wiLCBcIkVORklMRVwiLCBcIkVOT0RFVlwiLCBcIkVOT0VOVFwiLCBcIkVOT0VYRUNcIiwgXCJFTk9MQ0tcIixcbiAgXCJFTk9NRU1cIiwgXCJFTk9TUENcIiwgXCJFTk9TWVNcIiwgXCJFTk9URElSXCIsIFwiRU5PVEVNUFRZXCIsIFwiRU5PVFRZXCIsIFwiRU5YSU9cIixcbiAgXCJFUEVSTVwiLCBcIkVQSVBFXCIsIFwiRVJBTkdFXCIsIFwiRVJPRlNcIiwgXCJFU1BJUEVcIiwgXCJFU1JDSFwiLCBcIkVYREVWXCIsIFwiRVdPVUxEQkxPQ0tcIixcbiAgXCJFSU5QUk9HUkVTU1wiLCBcIkVBTFJFQURZXCIsIFwiRU5PVFNPQ0tcIiwgXCJFREVTVEFERFJSRVFcIiwgXCJFTVNHU0laRVwiLFxuICBcIkVQUk9UT1RZUEVcIiwgXCJFTk9QUk9UT09QVFwiLCBcIkVQUk9UT05PU1VQUE9SVFwiLCBcIkVTT0NLVE5PU1VQUE9SVFwiLFxuICBcIkVPUE5PVFNVUFBcIiwgXCJFUEZOT1NVUFBPUlRcIiwgXCJFQUZOT1NVUFBPUlRcIiwgXCJFQUREUklOVVNFXCIsIFwiRUFERFJOT1RBVkFJTFwiLFxuICBcIkVORVRET1dOXCIsIFwiRU5FVFVOUkVBQ0hcIiwgXCJFTkVUUkVTRVRcIiwgXCJFQ09OTkFCT1JURURcIiwgXCJFQ09OTlJFU0VUXCIsIFwiRU5PQlVGU1wiLFxuICBcIkVJU0NPTk5cIiwgXCJFTk9UQ09OTlwiLCBcIkVTSFVURE9XTlwiLCBcIkVUT09NQU5ZUkVGU1wiLCBcIkVUSU1FRE9VVFwiLCBcIkVDT05OUkVGVVNFRFwiLFxuICBcIkVIT1NURE9XTlwiLCBcIkVIT1NUVU5SRUFDSFwiLCBcIkVMT09QXCIsIFwiRU9WRVJGTE9XXCJcbl07XG5mdW5jdGlvbiBtYWtlX3VuaXhfZXJyX2FyZ3MoY29kZSwgc3lzY2FsbCwgcGF0aCwgZXJybm8pIHtcbiAgdmFyIHZhcmlhbnQgPSB1bml4X2Vycm9yLmluZGV4T2YoY29kZSk7XG4gIGlmICh2YXJpYW50IDwgMCkge1xuICAgIC8vIERlZmF1bHQgaWYgdW5kZWZpbmVkXG4gICAgaWYgKGVycm5vID09IG51bGwpIHtcbiAgICAgIGVycm5vID0gLTk5OTlcbiAgICB9XG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgdmFyaWFudHMsIGZhbGxiYWNrIHRvIEVVTktOT1dORVJSKGludClcbiAgICB2YXJpYW50ID0gQkxPQ0soMCwgZXJybm8pO1xuICB9XG4gIHZhciBhcmdzID0gW1xuICAgIHZhcmlhbnQsXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoc3lzY2FsbCB8fCBcIlwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoIHx8IFwiXCIpXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9zdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X3N0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9sc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5sc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbHN0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubHN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9sc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfbHN0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ta2RpclxuZnVuY3Rpb24gY2FtbF91bml4X21rZGlyKG5hbWUsIHBlcm0pIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ta2Rpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbWtkaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LCBwZXJtLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JtZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcm1kaXIobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJtZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ybWRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ybWRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zeW1saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBzcmNfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHNyYyk7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmKHNyY19yb290LmRldmljZSAhPSBkc3Rfcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBjYW5ub3Qgc3ltbGluayBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtc1wiKTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2Uuc3ltbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBzcmNfcm9vdC5kZXZpY2Uuc3ltbGluayh0b19kaXIsIHNyY19yb290LnJlc3QsIGRzdF9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQodW5pdCkge1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCl7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0cHd1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHB3dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0cHd1aWQodW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsodW5pdCkge1xuICByZXR1cm4gZnNfbm9kZV9zdXBwb3J0ZWQoKT8xOjBcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlciA6IGRpcl9oYW5kbGUsIHBhdGg6IHBhdGggfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfcmVhZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSkge1xuICB2YXIgZW50cnk7XG4gIHRyeSB7XG4gICAgICBlbnRyeSA9IGRpcl9oYW5kbGUucG9pbnRlci5yZWFkU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJyZWFkZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGVudHJ5Lm5hbWUpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICAgIGRpcl9oYW5kbGUucG9pbnRlci5jbG9zZVN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3Jld2luZGRpclxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyLCBjYW1sX3VuaXhfb3BlbmRpclxuLy9BbGlhczogdW5peF9yZXdpbmRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZXdpbmRkaXIoZGlyX2hhbmRsZSkge1xuICBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG4gIHZhciBuZXdfZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKGRpcl9oYW5kbGUucGF0aCk7XG4gIGRpcl9oYW5kbGUucG9pbnRlciA9IG5ld19kaXJfaGFuZGxlLnBvaW50ZXI7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGZpcnN0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9vcGVuZGlyLCBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRmaXJzdFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRmaXJzdChwYXRoKSB7XG4gIC8vIFRoZSBXaW5kb3dzIGNvZGUgYWRkcyB0aGlzIGdsb2IgdG8gdGhlIHBhdGgsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0XG4gIHZhciBwYXRoX2pzID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocGF0aCk7XG4gIHBhdGhfanMgPSBwYXRoX2pzLnJlcGxhY2UoLyhefFtcXFxcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgY29uc3Rcbi8vQWxpYXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgKCkge3JldHVybiAwO31cblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBNbEZha2VEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIE1sRmFrZUZkLCBjYW1sX2NyZWF0ZV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9hcnJheSwgY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzXG5mdW5jdGlvbiBNbEZha2VEZXZpY2UgKHJvb3QsIGYpIHtcbiAgdGhpcy5jb250ZW50PXt9O1xuICB0aGlzLnJvb3QgPSByb290O1xuICB0aGlzLmxvb2t1cEZ1biA9IGY7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jcmVhdGVfZGlyX2lmX25lZWRlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIHJlcyA9IFwiXCI7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICBpZih0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgdGhpcy5jb250ZW50W3Jlc10gPSBTeW1ib2woXCJkaXJlY3RvcnlcIik7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuc2xhc2ggPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpP25hbWU6KG5hbWUgKyBcIi9cIik7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYoIXRoaXMuY29udGVudFtuYW1lXSAmJiB0aGlzLmxvb2t1cEZ1bikge1xuICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucm9vdCksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSkpO1xuICAgIGlmKHJlcyAhPT0gMCkge1xuICAgICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICAgIHRoaXMuY29udGVudFtuYW1lXT1uZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICB9XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0pIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFRVhJU1RcIiwgXCJta2RpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBGaWxlIGV4aXN0c1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICBwYXJlbnQgPSAocGFyZW50ICYmIHBhcmVudFsxXSkgfHwgJyc7XG4gIGlmKCF0aGlzLmV4aXN0cyhwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQodGhpcy5zbGFzaChuYW1lKSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIGlmKG4ubWF0Y2gocikpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RFTVBUWVwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIjogRGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICB9XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIHZhciBzZWVuID0ge31cbiAgdmFyIGEgPSBbXTtcbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIHZhciBtID0gbi5tYXRjaChyKTtcbiAgICBpZihtICYmICFzZWVuW21bMV1dKSB7c2VlblttWzFdXSA9IHRydWU7IGEucHVzaChtWzFdKX1cbiAgfVxuICByZXR1cm4gYTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuXG4gIHZhciBhID0gdGhpcy5yZWFkZGlyKG5hbWUpO1xuICB2YXIgYyA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHJldHVybiB7IHJlYWRTeW5jIDogKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYykge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGkgPT0gYS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBlbnRyeSA9IGFbaV07XG4gICAgaSsrO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5IH1cbiAgfSlcbiAgICAsIGNsb3NlU3luYzogKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGMgPSB0cnVlO1xuICAgICAgYSA9IFtdO1xuICAgIH0pXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICBpZihuYW1lID09IFwiXCIpICByZXR1cm4gdHJ1ZTtcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVfc2xhc2hdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlZ2lzdGVyPSBmdW5jdGlvbiAobmFtZSxjb250ZW50KXtcbiAgdmFyIGZpbGU7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lXSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgaWYoY2FtbF9pc19tbF9ieXRlcyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gIGlmKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2FycmF5KGNvbnRlbnQpKTtcbiAgZWxzZSBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50LnRvU3RyaW5nKSB7XG4gICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoY29udGVudC50b1N0cmluZygpKSk7XG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgfVxuICBpZihmaWxlKXtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IGZpbGU7XG4gIH1cbiAgZWxzZSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiByZWdpc3RlcmluZyBmaWxlIHdpdGggaW52YWxpZCBjb250ZW50IHR5cGVcIik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VEZXZpY2VcblxuLy9Qcm92aWRlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogTWxGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuTWxGYWtlRmlsZS5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB2YXIgb2xkID0gdGhpcy5kYXRhO1xuICB0aGlzLmRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgbGVuKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgdmFyIG9sZF9kYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMuZGF0YSA9IG5ld19zdHI7XG4gICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICB9XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgdGhpcy5kYXRhLCBvZmZzZXQsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIGxlbiA9IGNsZW4gLSBvZmZzZXQ7XG4gIH1cbiAgaWYobGVuKSB7XG4gICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gICAgY2FtbF9ibGl0X2J5dGVzKHRoaXMuZGF0YSwgb2Zmc2V0LCBkYXRhLCAwLCBsZW4pO1xuICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgfVxuICByZXR1cm4gbGVuXG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmRfb3V0KGZkLGZsYWdzKSB7XG4gIE1sRmFrZUZpbGUuY2FsbCh0aGlzLCBjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gIHRoaXMubG9nID0gKGZ1bmN0aW9uIChzKSB7IHJldHVybiAwIH0pO1xuICBpZihmZCA9PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZztcbiAgZWxzZSBpZihmZCA9PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nXG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7IHJldHVybiAwIH1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMubG9nKSB7XG4gICAgaWYobGVuID4gMFxuICAgICAgICYmIHBvcyA+PSAwXG4gICAgICAgJiYgcG9zK2xlbiA8PSBidWYubGVuZ3RoXG4gICAgICAgJiYgYnVmW3BvcytsZW4tMV0gPT0gMTApXG4gICAgICBsZW4gLS07XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgdmFyIHNyYyA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgdGhpcy5sb2coc3JjLnRvVXRmMTYoKSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgaXMgd3JpdGUgb25seVwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG9nID0gdW5kZWZpbmVkO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmQobmFtZSwgZmlsZSxmbGFncykge1xuICB0aGlzLmZpbGUgPSBmaWxlO1xuICB0aGlzLm5hbWUgPSBuYW1lO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5cbk1sRmFrZUZkLnByb3RvdHlwZS5lcnJfY2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5hbWUgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLmxlbmd0aCAoKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLndyaXRlKG9mZnNldCxidWYscG9zLGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLnJlYWQob2Zmc2V0LCBidWYsIHBvcywgbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maWxlID0gdW5kZWZpbmVkO1xufVxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAqL1xuLyogIGVuIEF1dG9tYXRpcXVlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCAgICAqL1xuLyogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aXRoICAgICAqL1xuLyogIHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIC4uL0xJQ0VOU0UuICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKiAkSWQ6IGxleGluZy5jIDYwNDUgMjAwNC0wMS0wMSAxNjo0Mjo0M1ogZG9saWdleiAkICovXG5cbi8qIFRoZSB0YWJsZS1kcml2ZW4gYXV0b21hdG9uIGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXguICovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2xleF9hcnJheShzKSB7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpO1xuICB2YXIgbCA9IHMubGVuZ3RoIC8gMjtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgIGFbaV0gPSAocy5jaGFyQ29kZUF0KDIgKiBpKSB8IChzLmNoYXJDb2RlQXQoMiAqIGkgKyAxKSA8PCA4KSkgPDwgMTYgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHJldHVybiAtYmFzZS0xO1xuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX21lbShzLCBpLCBtZW0sIGN1cnJfcG9zKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm47XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuIDtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV9jb2RlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrX2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrX2NvZGVdKTtcbiAgICB0YmwubGV4X2NoZWNrX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrX2NvZGVdKTtcbiAgICB0YmwubGV4X3RyYW5zX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zX2NvZGVdKTtcbiAgICB0YmwubGV4X2RlZmF1bHRfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbCkgdGJsLmxleF9jb2RlID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh0YmxbbGV4X2NvZGVdKTtcblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFzZV9jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICByZXR1cm4gLWJhc2UtMTtcbiAgICB9XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFja3Rya19jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZSA7XG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBJZiBzb21lIHRyYW5zaXRpb24sIGdldCBhbmQgcGVyZm9ybSBtZW1vcnkgbW92ZXMgKi9cbiAgICAgIHZhciBiYXNlX2NvZGUgPSB0YmwubGV4X2Jhc2VfY29kZVtwc3RhdGVdLCBwY19vZmY7XG4gICAgICBpZiAodGJsLmxleF9jaGVja19jb2RlW2Jhc2VfY29kZSArIGNdID09IHBzdGF0ZSlcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF90cmFuc19jb2RlW2Jhc2VfY29kZSArIGNdO1xuICAgICAgZWxzZVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X2RlZmF1bHRfY29kZVtwc3RhdGVdO1xuICAgICAgaWYgKHBjX29mZiA+IDApXG4gICAgICAgIGNhbWxfbGV4X3J1bl9tZW1cbiAgICAgICh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsdG9yZWFkKXtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNDA5Nik7XG4gIGlmKHRvcmVhZCA8IDApe1xuICAgIHdoaWxlKHRydWUpe1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCxidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgYnJlYWs7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUodG9yZWFkID4gMCkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCwgKHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkKSk7XG4gICAgICBpZihyZWFkID09IDApIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgICAgdG9yZWFkIC09IHJlYWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLG9mcyxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVRyYW5zZm9ybVxudmFyIGNhbWxfTUQ1VHJhbnNmb3JtID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkICh4LCB5KSB7IHJldHVybiAoeCArIHkpIHwgMDsgfVxuICBmdW5jdGlvbiB4eChxLGEsYix4LHMsdCkge1xuICAgIGEgPSBhZGQoYWRkKGEsIHEpLCBhZGQoeCwgdCkpO1xuICAgIHJldHVybiBhZGQoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBmZihhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBoaChhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpOyB9XG4gIGZ1bmN0aW9uIGlpKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLCBiID0gd1sxXSwgYyA9IHdbMl0sIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDcsIDB4RDc2QUE0NzgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDFdLCAxMiwgMHhFOEM3Qjc1Nik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE3LCAweDI0MjA3MERCKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyAzXSwgMjIsIDB4QzFCRENFRUUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA3LCAweEY1N0MwRkFGKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA1XSwgMTIsIDB4NDc4N0M2MkEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNywgMHhBODMwNDYxMyk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgN10sIDIyLCAweEZENDY5NTAxKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNywgMHg2OTgwOThEOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOV0sIDEyLCAweDhCNDRGN0FGKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTcsIDB4RkZGRjVCQjEpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTFdLCAyMiwgMHg4OTVDRDdCRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDcsIDB4NkI5MDExMjIpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbMTNdLCAxMiwgMHhGRDk4NzE5Myk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE3LCAweEE2Nzk0MzhFKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzE1XSwgMjIsIDB4NDlCNDA4MjEpO1xuXG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDUsIDB4RjYxRTI1NjIpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDZdLCA5LCAweEMwNDBCMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1RTVBNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDBdLCAyMCwgMHhFOUI2QzdBQSk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDUsIDB4RDYyRjEwNUQpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTBdLCA5LCAweDAyNDQxNDUzKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTQsIDB4RDhBMUU2ODEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDRdLCAyMCwgMHhFN0QzRkJDOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDUsIDB4MjFFMUNERTYpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTRdLCA5LCAweEMzMzcwN0Q2KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTQsIDB4RjRENTBEODcpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDhdLCAyMCwgMHg0NTVBMTRFRCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4QTlFM0U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDJdLCA5LCAweEZDRUZBM0Y4KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTQsIDB4Njc2RjAyRDkpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMTJdLCAyMCwgMHg4RDJBNEM4QSk7XG5cbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNCwgMHhGRkZBMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOF0sIDExLCAweDg3NzFGNjgxKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTYsIDB4NkQ5RDYxMjIpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTRdLCAyMywgMHhGREU1MzgwQyk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDQsIDB4QTRCRUVBNDQpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDRdLCAxMSwgMHg0QkRFQ0ZBOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE2LCAweEY2QkI0QjYwKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzEwXSwgMjMsIDB4QkVCRkJDNzApO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA0LCAweDI4OUI3RUM2KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyAwXSwgMTEsIDB4RUFBMTI3RkEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNiwgMHhENEVGMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNl0sIDIzLCAweDA0ODgxRDA1KTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNCwgMHhEOUQ0RDAzOSk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMl0sIDExLCAweEU2REI5OUU1KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTYsIDB4MUZBMjdDRjgpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDJdLCAyMywgMHhDNEFDNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNiwgMHhGNDI5MjI0NCk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgN10sIDEwLCAweDQzMkFGRjk3KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTUsIDB4QUI5NDIzQTcpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDVdLCAyMSwgMHhGQzkzQTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1QjU5QzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDNdLCAxMCwgMHg4RjBDQ0M5Mik7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE1LCAweEZGRUZGNDdEKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyAxXSwgMjEsIDB4ODU4NDVERDEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA2LCAweDZGQTg3RTRGKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4RkUyQ0U2RTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNSwgMHhBMzAxNDMxNCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsxM10sIDIxLCAweDRFMDgxMUExKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNiwgMHhGNzUzN0U4Mik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMV0sIDEwLCAweEJEM0FGMjM1KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTUsIDB4MkFEN0QyQkIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDldLCAyMSwgMHhFQjg2RDM5MSk7XG5cbiAgICB3WzBdID0gYWRkKGEsIHdbMF0pO1xuICAgIHdbMV0gPSBhZGQoYiwgd1sxXSk7XG4gICAgd1syXSA9IGFkZChjLCB3WzJdKTtcbiAgICB3WzNdID0gYWRkKGQsIHdbM10pO1xuICB9fSkoKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtsZW46MCxcbiAgICAgICAgICB3Om5ldyBVaW50MzJBcnJheShbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3Nl0pLFxuICAgICAgICAgIGIzMjpiMzIsXG4gICAgICAgICAgYjg6Yjh9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVVcGRhdGUoY3R4LCBpbnB1dCwgaW5wdXRfbGVuKXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICB2YXIgaW5wdXRfcG9zID0gMDtcbiAgY3R4LmxlbiArPSBpbnB1dF9sZW47XG4gIGlmKGluX2J1Zil7XG4gICAgdmFyIG1pc3NpbmcgPSA2NCAtIGluX2J1ZjtcbiAgICBpZihpbnB1dF9sZW4gPCBtaXNzaW5nKSB7XG4gICAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsaW5wdXRfbGVuKSxpbl9idWYpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxtaXNzaW5nKSxpbl9idWYpO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gbWlzc2luZztcbiAgICBpbnB1dF9wb3MgKz0gbWlzc2luZztcbiAgfVxuICB3aGlsZShpbnB1dF9sZW4gPj0gNjQpe1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIDY0KSwgMCk7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSA2NDtcbiAgICBpbnB1dF9wb3MgKz0gNjQ7XG4gIH1cbiAgaWYoaW5wdXRfbGVuKVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIGN0eC5iOFtpbl9idWZdID0gMHg4MDtcbiAgaW5fYnVmICsrO1xuICBpZihpbl9idWYgPiA1Nikge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDY0OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH1cbiAgY3R4LmIzMlsxNF0gPSBjdHgubGVuIDw8IDM7XG4gIGN0eC5iMzJbMTVdID0gKGN0eC5sZW4gPj4gMjkpICYgMHgxRkZGRkZGRjtcbiAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXG4gICAgICB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweEZGO1xuICByZXR1cm4gdDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2J5dGVzKHMsIG9mcywgbGVuKSB7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpO1xuICBjYW1sX01ENVVwZGF0ZShjdHgsYS5zdWJhcnJheShvZnMsIG9mcyArIGxlbiksIGxlbik7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZSkgZmlsZS5jbG9zZSgpO1xuICBkZWxldGUgY2FtbF9zeXNfZmRzW2ZkXTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSxpZHgpIHtcbiAgaWYoaWR4ID09IHVuZGVmaW5lZCl7XG4gICAgaWR4ID0gY2FtbF9zeXNfZmRzLmxlbmd0aDtcbiAgfVxuICBjYW1sX3N5c19mZHNbaWR4XSA9IGZpbGU7XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbiAobmFtZSwgZmxhZ3MsIF9wZXJtcykge1xuICB2YXIgZiA9IHt9O1xuICB3aGlsZShmbGFncyl7XG4gICAgc3dpdGNoKGZsYWdzWzFdKXtcbiAgICBjYXNlIDA6IGYucmRvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDE6IGYud3Jvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDI6IGYuYXBwZW5kID0gMTticmVhaztcbiAgICBjYXNlIDM6IGYuY3JlYXRlID0gMTticmVhaztcbiAgICBjYXNlIDQ6IGYudHJ1bmNhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNTogZi5leGNsID0gMTsgYnJlYWs7XG4gICAgY2FzZSA2OiBmLmJpbmFyeSA9IDE7YnJlYWs7XG4gICAgY2FzZSA3OiBmLnRleHQgPSAxO2JyZWFrO1xuICAgIGNhc2UgODogZi5ub25ibG9jayA9IDE7YnJlYWs7XG4gICAgfVxuICAgIGZsYWdzPWZsYWdzWzJdO1xuICB9XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCxmKTtcbiAgcmV0dXJuIGNhbWxfc3lzX29wZW5faW50ZXJuYWwgKGZpbGUsIHVuZGVmaW5lZCk7XG59XG4oZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBuZXcgTWxGYWtlRmRfb3V0KGZkLCBmbGFncylcbiAgfVxuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMCx7cmRvbmx5OjEsYWx0bmFtZTpcIi9kZXYvc3RkaW5cIixpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDApO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMSx7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDEpO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMix7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDIpO1xufSkoKVxuXG5cbi8vIG9jYW1sIENoYW5uZWxzXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lKGNoYW5pZCwgbmFtZSkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5uYW1lID0gbmFtZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbHNcbnZhciBjYW1sX21sX2NoYW5uZWxzID0gbmV3IEFycmF5KCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0IChjYXB0dXJlZCwgaW50byl7XG4gIHZhciB0b19yZXN0b3JlID0gY2FtbF9tbF9jaGFubmVsX2dldChjYXB0dXJlZCk7XG4gIHZhciBuZXdfID0gY2FtbF9tbF9jaGFubmVsX2dldChpbnRvKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSBuZXdfOyAvLyBYWFhcbiAgcmV0dXJuIHRvX3Jlc3RvcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZSAoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpe1xuICBjYW1sX21sX2NoYW5uZWxzW2NhcHR1cmVkXSA9IHRvX3Jlc3RvcmU7IC8vIFhYWFxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX2dldChpZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tpZF07IC8vIFhYWFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGJ1ZmZlcmVkID0gKGZpbGUuZmxhZ3MuYnVmZmVyZWQgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIGJ1ZmZlcmVkOmJ1ZmZlcmVkXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiAoZmQpICB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcl9tYXg6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkgPSBtb2RlXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pc19iaW5hcnlfbW9kZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZihjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9zeXNfY2xvc2UoY2hhbi5mZCk7XG4gICAgY2hhbi5mZCA9IC0xO1xuICAgIGNoYW4uYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm91dHB1dCA9IChmdW5jdGlvbiAocykge2Yocyl9KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbChjaGFuaWQsZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZmlsbCAoY2hhbikge1xuICBpZihjaGFuLnJlZmlsbCAhPSBudWxsKXtcbiAgICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgICB2YXIgc3RyX2EgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhzdHIpO1xuICAgIGlmIChzdHJfYS5sZW5ndGggPT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKXtcbiAgICAgICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpO1xuICAgICAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgICAgIGNoYW4uYnVmZmVyID0gYjtcbiAgICAgIH1cbiAgICAgIGNoYW4uYnVmZmVyLnNldChzdHJfYSxjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgICAgY2hhbi5vZmZzZXQgKz0gc3RyX2EubGVuZ3RoO1xuICAgICAgY2hhbi5idWZmZXJfbWF4ICs9IHN0cl9hLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCBjaGFuLmJ1ZmZlcl9tYXgsIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2JpZ2FycmF5IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmxvY2sgKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYobCA8PSBhdmFpbCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBsO1xuICB9XG4gIGVsc2UgaWYoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGF2YWlsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBhdmFpbDtcbiAgICBuID0gYXZhaWw7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgIGlmKG4gPiBhdmFpbCkgbiA9IGF2YWlsO1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgZnVuY3Rpb24gYmxvY2soYnVmZmVyLCBvZmZzZXQsIG4pIHtcbiAgICB2YXIgciA9IDA7XG4gICAgd2hpbGUociA8IG4pe1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCtyXSA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICAgICAgY2hhbi5idWZmZXJfY3VycisrO1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB2YXIgciA9IGJsb2NrKGhlYWRlciwgMCwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgaWYociA9PSAwKVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgZWxzZSBpZiAociA8IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3RcIik7XG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChjYW1sX2J5dGVzX29mX2FycmF5KGhlYWRlciksIDApO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgYnVmLnNldChoZWFkZXIsMCk7XG4gIHZhciByID0gYmxvY2soYnVmLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUsIGxlbilcbiAgaWYociA8IGxlbilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3QgXCIgKyByICsgXCIgIFwiICsgbGVuKTtcbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcChjKSB7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlKGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgdmFyIHJlcyA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2NoYXIsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICByZXMgPSAocmVzIDw8IDgpICsgY2FtbF9tbF9pbnB1dF9jaGFyKGNoYW5pZCkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYocG9zID49IGNoYW4ub2Zmc2V0IC0gY2hhbi5idWZmZXJfbWF4XG4gICAgICYmIHBvcyA8PSBjaGFuLm9mZnNldFxuICAgICAmJiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5KSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQscG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbl82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3Bvc19pbihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCAtIChjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjYW1sX3Bvc19pbihjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIHAgPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBkbyB7XG4gICAgaWYocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPiAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyKSwwKTtcbiAgICAgICAgcCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICB9XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZfbWF4ID0gY2hhbi5idWZmZXJfbWF4O1xuICAgICAgY2FtbF9yZWZpbGwgKGNoYW4pO1xuICAgICAgaWYocHJldl9tYXggPT0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPSAxMCk7XG4gIHJldHVybiAocCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9mbHVzaFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXJfY3VyciA9PSAwKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5vdXRwdXQpIHtcbiAgICBjaGFuLm91dHB1dChjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgfVxuICBjaGFuLm9mZnNldCArPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X3RhXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBvdXRwdXQgdG8gYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiXG4gIH1cbiAgc3dpdGNoKGNoYW4uYnVmZmVyZWQpe1xuICBjYXNlIDA6IC8vIFVuYnVmZmVyZWRcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVha1xuICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICB2YXIgaWQgPSBidWZmZXIubGFzdEluZGV4T2YoMTApXG4gICAgaWYoaWQgPCAwKSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoMCwgaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGlkICsgMTtcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXksIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX291dChjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoY2FtbF9wb3Nfb3V0KGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lzX2J1ZmZlcmVkKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLmJ1ZmZlcmVkID8gMSA6IDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGNoYW5pZCx2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmKCF2KSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiAwXG59XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXggKilcblxudHlwZSBwb3NpdGlvbiA9IHtcbiAgcG9zX2ZuYW1lIDogc3RyaW5nO1xuICBwb3NfbG51bSA6IGludDtcbiAgcG9zX2JvbCA6IGludDtcbiAgcG9zX2NudW0gOiBpbnQ7XG59XG5cbmxldCBkdW1teV9wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMDtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gLTE7XG59XG5cbnR5cGUgbGV4YnVmID1cbiAgeyByZWZpbGxfYnVmZiA6IGxleGJ1ZiAtPiB1bml0O1xuICAgIG11dGFibGUgbGV4X2J1ZmZlciA6IGJ5dGVzO1xuICAgIG11dGFibGUgbGV4X2J1ZmZlcl9sZW4gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfYWJzX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9hY3Rpb24gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfZW9mX3JlYWNoZWQgOiBib29sO1xuICAgIG11dGFibGUgbGV4X21lbSA6IGludCBhcnJheTtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wIDogcG9zaXRpb247XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wIDogcG9zaXRpb247XG4gIH1cblxudHlwZSBsZXhfdGFibGVzID1cbiAgeyBsZXhfYmFzZTogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHQ6IHN0cmluZztcbiAgICBsZXhfdHJhbnM6IHN0cmluZztcbiAgICBsZXhfY2hlY2s6IHN0cmluZztcbiAgICBsZXhfYmFzZV9jb2RlIDogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHRfY29kZSA6IHN0cmluZztcbiAgICBsZXhfdHJhbnNfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY2hlY2tfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY29kZTogc3RyaW5nO31cblxuZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuZXh0ZXJuYWwgY19uZXdfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX25ld19sZXhfZW5naW5lXCJcblxubGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxuXG5sZXQgbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIEludC5taW4gKDIgKiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuID4gbmV3bGVuXG4gICAgICB0aGVuIGZhaWx3aXRoIFwiTGV4aW5nLmxleF9yZWZpbGw6IGNhbm5vdCBncm93IGJ1ZmZlclwiO1xuICAgICAgbGV0IG5ld2J1ZiA9IEJ5dGVzLmNyZWF0ZSBuZXdsZW4gaW5cbiAgICAgICgqIENvcHkgdGhlIHZhbGlkIGRhdGEgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbmV3YnVmIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3Bvcyk7XG4gICAgICBsZXhidWYubGV4X2J1ZmZlciA8LSBuZXdidWZcbiAgICBlbmQ7XG4gICAgKCogUmVhbGxvY2F0aW9uIG9yIG5vdCwgd2UgaGF2ZSBzaGlmdGVkIHRoZSBkYXRhIGxlZnQgYnlcbiAgICAgICBzdGFydF9wb3MgY2hhcmFjdGVyczsgdXBkYXRlIHRoZSBwb3NpdGlvbnMgKilcbiAgICBsZXQgcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleGJ1Zi5sZXhfYWJzX3BvcyArIHM7XG4gICAgbGV4YnVmLmxleF9jdXJyX3BvcyA8LSBsZXhidWYubGV4X2N1cnJfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSAwO1xuICAgIGxleGJ1Zi5sZXhfbGFzdF9wb3MgPC0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIHMgO1xuICAgIGxldCB0ID0gbGV4YnVmLmxleF9tZW0gaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQtMSBkb1xuICAgICAgbGV0IHYgPSB0LihpKSBpblxuICAgICAgaWYgdiA+PSAwIHRoZW5cbiAgICAgICAgdC4oaSkgPC0gdi1zXG4gICAgZG9uZVxuICBlbmQ7XG4gICgqIFRoZXJlIGlzIG5vdyBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gIEJ5dGVzLmJsaXQgYXV4X2J1ZmZlciAwIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiBuO1xuICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuICsgblxuXG5sZXQgemVyb19wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMTtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gMDtcbn1cblxubGV0IGZyb21fZnVuY3Rpb24gPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIGYgPVxuICB7IHJlZmlsbF9idWZmID0gbGV4X3JlZmlsbCBmIChCeXRlcy5jcmVhdGUgNTEyKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDEwMjQ7XG4gICAgbGV4X2J1ZmZlcl9sZW4gPSAwO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSBmYWxzZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IGZyb21fY2hhbm5lbCA/d2l0aF9wb3NpdGlvbnMgaWMgPVxuICBmcm9tX2Z1bmN0aW9uID93aXRoX3Bvc2l0aW9ucyAoZnVuIGJ1ZiBuIC0+IGlucHV0IGljIGJ1ZiAwIG4pXG5cbmxldCBmcm9tX3N0cmluZyA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgcyA9XG4gIHsgcmVmaWxsX2J1ZmYgPSAoZnVuIGxleGJ1ZiAtPiBsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWUpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5vZl9zdHJpbmcgczsgKCogaGF2ZSB0byBtYWtlIGEgY29weSBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnNhZmUtc3RyaW5nIG1vZGUgKilcbiAgICBsZXhfYnVmZmVyX2xlbiA9IFN0cmluZy5sZW5ndGggcztcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gdHJ1ZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IHNldF9wb3NpdGlvbiBsZXhidWYgcG9zaXRpb24gPVxuICBsZXhidWYubGV4X2N1cnJfcCAgPC0ge3Bvc2l0aW9uIHdpdGggcG9zX2ZuYW1lID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2ZuYW1lfTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIHBvc2l0aW9uLnBvc19jbnVtXG5cbmxldCBzZXRfZmlsZW5hbWUgbGV4YnVmIGZuYW1lID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgPC0ge2xleGJ1Zi5sZXhfY3Vycl9wIHdpdGggcG9zX2ZuYW1lID0gZm5hbWV9XG5cbmxldCB3aXRoX3Bvc2l0aW9ucyBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3NcblxubGV0IGxleGVtZSBsZXhidWYgPVxuICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3MgbGVuXG5cbmxldCBzdWJfbGV4ZW1lIGxleGJ1ZiBpMSBpMiA9XG4gIGxldCBsZW4gPSBpMi1pMSBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlblxuXG5sZXQgc3ViX2xleGVtZV9vcHQgbGV4YnVmIGkxIGkyID1cbiAgaWYgaTEgPj0gMCB0aGVuIGJlZ2luXG4gICAgbGV0IGxlbiA9IGkyLWkxIGluXG4gICAgU29tZSAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW4pXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgTm9uZVxuICBlbmRcblxubGV0IHN1Yl9sZXhlbWVfY2hhciBsZXhidWYgaSA9IEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXJfb3B0IGxleGJ1ZiBpID1cbiAgaWYgaSA+PSAwIHRoZW5cbiAgICBTb21lIChCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxuXG5sZXQgbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPVxuICBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgKGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgaSlcblxubGV0IGxleGVtZV9zdGFydCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3AucG9zX2NudW1cbmxldCBsZXhlbWVfZW5kIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19jbnVtXG5cbmxldCBsZXhlbWVfc3RhcnRfcCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3BcbmxldCBsZXhlbWVfZW5kX3AgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3BcblxubGV0IG5ld19saW5lIGxleGJ1ZiA9XG4gIGxldCBsY3AgPSBsZXhidWYubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsZXhidWYubGV4X2N1cnJfcCA8LVxuICAgICAgeyBsY3Agd2l0aFxuICAgICAgICBwb3NfbG51bSA9IGxjcC5wb3NfbG51bSArIDE7XG4gICAgICAgIHBvc19ib2wgPSBsY3AucG9zX2NudW07XG4gICAgICB9XG5cblxuXG4oKiBEaXNjYXJkIGRhdGEgbGVmdCBpbiBsZXhlciBidWZmZXIuICopXG5cbmxldCBmbHVzaF9pbnB1dCBsYiA9XG4gIGxiLmxleF9jdXJyX3BvcyA8LSAwO1xuICBsYi5sZXhfYWJzX3BvcyA8LSAwO1xuICBsZXQgbGNwID0gbGIubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsYi5sZXhfY3Vycl9wIDwtIHt6ZXJvX3BvcyB3aXRoIHBvc19mbmFtZSA9IGxjcC5wb3NfZm5hbWV9O1xuICBsYi5sZXhfYnVmZmVyX2xlbiA8LSAwO1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRnVuY3Rpb25hbCBxdWV1ZXMgKGZpZm8pfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQmFzaWNzfSAqKVxuXG5bQEBAd2FybmluZyBcIi0zN1wiXVxuXG50eXBlIHplcm8gPSBaZXJvXG50eXBlICd4IHN1Y2MgPSBTdWNjXG50eXBlIG9uZSA9IHplcm8gc3VjY1xudHlwZSB0d28gPSB6ZXJvIHN1Y2Mgc3VjY1xudHlwZSB0aHJlZSA9IHplcm8gc3VjYyBzdWNjIHN1Y2NcblxudHlwZSAoKydhLCAnbCkgZGlnaXQgPVxuICB8IFplcm8gOiAoJ2EsIHplcm8pIGRpZ2l0XG4gIHwgT25lIDogJ2EgLT4gKCdhLCBvbmUpIGRpZ2l0XG4gIHwgVHdvIDogJ2EgKiAnYSAtPiAoJ2EsIHR3bykgZGlnaXRcbiAgfCBUaHJlZSA6ICdhICogJ2EgKiAnYSAtPiAoJ2EsIHRocmVlKSBkaWdpdFxuXG4oKiBzdG9yZSB0aGUgc2l6ZSBpbiBkZWVwIHZlcnNpb24gKilcbnR5cGUgKydhIHQgPVxuICB8IFNoYWxsb3cgOiAoJ2EsIF8pIGRpZ2l0IC0+ICdhIHRcbiAgfCBEZWVwIDpcbiAgICAgIGludCAqICgnYSwgXyBzdWNjKSBkaWdpdCAqICgnYSAqICdhKSB0IGxhenlfdCAqICgnYSwgXyBzdWNjKSBkaWdpdFxuICAgICAgLT4gJ2EgdFxuXG5sZXQgZW1wdHkgOiB0eXBlIGEuIGEgdCA9IFNoYWxsb3cgWmVyb1xuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IF9lbXB0eSA9IFNoYWxsb3cgWmVyb1xubGV0IF9zaW5nbGUgeCA9IFNoYWxsb3cgKE9uZSB4KVxubGV0IF9kb3VibGUgeCB5ID0gU2hhbGxvdyAoVHdvICh4LCB5KSlcblxubGV0IF9kZWVwIDpcbiAgICB0eXBlIGwwIGwxLlxuICAgIGludCAtPlxuICAgICgnYSwgbDAgc3VjYykgZGlnaXQgLT5cbiAgICAoJ2EgKiAnYSkgdCBsYXp5X3QgLT5cbiAgICAoJ2EsIGwxIHN1Y2MpIGRpZ2l0IC0+XG4gICAgJ2EgdCA9XG4gZnVuIG4gaGQgbWlkZGxlIHRsIC0+IERlZXAgKG4sIGhkLCBtaWRkbGUsIHRsKVxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFNoYWxsb3cgWmVybyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgc2luZ2xldG9uIHggPSBfc2luZ2xlIHhcbmxldCBkb3VibGV0b24geCB5ID0gX2RvdWJsZSB4IHlcblxubGV0IHJlYyBjb25zIDogdHlwZSBhLiBhIC0+IGEgdCAtPiBhIHQgPVxuIGZ1biB4IHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvIC0+IF9zaW5nbGUgeFxuICB8IFNoYWxsb3cgKE9uZSB5KSAtPiBTaGFsbG93IChUd28gKHgsIHkpKVxuICB8IFNoYWxsb3cgKFR3byAoeSwgeikpIC0+IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSlcbiAgfCBTaGFsbG93IChUaHJlZSAoeSwgeiwgeicpKSAtPlxuICAgIF9kZWVwIDQgKFR3byAoeCwgeSkpIChsYXp5IF9lbXB0eSkgKFR3byAoeiwgeicpKVxuICB8IERlZXAgKG4sIE9uZSB5LCBtaWRkbGUsIHRsKSAtPiBfZGVlcCAobiArIDEpIChUd28gKHgsIHkpKSBtaWRkbGUgdGxcbiAgfCBEZWVwIChuLCBUd28gKHksIHopLCBtaWRkbGUsIHRsKSAtPlxuICAgIF9kZWVwIChuICsgMSkgKFRocmVlICh4LCB5LCB6KSkgbWlkZGxlIHRsXG4gIHwgRGVlcCAobiwgVGhyZWUgKHksIHosIHonKSwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIF9kZWVwIChuICsgMSkgKFR3byAoeCwgeSkpIChsYXp5IChjb25zICh6LCB6JykgcScpKSB0YWlsXG5cbmxldCByZWMgc25vYyA6IHR5cGUgYS4gYSB0IC0+IGEgLT4gYSB0ID1cbiBmdW4gcSB4IC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiBfc2luZ2xlIHhcbiAgfCBTaGFsbG93IChPbmUgeSkgLT4gU2hhbGxvdyAoVHdvICh5LCB4KSlcbiAgfCBTaGFsbG93IChUd28gKHksIHopKSAtPiBTaGFsbG93IChUaHJlZSAoeSwgeiwgeCkpXG4gIHwgU2hhbGxvdyAoVGhyZWUgKHksIHosIHonKSkgLT5cbiAgICBfZGVlcCA0IChUd28gKHksIHopKSAobGF6eSBfZW1wdHkpIChUd28gKHonLCB4KSlcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBPbmUgeSkgLT4gX2RlZXAgKG4gKyAxKSBoZCBtaWRkbGUgKFR3byAoeSwgeCkpXG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgVHdvICh5LCB6KSkgLT5cbiAgICBfZGVlcCAobiArIDEpIGhkIG1pZGRsZSAoVGhyZWUgKHksIHosIHgpKVxuICB8IERlZXAgKG4sIGhkLCAobGF6eSBxJyksIFRocmVlICh5LCB6LCB6JykpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSBoZCAobGF6eSAoc25vYyBxJyAoeSwgeikpKSAoVHdvICh6JywgeCkpXG5cbmxldCByZWMgdGFrZV9mcm9udF9leG4gOiAnYS4gJ2EgdCAtPiAnYSAqICdhIHQgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiByYWlzZSBFbXB0eVxuICB8IFNoYWxsb3cgKE9uZSB4KSAtPiB4LCBlbXB0eVxuICB8IFNoYWxsb3cgKFR3byAoeCwgeSkpIC0+IHgsIFNoYWxsb3cgKE9uZSB5KVxuICB8IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSkgLT4geCwgU2hhbGxvdyAoVHdvICh5LCB6KSlcbiAgfCBEZWVwIChuLCBPbmUgeCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIGlmIGlzX2VtcHR5IHEnIHRoZW5cbiAgICAgIHgsIFNoYWxsb3cgdGFpbFxuICAgIGVsc2UgKFxuICAgICAgbGV0ICh5LCB6KSwgcScgPSB0YWtlX2Zyb250X2V4biBxJyBpblxuICAgICAgeCwgX2RlZXAgKG4gLSAxKSAoVHdvICh5LCB6KSkgKExhenkuZnJvbV92YWwgcScpIHRhaWxcbiAgICApXG4gIHwgRGVlcCAobiwgVHdvICh4LCB5KSwgbWlkZGxlLCB0YWlsKSAtPiB4LCBfZGVlcCAobiAtIDEpIChPbmUgeSkgbWlkZGxlIHRhaWxcbiAgfCBEZWVwIChuLCBUaHJlZSAoeCwgeSwgeiksIG1pZGRsZSwgdGFpbCkgLT5cbiAgICB4LCBfZGVlcCAobiAtIDEpIChUd28gKHksIHopKSBtaWRkbGUgdGFpbFxuXG5sZXQgdGFrZV9mcm9udCBxID0gdHJ5IFNvbWUgKHRha2VfZnJvbnRfZXhuIHEpIHdpdGggRW1wdHkgLT4gTm9uZVxuXG5sZXQgdGFrZV9mcm9udF9sIG4gcSA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInRha2VfYmFja19sOiBjYW5ub3QgdGFrZSBuZWdhdGl2ZSBudW1iZXIgb2YgYXJndW1lbnRzXCI7XG4gIGxldCByZWMgYXV4IGFjYyBxIG4gPVxuICAgIGlmIG4gPSAwIHx8IGlzX2VtcHR5IHEgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjLCBxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCwgcScgPSB0YWtlX2Zyb250X2V4biBxIGluXG4gICAgICBhdXggKHggOjogYWNjKSBxJyAobiAtIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gcSBuXG5cbmxldCB0YWtlX2Zyb250X3doaWxlIHAgcSA9XG4gIGxldCByZWMgYXV4IGFjYyBxID1cbiAgICBpZiBpc19lbXB0eSBxIHRoZW5cbiAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHgsIHEnID0gdGFrZV9mcm9udF9leG4gcSBpblxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgYXV4ICh4IDo6IGFjYykgcSdcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBxXG4gICAgKVxuICBpblxuICBhdXggW10gcVxuXG5sZXQgcmVjIHRha2VfYmFja19leG4gOiAnYS4gJ2EgdCAtPiAnYSB0ICogJ2EgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiByYWlzZSBFbXB0eVxuICB8IFNoYWxsb3cgKE9uZSB4KSAtPiBlbXB0eSwgeFxuICB8IFNoYWxsb3cgKFR3byAoeCwgeSkpIC0+IF9zaW5nbGUgeCwgeVxuICB8IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSkgLT4gU2hhbGxvdyAoVHdvICh4LCB5KSksIHpcbiAgfCBEZWVwIChuLCBoZCwgKGxhenkgcScpLCBPbmUgeCkgLT5cbiAgICBpZiBpc19lbXB0eSBxJyB0aGVuXG4gICAgICBTaGFsbG93IGhkLCB4XG4gICAgZWxzZSAoXG4gICAgICBsZXQgcScnLCAoeSwgeikgPSB0YWtlX2JhY2tfZXhuIHEnIGluXG4gICAgICBfZGVlcCAobiAtIDEpIGhkIChMYXp5LmZyb21fdmFsIHEnJykgKFR3byAoeSwgeikpLCB4XG4gICAgKVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIFR3byAoeCwgeSkpIC0+IF9kZWVwIChuIC0gMSkgaGQgbWlkZGxlIChPbmUgeCksIHlcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBUaHJlZSAoeCwgeSwgeikpIC0+XG4gICAgX2RlZXAgKG4gLSAxKSBoZCBtaWRkbGUgKFR3byAoeCwgeSkpLCB6XG5cbmxldCB0YWtlX2JhY2sgcSA9IHRyeSBTb21lICh0YWtlX2JhY2tfZXhuIHEpIHdpdGggRW1wdHkgLT4gTm9uZVxuXG5sZXQgdGFrZV9iYWNrX2wgbiBxID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwidGFrZV9iYWNrX2w6IGNhbm5vdCB0YWtlIG5lZ2F0aXZlIG51bWJlciBvZiBhcmd1bWVudHNcIjtcbiAgbGV0IHJlYyBhdXggYWNjIHEgbiA9XG4gICAgaWYgbiA9IDAgfHwgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBxLCBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBxJywgeCA9IHRha2VfYmFja19leG4gcSBpblxuICAgICAgYXV4ICh4IDo6IGFjYykgcScgKG4gLSAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHEgblxuXG5sZXQgdGFrZV9iYWNrX3doaWxlIHAgcSA9XG4gIGxldCByZWMgYXV4IGFjYyBxID1cbiAgICBpZiBpc19lbXB0eSBxIHRoZW5cbiAgICAgIHEsIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHEnLCB4ID0gdGFrZV9iYWNrX2V4biBxIGluXG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBhdXggKHggOjogYWNjKSBxJ1xuICAgICAgZWxzZVxuICAgICAgICBxLCBhY2NcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxXG5cbigqKiB7MiBJbmRpdmlkdWFsIGV4dHJhY3Rpb259ICopXG5cbmxldCBmaXJzdCBxID0gdHJ5IFNvbWUgKGZzdCAodGFrZV9mcm9udF9leG4gcSkpIHdpdGggRW1wdHkgLT4gTm9uZVxubGV0IGZpcnN0X2V4biBxID0gZnN0ICh0YWtlX2Zyb250X2V4biBxKVxubGV0IGxhc3QgcSA9IHRyeSBTb21lIChzbmQgKHRha2VfYmFja19leG4gcSkpIHdpdGggRW1wdHkgLT4gTm9uZVxubGV0IGxhc3RfZXhuIHEgPSBzbmQgKHRha2VfYmFja19leG4gcSlcblxubGV0IF9zaXplX2RpZ2l0IDogdHlwZSBsLiAoJ2EsIGwpIGRpZ2l0IC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgWmVybyAtPiAwXG4gIHwgT25lIF8gLT4gMVxuICB8IFR3byBfIC0+IDJcbiAgfCBUaHJlZSBfIC0+IDNcblxubGV0IHNpemUgOiAnYS4gJ2EgdCAtPiBpbnQgPSBmdW5jdGlvblxuICB8IFNoYWxsb3cgZCAtPiBfc2l6ZV9kaWdpdCBkXG4gIHwgRGVlcCAobiwgXywgXywgXykgLT4gblxuXG5sZXQgX250aF9kaWdpdCA6IHR5cGUgbC4gaW50IC0+ICgnYSwgbCkgZGlnaXQgLT4gJ2EgPVxuIGZ1biBpIGQgLT5cbiAgbWF0Y2ggaSwgZCB3aXRoXG4gIHwgXywgWmVybyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAwLCBPbmUgeCAtPiB4XG4gIHwgMCwgVHdvICh4LCBfKSAtPiB4XG4gIHwgMSwgVHdvIChfLCB4KSAtPiB4XG4gIHwgMCwgVGhyZWUgKHgsIF8sIF8pIC0+IHhcbiAgfCAxLCBUaHJlZSAoXywgeCwgXykgLT4geFxuICB8IDIsIFRocmVlIChfLCBfLCB4KSAtPiB4XG4gIHwgXywgXyAtPiByYWlzZSBOb3RfZm91bmRcblxubGV0IHJlYyBudGhfZXhuIDogJ2EuIGludCAtPiAnYSB0IC0+ICdhID1cbiBmdW4gaSBxIC0+XG4gIG1hdGNoIGksIHEgd2l0aFxuICB8IF8sIFNoYWxsb3cgWmVybyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAwLCBTaGFsbG93IChPbmUgeCkgLT4geFxuICB8IDAsIFNoYWxsb3cgKFR3byAoeCwgXykpIC0+IHhcbiAgfCAxLCBTaGFsbG93IChUd28gKF8sIHgpKSAtPiB4XG4gIHwgMCwgU2hhbGxvdyAoVGhyZWUgKHgsIF8sIF8pKSAtPiB4XG4gIHwgMSwgU2hhbGxvdyAoVGhyZWUgKF8sIHgsIF8pKSAtPiB4XG4gIHwgMiwgU2hhbGxvdyAoVGhyZWUgKF8sIF8sIHgpKSAtPiB4XG4gIHwgXywgU2hhbGxvdyBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IF8sIERlZXAgKF8sIGwsIHEsIHIpIC0+XG4gICAgaWYgaSA8IF9zaXplX2RpZ2l0IGwgdGhlblxuICAgICAgX250aF9kaWdpdCBpIGxcbiAgICBlbHNlIChcbiAgICAgIGxldCBpJyA9IGkgLSBfc2l6ZV9kaWdpdCBsIGluXG4gICAgICBsZXQgcScgPSBMYXp5LmZvcmNlIHEgaW5cbiAgICAgIGlmIGknIDwgMiAqIHNpemUgcScgdGhlbiAoXG4gICAgICAgIGxldCB4LCB5ID0gbnRoX2V4biAoaScgLyAyKSBxJyBpblxuICAgICAgICBpZiBpJyBtb2QgMiA9IDAgdGhlblxuICAgICAgICAgIHhcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHlcbiAgICAgICkgZWxzZVxuICAgICAgICBfbnRoX2RpZ2l0IChpJyAtICgyICogc2l6ZSBxJykpIHJcbiAgICApXG5cbmxldCBudGggaSBxID0gdHJ5IFNvbWUgKG50aF9leG4gaSBxKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5sZXQgaW5pdCBxID0gdHJ5IGZzdCAodGFrZV9iYWNrX2V4biBxKSB3aXRoIEVtcHR5IC0+IHFcbmxldCB0YWlsIHEgPSB0cnkgc25kICh0YWtlX2Zyb250X2V4biBxKSB3aXRoIEVtcHR5IC0+IHFcblxubGV0IGFkZF9pdGVyX2Zyb250IHNlcSBxID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgKCogcmV2ZXJzZWQgc2VxICopXG4gIHNlcSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5mb2xkX2xlZnQgKGZ1biBxIHggLT4gY29ucyB4IHEpIHEgIWxcblxubGV0IGFkZF9pdGVyX2JhY2sgcSBzZXEgPVxuICBsZXQgcSA9IHJlZiBxIGluXG4gIHNlcSAoZnVuIHggLT4gcSA6PSBzbm9jICFxIHgpO1xuICAhcVxuXG5sZXQgX2RpZ2l0X3RvX2l0ZXIgOiB0eXBlIGwuICgnYSwgbCkgZGlnaXQgLT4gJ2EgaXRlciA9XG4gZnVuIGQgayAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+ICgpXG4gIHwgT25lIHggLT4gayB4XG4gIHwgVHdvICh4LCB5KSAtPlxuICAgIGsgeDtcbiAgICBrIHlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT5cbiAgICBrIHg7XG4gICAgayB5O1xuICAgIGsgelxuXG5sZXQgcmVjIHRvX2l0ZXIgOiAnYS4gJ2EgdCAtPiAnYSBpdGVyID1cbiBmdW4gcSBrIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBfZGlnaXRfdG9faXRlciBkIGtcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIF9kaWdpdF90b19pdGVyIGhkIGs7XG4gICAgdG9faXRlciBxJyAoZnVuICh4LCB5KSAtPlxuICAgICAgICBrIHg7XG4gICAgICAgIGsgeSk7XG4gICAgX2RpZ2l0X3RvX2l0ZXIgdGFpbCBrXG5cbmxldCBhcHBlbmQgcTEgcTIgPVxuICBtYXRjaCBxMSwgcTIgd2l0aFxuICB8IFNoYWxsb3cgWmVybywgXyAtPiBxMlxuICB8IF8sIFNoYWxsb3cgWmVybyAtPiBxMVxuICB8IF8gLT4gYWRkX2l0ZXJfYmFjayBxMSAodG9faXRlciBxMilcblxubGV0IGFkZF9zZXFfZnJvbnQgc2VxIHEgPVxuICAoKiByZXZlcnNlZCBzZXEgKilcbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gbCBlbHQgLT4gZWx0IDo6IGwpIFtdIHNlcSBpblxuICBMaXN0LmZvbGRfbGVmdCAoZnVuIHEgeCAtPiBjb25zIHggcSkgcSBsXG5cbmxldCBhZGRfc2VxX2JhY2sgcSBzZXEgPSBTZXEuZm9sZF9sZWZ0IChmdW4gcSB4IC0+IHNub2MgcSB4KSBxIHNlcVxuXG5sZXQgX2RpZ2l0X3RvX3NlcSA6IHR5cGUgbC4gKCdhLCBsKSBkaWdpdCAtPiAnYSBTZXEudCA9XG4gZnVuIGQgKCkgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBTZXEuTmlsXG4gIHwgT25lIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcbiAgfCBUd28gKHgsIHkpIC0+IFNlcS5Db25zICh4LCBTZXEucmV0dXJuIHkpXG4gIHwgVGhyZWUgKHgsIHksIHopIC0+IFNlcS5Db25zICh4LCBmdW4gKCkgLT4gU2VxLkNvbnMgKHksIFNlcS5yZXR1cm4geikpXG5cbmxldCByZWMgdG9fc2VxIDogJ2EuICdhIHQgLT4gJ2EgU2VxLnQgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBfZGlnaXRfdG9fc2VxIGRcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIENDU2VxLmFwcGVuZCAoX2RpZ2l0X3RvX3NlcSBoZClcbiAgICAgIChDQ1NlcS5hcHBlbmRcbiAgICAgICAgIChTZXEuZmxhdF9tYXBcbiAgICAgICAgICAgIChmdW4gKHgsIHkpICgpIC0+IFNlcS5Db25zICh4LCBTZXEucmV0dXJuIHkpKVxuICAgICAgICAgICAgKHRvX3NlcSBxJykpXG4gICAgICAgICAoX2RpZ2l0X3RvX3NlcSB0YWlsKSlcblxubGV0IG9mX3NlcSBzZXEgPSBhZGRfc2VxX2Zyb250IHNlcSBlbXB0eVxuXG5sZXQgX21hcF9kaWdpdCA6IHR5cGUgbC4gKCdhIC0+ICdiKSAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICgnYiwgbCkgZGlnaXQgPVxuIGZ1biBmIGQgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBaZXJvXG4gIHwgT25lIHggLT4gT25lIChmIHgpXG4gIHwgVHdvICh4LCB5KSAtPiBUd28gKGYgeCwgZiB5KVxuICB8IFRocmVlICh4LCB5LCB6KSAtPiBUaHJlZSAoZiB4LCBmIHksIGYgeilcblxubGV0IHJlYyBtYXAgOiAnYSAnYi4gKCdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHQgPVxuIGZ1biBmIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IFNoYWxsb3cgKF9tYXBfZGlnaXQgZiBkKVxuICB8IERlZXAgKHNpemUsIGhkLCAobGF6eSBxJyksIHRsKSAtPlxuICAgIGxldCBxJycgPSBtYXAgKGZ1biAoeCwgeSkgLT4gZiB4LCBmIHkpIHEnIGluXG4gICAgX2RlZXAgc2l6ZSAoX21hcF9kaWdpdCBmIGhkKSAoTGF6eS5mcm9tX3ZhbCBxJycpIChfbWFwX2RpZ2l0IGYgdGwpXG5cbmxldCAoID58PSApIHEgZiA9IG1hcCBmIHFcblxubGV0IF9mb2xkX2RpZ2l0IDogdHlwZSBsLiAoJ2FjYyAtPiAnYSAtPiAnYWNjKSAtPiAnYWNjIC0+ICgnYSwgbCkgZGlnaXQgLT4gJ2FjY1xuICAgID1cbiBmdW4gZiBhY2MgZCAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+IGFjY1xuICB8IE9uZSB4IC0+IGYgYWNjIHhcbiAgfCBUd28gKHgsIHkpIC0+IGYgKGYgYWNjIHgpIHlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT4gZiAoZiAoZiBhY2MgeCkgeSkgelxuXG5sZXQgcmVjIGZvbGQgOiAnYSAnYi4gKCdiIC0+ICdhIC0+ICdiKSAtPiAnYiAtPiAnYSB0IC0+ICdiID1cbiBmdW4gZiBhY2MgcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2ZvbGRfZGlnaXQgZiBhY2MgZFxuICB8IERlZXAgKF8sIGhkLCAobGF6eSBxJyksIHRsKSAtPlxuICAgIGxldCBhY2MgPSBfZm9sZF9kaWdpdCBmIGFjYyBoZCBpblxuICAgIGxldCBhY2MgPSBmb2xkIChmdW4gYWNjICh4LCB5KSAtPiBmIChmIGFjYyB4KSB5KSBhY2MgcScgaW5cbiAgICBfZm9sZF9kaWdpdCBmIGFjYyB0bFxuXG5sZXQgaXRlciBmIHEgPSB0b19pdGVyIHEgZlxubGV0IG9mX2xpc3QgbCA9IExpc3QuZm9sZF9sZWZ0IHNub2MgZW1wdHkgbFxuXG5sZXQgdG9fbGlzdCBxID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgdG9faXRlciBxIChmdW4geCAtPiBsIDo9IHggOjogIWwpO1xuICBMaXN0LnJldiAhbFxuXG5sZXQgb2ZfaXRlciBzZXEgPSBhZGRfaXRlcl9mcm9udCBzZXEgZW1wdHlcblxubGV0IHJldiBxID1cbiAgbGV0IHEnID0gcmVmIGVtcHR5IGluXG4gIGl0ZXIgKGZ1biB4IC0+IHEnIDo9IGNvbnMgeCAhcScpIHE7XG4gICFxJ1xuXG5sZXQgcmVjIF9lcXVhbF9zZXEgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSAoKSwgbDIgKCkgd2l0aFxuICB8IFNlcS5OaWwsIFNlcS5OaWwgLT4gdHJ1ZVxuICB8IFNlcS5OaWwsIF8gfCBfLCBTZXEuTmlsIC0+IGZhbHNlXG4gIHwgU2VxLkNvbnMgKHgxLCBsMScpLCBTZXEuQ29ucyAoeDIsIGwyJykgLT4gZXEgeDEgeDIgJiYgX2VxdWFsX3NlcSBlcSBsMScgbDInXG5cbmxldCBlcXVhbCBlcSBxMSBxMiA9IF9lcXVhbF9zZXEgZXEgKHRvX3NlcSBxMSkgKHRvX3NlcSBxMilcblxubGV0ICggLS0gKSBhIGIgPVxuICBsZXQgcmVjIHVwX3RvIHEgYSBiID1cbiAgICBpZiBhID0gYiB0aGVuXG4gICAgICBzbm9jIHEgYVxuICAgIGVsc2VcbiAgICAgIHVwX3RvIChzbm9jIHEgYSkgKGEgKyAxKSBiXG4gIGFuZCBkb3duX3RvIHEgYSBiID1cbiAgICBpZiBhID0gYiB0aGVuXG4gICAgICBzbm9jIHEgYVxuICAgIGVsc2VcbiAgICAgIGRvd25fdG8gKHNub2MgcSBhKSAoYSAtIDEpIGJcbiAgaW5cbiAgaWYgYSA8PSBiIHRoZW5cbiAgICB1cF90byBlbXB0eSBhIGJcbiAgZWxzZVxuICAgIGRvd25fdG8gZW1wdHkgYSBiXG5cbmxldCAoIC0tXiApIGEgYiA9XG4gIGlmIGEgPSBiIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlIGlmIGEgPCBiIHRoZW5cbiAgICBhIC0tIChiIC0gMSlcbiAgZWxzZVxuICAgIGEgLS0gKGIgKyAxKVxuXG5sZXQgcHAgcHBfeCBvdXQgZCA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGhvdjI+cXVldWUge1wiO1xuICBpdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI7QCBcIjtcbiAgICAgIHBwX3ggb3V0IHgpXG4gICAgZDtcbiAgRm9ybWF0LmZwcmludGYgb3V0IFwifUBdXCJcbiIsIiMgMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPSBzdHJ1Y3RcbiAgICAoKiBPdmVycmlkZSB0aGUgTGV4aW5nLmVuZ2luZSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBwb3NpdGlvbiByZWNvcmRcbiAgICAgICBlYWNoIHRpbWUgYSBydWxlIGlzIG1hdGNoZWQuIFJlZHVjZXMgdG90YWwgcGFyc2UgdGltZSBieSBhcm91bmQgMzAlLlxuICAgICAgIElkZWEgc3RvbGVuIGZyb20geW9qc29uICopXG5cbiAgICBpbmNsdWRlIExleGluZ1xuXG4gICAgZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuXG4gICAgbGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgICAgIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gICAgICAoKlxuICAgICAgaWYgcmVzdWx0ID49IDAgdGhlbiBiZWdpblxuICAgICAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICAgICAgZW5kO1xuICAgICAgKilcbiAgICAgIHJlc3VsdFxuICBlbmRcbiAgb3BlbiBUb2tlbnNcblxuXG4gIG1vZHVsZSB0eXBlIExleCA9IHNpZ1xuICAgIHZhbCByZWFkIDogTGV4aW5nLmxleGJ1ZiAtPiBUb2tlbnMudG9rZW5cbiAgZW5kXG5cbiAgbW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogTGV4ID0gc3RydWN0XG5cbiMgMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMjlcXDI1NVxcMDE3XFwwMDBcXDIzMlxcMjU1XFwwMDNcXDAwMFxcMjM0XFwyNTVcXDEyNlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMTNcXDAwMFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDEyM1xcMDAwXFwyNDNcXDI1NVxcMjQ0XFwyNTVcXFxuICAgIFxcMjQ1XFwyNTVcXDI0NlxcMjU1XFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDI0OVxcMjU1XFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDNcXDAwMFxcMjU0XFwyNTVcXDAwM1xcMDAwXFwwMDFcXDAwMFxcMDExXFwwMDBcXDI1M1xcMjU1XFwyMzlcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAxMVxcMDAwXFwwMDVcXDAwMFxcMjQyXFwyNTVcXDAyMFxcMDAwXFwwMTlcXDAwMFxcMDQ4XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjNcXDAwMFxcMDc1XFwwMDBcXDA4NFxcMDAwXFwyNDFcXDI1NVxcMDg1XFwwMDBcXDA4M1xcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDc1XFwwMDBcXDA3MVxcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA5M1xcMDAwXFwyNDBcXDI1NVxcMDk1XFwwMDBcXFxuICAgIFxcMDkzXFwwMDBcXDA4OVxcMDAwXFwwOTVcXDAwMFxcMDg1XFwwMDBcXDA4MVxcMDAwXFwwMDFcXDAwMFxcMDMyXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDE4NlxcMDAwXFwyMDlcXDAwMFxcMjE5XFwwMDBcXDIyOVxcMDAwXFwyNDBcXDAwMFxcMjUwXFwwMDBcXDAxOFxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyMzZcXDI1NVxcMjM1XFwyNTVcXDA5NFxcMDAxXFwxMTdcXDAwMVxcMTU1XFwwMDFcXDE3OFxcMDAxXFwwNTNcXDAwMFxcMjMxXFwyNTVcXFxuICAgIFxcMDg4XFwwMDFcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAxNFxcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDBcXDI1NVxcMjU1XFwwMjJcXDAwMFxcMjU1XFwyNTVcXDAyNlxcMDAwXFwwMTdcXDAwMFxcXG4gICAgXFwwMTdcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjVcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAxOVxcMDAwXFwwMThcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwMTVcXDAwMFxcMDEzXFwwMDBcXDA3MVxcMDAwXFwwMDJcXDAwMFxcXG4gICAgXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTRcXDAwMFxcMDg3XFwwMDBcXDAxN1xcMDAwXFwwOTNcXDAwMFxcMDE2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA4NlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDExXFwwMDBcXDA1OVxcMDAwXFwwNzdcXDAwMFxcMDAwXFwwMDBcXDA3N1xcMDAwXFwwMDlcXDAwMFxcMDM4XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDAwXFwwMDBcXDAyMVxcMDAwXFwwMDBcXDAwMFxcMDIwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDY5XFwwMDBcXDAzNFxcMDAwXFwwMzBcXDAwMFxcMDUwXFwwMDBcXDA3MFxcMDAwXFwwMjVcXDAwMFxcMDI5XFwwMDBcXFxuICAgIFxcMDMzXFwwMDBcXDAxMlxcMDAwXFwwNjBcXDAwMFxcMDQzXFwwMDBcXDAzMVxcMDAwXFwwMzZcXDAwMFxcMDI0XFwwMDBcXDA1M1xcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwMzhcXDAwMFxcMDI3XFwwMDBcXDAzMlxcMDAwXFwwMjZcXDAwMFxcMDI4XFwwMDBcXDAzNVxcMDAwXFwwMzdcXDAwMFxcXG4gICAgXFwwNDRcXDAwMFxcMDQyXFwwMDBcXDA0NVxcMDAwXFwwMjNcXDAwMFxcMDQ2XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDQ3XFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcMDcwXFwwMDBcXDA0OVxcMDAwXFxcbiAgICBcXDA0M1xcMDAwXFwwMzhcXDAwMFxcMDUyXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFwwNThcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDYzXFwwMDBcXDA2MVxcMDAwXFwwNjJcXDAwMFxcMDQwXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcMDY2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNjJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMzlcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDAwNVxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDkxXFwwMDBcXDAwMFxcMDAwXFwwODFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF9jaGVjayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwNzBcXDAwMFxcMDAwXFwwMDBcXDA2OVxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwwMjRcXDAwMFxcMDI1XFwwMDBcXDAzOVxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXDAyOFxcMDAwXFxcbiAgICBcXDAzMlxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA0MlxcMDAwXFwwMzBcXDAwMFxcMDM1XFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTJcXDAwMFxcMDM0XFwwMDBcXDAyNlxcMDAwXFwwMzFcXDAwMFxcMDAwXFwwMDBcXDAyN1xcMDAwXFwwMjRcXDAwMFxcMDM2XFwwMDBcXFxuICAgIFxcMDQwXFwwMDBcXDA0MVxcMDAwXFwwNDRcXDAwMFxcMDAwXFwwMDBcXDA0NVxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDA0NlxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFxcbiAgICBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDQ3XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTNcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXFxuICAgIFxcMDU4XFwwMDBcXDA1OVxcMDAwXFwwNjBcXDAwMFxcMDYxXFwwMDBcXDAxM1xcMDAwXFwwNjNcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAwXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMjU1XFwyNTVcXDA3M1xcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcXG4gICAgXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcXG4gICAgXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc4XFwwMDBcXDA4NlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFzZV9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfYmFja3Rya19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfZGVmYXVsdF9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfdHJhbnNfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NoZWNrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jb2RlID1cbiAgIFwiXCI7XG59XG5cbmxldCByZWMgcmVhZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgdHJ1ZSApXG4jIDI3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgNTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCBmYWxzZSApXG4jIDI3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgNjEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTlVMTCApXG4jIDI4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT1MgKVxuIyAyODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA0IC0+XG4jIDY1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9FIClcbiMgMjkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNSAtPlxuIyA2NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBUyApXG4jIDI5NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDYgLT5cbiMgNjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQUUgKVxuIyAzMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA3IC0+XG4jIDcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBUUyB0aGVuIFRTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzA5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOCAtPlxuIyA3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVEUgdGhlbiBURVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDkgLT5cbiMgODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVlMgdGhlbiBWU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMyNSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEwIC0+XG4jIDg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZFIHRoZW4gVkVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMSAtPlxuIyA5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT01NQSApXG4jIDMzOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEyIC0+XG4jIDkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTE9OIClcbiMgMzQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTMgLT5cbiMgOTUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5FR0lORklOSVRZIClcbiMgMzQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTQgLT5cbiMgOTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTUgLT5cbiMgOTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTYgLT5cbiMgMTAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBOQU4gKVxuIyAzNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNyAtPlxuIyAxMDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIExleHhlcl91dGlscy5zdHJpbmcybnVtIChMZXhpbmcubGV4ZW1lIGxleGJ1Zikgd2l0aFxuICAgICAgfCBJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfaW50ZWdlciB0b2tcbiAgICAgIHwgTEFSR0VJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfbGFyZ2VpbnQgdG9rXG4gICAgICB8IHRvayAtPiB0b2tcbiAgICApXG4jIDM3MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE4IC0+XG4jIDExMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgKEZMT0FUIChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSkpIClcbiMgMzc4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTkgLT5cbiMgMTEyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyBcIlwiIClcbiMgMzgzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjAgLT5cbmxldFxuIyAxMTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzXG4jIDM4OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbj0gTGV4aW5nLnN1Yl9sZXhlbWUgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAxKSAobGV4YnVmLkxleGluZy5sZXhfY3Vycl9wb3MgKyAtMSkgaW5cbiMgMTE0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyAoTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzKSApXG4jIDM5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIxIC0+XG4jIDExNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBFT0YgKVxuIyAzOTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMiAtPlxuIyAxMTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZCBsZXhidWYgKVxuIyA0MDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMyAtPlxuIyAxMjAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkIGxleGJ1ZjsgKVxuIyA0MDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNCAtPlxuIyAxMjIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWRfY29tbWVudCBsZXhidWY7IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI1IC0+XG4jIDEyOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDI2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjYgLT5cbiMgMTM0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKSApXG4jIDQzMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1lbnQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIDg4XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEzOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCAoKSApXG4jIDQ0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgMTQxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgMTQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgXCJ1bmV4cGVjdGVkIEVPRiBpbiBjb21tZW50XCIgKVxuIyA0NTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDE0NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDE0NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIGVuZFxuXG4jIDQ2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbiIsIm1vZHVsZSBZb2pzb24gPSBTdGQuWW9qc29uXG5vcGVuIEJyclxuXG50eXBlIG1ldGhvZCcgPSBHZXQgfCBQb3N0XG5cbmxldCBqc3RyX29mX21ldGhvZCA9IGZ1bmN0aW9uIEdldCAtPiBKc3RyLnYgXCJHRVRcIiB8IFBvc3QgLT4gSnN0ci52IFwiUE9TVFwiXG5cbm1vZHVsZSBUeXBlcyA9IHN0cnVjdFxuICB0eXBlIG9yZGVyID0gQXNjZW5kaW5nIHwgRGVzY2VuZGluZyBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBzb3J0ID1cbiAgICB8IEFsYnVtXG4gICAgfCBBbGJ1bUFydGlzdFxuICAgIHwgQXJ0aXN0XG4gICAgfCBCdWRnZXRcbiAgICB8IENvbW11bml0eVJhdGluZ1xuICAgIHwgQ3JpdGljUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZVBsYXllZFxuICAgIHwgUGxheUNvdW50XG4gICAgfCBQcmVtaWVyZURhdGVcbiAgICB8IFByb2R1Y3Rpb25ZZWFyXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgUmFuZG9tXG4gICAgfCBSZXZlbnVlXG4gICAgfCBSdW50aW1lXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cbmVuZFxuXG50eXBlIHVzZXIgPSB7XG4gIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgc2VydmVyX25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG59XG5bQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbm1vZHVsZSB0eXBlIFF1ZXJ5ID0gc2lnXG4gIHR5cGUgcGF0aF9wYXJhbXNcbiAgdHlwZSBwYXJhbXMgW0BAZGVyaXZpbmcgeW9qc29uXVxuICB0eXBlIHJlc3BvbnNlIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB2YWwgbWV0aG9kJyA6IG1ldGhvZCdcbiAgdmFsIGVuZHBvaW50IDogcGF0aF9wYXJhbXMgLT4gc3RyaW5nIGxpc3RcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIlVzZXJzXCI7IFwiQXV0aGVudGljYXRlQnlOYW1lXCIgXVxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiSXRlbXNcIiBdXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gWyBcIlVzZXJzXCI7IHBwLnVzZXJfaWQ7IFwiVmlld3NcIiBdXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkxpYnJhcnlcIjsgXCJWaXJ0dWFsRm9sZGVyc1wiIF1cbmVuZFxuXG5tb2R1bGUgU3lzdGVtID0gc3RydWN0XG4gIG1vZHVsZSBJbmZvID0gc3RydWN0XG4gICAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICAgdHlwZSByZXNwb25zZSA9IHtcbiAgICAgIGxvY2FsX2FkZHJlc3MgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJMb2NhbEFkcmVzc1wiXVxuICAgICAgc2VydmVyX25hbWUgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICAgICAgcHJvZHVjdF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiUHJvZHVjdE5hbWVcIl1cbiAgICAgIG9wZXJhdGluZ19zeXN0ZW0gOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJPcGVyYXRpbmdTeXN0ZW1cIl1cbiAgICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgfVxuICAgIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICAgIGxldCBtZXRob2QnID0gR2V0XG4gICAgbGV0IGVuZHBvaW50IF8gPSBbIFwiU3lzdGVtXCI7IFwiSW5mb1wiIF1cbiAgZW5kXG5lbmRcblxuKCogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBiZSBmaWxsZWQgYnkgdGhlIGFwcCAqKVxubGV0IHNlc3Npb25fdXVpZCA9IHJlZiBOb25lXG5sZXQgc2V0X3Nlc3Npb25fdXVpZCBzID0gc2Vzc2lvbl91dWlkIDo9IFNvbWUgc1xuXG5sZXQgYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgPVxuICBsZXQgdG9rZW4gPVxuICAgIG1hdGNoIHRva2VuIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSB0IC0+IFByaW50Zi5zcHJpbnRmIFwiLCBUb2tlbj0lU1wiIHRcbiAgaW5cbiAgbGV0IHNlc3Npb25fdXVpZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiICFzZXNzaW9uX3V1aWQgaW5cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIk1lZGlhQnJvd3NlciBDbGllbnQ9XFxcIk9jYW1peFxcXCIsIERldmljZT1cXFwiRmlyZWZveFxcXCIsIERldmljZUlkPVxcXCIlc1xcXCIsIFxcXG4gICAgIFZlcnNpb249XFxcIjAuMVxcXCIlc1wiXG4gICAgc2Vzc2lvbl91dWlkIHRva2VuXG5cbmxldCByZXF1ZXN0ICh0eXBlIHBwIHAgcikgfmJhc2VfdXJsID90b2tlbiA/aGVhZGVyc1xuICAgIChtb2R1bGUgUSA6IFF1ZXJ5XG4gICAgICB3aXRoIHR5cGUgcGF0aF9wYXJhbXMgPSBwcFxuICAgICAgIGFuZCB0eXBlIHBhcmFtcyA9IHBcbiAgICAgICBhbmQgdHlwZSByZXNwb25zZSA9IHIpIChwYXJhbXMgOiBwKSAocGF0aF9wYXJhbXMgOiBwcCkgOiByIEZ1dC5vcl9lcnJvciA9XG4gIGxldCBvcGVuIEJycl9pby5GZXRjaCBpblxuICBsZXQgYmFzZV91cmkgPSBVcmkudiAoSnN0ci52IGJhc2VfdXJsKSBpblxuICBsZXQgYmFzZV9wYXRoX3NlZ21lbnRzID0gUmVzdWx0LmdldF9vayBAQCBVcmkucGF0aF9zZWdtZW50cyBiYXNlX3VyaSBpblxuICBsZXQgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyA9IExpc3QubWFwIEpzdHIudiAoUS5lbmRwb2ludCBwYXRoX3BhcmFtcykgaW5cbiAgbGV0IHBhdGhfc2VnbWVudHMgPVxuICAgIGlmIGJhc2VfcGF0aF9zZWdtZW50cyA9IFsgSnN0ci5lbXB0eSBdIHRoZW4gZW5kcG9pbnRfcGF0aF9zZWdtZW50c1xuICAgIGVsc2UgTGlzdC5jb25jYXQgWyBiYXNlX3BhdGhfc2VnbWVudHM7IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgXVxuICBpblxuICBsZXQgdXJpID0gVXJpLndpdGhfcGF0aF9zZWdtZW50cyBiYXNlX3VyaSBwYXRoX3NlZ21lbnRzIGluXG4gIGxldCB1cmkgPSBSZXN1bHQuZ2V0X29rIHVyaSBpblxuICBsZXQgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24gP3Rva2VuICgpIGluXG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBsb2dfc3RhdHVzID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2Ugc3RhdHVzIGlzIHVua25vd25cIiBdXG4gIHwgSW5fc3luYyAtPiBDb25zb2xlLmluZm8gWyBcIkRhdGFiYXNlIGlzIHN5bmNocm9uaXplZFwiIF1cbiAgfCBJbmNvbnNpc3RlbnQgLT4gQ29uc29sZS53YXJuIFsgXCJEYXRhYmFzZSBpcyBvdXQtb2Ytc3luY1wiIF1cbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiTmV3IGl0ZW1zIHdlcmUgYWRkZWQgdG8gdGhlIHNvdXJjZS5cIjtcbiAgICAgICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSAtIGZpcnN0X21pc3Npbmdfa2V5ICsgMTtcbiAgICAgICAgICBcIm5ldyBpdGVtc1wiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuICB8IFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9IC0+XG4gICAgICBDb25zb2xlLmluZm9cbiAgICAgICAgW1xuICAgICAgICAgIFwiU29tZSBpdGVtcyBoYXZlIG5vdCBiZWVuIGZldGNoZWQgeWV0LlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfdW5mZXRjaGVkX2tleSArIDE7XG4gICAgICAgICAgXCJ1bmZldGNoZWQgaXRlbXNcIjtcbiAgICAgICAgXVxuXG5sZXQgY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQqIGRiX2luZm9zID0gZ2V0X2RiX2luZm9zIGlkYiBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrIHRvdGFsX2l0ZW1fY291bnQgPSBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSBpblxuICAoKiBLZXlzIHN0YXJ0IGF0IDAsIGl0J3MgbmF0dXJhbCB0byBjb3VudCBpdGVtIGJ5IHN0YXJ0aW5nIHdpdGggMCAqKVxuICBsZXQgbGFzdF9zb3VyY2VfaXRlbV9rZXkgPSB0b3RhbF9pdGVtX2NvdW50IC0gMSBpblxuICBpZiBub3QgKGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZSB+bGFzdF9zb3VyY2VfaXRlbV9rZXkgZGJfaW5mb3MpIHRoZW5cbiAgICBJbmNvbnNpc3RlbnRcbiAgZWxzZVxuICAgIG1hdGNoIGRiX2luZm9zIHdpdGhcbiAgICB8IHsgbGFzdF9rZXkgPSBOb25lOyBsYXN0X3ZhbHVlID0gTm9uZSB9IC0+XG4gICAgICAgICgqIFRoZSBkYiBoYXMgbm90IHlldCBiZWVuIHBvcHVsYXRlZCB3aXRoIHBsYWNlaG9sZGVycyAqKVxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IDA7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA8IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPlxuICAgICAgICAoKiBOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlIHNpbmNlIHRoZSBsYXN0IHN5bmMgKilcbiAgICAgICAgbGV0IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPVxuICAgICAgICAgIG1hdGNoIGl0ZW0gd2l0aCBOb25lIC0+IDAgfCBTb21lIHsgaWQ7IF8gfSAtPiBpZCArIDFcbiAgICAgICAgaW5cbiAgICAgICAgTmV3X2l0ZW1zXG4gICAgICAgICAge1xuICAgICAgICAgICAgZmlyc3RfbWlzc2luZ19rZXkgPSBrZXkgKyAxO1xuICAgICAgICAgICAgZmlyc3RfdW5mZXRjaGVkX2tleTtcbiAgICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgICAgIH1cbiAgICB8IHsgbGFzdF9rZXkgPSBTb21lIGtleTsgbGFzdF92YWx1ZSA9IGl0ZW0gfSB3aGVuIGtleSA9IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gICAgICAtPiAoXG4gICAgICAgIG1hdGNoIGl0ZW0gd2l0aFxuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IHdoZW4gaWQgPSBrZXkgLT4gSW5fc3luY1xuICAgICAgICB8IFNvbWUgeyBpZDsgXyB9IC0+XG4gICAgICAgICAgICBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleSA9IGlkICsgMTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gMDsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSlcbiAgICB8IF8gLT4gSW5jb25zaXN0ZW50XG5cbmxldCB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdmlld3MgPVxuICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgIChtb2R1bGUgU291cmNlLkFwaS5WaWV3cylcbiAgICAgIHsgaW5jbHVkZV9leHRlcm5hbF9jb250ZW50ID0gZmFsc2UgfVxuICAgICAgeyB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZCB9XG4gIGluXG4gIExpc3QuaXRlciB2aWV3cy5pdGVtcyB+ZjooZnVuIChpdGVtIDogSXRlbS50KSAtPlxuICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICBpblxuICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgbGV0IHNvcnRfbmFtZSA9IE9wdGlvbi52YWx1ZSBpdGVtLnNvcnRfbmFtZSB+ZGVmYXVsdDppdGVtLm5hbWUgaW5cbiAgICAgIEkucHV0IHsgc29ydHMgPSB7IGRhdGVfYWRkZWQgPSAtMTsgdmlld3MgPSBbXTsgc29ydF9uYW1lIH07IGl0ZW0gfSBzX2l0ZW1zXG4gICAgICB8PiBpZ25vcmUpO1xuICB2aWV3c1xuXG5sZXQgZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSAodmlld3MgOiBWaWV3cy5yZXNwb25zZSkgPVxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHsgSXRlbS5pZDsgXyB9ID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IFNvbWUgaWQ7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQgXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDpTdHJpbmcuU2V0LmVtcHR5IHJlcy5pdGVtc1xuICAgICAgfmY6KGZ1biBzZXQgeyBJdGVtLnBhcmVudF9pZDsgXyB9IC0+XG4gICAgICAgIG1hdGNoIHBhcmVudF9pZCB3aXRoXG4gICAgICAgIHwgTm9uZSB8IFNvbWUgTm9uZSAtPiBzZXRcbiAgICAgICAgfCBTb21lIChTb21lIHBpZCkgLT4gU3RyaW5nLlNldC5hZGQgcGlkIHNldClcbiAgaW5cbiAgbGV0IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyA9XG4gICAgbGV0KyByZXMgPVxuICAgICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICAgIFNvdXJjZS5BcGkuSXRlbXMuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWRzID0gU3RyaW5nLlNldC50b19saXN0IHBhcmVudHM7XG4gICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICBmaWVsZHMgPSBbIFBhdGggXTtcbiAgICAgICAgICAgIGluY2x1ZGVfaXRlbV90eXBlcyA9IFtdO1xuICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBOb25lO1xuICAgICAgICAgICAgbGltaXQgPSBOb25lO1xuICAgICAgICAgICAgc29ydF9vcmRlciA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X2J5ID0gW107XG4gICAgICAgICAgICByZWN1cnNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICgpXG4gICAgaW5cbiAgICBMaXN0LmZpbHRlcl9tYXAgcmVzLml0ZW1zIH5mOihmdW4geyBJdGVtLmlkOyBwYXRoOyBfIH0gLT5cbiAgICAgICAgT3B0aW9uLm1hcCAoZnVuIHBhdGggLT4gKGlkLCBwYXRoKSkgcGF0aClcbiAgaW5cbiAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICBsZXQrIHJlc3VsdCA9XG4gICAgTGlzdC5tYXAgdmlld3MuaXRlbXMgfmY6KGZ1biAoeyBJdGVtLmlkOyBfIH0gYXMgdmlldykgLT5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgbGV0KiBwYXJlbnRzID0gcGFyZW50X2lkc19vZl92aWV3X2NoaWxkcmVuIHZpZXcgaW5cbiAgICAgICAgbGV0KyBwYXRocyA9IHBhdGhzX29mX3BhcmVudHMgcGFyZW50cyBpblxuICAgICAgICAoaWQsIHBhdGhzKSlcbiAgICB8PiBGdXQub2ZfbGlzdFxuICBpblxuICBSZXN1bHQuZmxhdHRlbl9sIHJlc3VsdFxuXG5sZXQgdmlld3Nfb2ZfcGF0aCAodmZvbGRlcnMgOiAoc3RyaW5nICogKHN0cmluZyAqIHN0cmluZykgbGlzdCkgbGlzdCkgcGF0aCA9XG4gICgqIFdlIGxvb2sgYXQgdGhlIHByZWZpeCBvZiBhIHBhdGggdG8gZGV0ZXJtaW5lIHdoaWNoIHZpcnR1YWxfZm9sZGVyIChhbmQgdGh1c1xuICAgICB2aWV3KSBpdCdzIGEgcGFydCBvZi4gKilcbiAgTGlzdC5maWx0ZXJfbWFwIHZmb2xkZXJzIH5mOihmdW4gKHZpZXdfaWQsIGxvY2F0aW9ucykgLT5cbiAgICAgIGlmIExpc3QuZXhpc3RzIGxvY2F0aW9ucyB+ZjooZnVuIChfLCBwcmUpIC0+IFN0cmluZy5wcmVmaXggfnByZSBwYXRoKSB0aGVuXG4gICAgICAgIFNvbWUgdmlld19pZFxuICAgICAgZWxzZSBOb25lKVxuXG5sZXQgc3luYyA/KHJlcG9ydCA9IGZ1biBfIC0+ICgpKSB+KHNvdXJjZSA6IFNvdXJjZS5jb25uZXhpb24pIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBtYWtlX3BsYWNlaG9sZGVycyBmaXJzdCBsYXN0ID1cbiAgICAoKiB0b2RvOiBlcnJvciBoYW5kbGluZyAqKVxuICAgIGxldCB0cmFuc2FjdGlvbiA9XG4gICAgICBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZHdyaXRlIGlkYlxuICAgIGluXG4gICAgbGV0IHN0b3JlID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgZm9yIGkgPSBmaXJzdCB0byBsYXN0IGRvXG4gICAgICBpZ25vcmUgQEAgT0kucHV0IHsgaWQgPSBpOyBpdGVtID0gTm9uZSB9IHN0b3JlXG4gICAgZG9uZVxuICBpblxuICBsZXQgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdCBsYXN0ID1cbiAgICBsZXQgb3BlbiBTb3VyY2UgaW5cbiAgICBsZXQqIHZpZXdzID0gdXBkYXRlX3ZpZXdzIHNvdXJjZSBpZGIgaW5cbiAgICBsZXQqIHZmb2xkZXJzID0gZGVkdWNlX3ZpcnR1YWxfZm9sZGVyc19mcm9tX3ZpZXdzIHNvdXJjZSB2aWV3cyBpblxuICAgIGxldCAoKSA9IENvbnNvbGUuaW5mbyBbIFwiRmV0Y2hpbmcgaXRlbXNcIjsgZmlyc3Q7IFwidG9cIjsgbGFzdDsgXCI6XCIgXSBpblxuICAgIGxldCBmZXRjaF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCB0b3RhbCA9IGxhc3QgLSBmaXJzdCArIDEgaW5cbiAgICBsZXQgcmVjIGVucXVldWUgfnN0YXJ0X2luZGV4IHRvZG8gPVxuICAgICAgaWYgdG9kbyA+IDAgdGhlbiAoXG4gICAgICAgIGxldCBsaW1pdCA9IG1pbiB0b2RvIGNodW5rX3NpemUgaW5cbiAgICAgICAgbGV0IHJlcSA9XG4gICAgICAgICAgQXBpLkl0ZW1zLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAoKiB0b2RvIG1ha2Ugc29ydCBleHBsaWNpdCAoYnkgZGF0ZSBhZGRlZCBkYXRlKSAqKVxuICAgICAgICAgICAgICBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgcGFyZW50X2lkID0gTm9uZTtcbiAgICAgICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgICAgIGZpZWxkcyA9IFsgUGFyZW50SWQ7IFBhdGggXTtcbiAgICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IFNvbWUgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgIGxpbWl0ID0gU29tZSBsaW1pdDtcbiAgICAgICAgICAgICAgc29ydF9vcmRlciA9IFNvbWUgQXNjZW5kaW5nO1xuICAgICAgICAgICAgICBzb3J0X2J5ID0gWyBEYXRlQ3JlYXRlZCBdO1xuICAgICAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICBlbmFibGVfdXNlcl9kYXRhID0gZmFsc2U7XG4gICAgICAgICAgICAgIGVuYWJsZV9pbWFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICBpblxuICAgICAgICBRdWV1ZS5hZGQgcmVxIGZldGNoX3F1ZXVlO1xuICAgICAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDooc3RhcnRfaW5kZXggKyBsaW1pdCkgKHRvZG8gLSBsaW1pdCkpXG4gICAgaW5cbiAgICBlbnF1ZXVlIH5zdGFydF9pbmRleDpmaXJzdCB0b3RhbDtcbiAgICBsZXQgdG90YWxfcXVlcmllcyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSBpblxuICAgIGxldCByZWMgcnVuX3F1ZXVlID8odGhyZWFkcyA9IDEpIHEgPVxuICAgICAgYXNzZXJ0ICh0aHJlYWRzID4gMCk7XG4gICAgICBsZXQgcmVjIHRha2VfbiBhY2MgbiA9XG4gICAgICAgIGlmIG4gPSAwIHRoZW4gTGlzdC5yZXYgYWNjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBtYXRjaCBRdWV1ZS50YWtlX29wdCBxIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICAgICAgfCBTb21lIGVsdCAtPiB0YWtlX24gKGVsdCA6OiBhY2MpIChuIC0gMSlcbiAgICAgIGluXG4gICAgICBsZXQgZiByZXEgPVxuICAgICAgICBsZXQrIHsgQXBpLkl0ZW1zLnN0YXJ0X2luZGV4OyBpdGVtczsgXyB9ID1cbiAgICAgICAgICBxdWVyeSBzb3VyY2UgKG1vZHVsZSBBcGkuSXRlbXMpIHJlcSAoKVxuICAgICAgICBpblxuICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgIHJlcG9ydFxuICAgICAgICAgIEBAIFNvbWVcbiAgICAgICAgICAgICAgIHsgdG90YWwgPSB0b3RhbF9xdWVyaWVzOyByZW1haW5pbmcgPSBRdWV1ZS5sZW5ndGggZmV0Y2hfcXVldWUgfVxuICAgICAgICBpblxuICAgICAgICBsZXQgaWRiX3B1dCB+c3RhcnRfaW5kZXggaXRlbXMgPVxuICAgICAgICAgIGxldCBvcGVuIEJycl9pby5JbmRleGVkX2RiIGluXG4gICAgICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSk7IChtb2R1bGUgSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgc19saXN0ID0gVHJhbnNhY3Rpb24ub2JqZWN0X3N0b3JlIChtb2R1bGUgT0kpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgbGV0IHNfaXRlbXMgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBJKSB0cmFuc2FjdGlvbiBpblxuICAgICAgICAgIExpc3QuaXRlcmkgaXRlbXMgfmY6KGZ1biBpbmRleCAoeyBBcGkuSXRlbS5pZDsgcGF0aDsgXyB9IGFzIGl0ZW0pIC0+XG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHN0YXJ0X2luZGV4ICsgaW5kZXggaW5cbiAgICAgICAgICAgICAgbGV0IHBhdGggPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6XCJcIiBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCB2aWV3cyA9IHZpZXdzX29mX3BhdGggdmZvbGRlcnMgcGF0aCBpblxuICAgICAgICAgICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgICAgICAgICBpZ25vcmUgKE9JLnB1dCB7IGlkID0gaW5kZXg7IGl0ZW0gPSBTb21lIGlkIH0gc19saXN0KTtcbiAgICAgICAgICAgICAgaWdub3JlXG4gICAgICAgICAgICAgICAgKEkucHV0XG4gICAgICAgICAgICAgICAgICAgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IGluZGV4OyB2aWV3czsgc29ydF9uYW1lIH07IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgIHNfaXRlbXMpKVxuICAgICAgICBpblxuICAgICAgICBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtc1xuICAgICAgaW5cbiAgICAgIGxldCByZXFzID0gdGFrZV9uIFtdIHRocmVhZHMgaW5cbiAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgIGxldCogcmVxcyA9IEZ1dC5vZl9saXN0IChMaXN0Lm1hcCB+ZiByZXFzKSBpblxuICAgICAgaWYgTGlzdC5pc19lbXB0eSByZXFzIHRoZW4gRnV0Lm9rICgpIGVsc2UgcnVuX3F1ZXVlIHFcbiAgICBpblxuICAgIHJ1bl9xdWV1ZSBmZXRjaF9xdWV1ZVxuICBpblxuICBmdW5jdGlvblxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0X21pc3Npbmdfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5O1xuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIGZldGNoX21pc3NpbmdfaXRlbXMgZmlyc3RfdW5mZXRjaGVkX2tleSBsYXN0X3NvdXJjZV9pdGVtX2tleVxuICB8IEluY29uc2lzdGVudCAtPiBGdXQub2sgKClcbiAgfCBfIC0+IEZ1dC5vayAoKVxuXG5sZXQgY2hlY2tfYW5kX3N5bmMgP3JlcG9ydCB+c291cmNlIGlkYiA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogc3RhdHVzID0gY2hlY2tfc3RhdHVzIH5zb3VyY2UgaWRiIGluXG4gIGxldCBpbml0aWFsID0geyBpbml0aWFsX3JlcG9ydCB3aXRoIHN0YXR1cyB9IGluXG4gIGxldCByZXBvcnQnID1cbiAgICBPcHRpb24ubWFwXG4gICAgICAoZnVuIHJlcG9ydCAtPlxuICAgICAgICBsZXQgKCkgPSAoKiBTZW5kIGEgZmlyc3QgcmVwb3J0ICopIHJlcG9ydCBpbml0aWFsIGluXG4gICAgICAgIGZ1biBzeW5jX3Byb2dyZXNzIC0+IHJlcG9ydCB7IGluaXRpYWwgd2l0aCBzeW5jX3Byb2dyZXNzIH0pXG4gICAgICByZXBvcnRcbiAgaW5cbiAgbGV0KyAoKSA9IHN5bmMgP3JlcG9ydDpyZXBvcnQnIH5zb3VyY2UgaWRiIHN0YXR1cyBpblxuICBPcHRpb24uaXRlclxuICAgIChmdW4gcmVwb3J0IC0+IHJlcG9ydCB7IHN0YXR1cyA9IEluX3N5bmM7IHN5bmNfcHJvZ3Jlc3MgPSBOb25lIH0pXG4gICAgcmVwb3J0XG4iLCJ0eXBlIGxhbmcnID0gRnIgfCBFblxuXG5tb2R1bGUgQ29uZmlnIDogQnJyX2x3ZF91aS5UcmFuc2xhdGVkLkNvbmZpZyB3aXRoIHR5cGUgbGFuZyA9IGxhbmcnID0gc3RydWN0XG4gIHR5cGUgbGFuZyA9IGxhbmcnXG5cbiAgbGV0IHN0cmluZ3MgPVxuICAgIFtcbiAgICAgICgoRnIsIFwiY2xpY2tcIiksIFwiQ2xpcXVleiBzdXIgbGUgYm91dG9uICFcIik7XG4gICAgICAoKEVuLCBcImNsaWNrXCIpLCBcIkNsaWNrIG9uIHRoZSBCdXR0b24gIVwiKTtcbiAgICBdXG5cbiAgbGV0IGFjdGl2ZSA9IEx3ZC52YXIgRnJcblxuICBsZXQgZ2V0IGxhbmcgc3RyaW5nID1cbiAgICBMaXN0LmFzc29jX29wdCAobGFuZywgc3RyaW5nKSBzdHJpbmdzIHw+IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpzdHJpbmdcbmVuZFxuXG5sZXQgc2V0LCBfcyA9IEJycl9sd2RfdWkuVHJhbnNsYXRlZC5tYWtlIChtb2R1bGUgQ29uZmlnKVxubGV0IF9zIHMgZiA9IEx3ZC5tYXAgKF9zIHMpIH5mXG4iLCJpbmNsdWRlIERiLldvcmtlcl9hcGkuU3RhcnRfY2xpZW50IChzdHJ1Y3RcbiAgbGV0IHVybCA9IFwiLi9kYl93b3JrZXIuYmMuanNcIlxuZW5kKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbnR5cGUgc2VydmVyID0ge1xuICBjb25uZXhpb24gOiBEUy5jb25uZXhpb247XG4gIHN0YXR1cyA6IERiLlN5bmMucmVwb3J0IEx3ZC52YXI7XG4gIHJlZnJlc2ggOiB1bml0IEx3ZC52YXI7XG59XG5cbmxldCBjb25uZXhpb25zIDogKHN0cmluZyAqIERTLmNvbm5leGlvbikgTHdkX3NlcS50IEx3ZC52YXIgPVxuICBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ1aV9zZXJ2ZXJzXCIgTHdkX3NlcS5lbXB0eVxuXG5sZXQgY29ubmVjdCAoc2VydmVyX2lkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pID1cbiAgbGV0IF8gPVxuICAgIFdvcmtlcl9jbGllbnQubGlzdGVuIFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSB+ZjooZnVuIChpZCwgcmVwb3J0KSAtPlxuICAgICAgICAoKiBUT0RPOiBzdWJzY3JpYmUgdG8gYSBzcGVjaWZpYyBzZXJ2ZXIncyB1cGRhdGVzICopXG4gICAgICAgIGxldCBwcmV2aW91c19zdGF0dXMgPSBMd2QucGVlayBzdGF0dXMgaW5cbiAgICAgICAgaWYgU3RyaW5nLmVxdWFsIHNlcnZlcl9pZCBpZCB0aGVuIChcbiAgICAgICAgICBMd2Quc2V0IHN0YXR1cyByZXBvcnQ7XG4gICAgICAgICAgbWF0Y2ggKHByZXZpb3VzX3N0YXR1cy5zeW5jX3Byb2dyZXNzLCByZXBvcnQuc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBTb21lIHsgcmVtYWluaW5nID0gcmVtYWluaW5nJzsgXyB9XG4gICAgICAgICAgICB3aGVuIHJlbWFpbmluZyA8PiByZW1haW5pbmcnIC0+XG4gICAgICAgICAgICAgIEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBOb25lIC0+IEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgXyAtPiAoKSkpXG4gIGluXG4gIGlnbm9yZSAoV29ya2VyX2NsaWVudC5xdWVyeSBAQCBBZGRfc2VydmVycyBbIChzZXJ2ZXJfaWQsIGNvbm5leGlvbikgXSlcblxubGV0IHNlcnZlcnNfd2l0aF9zdGF0dXMgPVxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKGlkLCBjb25uZXhpb24pIC0+XG4gICAgICBsZXQgc3RhdHVzID0gTHdkLnZhciBEYi5TeW5jLmluaXRpYWxfcmVwb3J0IGluXG4gICAgICBsZXQgcmVmcmVzaCA9IEx3ZC52YXIgKCkgaW5cbiAgICAgIGxldCBzZXJ2ZXIgPSAoaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgaW5cbiAgICAgIGNvbm5lY3Qgc2VydmVyO1xuICAgICAgc2VydmVyKVxuICAgIChMd2QuZ2V0IGNvbm5leGlvbnMpXG5cbmxldCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybCB+dXNlcm5hbWUgfnBhc3N3b3JkID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyBjb25uZXhpb24gPSBEUy5jb25uZWN0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9IGluXG4gIGxldCBzZXJ2ZXJfaWQgPSBjb25uZXhpb24uYXV0aF9yZXNwb25zZS5zZXJ2ZXJfaWQgaW5cbiAgKCogVE9ETyBDSEVDSyBTRVJWRVIgSUQgKilcbiAgTHdkLnVwZGF0ZVxuICAgIChmdW4gc2VydmVycyAtPiBMd2Rfc2VxLihjb25jYXQgc2VydmVycyAoZWxlbWVudCAoc2VydmVyX2lkLCBjb25uZXhpb24pKSkpXG4gICAgY29ubmV4aW9uc1xuXG5tb2R1bGUgQ29ubmVjdF9mb3JtID0gc3RydWN0XG4gIG9wZW4gQnJyX2x3ZF91aS5Gb3JtXG5cbiAgdHlwZSB0ID0ge1xuICAgIHVybCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHVzZXJuYW1lIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgcGFzc3dvcmQgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgfVxuXG4gIGxldCBkZWZhdWx0ID0geyB1cmwgPSBFbXB0eTsgdXNlcm5hbWUgPSBFbXB0eTsgcGFzc3dvcmQgPSBFbXB0eSB9XG5cbiAgbGV0IGZpZWxkcyA9XG4gICAgbGV0IHVybF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmVcbiAgICAgICAgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSAoU29tZSBcImh0dHBzOi8vZGVtby5qZWxseWZpbi5vcmcvc3RhYmxlXCIpKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1cmwgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgdXNlcm5hbWVfZmllbGQgPVxuICAgICAgZmllbGRcbiAgICAgICAgKEx3ZC5wdXJlIEBAIEZpZWxkLnRleHRfaW5wdXQgfnJlcXVpcmVkOnRydWUgKFNvbWUgXCJkZW1vXCIpKVxuICAgICAgICAoZnVuIHQgdiAtPiB7IHQgd2l0aCB1c2VybmFtZSA9IHYgfSlcbiAgICBpblxuICAgIGxldCBwYXNzd29yZF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQucGFzc3dvcmRfaW5wdXQgfnJlcXVpcmVkOmZhbHNlIE5vbmUpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHBhc3N3b3JkID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHN1Ym1pdCA9XG4gICAgICBmaWVsZCAoTHdkLnB1cmUgQEAgRmllbGQuc3VibWl0IChgUCBcIkNvbm5lY3RcIikpIChmdW4gdCBfdiAtPiB0KVxuICAgIGluXG4gICAgTHdkLnJldHVyblxuICAgICAgKEx3ZF9zZXEub2ZfbGlzdCBbIHVybF9maWVsZDsgdXNlcm5hbWVfZmllbGQ7IHBhc3N3b3JkX2ZpZWxkOyBzdWJtaXQgXSlcbmVuZFxuXG5sZXQgdWlfZm9ybSAoKSA9XG4gIGxldCBvcGVuIEJycl9sd2RfdWkuRm9ybSBpblxuICBjcmVhdGVcbiAgICAobW9kdWxlIENvbm5lY3RfZm9ybSlcbiAgICAoZnVuIHQgLT5cbiAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdCBdO1xuICAgICAgbWF0Y2ggdCB3aXRoXG4gICAgICAoKiBGSVhNRTogdmFsaWRhdGlvbiBhbHJlYWR5IGhhcHBlbmVkLCBpdCdzIHJlZHVuZGFudCB0byBoYXZlIHRvIG1hdGNoICopXG4gICAgICB8IHsgdXJsID0gT2sgdXJsOyB1c2VybmFtZSA9IE9rIHVzZXJuYW1lOyBwYXNzd29yZCA9IE9rIHBhc3N3b3JkIH0gLT5cbiAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiRm9ybSBzdWJtaXR0ZWQ6XCI7IHVybDsgdXNlcm5hbWUgXTtcbiAgICAgICAgICBpZ25vcmUgQEAgbmV3X2Nvbm5leGlvbiB+YmFzZV91cmw6dXJsIH51c2VybmFtZSB+cGFzc3dvcmRcbiAgICAgIHwgeyB1cmwgPSBPayB1cmw7IHVzZXJuYW1lID0gT2sgdXNlcm5hbWU7IF8gfSAtPlxuICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdXJsOyB1c2VybmFtZSBdO1xuICAgICAgICAgIGlnbm9yZSBAQCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybDp1cmwgfnVzZXJuYW1lIH5wYXNzd29yZDpcIlwiXG4gICAgICB8IF8gLT4gKCkpXG5cbmxldCB1aV9zdGF0dXMgc2VydmVyID1cbiAgbGV0IHN0YXR1cyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBzZXJ2ZXIuc3RhdHVzKSB+ZjooZnVuIHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gLT5cbiAgICAgICAgbWF0Y2ggKHN0YXR1cywgc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICB8IEluX3N5bmMsIE5vbmUgLT4gRWwudHh0JyBcIlN5bmNocm9uaXplZFwiXG4gICAgICAgIHwgXywgU29tZSB7IERiLlN5bmMudG90YWw7IHJlbWFpbmluZyB9IC0+XG4gICAgICAgICAgICBFbC50eHQnXG4gICAgICAgICAgICBAQCBQcmludGYuc3ByaW50ZiBcIlN5bmMgaW4gcHJvZ3Jlc3M6ICVpLyVpXCIgKHRvdGFsIC0gcmVtYWluaW5nKVxuICAgICAgICAgICAgICAgICB0b3RhbFxuICAgICAgICB8IF8gLT4gRWwudHh0JyBcIkRlc3luY2hyb25pemVkXCIpXG4gIGluXG4gIHN0YXR1c1xuXG5sZXQgZnV0X3RvX2x3ZCB+aW5pdCBmID1cbiAgbGV0IHYgPSBMd2QudmFyIGluaXQgaW5cbiAgbGV0ICgpID0gRnV0LmF3YWl0IGYgKEx3ZC5zZXQgdikgaW5cbiAgTHdkLmdldCB2XG5cbmxldCBzZXFfc2hhcmUgfmNtcCB+cHJldiBuZXh0ID1cbiAgbGV0IHJlYyBhdXggcHJldiBuZXh0ID1cbiAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHByZXYsIEx3ZF9zZXEudmlldyBuZXh0KSB3aXRoXG4gICAgfCBFbXB0eSwgRW1wdHkgLT4gKHByZXYsIHRydWUpXG4gICAgfCBFbGVtZW50IGksIEVsZW1lbnQgaScgd2hlbiBjbXAgaSBpJyAtPiAocHJldiwgdHJ1ZSlcbiAgICB8IENvbmNhdCAobCwgciksIENvbmNhdCAobCcsIHInKSAtPlxuICAgICAgICBsZXQgbCwgbF9zYW1lID0gYXV4IGwgbCcgaW5cbiAgICAgICAgbGV0IHIsIHJfc2FtZSA9IGF1eCByIHInIGluXG4gICAgICAgIGlmIGxfc2FtZSAmJiByX3NhbWUgdGhlbiAocHJldiwgdHJ1ZSkgZWxzZSAoTHdkX3NlcS5jb25jYXQgbCByLCBmYWxzZSlcbiAgICB8IF8sIF8gLT4gKG5leHQsIGZhbHNlKVxuICBpblxuICBmc3QgQEAgYXV4IHByZXYgbmV4dFxuXG5sZXQgc2VydmVyc19saWJyYXJpZXMgPVxuICBsZXQgcmVjIGxpYl9kaWZmIH5wcmV2IG5leHQgPVxuICAgIGxldCBvcGVuIERiLlN0b3Jlcy5JdGVtcyBpblxuICAgIHNlcV9zaGFyZSB+Y21wOihmdW4gaSBpJyAtPiBTdHJpbmcuKGkuaXRlbS5pZCA9IGknLml0ZW0uaWQpKSB+cHJldiBuZXh0XG4gIGluXG4gIEx3ZF9zZXEubWFwXG4gICAgKGZ1biAoc2VydmVyX2lkLCB7IHJlZnJlc2g7IF8gfSkgLT5cbiAgICAgIGxldCB2aWV3cyA9XG4gICAgICAgIENvbnNvbGUubG9nIFsgXCJORVcgUkVGXCIgXTtcbiAgICAgICAgbGV0IHByZXZpb3VzX3ZhbHVlID0gcmVmIE5vbmUgaW5cbiAgICAgICAgTHdkLm1hcCB+ZjooZnVuIHYgLT5cbiAgICAgICAgICAgIGxldCBuZXdfdmFsdWUgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OnZcbiAgICAgICAgICAgICAgICAoZnVuIHByZXYgLT4gbGliX2RpZmYgfnByZXYgdilcbiAgICAgICAgICAgICAgICAhcHJldmlvdXNfdmFsdWVcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBwcmV2aW91c192YWx1ZSA6PSBTb21lIG5ld192YWx1ZTtcbiAgICAgICAgICAgIG5ld192YWx1ZSlcbiAgICAgICAgQEAgTHdkLmJpbmQgKEx3ZC5nZXQgcmVmcmVzaCkgfmY6KGZ1biAoKSAtPlxuICAgICAgICAgICAgICAgV29ya2VyX2NsaWVudC5xdWVyeSAoR2V0X3NlcnZlcl9saWJyYXJpZXMgc2VydmVyX2lkKVxuICAgICAgICAgICAgICAgfD4gRnV0Lm1hcCAoUmVzdWx0LmdldF9vciB+ZGVmYXVsdDpbXSlcbiAgICAgICAgICAgICAgIHw+IEZ1dC5tYXAgKGZ1biBsIC0+XG4gICAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5sb2cgWyBcIkdPVCBMPVwiOyBsIF07XG4gICAgICAgICAgICAgICAgICAgICAgbClcbiAgICAgICAgICAgICAgIHw+IEZ1dC5tYXAgTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgICAgICAoKiBGSVhNRTogVGhpcyBpcyBiYWQ6IHdlIGNyZWF0ZSBhIGx3ZCB2YXIgZWFjaCB0aW1lIHdlIHJlZnJlc2hcbiAgICAgICAgICAgICAgICAgIGFuZCB0aGlxIHZhciBoYWQgYW4gZW1wdHkgc2VxIHZhbHVlLiBUaGlzIGNhdXNlZCBmbGlja2VyaW5nXG4gICAgICAgICAgICAgICAgICB3aGVuIHN5bmNpbmcuIEhhdmluZyB0aGUgY29ycmVjdCBpbml0aWFsIHZhbHVlIGlzIG5vdCBhIG11Y2hcbiAgICAgICAgICAgICAgICAgIGJldHRlciBvcHRpb24gc2luY2UgdGhlcmUgYXJlIHN0aWxsIHRvIGx3ZCB1cGRhdGVzIGluc3RlYWQgb2ZcbiAgICAgICAgICAgICAgICAgIG9uZS4gV2UgcHJvYmFibHkgbmVlZCBwcm9wZXIgcG9sbGluZyBhbmQgYSByb290LiAqKVxuICAgICAgICAgICAgICAgfD4gZnV0X3RvX2x3ZFxuICAgICAgICAgICAgICAgICAgICB+aW5pdDooT3B0aW9uLnZhbHVlIH5kZWZhdWx0Okx3ZF9zZXEuZW1wdHkgIXByZXZpb3VzX3ZhbHVlKSlcbiAgICAgIGluXG4gICAgICAoc2VydmVyX2lkLCB2aWV3cykpXG4gICAgc2VydmVyc193aXRoX3N0YXR1c1xuXG5sZXQgdWkgKCkgPVxuICBsZXQgc3RhdHVzZXMgPVxuICAgIEx3ZF9zZXEubWFwIChmdW4gKF8sIHNlcnZlcikgLT4gdWlfc3RhdHVzIHNlcnZlcikgc2VydmVyc193aXRoX3N0YXR1c1xuICBpblxuICBsZXQgdWlfZm9ybSA9XG4gICAgTHdkLm1hcCBzZXJ2ZXJzX3dpdGhfc3RhdHVzIH5mOihmdW4gcyAtPlxuICAgICAgICBtYXRjaCBMd2Rfc2VxLnZpZXcgcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gTHdkX3NlcS5lbGVtZW50IEBAIEVsd2QuZGl2IFsgYFIgKHVpX2Zvcm0gKCkpIF1cbiAgICAgICAgfCBfIC0+IEx3ZF9zZXEuZW1wdHkpXG4gIGluXG4gIEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCB1aV9mb3JtKTsgYFMgKEx3ZF9zZXEubGlmdCBzdGF0dXNlcykgXVxuIiwib3BlbiEgSW1wb3J0XG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgcGxheXN0YXRlID0ge1xuICBwbGF5bGlzdCA6IERiLlZpZXcucmFuZ2VkIG9wdGlvbiBMd2QudmFyO1xuICBjdXJyZW50X2luZGV4IDogaW50IEx3ZC52YXI7XG59XG5cbnR5cGUgdCA9IEVsd2QudCBMd2QudFxuXG5sZXQgcGxheXN0YXRlID0geyBwbGF5bGlzdCA9IEx3ZC52YXIgTm9uZTsgY3VycmVudF9pbmRleCA9IEx3ZC52YXIgMCB9XG5cbnR5cGUgbm93X3BsYXlpbmcgPSB7IGl0ZW0gOiBEUy5BcGkuSXRlbS50OyB1cmwgOiBzdHJpbmcgfVxuXG5sZXQgbm93X3BsYXlpbmcgPSBMd2QudmFyIE5vbmVcblxuKCogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qZWxseWZpbi9qZWxseWZpbi9ibG9iLzQ3ODY5MDFiYjc5NmMzZTkxMmYxM2I2ODY1NzFmZGU4ZDE2ZjQ5YzUvdGVzdHMvSmVsbHlmaW4uTW9kZWwuVGVzdHMvVGVzdCUyMERhdGEvRGV2aWNlUHJvZmlsZS1GaXJlZm94Lmpzb24gKilcblxuKCoqIFBsYXliYWNrIGlzc3VlIHdpdGggYWxhYyBmaWxlcyAoYW5kIHByb2JhYmx5IGFsbCBjb2RlY3Mgbm9uLW5hdGl2ZWx5XG4gICAgICBzdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIpXG4gICAgLSBTb21lIGNsaWVudHMgKHNvbml4ZCkgZ2l2ZSB1cCwgbXB2IGJhc2VkIHBsYXllcnMgd29yay5cbiAgICAtIFRoZSBvZmZpY2lhbCBjbGllbnQgbWFuYWdlIHRvIHBsYXkgdGhlIGZpbGUgYnV0IGdpdmVzIGEgYmxvYiB0byB0aGUgYXVkaW9cbiAgICAgIHBsYXllciBpbnN0ZWFkIG9mIGEgaGxzIHVybCBhcyBpdCBkb2VzIGZvciBvdGhlciBmaWxlcy5cbiAgICAtIEplbGx5ZmluIHNob3VsZCB1c2UgdGhlIGRldmljZSBpZCBhbmQgYXNzb2NpYXRlZCBjYXBhYmlsaXRpZXMgdG9cbiAgICAgIGF1dG9tYXRpY2FsbHkgdHJhbnNjb2RlLCBzaG91bGRuJ3QgaXQgP1xuXG4qKVxubGV0IGF1ZGlvX3VybCAoc2VydmVyIDogRFMuY29ubmV4aW9uKSBpdGVtX2lkID1cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIiVzL0F1ZGlvLyVzL3VuaXZlcnNhbD9hcGlfa2V5PSVzJmF1ZGlvQ29kZWM9YWFjJmNvbnRhaW5lcj1vcHVzLG1wMyxhYWMsbTRhLG00YixmbGFjLHdhdixvZ2cmdHJhbnNjb2RpbmdDb250YWluZXI9dHMmdHJhbnNjb2RpbmdQcm90b2NvbD1obHNcIlxuICAgIHNlcnZlci5iYXNlX3VybCBpdGVtX2lkIHNlcnZlci5hdXRoX3Jlc3BvbnNlLmFjY2Vzc190b2tlblxuXG5tb2R1bGUgUGxheWJhY2tfY29udHJvbGxlciAoUCA6IHNpZ1xuICB2YWwgZmV0Y2ggOlxuICAgIERiLlZpZXcucmFuZ2VkIC0+XG4gICAgaW50IGFycmF5IC0+XG4gICAgKERiLlN0b3Jlcy5JdGVtcy50IG9wdGlvbiBhcnJheSwgRGIuV29ya2VyX2FwaS5lcnJvcikgRnV0LnJlc3VsdFxuZW5kKSA9XG5zdHJ1Y3RcbiAgbGV0IHNldF9wbGF5X3VybCBwbGF5bGlzdCBjdXJyZW50X2luZGV4ID1cbiAgICBtYXRjaCBwbGF5bGlzdCB3aXRoXG4gICAgfCBOb25lIC0+IEZ1dC5vayAoKVxuICAgIHwgU29tZSBwbGF5bGlzdCAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQrIGl0ZW0gPVxuICAgICAgICAgIGxldCsgcmVzdWx0ID0gUC5mZXRjaCBwbGF5bGlzdCBbfCBjdXJyZW50X2luZGV4IHxdIGluXG4gICAgICAgICAgbWF0Y2ggcmVzdWx0IHdpdGhcbiAgICAgICAgICB8IFt8IFNvbWUgeyBEYi5TdG9yZXMuSXRlbXMuaXRlbTsgXyB9IHxdIC0+XG4gICAgICAgICAgICAgIGxldCB7IERTLkFwaS5JdGVtLnNlcnZlcl9pZDsgaWQ7IGFsYnVtX2lkOyBuYW1lOyBfIH0gPSBpdGVtIGluXG4gICAgICAgICAgICAgIGxldCBzZXJ2ZXJzID0gTHdkX3NlcS50b19saXN0IChMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMpIGluXG4gICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgICAgICAgbGV0IHVybCA9IGF1ZGlvX3VybCBjb25uZXhpb24gaWQgaW5cbiAgICAgICAgICAgICAgbGV0ICgpID0gQ29uc29sZS5sb2cgWyBcIk5vdyBwbGF5aW5nOlwiOyBuYW1lOyBKdi5vZl9zdHJpbmcgdXJsIF0gaW5cbiAgICAgICAgICAgICAgbGV0ICgpID1cbiAgICAgICAgICAgICAgICBsZXQgb3BlbiBCcnJfaW8uTWVkaWEuU2Vzc2lvbiBpblxuICAgICAgICAgICAgICAgIGxldCBzZXNzaW9uID0gb2ZfbmF2aWdhdG9yIEcubmF2aWdhdG9yIGluXG4gICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgbGV0IGltZ19zcmMgPVxuICAgICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgICAgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD01MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbi5iYXNlX3VybCBpbWFnZV9pZFxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gbmFtZSBpblxuICAgICAgICAgICAgICAgIGxldCBhbGJ1bSA9IFwiXCIgaW5cbiAgICAgICAgICAgICAgICBsZXQgYXJ0aXN0ID0gXCJcIiBpblxuICAgICAgICAgICAgICAgIGxldCBhcnR3b3JrID1cbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIE1lZGlhX21ldGFkYXRhLnNyYyA9IGltZ19zcmM7XG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZXMgPSBcIjUwMHg1MDBcIjtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlJyA9IFwiaW1hZ2UvanBlZ1wiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgc2V0X21ldGFkYXRhIHNlc3Npb24geyB0aXRsZTsgYXJ0aXN0OyBhbGJ1bTsgYXJ0d29yayB9XG4gICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgIHsgaXRlbTsgdXJsIH1cbiAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5zZXQgbm93X3BsYXlpbmcgKFNvbWUgaXRlbSlcblxuICBsZXQgcmVzZXRfcGxheWxpc3QgcGxheWxpc3QgPVxuICAgIGlnbm9yZSBAQCBzZXRfcGxheV91cmwgKFNvbWUgcGxheWxpc3QpIDA7XG4gICAgTHdkLnNldCBwbGF5c3RhdGUucGxheWxpc3QgKFNvbWUgcGxheWxpc3QpO1xuICAgIEx3ZC5zZXQgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggMFxuXG4gIGxldCBtYWtlICgpID1cbiAgICBsZXQgYXVkaW9fZWx0ID1cbiAgICAgIEVsLmF1ZGlvXG4gICAgICAgIH5hdDpcbiAgICAgICAgICBbXG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJjb250cm9sc1wiKSAoSnN0ci52IFwidHJ1ZVwiKTtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcImF1dG9wbGF5XCIpIChKc3RyLnYgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwicHJlbG9hZFwiKSAoSnN0ci52IFwiYXV0b1wiKTtcbiAgICAgICAgICBdXG4gICAgICAgIFtdXG4gICAgaW5cbiAgICBsZXQgc2V0X3NyYyB1cmwgPSBFbC5zZXRfYXQgKEpzdHIudiBcInNyY1wiKSAoU29tZSAoSnN0ci52IHVybCkpIGF1ZGlvX2VsdCBpblxuICAgIGxldCBfYXV0b19wbGF5ID1cbiAgICAgICgqIFdlIGNhbm5vdCByZWx5IG9uIHRoZSBtYWluIFtMd2RdIG9ic2VydmVyIGZvciBwbGF5YmFjayBjb250cm9sIGJlY2F1c2VcbiAgICAgICAgIGl0IGlzIHRpZWQgdG8gdGhlIFtyZXF1ZXN0QW5pbWF0aW9uRnJhbWVzXSBjYWxsYmFjay4gVGhpcyBwcmV2ZW50IHRoZVxuICAgICAgICAgcGxheWVyIHRvIHN0YXJ0IHBsYXlpbmcgdGhlIG5leHQgc29uZyBpZiB0aGUgdGFiIGlzIGluIHRoZSBiYWNrZ3JvdW5kLlxuICAgICAgKilcbiAgICAgIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIGluXG4gICAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgICAgICBtYXRjaCBMd2QucXVpY2tfc2FtcGxlIHJvb3Qgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHVybDsgXyB9IC0+IHNldF9zcmMgdXJsXG4gICAgICAgICAgfCBOb25lIC0+ICgpKTtcbiAgICAgIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBuZXh0ICgpID1cbiAgICAgIGxldCBwbGF5bGlzdCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5wbGF5bGlzdCBpblxuICAgICAgbGV0IGN1cnJlbnRfaW5kZXggPSBMd2QucGVlayBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICAgICAgbGV0IG5leHRfaW5kZXggPSBjdXJyZW50X2luZGV4ICsgMSBpblxuICAgICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCBwbGF5bGlzdCBuZXh0X2luZGV4O1xuICAgICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBuZXh0X2luZGV4XG4gICAgaW5cbiAgICBsZXQgcHJldiAoKSA9XG4gICAgICBsZXQgcGxheWxpc3QgPSBMd2QucGVlayBwbGF5c3RhdGUucGxheWxpc3QgaW5cbiAgICAgIGxldCBjdXJyZW50X2luZGV4ID0gTHdkLnBlZWsgcGxheXN0YXRlLmN1cnJlbnRfaW5kZXggaW5cbiAgICAgIGxldCBuZXh0X2luZGV4ID0gbWF4IDAgKGN1cnJlbnRfaW5kZXggLSAxKSBpblxuICAgICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCBwbGF5bGlzdCBuZXh0X2luZGV4O1xuICAgICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBuZXh0X2luZGV4XG4gICAgaW5cbiAgICBsZXQgc2V0X3Bvc2l0aW9uX3N0YXRlID1cbiAgICAgICgqIEVuYWJsZSBjb250cm9sIGZyb20gT1MgKilcbiAgICAgIGxldCBvcGVuIEJycl9pby5NZWRpYS5TZXNzaW9uIGluXG4gICAgICBsZXQgc2Vzc2lvbiA9IG9mX25hdmlnYXRvciBHLm5hdmlnYXRvciBpblxuICAgICAgbGV0IHNldF9wb3NpdGlvbl9zdGF0ZSAoKSA9XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcImR1cmF0aW9uXCIpKSBhdWRpb19lbHQgaW5cbiAgICAgICAgaWYgbm90IChGbG9hdC5pc19uYW4gZHVyYXRpb24pIHRoZW5cbiAgICAgICAgICBsZXQgcGxheWJhY2tfcmF0ZSA9XG4gICAgICAgICAgICBFbC5wcm9wIChFbC5Qcm9wLmZsb2F0IChKc3RyLnYgXCJwbGF5YmFja1JhdGVcIikpIGF1ZGlvX2VsdFxuICAgICAgICAgIGluXG4gICAgICAgICAgbGV0IHBvc2l0aW9uID1cbiAgICAgICAgICAgIEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcImN1cnJlbnRUaW1lXCIpKSBhdWRpb19lbHRcbiAgICAgICAgICBpblxuICAgICAgICAgIHNldF9wb3NpdGlvbl9zdGF0ZSB+ZHVyYXRpb24gfnBsYXliYWNrX3JhdGUgfnBvc2l0aW9uIHNlc3Npb25cbiAgICAgIGluXG4gICAgICBzZXRfYWN0aW9uX2hhbmRsZXIgc2Vzc2lvbiBBY3Rpb24ubmV4dF90cmFjayBuZXh0O1xuICAgICAgc2V0X2FjdGlvbl9oYW5kbGVyIHNlc3Npb24gQWN0aW9uLnByZXZpb3VzX3RyYWNrIHByZXY7XG4gICAgICBzZXRfcG9zaXRpb25fc3RhdGVcbiAgICBpblxuICAgIGxldCBvbl9lcnJvciBldiA9XG4gICAgICBFdi5zdG9wX2ltbWVkaWF0ZV9wcm9wYWdhdGlvbiBldjtcbiAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBldjtcbiAgICAgIENvbnNvbGUubG9nXG4gICAgICAgIFtcbiAgICAgICAgICBcIkEgcGxheWJhY2sgZXJyb3IgaGFwcGVuZWQuIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIGEgY29kZWMgXFxcbiAgICAgICAgICAgdW5zdXBwb3J0ZWQgYnkgdGhlIGJyb3dzZXIuXCI7XG4gICAgICAgICAgZXY7XG4gICAgICAgIF07XG4gICAgICBuZXh0ICgpXG4gICAgaW5cbiAgICBsZXQgbmV4dCBfID0gbmV4dCAoKSBpblxuICAgIGxldCAoKSA9XG4gICAgICBsZXQgdGFyZ2V0ID0gRWwuYXNfdGFyZ2V0IGF1ZGlvX2VsdCBpblxuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5lbmRlZCBuZXh0IHRhcmdldDtcbiAgICAgIGlnbm9yZSBAQCBFdi5saXN0ZW4gRXYuZXJyb3Igb25fZXJyb3IgdGFyZ2V0O1xuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5wbGF5IChmdW4gXyAtPiBzZXRfcG9zaXRpb25fc3RhdGUgKCkpIHRhcmdldFxuICAgIGluXG4gICAgbGV0IGJ0bl9uZXh0ID1cbiAgICAgIEJycl9sd2RfdWkuQnV0dG9uLnYgfmV2OlsgYFAgKEVsd2QuaGFuZGxlciBFdi5jbGljayBuZXh0KSBdIChgUCBcIk5FWFRcIilcbiAgICBpblxuICAgIGxldCBvcGVuIEJycl9sd2RfdWkgaW5cbiAgICBsZXQgbm93X3BsYXlpbmcgPVxuICAgICAgbGV0IHRyYWNrX2NvdmVyID1cbiAgICAgICAgbGV0IHN0eWxlID1cbiAgICAgICAgICBMd2QubWFwIChMd2QuZ2V0IG5vd19wbGF5aW5nKSB+ZjooZnVuIG5wIC0+XG4gICAgICAgICAgICAgIGxldCBzcmMgPVxuICAgICAgICAgICAgICAgIG1hdGNoIG5wIHdpdGhcbiAgICAgICAgICAgICAgICB8IE5vbmUgLT4gXCJ0cmFjay5wbmdcIlxuICAgICAgICAgICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IGlkOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBfIH07IF8gfSAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPVxuICAgICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKVxuICAgICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnNcbiAgICAgICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAgICAgKCogdG9kbzogdGhpcyBpcyBkb25lIGluIG11bHRpcGxlIHBsYWNlcywgd2Ugc2hvdWxkIGZhY3RvclxuICAgICAgICAgICAgICAgICAgICAgICB0aGF0IG91dC4gKilcbiAgICAgICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGZcbiAgICAgICAgICAgICAgICAgICAgICBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwMCZmb3JtYXQ9SnBnXCJcbiAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJVMpXCIgc3JjKVxuICAgICAgICBpblxuICAgICAgICBsZXQgYXQgPVxuICAgICAgICAgIEF0dHJzLihcbiAgICAgICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1jb3ZlclwiKSBbXVxuICAgICAgICAgICAgfD4gYWRkIEF0Lk5hbWUuc3R5bGUgKGBSIHN0eWxlKSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9uX2NsaWNrID1cbiAgICAgICAgICBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgICAgICAgIChtYXRjaCBMd2QucGVlayBBcHBfc3RhdGUuYWN0aXZlX2xheW91dCB3aXRoXG4gICAgICAgICAgICAgIHwgS2lvc2sgLT4gTWFpblxuICAgICAgICAgICAgICB8IE1haW4gLT4gS2lvc2spXG4gICAgICAgICAgICAgIHw+IEx3ZC5zZXQgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQpXG4gICAgICAgIGluXG4gICAgICAgIEVsd2QuZGl2IH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdIFtdXG4gICAgICBpblxuICAgICAgbGV0IHRyYWNrX2RldGFpbHMgPVxuICAgICAgICBsZXQgYXQgPSBBdHRycy5hZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctZGV0YWlsc1wiKSBbXSBpblxuICAgICAgICBsZXQgdGl0bGUgPVxuICAgICAgICAgIGxldCB0eHQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCBub3dfcGxheWluZykgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCJcbiAgICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgbmFtZTsgXyB9OyBfIH0gLT4gRWwudHh0JyBuYW1lKVxuICAgICAgICAgIGluXG4gICAgICAgICAgRWx3ZC5zcGFuIFsgYFIgdHh0IF1cbiAgICAgICAgaW5cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFIgdGl0bGUgXVxuICAgICAgaW5cbiAgICAgIGxldCBhdCA9XG4gICAgICAgIEF0dHJzLihcbiAgICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwiYm94XCIpIFtdXG4gICAgICAgICAgfD4gYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWRpc3BsYXlcIikpXG4gICAgICBpblxuICAgICAgRWx3ZC5kaXYgfmF0IFsgYFIgdHJhY2tfY292ZXI7IGBSIHRyYWNrX2RldGFpbHMgXVxuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIEF0dHJzLihcbiAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcInBsYXllci13cmFwcGVyXCIpIFtdXG4gICAgICAgIHw+IGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJib3hcIikpXG4gICAgaW5cbiAgICBFbHdkLmRpdiB+YXQgWyBgUiBub3dfcGxheWluZzsgYFAgYXVkaW9fZWx0OyBgUiBidG5fbmV4dCBdXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUGFkZGluZyBwb3NpdGlvbi4gKilcbnR5cGUgcGFkdHkgPVxuICB8IExlZnQgICAoKiBUZXh0IGlzIGxlZnQganVzdGlmaWVkICgnLScgb3B0aW9uKS4gICAgICAgICAgICAgICAqKVxuICB8IFJpZ2h0ICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCAobm8gJy0nIG9wdGlvbikuICAgICAgICAgICAqKVxuICB8IFplcm9zICAoKiBUZXh0IGlzIHJpZ2h0IGp1c3RpZmllZCBieSB6ZXJvcyAoc2VlICcwJyBvcHRpb24pLiAqKVxuXG4oKioqKVxuXG4oKiBJbnRlZ2VyIGNvbnZlcnNpb24uICopXG50eXBlIGludF9jb252ID1cbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCAgICAgICAgKCogICVkIHwgJStkIHwgJSBkICAqKVxuICB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpICAgICAgICAoKiAgJWkgfCAlK2kgfCAlIGkgICopXG4gIHwgSW50X3ggfCBJbnRfQ3ggICAgICAgICAgICAgICAgICgqICAleCB8ICUjeCAgICAgICAgKilcbiAgfCBJbnRfWCB8IEludF9DWCAgICAgICAgICAgICAgICAgKCogICVYIHwgJSNYICAgICAgICAqKVxuICB8IEludF9vIHwgSW50X0NvICAgICAgICAgICAgICAgICAoKiAgJW8gfCAlI28gICAgICAgICopXG4gIHwgSW50X3UgICAgICAgICAgICAgICAgICAgICAgICAgICgqICAldSAgICAgICAgICAgICAgKilcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgICAgICAgKCogICUjZCB8ICUjaSB8ICUjdSAqKVxuXG4oKiBGbG9hdCBjb252ZXJzaW9uLiAqKVxudHlwZSBmbG9hdF9mbGFnX2NvbnYgPVxuICB8IEZsb2F0X2ZsYWdfICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcCAgICAgICAgICAgICAgICAgICAoKiAlK1tmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3MgICAgICAgICAgICAgICAgICAgKCogJSBbZmVFZ0dGaEhdICopXG50eXBlIGZsb2F0X2tpbmRfY29udiA9XG4gIHwgRmxvYXRfZiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZiB8ICUrZiB8ICUgZiAgKilcbiAgfCBGbG9hdF9lICAgICAgICAgICAgICAgICAgICAgICAgKCogICVlIHwgJStlIHwgJSBlICAqKVxuICB8IEZsb2F0X0UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUUgfCAlK0UgfCAlIEUgICopXG4gIHwgRmxvYXRfZyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZyB8ICUrZyB8ICUgZyAgKilcbiAgfCBGbG9hdF9HICAgICAgICAgICAgICAgICAgICAgICAgKCogICVHIHwgJStHIHwgJSBHICAqKVxuICB8IEZsb2F0X0YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUYgfCAlK0YgfCAlIEYgICopXG4gIHwgRmxvYXRfaCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlaCB8ICUraCB8ICUgaCAgKilcbiAgfCBGbG9hdF9IICAgICAgICAgICAgICAgICAgICAgICAgKCogICVIIHwgJStIIHwgJSBIICAqKVxuICB8IEZsb2F0X0NGICAgICAgICAgICAgICAgICAgICAgICAoKiAgJSNGfCAlKyNGfCAlICNGICopXG50eXBlIGZsb2F0X2NvbnYgPSBmbG9hdF9mbGFnX2NvbnYgKiBmbG9hdF9raW5kX2NvbnZcblxuKCoqKilcblxuKCogQ2hhciBzZXRzIChzZWUgJVsuLi5dKSBhcmUgYml0bWFwcyBpbXBsZW1lbnRlZCBhcyAzMi1jaGFyIHN0cmluZ3MuICopXG50eXBlIGNoYXJfc2V0ID0gc3RyaW5nXG5cbigqKiopXG5cbigqIENvdW50ZXIgdXNlZCBpbiBTY2FuZi4gKilcbnR5cGUgY291bnRlciA9XG4gIHwgTGluZV9jb3VudGVyICAgICAoKiAgJWwgICAgICAqKVxuICB8IENoYXJfY291bnRlciAgICAgKCogICVuICAgICAgKilcbiAgfCBUb2tlbl9jb3VudGVyICAgICgqICAlTiwgJUwgICopXG5cbigqKiopXG5cbigqIFBhZGRpbmcgb2Ygc3RyaW5ncyBhbmQgbnVtYmVycy4gKilcbnR5cGUgKCdhLCAnYikgcGFkZGluZyA9XG4gICgqIE5vIHBhZGRpbmcgKGV4OiBcIiVkXCIpICopXG4gIHwgTm9fcGFkZGluZyAgOiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIExpdGVyYWwgcGFkZGluZyAoZXg6IFwiJThkXCIpICopXG4gIHwgTGl0X3BhZGRpbmcgOiBwYWR0eSAqIGludCAtPiAoJ2EsICdhKSBwYWRkaW5nXG4gICgqIFBhZGRpbmcgYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqZFwiKSAqKVxuICB8IEFyZ19wYWRkaW5nIDogcGFkdHkgLT4gKGludCAtPiAnYSwgJ2EpIHBhZGRpbmdcblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZCxcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwYWRkaW5nIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHBhZF9vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIFByZWNpc2lvbiBvZiBmbG9hdHMgYW5kICcwJy1wYWRkaW5nIG9mIGludGVnZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwcmVjaXNpb24gPVxuICAoKiBObyBwcmVjaXNpb24gKGV4OiBcIiVmXCIpICopXG4gIHwgTm9fcHJlY2lzaW9uIDogKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIExpdGVyYWwgcHJlY2lzaW9uIChleDogXCIlLjNmXCIpICopXG4gIHwgTGl0X3ByZWNpc2lvbiA6IGludCAtPiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogUHJlY2lzaW9uIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpICopXG4gIHwgQXJnX3ByZWNpc2lvbiA6IChpbnQgLT4gJ2EsICdhKSBwcmVjaXNpb25cblxuKCogU29tZSBmb3JtYXRzLCBzdWNoIGFzICVfZixcbiAgIG9ubHkgYWNjZXB0IGFuIG9wdGlvbmFsIG51bWJlciBhcyBwcmVjaXNpb24gb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcHJlY19vcHRpb24gPSBpbnQgb3B0aW9uXG5cbigqIHNlZSB0aGUgQ3VzdG9tIGZvcm1hdCBjb21iaW5hdG9yICopXG50eXBlICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgPVxuICB8IEN1c3RvbV96ZXJvIDogKCdhLCBzdHJpbmcsICdhKSBjdXN0b21fYXJpdHlcbiAgfCBDdXN0b21fc3VjYyA6ICgnYSwgJ2IsICdjKSBjdXN0b21fYXJpdHkgLT5cbiAgICAoJ2EsICd4IC0+ICdiLCAneCAtPiAnYykgY3VzdG9tX2FyaXR5XG5cbigqKiopXG5cbigqICAgICAgICBSZWxhdGlvbmFsIGZvcm1hdCB0eXBlc1xuXG5JbiB0aGUgZmlyc3QgZm9ybWF0K2dhZHRzIGltcGxlbWVudGF0aW9uLCB0aGUgdHlwZSBmb3IgJSguLiUpIGluIHRoZVxuZm10IEdBRFQgd2FzIGFzIGZvbGxvd3M6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKiAoJ2QxLCAncTEsICdkMiwgJ3EyKSByZWFkZXJfbmJfdW5pZmllciAqXG4gICAgKCd4LCAnYiwgJ2MsICdkMSwgJ3ExLCAndSkgZm10dHkgKlxuICAgICgndSwgJ2IsICdjLCAncTEsICdlMSwgJ2YpIGZtdCAtPlxuICAgICAgKCgneCwgJ2IsICdjLCAnZDIsICdxMiwgJ3UpIGZvcm1hdDYgLT4gJ3gsICdiLCAnYywgJ2QxLCAnZTEsICdmKSBmbXRcblxuTm90aWNlIHRoYXQgdGhlICd1IHBhcmFtZXRlciBpbiAnZiBwb3NpdGlvbiBpbiB0aGUgZm9ybWF0IGFyZ3VtZW50XG4oKCd4LCAuLiwgJ3UpIGZvcm1hdDYgLT4gLi4pIGlzIGVxdWFsIHRvIHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2FcbnBvc2l0aW9uIGluIHRoZSBmb3JtYXQgdGFpbCAoKCd1LCAuLiwgJ2YpIGZtdCkuIFRoaXMgbWVhbnMgdGhhdCB0aGVcbnR5cGUgb2YgdGhlIGV4cGVjdGVkIGZvcm1hdCBwYXJhbWV0ZXIgZGVwZW5kcyBvZiB3aGVyZSB0aGUgJSguLi4lKVxuYXJlIGluIHRoZSBmb3JtYXQgc3RyaW5nOlxuXG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSlcIlxuICAtIDogKHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IHVuaXRcbiAgPSA8ZnVuPlxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpJWRcIlxuICAtIDogKGludCAtPiB1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIGludCAtPiB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gaW50IC0+IHVuaXRcbiAgPSA8ZnVuPlxuXG5PbiB0aGUgY29udHJhcnksIHRoZSBsZWdhY3kgdHlwZXIgZ2l2ZXMgYSBjbGV2ZXIgdHlwZSB0aGF0IGRvZXMgbm90XG5kZXBlbmQgb24gdGhlIHBvc2l0aW9uIG9mICUoLi4lKSBpbiB0aGUgZm9ybWF0IHN0cmluZy4gRm9yIGV4YW1wbGUsXG4lKCUpIHdpbGwgaGF2ZSB0aGUgcG9seW1vcnBoaWMgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSk6IGl0IGNhblxuYmUgY29uY2F0ZW5hdGVkIHRvIGFueSBmb3JtYXQgdHlwZSwgYW5kIG9ubHkgZW5mb3JjZXMgdGhlIGNvbnN0cmFpbnRcbnRoYXQgaXRzICdhIGFuZCAnZiBwYXJhbWV0ZXJzIGFyZSBlcXVhbCAobm8gZm9ybWF0IGFyZ3VtZW50cykgYW5kICdkXG5hbmQgJ2UgYXJlIGVxdWFsIChubyByZWFkZXIgYXJndW1lbnQpLlxuXG5UaGUgd2Vha2VuaW5nIG9mIHRoaXMgcGFyYW1ldGVyIHR5cGUgaW4gdGhlIEdBRFQgdmVyc2lvbiBicm9rZSB1c2VyXG5jb2RlIChpbiBmYWN0IGl0IGVzc2VudGlhbGx5IG1hZGUgJSguLi4lKSB1bnVzYWJsZSBleGNlcHQgYXQgdGhlIGxhc3RcbnBvc2l0aW9uIG9mIGEgZm9ybWF0KS4gSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3Qgd29ya1xuYW55bW9yZTpcblxuICBmdW4gc2VwIC0+XG4gICAgRm9ybWF0LnByaW50ZiBcImZvbyUoJSliYXIlKCUpYmF6XCIgc2VwIHNlcFxuXG5BcyB0aGUgdHlwZS1jaGVja2VyIHdvdWxkIHJlcXVpcmUgdHdvICppbmNvbXBhdGlibGUqIHR5cGVzIGZvciB0aGUgJSglKVxuaW4gZGlmZmVyZW50IHBvc2l0aW9ucy5cblxuVGhlIHNvbHV0aW9uIHRvIHJlZ2FpbiBhIGdlbmVyYWwgdHlwZSBmb3IgJSguLiUpIGlzIHRvIGdlbmVyYWxpemUgdGhpc1xudGVjaG5pcXVlLCBub3Qgb25seSBvbiB0aGUgJ2QsICdlIHBhcmFtZXRlcnMsIGJ1dCBvbiBhbGwgc2l4XG5wYXJhbWV0ZXJzIG9mIGEgZm9ybWF0OiB3ZSBpbnRyb2R1Y2UgYSBcInJlbGF0aW9uYWxcIiB0eXBlXG4gICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG53aG9zZSB2YWx1ZXMgYXJlIHByb29mcyB0aGF0ICgnYTEsIC4uLCAnZjEpIGFuZCAoJ2EyLCAuLiwgJ2YyKSBtb3JhbGx5XG5jb3JyZXNwb25kIHRvIHRoZSBzYW1lIGZvcm1hdCB0eXBlOiAnYTEgaXMgb2J0YWluZWQgZnJvbSAnZjEsJ2IxLCdjMVxuaW4gdGhlIGV4YWN0IHNhbWUgd2F5IHRoYXQgJ2EyIGlzIG9idGFpbmVkIGZyb20gJ2YyLCdiMiwnYzIsIGV0Yy5cblxuRm9yIGV4YW1wbGUsIHRoZSByZWxhdGlvbiBiZXR3ZWVuIHR3byBmb3JtYXQgdHlwZXMgYmVnaW5uaW5nIHdpdGggYSBDaGFyXG5wYXJhbWV0ZXIgaXMgYXMgZm9sbG93czpcblxufCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbkluIHRoZSBnZW5lcmFsIGNhc2UsIHRoZSB0ZXJtIHN0cnVjdHVyZSBvZiBmbXR0eV9yZWwgaXMgKGFsbW9zdFsxXSlcbmlzb21vcnBoaWMgdG8gdGhlIGZtdHR5IG9mIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbjogZXZlcnlcbmNvbnN0cnVjdG9yIGlzIHJlLXJlYWQgd2l0aCBhIGJpbmFyeSwgcmVsYXRpb25hbCB0eXBlLCBpbnN0ZWFkIG9mIHRoZVxucHJldmlvdXMgdW5hcnkgdHlwaW5nLiBmbXR0eSBjYW4gdGhlbiBiZSByZS1kZWZpbmVkIGFzIHRoZSBkaWFnb25hbCBvZlxuZm10dHlfcmVsOlxuXG4gIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5cbk9uY2Ugd2UgaGF2ZSB0aGlzIGZtdHR5X3JlbCB0eXBlIGluIHBsYWNlLCB3ZSBjYW4gZ2l2ZSB0aGUgbW9yZVxuZ2VuZXJhbCB0eXBlIHRvICUoLi4uJSk6XG5cbnwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgIHBhZF9vcHRpb24gKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG5XZSBhY2NlcHQgYW55IGZvcm1hdCAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYpICh0aGlzIGlzXG5jb21wbGV0ZWx5IHVucmVsYXRlZCB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBmb3JtYXQpLCBidXQgYWxzb1xucmVxdWlyZSBhIHByb29mIHRoYXQgdGhpcyBmb3JtYXQgaXMgaW4gcmVsYXRpb24gdG8gYW5vdGhlciBmb3JtYXQgdGhhdFxuaXMgY29uY2F0ZW5hYmxlIHRvIHRoZSBmb3JtYXQgdGFpbC4gV2hlbiBleGVjdXRpbmcgYSAlKC4uLiUpIGZvcm1hdFxuKGluIGNhbWxpbnRlcm5hbEZvcm1hdC5tbDptYWtlX3ByaW50ZiBvciBzY2FuZi5tbDptYWtlX3NjYW5mKSwgd2VcbnRyYW5zdHlwZSB0aGUgZm9ybWF0IGFsb25nIHRoaXMgcmVsYXRpb24gdXNpbmcgdGhlICdyZWNhc3QnIGZ1bmN0aW9uXG50byB0cmFuc3Bvc2UgYmV0d2VlbiByZWxhdGVkIGZvcm1hdCB0eXBlcy5cblxuICB2YWwgcmVjYXN0IDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEpIGZtdFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10XG5cbk5PVEUgWzFdOiB0aGUgdHlwaW5nIG9mIEZvcm1hdF9zdWJzdF90eSByZXF1aXJlcyBub3Qgb25lIGZvcm1hdCB0eXBlLCBidXRcbnR3bywgb25lIHRvIGVzdGFibGlzaCB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXQgYXJndW1lbnQgYW5kIHRoZVxuZmlyc3Qgc2l4IHBhcmFtZXRlcnMsIGFuZCB0aGUgb3RoZXIgZm9yIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdFxuYXJndW1lbnQgYW5kIHRoZSBsYXN0IHNpeCBwYXJhbWV0ZXJzLlxuXG58IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuV2hlbiB3ZSBnZW5lcmF0ZSBhIGZvcm1hdCBBU1QsIHdlIGdlbmVyYXRlIGV4YWN0bHkgdGhlIHNhbWUgd2l0bmVzc1xuZm9yIGJvdGggcmVsYXRpb25zLCBhbmQgdGhlIHdpdG5lc3MtY29udmVyc2lvbiBmdW5jdGlvbnMgaW5cbmNhbWxpbnRlcm5hbEZvcm1hdCBkbyByZWx5IG9uIHRoaXMgaW52YXJpYW50LiBGb3IgZXhhbXBsZSwgdGhlXG5mdW5jdGlvbiB0aGF0IHByb3ZlcyB0aGF0IHRoZSByZWxhdGlvbiBpcyB0cmFuc2l0aXZlXG5cbiAgdmFsIHRyYW5zIDpcbiAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTMsICdiMywgJ2MzLCAnZDMsICdlMywgJ2YzKSBmbXR0eV9yZWxcblxuZG9lcyBhc3N1bWUgdGhhdCB0aGUgdHdvIGlucHV0cyBoYXZlIGV4YWN0bHkgdGhlIHNhbWUgdGVybSBzdHJ1Y3R1cmVcbihhbmQgaXMgb25seSBldmVyeSB1c2VkIGZvciBhcmd1bWVudCB3aXRuZXNzZXMgb2YgdGhlXG5Gb3JtYXRfc3Vic3RfdHkgY29uc3RydWN0b3IpLlxuKilcblxuKCogVHlwZSBvZiBhIGJsb2NrIHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCAgICgqIEhvcml6b250YWwgYmxvY2sgbm8gbGluZSBicmVha2luZyAqKVxuICB8IFBwX3Zib3ggICAoKiBWZXJ0aWNhbCBibG9jayBlYWNoIGJyZWFrIGxlYWRzIHRvIGEgbmV3IGxpbmUgKilcbiAgfCBQcF9odmJveCAgKCogSG9yaXpvbnRhbC12ZXJ0aWNhbCBibG9jazogc2FtZSBhcyB2Ym94LCBleGNlcHQgaWYgdGhpcyBibG9ja1xuICAgICAgICAgICAgICAgICBpcyBzbWFsbCBlbm91Z2ggdG8gZml0IG9uIGEgc2luZ2xlIGxpbmUgKilcbiAgfCBQcF9ob3Zib3ggKCogSG9yaXpvbnRhbCBvciBWZXJ0aWNhbCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2sgKilcbiAgfCBQcF9ib3ggICAgKCogSG9yaXpvbnRhbCBvciBJbmRlbnQgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrLCBvclxuICAgICAgICAgICAgICAgICB3aGVuIGl0IGxlYWRzIHRvIGEgbmV3IGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50IGxpbmUgKilcbiAgfCBQcF9maXRzICAgKCogSW50ZXJuYWwgdXNhZ2U6IHdoZW4gYSBibG9jayBmaXRzIG9uIGEgc2luZ2xlIGxpbmUgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgZm9ybWF0dGluZ19saXQgPVxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXSAgICopXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEB9ICAgKilcbiAgfCBCcmVhayBvZiBzdHJpbmcgKiBpbnQgKiBpbnQgICAgICAgICAgKCogQCwgfCBAICB8IEA7IHwgQDs8PiAqKVxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPyAgICopXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBcXG4gICopXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAuICAgKilcbiAgfCBNYWdpY19zaXplIG9mIHN0cmluZyAqIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQDxuPiAqKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAQCAgICopXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEAlJSAgKilcbiAgfCBTY2FuX2luZGljIG9mIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFggICAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW4gPVxuICB8IE9wZW5fdGFnIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAeyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG4gIHwgT3Blbl9ib3ggOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEBbICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgdHlwZSBlbGVtZW50cy4gKilcbigqIEluIHBhcnRpY3VsYXIgdXNlZCB0byByZXByZXNlbnQgJSguLi4lKSBhbmQgJXsuLi4lfSBjb250ZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZixcbiAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuYW5kICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgPVxuICB8IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFN0cmluZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKHN0cmluZyAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIHN0cmluZyAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50MzJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50MzIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQzMiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBOYXRpdmVpbnRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5kICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChuYXRpdmVpbnQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBuYXRpdmVpbnQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50NjRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50NjQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBpbnQ2NCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBGbG9hdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWYgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChmbG9hdCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGZsb2F0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEJvb2xfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGJvb2wgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBib29sIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRm9ybWF0X2FyZ190eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuICB8IEZvcm1hdF9zdWJzdF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzLiAqKVxuICB8IEFscGhhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ3ggLT4gJ2MxKSAtPiAneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ3ggLT4gJ2MyKSAtPiAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBUaGV0YV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICdjMSkgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICdjMikgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQW55X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBVc2VkIGZvciBjdXN0b20gZm9ybWF0cyAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBSZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IElnbm9yZWRfcmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgnYTEsICdiMSwgJ2MxLCAoJ2IxIC0+ICd4KSAtPiAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICgnYjIgLT4gJ3gpIC0+ICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gIHwgRW5kX29mX2ZtdHR5IDpcbiAgICAgICgnZjEsICdiMSwgJ2MxLCAnZDEsICdkMSwgJ2YxLFxuICAgICAgICdmMiwgJ2IyLCAnYzIsICdkMiwgJ2QyLCAnZjIpIGZtdHR5X3JlbFxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCBlbGVtZW50cy4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ID1cbiAgfCBDaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlcyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlUyAqKVxuICAgICAgKCd4LCBzdHJpbmcgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQzMiAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IE5hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgbmF0aXZlaW50IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQ2NCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gICAgICBmbG9hdF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgZmxvYXQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBCb29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2JCXSAqKVxuICAgICAgKCd4LCBib29sIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmx1c2ggOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogYWJjICopXG4gICAgICBzdHJpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBDaGFyX2xpdGVyYWwgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiB4ICopXG4gICAgICBjaGFyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBGb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKlxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgQWxwaGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAneCAtPiAnYykgLT4gJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgVGhldGEgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXQgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCgnYiAtPiAnYykgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICBmb3JtYXR0aW5nX2xpdCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZvcm1hdHRpbmdfZ2VuIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgKCdhMSwgJ2IsICdjLCAnZDEsICdlMSwgJ2YxKSBmb3JtYXR0aW5nX2dlbiAqXG4gICAgICAoJ2YxLCAnYiwgJ2MsICdlMSwgJ2UyLCAnZjIpIGZtdCAtPiAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UyLCAnZjIpIGZtdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3ggLT4gJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKHN0cmluZyAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW25sTkxdICopXG4gICAgICBjb3VudGVyICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoaW50IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUwYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSWdub3JlZF9wYXJhbSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8gKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBpZ25vcmVkICogKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogQ3VzdG9tIHByaW50aW5nIGZvcm1hdCAoUFIjNjQ1MiwgR1BSIzE0MClcblxuICAgICBXZSBpbmNsdWRlIGEgdHlwZSBDdXN0b20gb2YgXCJjdXN0b20gY29udmVydGVyc1wiLCB3aGVyZSBhblxuICAgICBhcmJpdHJhcnkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY29udmVydCBvbmUgb3IgbW9yZVxuICAgICBhcmd1bWVudHMuIFRoZXJlIGlzIG5vIHN5bnRheCBmb3IgY3VzdG9tIGNvbnZlcnRlcnMsIGl0IGlzIG9ubHlcbiAgICAgaW50ZW5kZWQgZm9yIGN1c3RvbSBwcm9jZXNzb3JzIHRoYXQgd2lzaCB0byByZWx5IG9uIHRoZVxuICAgICBzdGRsaWItZGVmaW5lZCBmb3JtYXQgR0FEVHMuXG5cbiAgICAgRm9yIGluc3RhbmNlIGEgcHJlLXByb2Nlc3NvciBjb3VsZCBjaG9vc2UgdG8gaW50ZXJwcmV0IHN0cmluZ3NcbiAgICAgcHJlZml4ZWQgd2l0aCBbXCIhXCJdIGFzIGZvcm1hdCBzdHJpbmdzIHdoZXJlIFsle3sgLi4uIH19XSBpc1xuICAgICBhIHNwZWNpYWwgZm9ybSB0byBwYXNzIGEgdG9fc3RyaW5nIGZ1bmN0aW9uLCBzbyB0aGF0IG9uZSBjb3VsZFxuICAgICB3cml0ZTpcblxuICAgICB7W1xuICAgICAgIHR5cGUgdCA9IHsgeCA6IGludDsgeSA6IGludCB9XG5cbiAgICAgICBsZXQgc3RyaW5nX29mX3QgdCA9IFByaW50Zi5zcHJpbnRmIFwieyB4ID0gJWQ7IHkgPSAlZCB9XCIgdC54IHQueVxuXG4gICAgICAgUHJpbnRmLnByaW50ZiAhXCJ0ID0gJXt7c3RyaW5nX29mX3R9fVwiIHsgeCA9IDQyOyB5ID0gNDIgfVxuICAgICBdfVxuICAqKVxuICB8IEN1c3RvbSA6XG4gICAgICAoJ2EsICd4LCAneSkgY3VzdG9tX2FyaXR5ICogKHVuaXQgLT4gJ3gpICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIGVuZCBvZiBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uICopXG4gIHwgRW5kX29mX2Zvcm1hdCA6XG4gICAgICAgICgnZiwgJ2IsICdjLCAnZSwgJ2UsICdmKSBmbXRcblxuKCoqKilcblxuKCogVHlwZSBmb3IgaWdub3JlZCBwYXJhbWV0ZXJzIChzZWUgXCIlX1wiKS4gKilcbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZCA9XG4gIHwgSWdub3JlZF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9jICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1MgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2QgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50MzIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfbmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfbmQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50NjQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfTGQgKilcbiAgICAgIGludF9jb252ICogcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZiAqKVxuICAgICAgcGFkX29wdGlvbiAqIHByZWNfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9ib29sIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9CICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV97Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgaWdub3JlZFxuICB8IElnbm9yZWRfcmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfWy4uLl0gKilcbiAgICAgIHBhZF9vcHRpb24gKiBjaGFyX3NldCAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfW25sTkxdICopXG4gICAgICBjb3VudGVyIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8wYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcblxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgKiBzdHJpbmdcblxubGV0IHJlYyBlcmFzZV9yZWwgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYsXG4gICBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5XG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCBfdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTEsIGVyYXNlX3JlbCByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBlIGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdCB0eXBlcy4gKilcbigqIFVzZWQgYnk6XG4gICAqIHJlYWRlcl9uYl91bmlmaWVyX29mX2ZtdHR5IHRvIGNvdW50IHJlYWRlcnMgaW4gYW4gZm10dHksXG4gICAqIFNjYW5mLnRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgdG8gZXh0cmFjdCByZWFkZXJzIGluc2lkZSAlKC4uLiUpLFxuICAgKiBDYW1saW50ZXJuYWxGb3JtYXQuZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgdG8gZXh0cmFjdCBmb3JtYXQgdHlwZS4gKilcblxuKCpcbmxldCByZWMgY29uY2F0X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXR0eSA9XG4qKVxubGV0IHJlYyBjb25jYXRfZm10dHkgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgICAgICBnMSBqMSBnMiBqMlxuICAuXG4gICAgKGcxLCBiMSwgYzEsIGoxLCBkMSwgYTEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBkMiwgYTIpIGZtdHR5X3JlbCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGUxLCBmMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGUyLCBmMikgZm10dHlfcmVsID1cbmZ1biBmbXR0eTEgZm10dHkyIC0+IG1hdGNoIGZtdHR5MSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgQ2hhcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgSW50MzJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBJbnQ2NF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBGbG9hdF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIEFueV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBFbmRfb2ZfZm10dHkgLT4gZm10dHkyXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0cy4gKilcbmxldCByZWMgY29uY2F0X2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBnLCBoKSBmbXQgPVxuZnVuIGZtdDEgZm10MiAtPiBtYXRjaCBmbXQxIHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBTdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBDYW1sX3N0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDMyIChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgQ2hhciAocmVzdCkgLT5cbiAgICBDaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIENhbWxfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIEJvb2wgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIEFscGhhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgVGhldGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgQ3VzdG9tIChhcml0eSwgZiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgUmVhZGVyIHJlc3QgLT5cbiAgICBSZWFkZXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBGbHVzaCAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIFN0cmluZ19saXRlcmFsIChzdHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIENoYXJfbGl0ZXJhbCAgIChjaHIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnICAgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fbmV4dF9jaGFyIChyZXN0KSAtPlxuICAgIFNjYW5fbmV4dF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgSWdub3JlZF9wYXJhbSAoaWduLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgZm10MlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgR2FicmllbCBTY2hlcmVyLCBwcm9qZXQgUGFydG91dCwgSU5SSUEgUGFyaXMtU2FjbGF5ICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDYW1saW50ZXJuYWxBdG9taWMgaXMgYSBkZXBlbmRlbmN5IG9mIFN0ZGxpYiwgc28gaXQgaXMgY29tcGlsZWQgd2l0aFxuICAgLW5vcGVydmFzaXZlcy4gKilcbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBXZSBhcmUgbm90IHJldXNpbmcgKCdhIHJlZikgZGlyZWN0bHkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmVhc29uXG4gICBhYm91dCBhdG9taWNpdHkgaWYgd2Ugd2lzaCB0bzogZXZlbiBpbiBhIHNlcXVlbnRpYWwgaW1wbGVtZW50YXRpb24sXG4gICBzaWduYWxzIGFuZCBvdGhlciBhc3luY2hyb25vdXMgY2FsbGJhY2tzIG1pZ2h0IGJyZWFrIGF0b21pY2l0eS4gKilcbnR5cGUgJ2EgdCA9IHttdXRhYmxlIHY6ICdhfVxuXG5sZXQgbWFrZSB2ID0ge3Z9XG5sZXQgZ2V0IHIgPSByLnZcbmxldCBzZXQgciB2ID0gci52IDwtIHZcblxuKCogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHNldCB0byBuZXZlciBiZSBpbmxpbmVkOiBGbGFtYmRhIGlzXG4gICBhbGxvd2VkIHRvIG1vdmUgc3Vycm91bmRpbmcgY29kZSBpbnNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24sXG4gICBpbmNsdWRpbmcgYWxsb2NhdGlvbnMuICopXG5cbmxldFtAaW5saW5lIG5ldmVyXSBleGNoYW5nZSByIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gdjtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGNvbXBhcmVfYW5kX3NldCByIHNlZW4gdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIGlmIGN1ciA9PSBzZWVuIHRoZW4gKFxuICAgIHIudiA8LSB2O1xuICAgICgqIEVORCBBVE9NSUMgKilcbiAgICB0cnVlXG4gICkgZWxzZVxuICAgIGZhbHNlXG5cbmxldFtAaW5saW5lIG5ldmVyXSBmZXRjaF9hbmRfYWRkIHIgbiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSAoY3VyICsgbik7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldCBpbmNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAxKVxubGV0IGRlY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByICgtMSkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4Y2VwdGlvbnMgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gJ2EgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICAoKiBmb3IgcnVudGltZS9mYWlsX25hdC5jICopXG4gIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5hcnJheV9ib3VuZF9lcnJvclwiXG4gICAgKEludmFsaWRfYXJndW1lbnQgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpXG5cbmV4dGVybmFsIHJhaXNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2VcIlxuZXh0ZXJuYWwgcmFpc2Vfbm90cmFjZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlX25vdHJhY2VcIlxuXG5sZXQgZmFpbHdpdGggcyA9IHJhaXNlKEZhaWx1cmUgcylcbmxldCBpbnZhbGlkX2FyZyBzID0gcmFpc2UoSW52YWxpZF9hcmd1bWVudCBzKVxuXG5leGNlcHRpb24gRXhpdFxuZXhjZXB0aW9uIE1hdGNoX2ZhaWx1cmUgPSBNYXRjaF9mYWlsdXJlXG5leGNlcHRpb24gQXNzZXJ0X2ZhaWx1cmUgPSBBc3NlcnRfZmFpbHVyZVxuZXhjZXB0aW9uIEludmFsaWRfYXJndW1lbnQgPSBJbnZhbGlkX2FyZ3VtZW50XG5leGNlcHRpb24gRmFpbHVyZSA9IEZhaWx1cmVcbmV4Y2VwdGlvbiBOb3RfZm91bmQgPSBOb3RfZm91bmRcbmV4Y2VwdGlvbiBPdXRfb2ZfbWVtb3J5ID0gT3V0X29mX21lbW9yeVxuZXhjZXB0aW9uIFN0YWNrX292ZXJmbG93ID0gU3RhY2tfb3ZlcmZsb3dcbmV4Y2VwdGlvbiBTeXNfZXJyb3IgPSBTeXNfZXJyb3JcbmV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSA9IEVuZF9vZl9maWxlXG5leGNlcHRpb24gRGl2aXNpb25fYnlfemVybyA9IERpdmlzaW9uX2J5X3plcm9cbmV4Y2VwdGlvbiBTeXNfYmxvY2tlZF9pbyA9IFN5c19ibG9ja2VkX2lvXG5leGNlcHRpb24gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUgPSBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZVxuXG4oKiBDb21wb3NpdGlvbiBvcGVyYXRvcnMgKilcblxuZXh0ZXJuYWwgKCB8PiApIDogJ2EgLT4gKCdhIC0+ICdiKSAtPiAnYiA9IFwiJXJldmFwcGx5XCJcbmV4dGVybmFsICggQEAgKSA6ICgnYSAtPiAnYikgLT4gJ2EgLT4gJ2IgPSBcIiVhcHBseVwiXG5cbigqIERlYnVnZ2luZyAqKVxuXG5leHRlcm5hbCBfX0xPQ19fIDogc3RyaW5nID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0ZJTEVfXyA6IHN0cmluZyA9IFwiJWxvY19GSUxFXCJcbmV4dGVybmFsIF9fTElORV9fIDogaW50ID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19NT0RVTEVfXyA6IHN0cmluZyA9IFwiJWxvY19NT0RVTEVcIlxuZXh0ZXJuYWwgX19QT1NfXyA6IHN0cmluZyAqIGludCAqIGludCAqIGludCA9IFwiJWxvY19QT1NcIlxuZXh0ZXJuYWwgX19GVU5DVElPTl9fIDogc3RyaW5nID0gXCIlbG9jX0ZVTkNUSU9OXCJcblxuZXh0ZXJuYWwgX19MT0NfT0ZfXyA6ICdhIC0+IHN0cmluZyAqICdhID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0xJTkVfT0ZfXyA6ICdhIC0+IGludCAqICdhID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19QT1NfT0ZfXyA6ICdhIC0+IChzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQpICogJ2EgPSBcIiVsb2NfUE9TXCJcblxuKCogQ29tcGFyaXNvbnMgKilcblxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5cbmxldCBtaW4geCB5ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggIT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcVwiXG5cbigqIEJvb2xlYW4gb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5cbigqIEludGVnZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tICkgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsICggfisgKSA6IGludCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgKCAtICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCAoICogKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsICggLyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgKCBtb2QgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcblxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5cbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5cbmxldCBsbm90IHggPSB4IGx4b3IgKC0xKVxuXG5leHRlcm5hbCAoIGxzbCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgKCBsc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmV4dGVybmFsICggYXNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5cbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuXG4oKiBGbG9hdGluZy1wb2ludCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zX2Zsb2F0XCIgXCJhY29zXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luX2Zsb2F0XCIgXCJhc2luXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuX2Zsb2F0XCIgXCJhdGFuXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4yIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbjJfZmxvYXRcIiBcImF0YW4yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGh5cG90IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc19mbG9hdFwiIFwiY29zXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc2hfZmxvYXRcIiBcImNhbWxfYWNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nX2Zsb2F0XCIgXCJsb2dcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMTAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxMF9mbG9hdFwiIFwibG9nMTBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5oX2Zsb2F0XCIgXCJjYW1sX2FzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Rhbl9mbG9hdFwiIFwidGFuXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5oX2Zsb2F0XCIgXCJ0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbmhfZmxvYXRcIiBcImNhbWxfYXRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWJzX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgPSBcIiVhYnNmbG9hdFwiXG5leHRlcm5hbCBjb3B5c2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kX2Zsb2F0IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1vZF9mbG9hdFwiIFwiZm1vZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIGZsb2F0X29mX2ludCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGludF9vZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmxldCBpbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuZWdfaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4RkZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmFuID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAxTFxubGV0IG1heF9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9FRl9GRl9GRl9GRl9GRl9GRl9GRkxcbmxldCBtaW5fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4MDBfMTBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgZXBzaWxvbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgzQ19CMF8wMF8wMF8wMF8wMF8wMF8wMExcblxudHlwZSBmcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5cbigqIFN0cmluZyBhbmQgYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlcyBTdHJpbmcgYW5kIEJ5dGVzICopXG5cbmV4dGVybmFsIHN0cmluZ19sZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19sZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBzdHJpbmdfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X3N0cmluZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc19ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBieXRlc191bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0ICggXiApIHMxIHMyID1cbiAgbGV0IGwxID0gc3RyaW5nX2xlbmd0aCBzMSBhbmQgbDIgPSBzdHJpbmdfbGVuZ3RoIHMyIGluXG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIChsMSArIGwyKSBpblxuICBzdHJpbmdfYmxpdCBzMSAwIHMgMCBsMTtcbiAgc3RyaW5nX2JsaXQgczIgMCBzIGwxIGwyO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgQ2hhciAqKVxuXG5leHRlcm5hbCBpbnRfb2ZfY2hhciA6IGNoYXIgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdW5zYWZlX2NoYXJfb2ZfaW50IDogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgbiA9XG4gIGlmIG4gPCAwIHx8IG4gPiAyNTUgdGhlbiBpbnZhbGlkX2FyZyBcImNoYXJfb2ZfaW50XCIgZWxzZSB1bnNhZmVfY2hhcl9vZl9pbnQgblxuXG4oKiBVbml0IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFBhaXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBmc3QgOiAnYSAqICdiIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsIHNuZCA6ICdhICogJ2IgLT4gJ2IgPSBcIiVmaWVsZDFcIlxuXG4oKiBSZWZlcmVuY2VzICopXG5cbnR5cGUgJ2EgcmVmID0geyBtdXRhYmxlIGNvbnRlbnRzIDogJ2EgfVxuZXh0ZXJuYWwgcmVmIDogJ2EgLT4gJ2EgcmVmID0gXCIlbWFrZW11dGFibGVcIlxuZXh0ZXJuYWwgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgKCA6PSApIDogJ2EgcmVmIC0+ICdhIC0+IHVuaXQgPSBcIiVzZXRmaWVsZDBcIlxuZXh0ZXJuYWwgaW5jciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWluY3JcIlxuZXh0ZXJuYWwgZGVjciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWRlY3JcIlxuXG4oKiBSZXN1bHQgdHlwZSAqKVxuXG50eXBlICgnYSwnYikgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnYlxuXG4oKiBTdHJpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG5sZXQgc3RyaW5nX29mX2Jvb2wgYiA9XG4gIGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxubGV0IGJvb2xfb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgXyAtPiBpbnZhbGlkX2FyZyBcImJvb2xfb2Zfc3RyaW5nXCJcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbiAgfCBfIC0+IE5vbmVcblxubGV0IHN0cmluZ19vZl9pbnQgbiA9XG4gIGZvcm1hdF9pbnQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5cbmxldCBpbnRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmV4dGVybmFsIHN0cmluZ19nZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuXG5sZXQgdmFsaWRfZmxvYXRfbGV4ZW0gcyA9XG4gIGxldCBsID0gc3RyaW5nX2xlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID49IGwgdGhlbiBzIF4gXCIuXCIgZWxzZVxuICAgIG1hdGNoIHN0cmluZ19nZXQgcyBpIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gbG9vcCAoaSArIDEpXG4gICAgfCBfIC0+IHNcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzdHJpbmdfb2ZfZmxvYXQgZiA9IHZhbGlkX2Zsb2F0X2xleGVtIChmb3JtYXRfZmxvYXQgXCIlLjEyZ1wiIGYpXG5cbmV4dGVybmFsIGZsb2F0X29mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxuXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCBzID1cbiAgKCogVE9ETzogcHJvdmlkZSB0aGlzIGRpcmVjdGx5IGFzIGEgbm9uLXJhaXNpbmcgcHJpbWl0aXZlLiAqKVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuKCogTGlzdCBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIExpc3QgKilcblxubGV0IHJlYyAoIEAgKSBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGhkIDo6IHRsIC0+IGhkIDo6ICh0bCBAIGwyKVxuXG4oKiBJL08gb3BlcmF0aW9ucyAqKVxuXG50eXBlIGluX2NoYW5uZWxcbnR5cGUgb3V0X2NoYW5uZWxcblxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX291dCA6IGludCAtPiBvdXRfY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XCJcbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9pbiA6IGludCAtPiBpbl9jaGFubmVsID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblwiXG5cbmxldCBzdGRpbiA9IG9wZW5fZGVzY3JpcHRvcl9pbiAwXG5sZXQgc3Rkb3V0ID0gb3Blbl9kZXNjcmlwdG9yX291dCAxXG5sZXQgc3RkZXJyID0gb3Blbl9kZXNjcmlwdG9yX291dCAyXG5cbigqIEdlbmVyYWwgb3V0cHV0IGZ1bmN0aW9ucyAqKVxuXG50eXBlIG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHkgfCBPcGVuX3dyb25seSB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdCB8IE9wZW5fdHJ1bmMgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeSB8IE9wZW5fdGV4dCB8IE9wZW5fbm9uYmxvY2tcblxuZXh0ZXJuYWwgb3Blbl9kZXNjIDogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuXG5leHRlcm5hbCBzZXRfb3V0X2NoYW5uZWxfbmFtZTogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX291dF9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9vdXQob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfb3V0X2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5fb3V0IG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX3RleHRdIDBvNjY2IG5hbWVcblxubGV0IG9wZW5fb3V0X2JpbiBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl9iaW5hcnldIDBvNjY2IG5hbWVcblxuZXh0ZXJuYWwgZmx1c2ggOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2ZsdXNoXCJcblxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxzX2xpc3QgOiB1bml0IC0+IG91dF9jaGFubmVsIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dF9jaGFubmVsc19saXN0XCJcblxubGV0IGZsdXNoX2FsbCAoKSA9XG4gIGxldCByZWMgaXRlciA9IGZ1bmN0aW9uXG4gICAgICBbXSAtPiAoKVxuICAgIHwgYTo6bCAtPlxuICAgICAgICBiZWdpbiB0cnlcbiAgICAgICAgICAgIGZsdXNoIGFcbiAgICAgICAgd2l0aCBTeXNfZXJyb3IgXyAtPlxuICAgICAgICAgICgpICgqIGlnbm9yZSBjaGFubmVscyBjbG9zZWQgZHVyaW5nIGEgcHJlY2VkaW5nIGZsdXNoLiAqKVxuICAgICAgICBlbmQ7XG4gICAgICAgIGl0ZXIgbFxuICBpbiBpdGVyIChvdXRfY2hhbm5lbHNfbGlzdCAoKSlcblxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dCA6IG91dF9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX291dHB1dF9zdHJpbmcgOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRwdXRcIlxuXG5leHRlcm5hbCBvdXRwdXRfY2hhciA6IG91dF9jaGFubmVsIC0+IGNoYXIgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5cbmxldCBvdXRwdXRfYnl0ZXMgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXQgb2MgcyAwIChieXRlc19sZW5ndGggcylcblxubGV0IG91dHB1dF9zdHJpbmcgb2MgcyA9XG4gIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgMCAoc3RyaW5nX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0IG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0XCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0IG9jIHMgb2ZzIGxlblxuXG5sZXQgb3V0cHV0X3N1YnN0cmluZyBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gc3RyaW5nX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRfc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIG9mcyBsZW5cblxuZXh0ZXJuYWwgb3V0cHV0X2J5dGUgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfY2hhclwiXG5leHRlcm5hbCBvdXRwdXRfYmluYXJ5X2ludCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9pbnRcIlxuXG5leHRlcm5hbCBtYXJzaGFsX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiB1bml0IGxpc3QgLT4gdW5pdFxuICAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVcIlxubGV0IG91dHB1dF92YWx1ZSBjaGFuIHYgPSBtYXJzaGFsX3RvX2NoYW5uZWwgY2hhbiB2IFtdXG5cbmV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRcIlxuZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3Nfb3V0XCJcbmV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2Vfb3V0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX291dCBvYyA9IGZsdXNoIG9jOyBjbG9zZV9vdXRfY2hhbm5lbCBvY1xubGV0IGNsb3NlX291dF9ub2VyciBvYyA9XG4gICh0cnkgZmx1c2ggb2Mgd2l0aCBfIC0+ICgpKTtcbiAgKHRyeSBjbG9zZV9vdXRfY2hhbm5lbCBvYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfb3V0IDogb3V0X2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIEdlbmVyYWwgaW5wdXQgZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIHNldF9pbl9jaGFubmVsX25hbWU6IGluX2NoYW5uZWwgLT4gc3RyaW5nIC0+IHVuaXQgPVxuICBcImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVwiXG5cbmxldCBvcGVuX2luX2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX2luKG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X2luX2NoYW5uZWxfbmFtZSBjIG5hbWU7XG4gIGNcblxubGV0IG9wZW5faW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl90ZXh0XSAwIG5hbWVcblxubGV0IG9wZW5faW5fYmluIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fYmluYXJ5XSAwIG5hbWVcblxuZXh0ZXJuYWwgaW5wdXRfY2hhciA6IGluX2NoYW5uZWwgLT4gY2hhciA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcblxuZXh0ZXJuYWwgdW5zYWZlX2lucHV0IDogaW5fY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2lucHV0XCJcblxubGV0IGlucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYyB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIGxlbiA8PSAwIHRoZW4gKCkgZWxzZSBiZWdpblxuICAgIGxldCByID0gdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlbiBpblxuICAgIGlmIHIgPSAwXG4gICAgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIChvZnMgKyByKSAobGVuIC0gcilcbiAgZW5kXG5cbmxldCByZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJyZWFsbHlfaW5wdXRcIlxuICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nIGljIGxlbiA9XG4gIGxldCBzID0gYnl0ZXNfY3JlYXRlIGxlbiBpblxuICByZWFsbHlfaW5wdXQgaWMgcyAwIGxlbjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbmV4dGVybmFsIGlucHV0X3NjYW5fbGluZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X3NjYW5fbGluZVwiXG5cbmxldCBpbnB1dF9saW5lIGNoYW4gPVxuICBsZXQgcmVjIGJ1aWxkX3Jlc3VsdCBidWYgcG9zID0gZnVuY3Rpb25cbiAgICBbXSAtPiBidWZcbiAgfCBoZCA6OiB0bCAtPlxuICAgICAgbGV0IGxlbiA9IGJ5dGVzX2xlbmd0aCBoZCBpblxuICAgICAgYnl0ZXNfYmxpdCBoZCAwIGJ1ZiAocG9zIC0gbGVuKSBsZW47XG4gICAgICBidWlsZF9yZXN1bHQgYnVmIChwb3MgLSBsZW4pIHRsIGluXG4gIGxldCByZWMgc2NhbiBhY2N1IGxlbiA9XG4gICAgbGV0IG4gPSBpbnB1dF9zY2FuX2xpbmUgY2hhbiBpblxuICAgIGlmIG4gPSAwIHRoZW4gYmVnaW4gICAgICAgICAgICAgICAgICAgKCogbiA9IDA6IHdlIGFyZSBhdCBFT0YgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByYWlzZSBFbmRfb2ZfZmlsZVxuICAgICAgfCBfICAtPiBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiBhY2N1XG4gICAgZW5kIGVsc2UgaWYgbiA+IDAgdGhlbiBiZWdpbiAgICAgICAgICAoKiBuID4gMDogbmV3bGluZSBmb3VuZCBpbiBidWZmZXIgKilcbiAgICAgIGxldCByZXMgPSBieXRlc19jcmVhdGUgKG4gLSAxKSBpblxuICAgICAgaWdub3JlICh1bnNhZmVfaW5wdXQgY2hhbiByZXMgMCAobiAtIDEpKTtcbiAgICAgIGlnbm9yZSAoaW5wdXRfY2hhciBjaGFuKTsgICAgICAgICAgICgqIHNraXAgdGhlIG5ld2xpbmUgKilcbiAgICAgIG1hdGNoIGFjY3Ugd2l0aFxuICAgICAgICBbXSAtPiByZXNcbiAgICAgIHwgIF8gLT4gbGV0IGxlbiA9IGxlbiArIG4gLSAxIGluXG4gICAgICAgICAgICAgIGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIChyZXMgOjogYWNjdSlcbiAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICgqIG4gPCAwOiBuZXdsaW5lIG5vdCBmb3VuZCAqKVxuICAgICAgbGV0IGJlZyA9IGJ5dGVzX2NyZWF0ZSAoLW4pIGluXG4gICAgICBpZ25vcmUodW5zYWZlX2lucHV0IGNoYW4gYmVnIDAgKC1uKSk7XG4gICAgICBzY2FuIChiZWcgOjogYWNjdSkgKGxlbiAtIG4pXG4gICAgZW5kXG4gIGluIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgKHNjYW4gW10gMClcblxuZXh0ZXJuYWwgaW5wdXRfYnl0ZSA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuZXh0ZXJuYWwgaW5wdXRfYmluYXJ5X2ludCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2lucHV0X2ludFwiXG5leHRlcm5hbCBpbnB1dF92YWx1ZSA6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pblwiXG5leHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9wb3NfaW5cIlxuZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVcIlxuZXh0ZXJuYWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2VfaW5fbm9lcnIgaWMgPSAodHJ5IGNsb3NlX2luIGljIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9pbiA6IGluX2NoYW5uZWwgLT4gYm9vbCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBvdXRwdXQgKilcblxubGV0IHByaW50X2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZG91dCBjXG5sZXQgcHJpbnRfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzXG5sZXQgcHJpbnRfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRvdXQgc1xubGV0IHByaW50X2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmludF9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByaW50X2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3Rkb3V0IHM7IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5sZXQgcHJpbnRfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZG91dCAnXFxuJzsgZmx1c2ggc3Rkb3V0XG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgZXJyb3IgKilcblxubGV0IHByZXJyX2NoYXIgYyA9IG91dHB1dF9jaGFyIHN0ZGVyciBjXG5sZXQgcHJlcnJfc3RyaW5nIHMgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzXG5sZXQgcHJlcnJfYnl0ZXMgcyA9IG91dHB1dF9ieXRlcyBzdGRlcnIgc1xubGV0IHByZXJyX2ludCBpID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9pbnQgaSlcbmxldCBwcmVycl9mbG9hdCBmID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgKHN0cmluZ19vZl9mbG9hdCBmKVxubGV0IHByZXJyX2VuZGxpbmUgcyA9XG4gIG91dHB1dF9zdHJpbmcgc3RkZXJyIHM7IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5sZXQgcHJlcnJfbmV3bGluZSAoKSA9IG91dHB1dF9jaGFyIHN0ZGVyciAnXFxuJzsgZmx1c2ggc3RkZXJyXG5cbigqIElucHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBpbnB1dCAqKVxuXG5sZXQgcmVhZF9saW5lICgpID0gZmx1c2ggc3Rkb3V0OyBpbnB1dF9saW5lIHN0ZGluXG5sZXQgcmVhZF9pbnQgKCkgPSBpbnRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfaW50X29wdCAoKSA9IGludF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXQgKCkgPSBmbG9hdF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdF9vcHQgKCkgPSBmbG9hdF9vZl9zdHJpbmdfb3B0KHJlYWRfbGluZSgpKVxuXG4oKiBPcGVyYXRpb25zIG9uIGxhcmdlIGZpbGVzICopXG5cbm1vZHVsZSBMYXJnZUZpbGUgPVxuICBzdHJ1Y3RcbiAgICBleHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19vdXRfNjRcIlxuICAgIGV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3Nfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICAgIGV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0IC0+IHVuaXQgPSBcImNhbWxfbWxfc2Vla19pbl82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9wb3NfaW5fNjRcIlxuICAgIGV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCA9IFwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcIlxuICBlbmRcblxuKCogRm9ybWF0cyAqKVxuXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2XG4gICA9ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NlxuICAgPSBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mbXRcbiAgICAgICAgICAgICAgICogc3RyaW5nXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcblxudHlwZSAoJ2EsICdiLCAnYykgZm9ybWF0ID0gKCdhLCAnYiwgJ2MsICdjKSBmb3JtYXQ0XG5cbmxldCBzdHJpbmdfb2ZfZm9ybWF0IChGb3JtYXQgKF9mbXQsIHN0cikpID0gc3RyXG5cbmV4dGVybmFsIGZvcm1hdF9vZl9zdHJpbmcgOlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5cbmxldCAoIF5eICkgKEZvcm1hdCAoZm10MSwgc3RyMSkpIChGb3JtYXQgKGZtdDIsIHN0cjIpKSA9XG4gIEZvcm1hdCAoQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmNvbmNhdF9mbXQgZm10MSBmbXQyLFxuICAgICAgICAgIHN0cjEgXiBcIiUsXCIgXiBzdHIyKVxuXG4oKiBNaXNjZWxsYW5lb3VzICopXG5cbmV4dGVybmFsIHN5c19leGl0IDogaW50IC0+ICdhID0gXCJjYW1sX3N5c19leGl0XCJcblxubGV0IGV4aXRfZnVuY3Rpb24gPSBDYW1saW50ZXJuYWxBdG9taWMubWFrZSBmbHVzaF9hbGxcblxubGV0IHJlYyBhdF9leGl0IGYgPVxuICBsZXQgbW9kdWxlIEF0b21pYyA9IENhbWxpbnRlcm5hbEF0b21pYyBpblxuICAoKiBNUFIjNzI1MywgTVBSIzc3OTY6IG1ha2Ugc3VyZSBcImZcIiBpcyBleGVjdXRlZCBvbmx5IG9uY2UgKilcbiAgbGV0IGZfeWV0X3RvX3J1biA9IEF0b21pYy5tYWtlIHRydWUgaW5cbiAgbGV0IG9sZF9leGl0ID0gQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uIGluXG4gIGxldCBuZXdfZXhpdCAoKSA9XG4gICAgaWYgQXRvbWljLmNvbXBhcmVfYW5kX3NldCBmX3lldF90b19ydW4gdHJ1ZSBmYWxzZSB0aGVuIGYgKCkgO1xuICAgIG9sZF9leGl0ICgpXG4gIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBleGl0X2Z1bmN0aW9uIG9sZF9leGl0IG5ld19leGl0IGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gYXRfZXhpdCBmXG5cbmxldCBkb19hdF9leGl0ICgpID0gKENhbWxpbnRlcm5hbEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbikgKClcblxubGV0IGV4aXQgcmV0Y29kZSA9XG4gIGRvX2F0X2V4aXQgKCk7XG4gIHN5c19leGl0IHJldGNvZGVcblxubGV0IF8gPSByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuZG9fYXRfZXhpdFwiIGRvX2F0X2V4aXRcblxuZXh0ZXJuYWwgbWFqb3IgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZ2NfbWFqb3JcIlxuZXh0ZXJuYWwgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCA6IHVuaXQgLT4gYm9vbFxuICA9IFwiY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZFwiXG5sZXQgKCkgPSBpZiBuYWtlZF9wb2ludGVyc19jaGVja2VkICgpIHRoZW4gYXRfZXhpdCBtYWpvclxuXG4oKk1PRFVMRV9BTElBU0VTKilcbm1vZHVsZSBBcmcgICAgICAgICAgPSBBcmdcbm1vZHVsZSBBcnJheSAgICAgICAgPSBBcnJheVxubW9kdWxlIEFycmF5TGFiZWxzICA9IEFycmF5TGFiZWxzXG5tb2R1bGUgQXRvbWljICAgICAgID0gQXRvbWljXG5tb2R1bGUgQmlnYXJyYXkgICAgID0gQmlnYXJyYXlcbm1vZHVsZSBCb29sICAgICAgICAgPSBCb29sXG5tb2R1bGUgQnVmZmVyICAgICAgID0gQnVmZmVyXG5tb2R1bGUgQnl0ZXMgICAgICAgID0gQnl0ZXNcbm1vZHVsZSBCeXRlc0xhYmVscyAgPSBCeXRlc0xhYmVsc1xubW9kdWxlIENhbGxiYWNrICAgICA9IENhbGxiYWNrXG5tb2R1bGUgQ2hhciAgICAgICAgID0gQ2hhclxubW9kdWxlIENvbXBsZXggICAgICA9IENvbXBsZXhcbm1vZHVsZSBEaWdlc3QgICAgICAgPSBEaWdlc3Rcbm1vZHVsZSBFaXRoZXIgICAgICAgPSBFaXRoZXJcbm1vZHVsZSBFcGhlbWVyb24gICAgPSBFcGhlbWVyb25cbm1vZHVsZSBGaWxlbmFtZSAgICAgPSBGaWxlbmFtZVxubW9kdWxlIEZsb2F0ICAgICAgICA9IEZsb2F0XG5tb2R1bGUgRm9ybWF0ICAgICAgID0gRm9ybWF0XG5tb2R1bGUgRnVuICAgICAgICAgID0gRnVuXG5tb2R1bGUgR2MgICAgICAgICAgID0gR2Ncbm1vZHVsZSBHZW5sZXggICAgICAgPSBHZW5sZXhcbm1vZHVsZSBIYXNodGJsICAgICAgPSBIYXNodGJsXG5tb2R1bGUgSW5fY2hhbm5lbCAgID0gSW5fY2hhbm5lbFxubW9kdWxlIEludCAgICAgICAgICA9IEludFxubW9kdWxlIEludDMyICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgID0gSW50NjRcbm1vZHVsZSBMYXp5ICAgICAgICAgPSBMYXp5XG5tb2R1bGUgTGV4aW5nICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgID0gTGlzdFxubW9kdWxlIExpc3RMYWJlbHMgICA9IExpc3RMYWJlbHNcbm1vZHVsZSBNYXAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgPSBNYXJzaGFsXG5tb2R1bGUgTW9yZUxhYmVscyAgID0gTW9yZUxhYmVsc1xubW9kdWxlIE5hdGl2ZWludCAgICA9IE5hdGl2ZWludFxubW9kdWxlIE9iaiAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICA9IE9vXG5tb2R1bGUgT3B0aW9uICAgICAgID0gT3B0aW9uXG5tb2R1bGUgT3V0X2NoYW5uZWwgID0gT3V0X2NoYW5uZWxcbm1vZHVsZSBQYXJzaW5nICAgICAgPSBQYXJzaW5nXG5tb2R1bGUgUGVydmFzaXZlcyAgID0gUGVydmFzaXZlc1xubW9kdWxlIFByaW50ZXhjICAgICA9IFByaW50ZXhjXG5tb2R1bGUgUHJpbnRmICAgICAgID0gUHJpbnRmXG5tb2R1bGUgUXVldWUgICAgICAgID0gUXVldWVcbm1vZHVsZSBSYW5kb20gICAgICAgPSBSYW5kb21cbm1vZHVsZSBSZXN1bHQgICAgICAgPSBSZXN1bHRcbm1vZHVsZSBTY2FuZiAgICAgICAgPSBTY2FuZlxubW9kdWxlIFNlcSAgICAgICAgICA9IFNlcVxubW9kdWxlIFNldCAgICAgICAgICA9IFNldFxubW9kdWxlIFN0YWNrICAgICAgICA9IFN0YWNrXG5tb2R1bGUgU3RkTGFiZWxzICAgID0gU3RkTGFiZWxzXG5tb2R1bGUgU3RyZWFtICAgICAgID0gU3RyZWFtXG5tb2R1bGUgU3RyaW5nICAgICAgID0gU3RyaW5nXG5tb2R1bGUgU3RyaW5nTGFiZWxzID0gU3RyaW5nTGFiZWxzXG5tb2R1bGUgU3lzICAgICAgICAgID0gU3lzXG5tb2R1bGUgVWNoYXIgICAgICAgID0gVWNoYXJcbm1vZHVsZSBVbml0ICAgICAgICAgPSBVbml0XG5tb2R1bGUgV2VhayAgICAgICAgID0gV2Vha1xuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuaW5jbHVkZSBJbnRcblxudHlwZSB0ID0gaW50XG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmxldCBhZGQgPSAoICsgKVxubGV0IHN1YiA9ICggLSApXG5sZXQgbXVsID0gKCAqIClcbmxldCBkaXYgPSAoIC8gKVxubGV0IHN1Y2MgPSBzdWNjXG5sZXQgcHJlZCA9IHByZWRcbmxldCBhYnMgPSBhYnNcbmxldCBtYXhfaW50ID0gbWF4X2ludFxubGV0IG1pbl9pbnQgPSBtaW5faW50XG5sZXQgZXF1YWwgKGEgOiBpbnQpIGIgPSBTdGRsaWIuKCA9ICkgYSBiXG5sZXQgY29tcGFyZSAoYSA6IGludCkgYiA9IGNvbXBhcmUgYSBiXG5cbigqIHVzZSBGTlY6XG4gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Gb3dsZXIlRTIlODAlOTNOb2xsJUUyJTgwJTkzVm9faGFzaF9mdW5jdGlvbiAqKVxubGV0IGhhc2ggKG4gOiBpbnQpIDogaW50ID1cbiAgbGV0IG9mZnNldF9iYXNpcyA9IDB4Y2JmMjljZTQ4NDIyMjMyNUwgaW5cbiAgbGV0IHByaW1lID0gMHgxMDAwMDAwMDFiM0wgaW5cblxuICBsZXQgaCA9IHJlZiBvZmZzZXRfYmFzaXMgaW5cbiAgZm9yIGsgPSAwIHRvIDcgZG9cbiAgICAoaCA6PSBJbnQ2NC4obXVsICFoIHByaW1lKSk7XG4gICAgKCogaCA6PSBoIHhvciAoay10aCBieXRlIG9mIG4pICopXG4gICAgaCA6PSBJbnQ2NC4obG9neG9yICFoIChvZl9pbnQgKChuIGxzciAoayAqIDgpKSBsYW5kIDB4ZmYpKSlcbiAgZG9uZTtcbiAgKCogdHJ1bmNhdGUgYmFjayB0byBpbnQgYW5kIHJlbW92ZSBzaWduICopXG4gIEludDY0LnRvX2ludCAhaCBsYW5kIG1heF9pbnRcblxubGV0IHJhbmdlIGkgaiB5aWVsZCA9XG4gIGxldCByZWMgdXAgaSBqIHlpZWxkID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICB5aWVsZCBpXG4gICAgZWxzZSAoXG4gICAgICB5aWVsZCBpO1xuICAgICAgdXAgKGkgKyAxKSBqIHlpZWxkXG4gICAgKVxuICBhbmQgZG93biBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICBkb3duIChpIC0gMSkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogeWllbGRcbiAgZWxzZVxuICAgIGRvd24gaSBqIHlpZWxkXG5cbmxldCByYW5nZScgaSBqIHlpZWxkID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKSB5aWVsZFxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpIHlpZWxkXG5cbmxldCBzaWduIGkgPSBjb21wYXJlIGkgMFxubGV0IG5lZyBpID0gLWlcblxubGV0IHBvdyBhIGIgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgMSAtPiBhY2NcbiAgICB8IG4gLT5cbiAgICAgIGlmIG4gbW9kIDIgPSAwIHRoZW5cbiAgICAgICAgYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgICAgIGVsc2VcbiAgICAgICAgYWNjICogYXV4IChhY2MgKiBhY2MpIChuIC8gMilcbiAgaW5cbiAgbWF0Y2ggYiB3aXRoXG4gIHwgMCAtPlxuICAgIGlmIGEgPSAwIHRoZW5cbiAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiB1bmRlZmluZWQgdmFsdWUgMF4wXCIpXG4gICAgZWxzZVxuICAgICAgMVxuICB8IGIgd2hlbiBiIDwgMCAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwicG93OiBjYW4ndCByYWlzZSBpbnQgdG8gbmVnYXRpdmUgcG93ZXJcIilcbiAgfCBiIC0+IGF1eCBhIGJcblxubW9kdWxlIEluZml4IDogc2lnXG4gIHZhbCAoID0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA8PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPj0gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIC0tICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoIC0tXiApIDogdCAtPiB0IC0+IHQgaXRlclxuICB2YWwgKCArICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCAtICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCB+LSApIDogdCAtPiB0XG4gIHZhbCAoICogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC8gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoICoqICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBtb2QgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxhbmQgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIGxvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbHhvciApIDogdCAtPiB0IC0+IHRcbiAgdmFsIGxub3QgOiB0IC0+IHRcbiAgdmFsICggbHNsICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGxzciApIDogdCAtPiBpbnQgLT4gdFxuICB2YWwgKCBhc3IgKSA6IHQgLT4gaW50IC0+IHRcbmVuZCA9IHN0cnVjdFxuICBpbmNsdWRlIFN0ZGxpYlxuXG4gIGxldCAoIC0tICkgPSByYW5nZVxuICBsZXQgKCAtLV4gKSA9IHJhbmdlJ1xuICBsZXQgKCAqKiApID0gcG93XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG5sZXQgbWluIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWluXG5sZXQgbWF4IDogdCAtPiB0IC0+IHQgPSBTdGRsaWIubWF4XG5cbmxldCBmbG9vcl9kaXYgYSBuID1cbiAgaWYgYSA8IDAgJiYgbiA+PSAwIHRoZW5cbiAgICAoKGEgKyAxKSAvIG4pIC0gMVxuICBlbHNlIGlmIGEgPiAwICYmIG4gPCAwIHRoZW5cbiAgICAoKGEgLSAxKSAvIG4pIC0gMVxuICBlbHNlXG4gICAgYSAvIG5cblxubGV0IGJvb2xfbmVxIChhIDogYm9vbCkgYiA9IFN0ZGxpYi4oIDw+ICkgYSBiXG5cbmxldCByZW0gYSBuID1cbiAgbGV0IHkgPSBhIG1vZCBuIGluXG4gIGlmIGJvb2xfbmVxICh5IDwgMCkgKG4gPCAwKSAmJiB5IDw+IDAgdGhlblxuICAgIHkgKyBuXG4gIGVsc2VcbiAgICB5XG5cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBuIHN0ID0gUmFuZG9tLlN0YXRlLmludCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMFxubGV0IHJhbmRvbV9yYW5nZSBpIGogc3QgPSBpICsgcmFuZG9tIChqIC0gaSkgc3RcbmxldCBwcCBmbXQgPSBGb3JtYXQucHBfcHJpbnRfaW50IGZtdFxubGV0IG1vc3Rfc2lnbmlmaWNhbnRfYml0ID0gLTEgbHhvciAoLTEgbHNyIDEpXG5sZXQgdG9fc3RyaW5nID0gc3RyaW5nX29mX2ludFxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxubGV0IG9mX3N0cmluZ19leG4gPSBTdGRsaWIuaW50X29mX3N0cmluZ1xubGV0IHRvX2Zsb2F0ID0gZmxvYXRfb2ZfaW50XG5sZXQgb2ZfZmxvYXQgPSBpbnRfb2ZfZmxvYXRcblxudHlwZSBvdXRwdXQgPSBjaGFyIC0+IHVuaXRcblxuKCogYWJzdHJhY3QgcHJpbnRlciAqKVxubGV0IHRvX2JpbmFyeV9nZW4gKG91dCA6IG91dHB1dCkgbiA9XG4gIGxldCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIChcbiAgICAgIG91dCAnLSc7XG4gICAgICAtblxuICAgICkgZWxzZVxuICAgICAgblxuICBpblxuICBvdXQgJzAnO1xuICBvdXQgJ2InO1xuICBsZXQgcmVjIGxvb3Agc3RhcnRlZCBiaXQgbiA9XG4gICAgaWYgYml0ID0gMCB0aGVuIChcbiAgICAgIGlmIG5vdCBzdGFydGVkIHRoZW4gb3V0ICcwJ1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgYiA9IG4gbGFuZCBiaXQgaW5cbiAgICAgIGlmIGIgPSAwIHRoZW4gKFxuICAgICAgICBpZiBzdGFydGVkIHRoZW4gb3V0ICcwJztcbiAgICAgICAgbG9vcCBzdGFydGVkIChiaXQgbHNyIDEpIG5cbiAgICAgICkgZWxzZSAoXG4gICAgICAgIG91dCAnMSc7XG4gICAgICAgIGxvb3AgdHJ1ZSAoYml0IGxzciAxKSBuXG4gICAgICApXG4gICAgKVxuICBpblxuICBsb29wIGZhbHNlIG1vc3Rfc2lnbmlmaWNhbnRfYml0IG5cblxubGV0IHBwX2JpbmFyeSBvdXQgbiA9IHRvX2JpbmFyeV9nZW4gKEZvcm1hdC5wcF9wcmludF9jaGFyIG91dCkgblxuXG5sZXQgdG9fc3RyaW5nX2JpbmFyeSBuID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgdG9fYmluYXJ5X2dlbiAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbjtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyByYW5nZSBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICByYW5nZSAoaSArIHN0ZXApIGogeWllbGRcbiAgICApXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDSW50LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICAoKVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSB5aWVsZFxuXG4oKlxuICBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhbW1pbmdfd2VpZ2h0XG5cbiAgLy9UaGlzIHVzZXMgZmV3ZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zIHRoYW4gYW55IG90aGVyIGtub3duXG4gIC8vaW1wbGVtZW50YXRpb24gb24gbWFjaGluZXMgd2l0aCBzbG93IG11bHRpcGxpY2F0aW9uLlxuICAvL0l0IHVzZXMgMTcgYXJpdGhtZXRpYyBvcGVyYXRpb25zLlxuICBpbnQgcG9wY291bnRfMih1aW50NjRfdCB4KSB7XG4gICAgeCAtPSAoeCA+PiAxKSAmIG0xOyAgICAgICAgICAgICAvL3B1dCBjb3VudCBvZiBlYWNoIDIgYml0cyBpbnRvIHRob3NlIDIgYml0c1xuICAgIHggPSAoeCAmIG0yKSArICgoeCA+PiAyKSAmIG0yKTsgLy9wdXQgY291bnQgb2YgZWFjaCA0IGJpdHMgaW50byB0aG9zZSA0IGJpdHNcbiAgICB4ID0gKHggKyAoeCA+PiA0KSkgJiBtNDsgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggOCBiaXRzIGludG8gdGhvc2UgOCBiaXRzXG4gICAgeCArPSB4ID4+ICA4OyAgLy9wdXQgY291bnQgb2YgZWFjaCAxNiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAxNjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggMzIgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICB4ICs9IHggPj4gMzI7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDY0IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgcmV0dXJuIHggJiAweDdmO1xuICB9XG5cbiAgIG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1XG4gICBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM1xuICAgbTQgPSAweDBmMGYwZjBmMGYwZjBmMGZcbiopXG5sZXQgcG9wY291bnQgKGIgOiBpbnQpIDogaW50ID1cbiAgbGV0IG0xID0gMHg1NTU1NTU1NTU1NTU1NTU1TCBpblxuICBsZXQgbTIgPSAweDMzMzMzMzMzMzMzMzMzMzNMIGluXG4gIGxldCBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZkwgaW5cbiAgbGV0IG9wZW4gSW50NjQgaW5cbiAgbGV0IGIgPSBvZl9pbnQgYiBpblxuICAoKiBpbnQtPmludDY0ICopXG4gIGxldCBiID0gbG9nYW5kIGIgMHg3ZmZmZmZmZmZmZmZmZmZmTCBpblxuXG4gICgqIHJlbW92ZSBzaWduIGJpdCwgd2UgZGVhbCB3aXRoIHVpbnQ2NCBoZXJlICopXG4gIGxldCBiID0gc3ViIGIgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDEpIG0xKSBpblxuICBsZXQgYiA9IGFkZCAobG9nYW5kIGIgbTIpIChsb2dhbmQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAyKSBtMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgKGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgNCkpIG00IGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA4KSBpblxuICBsZXQgYiA9IGFkZCBiIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMTYpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAzMikgaW5cbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmTCBpblxuICB0b19pbnQgYlxuXG5sZXQgbG9nYW5kID0gKCBsYW5kIClcbmxldCBsb2dvciA9ICggbG9yIClcbmxldCBsb2d4b3IgPSAoIGx4b3IgKVxubGV0IGxvZ25vdCA9IGxub3RcbmxldCBzaGlmdF9sZWZ0ID0gKCBsc2wgKVxubGV0IHNoaWZ0X3JpZ2h0ID0gKCBhc3IgKVxubGV0IHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgPSAoIGxzciApXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICAgVGhpcyBpcyBhIGxhZ2dlZC1GaWJvbmFjY2kgRig1NSwgMjQsICspIHdpdGggYSBtb2RpZmllZCBhZGRpdGlvblxuICAgZnVuY3Rpb24gdG8gZW5oYW5jZSB0aGUgbWl4aW5nIG9mIGJpdHMuXG4gICBJZiB3ZSB1c2Ugbm9ybWFsIGFkZGl0aW9uLCB0aGUgbG93LW9yZGVyIGJpdCBmYWlscyB0ZXN0cyAxIGFuZCA3XG4gICBvZiB0aGUgRGllaGFyZCB0ZXN0IHN1aXRlLCBhbmQgYml0cyAxIGFuZCAyIGFsc28gZmFpbCB0ZXN0IDcuXG4gICBJZiB3ZSB1c2UgbXVsdGlwbGljYXRpb24gYXMgc3VnZ2VzdGVkIGJ5IE1hcnNhZ2xpYSwgaXQgZG9lc24ndCBmYXJlXG4gICBtdWNoIGJldHRlci5cbiAgIEJ5IG1peGluZyB0aGUgYml0cyBvZiBvbmUgb2YgdGhlIG51bWJlcnMgYmVmb3JlIGFkZGl0aW9uIChYT1IgdGhlXG4gICA1IGhpZ2gtb3JkZXIgYml0cyBpbnRvIHRoZSBsb3ctb3JkZXIgYml0cyksIHdlIGdldCBhIGdlbmVyYXRvciB0aGF0XG4gICBwYXNzZXMgYWxsIHRoZSBEaWVoYXJkIHRlc3RzLlxuKilcblxuZXh0ZXJuYWwgcmFuZG9tX3NlZWQ6IHVuaXQgLT4gaW50IGFycmF5ID0gXCJjYW1sX3N5c19yYW5kb21fc2VlZFwiXG5cbm1vZHVsZSBTdGF0ZSA9IHN0cnVjdFxuXG4gIHR5cGUgdCA9IHsgc3QgOiBpbnQgYXJyYXk7IG11dGFibGUgaWR4IDogaW50IH1cblxuICBsZXQgbmV3X3N0YXRlICgpID0geyBzdCA9IEFycmF5Lm1ha2UgNTUgMDsgaWR4ID0gMCB9XG4gIGxldCBhc3NpZ24gc3QxIHN0MiA9XG4gICAgQXJyYXkuYmxpdCBzdDIuc3QgMCBzdDEuc3QgMCA1NTtcbiAgICBzdDEuaWR4IDwtIHN0Mi5pZHhcblxuXG4gIGxldCBmdWxsX2luaXQgcyBzZWVkID1cbiAgICBsZXQgY29tYmluZSBhY2N1IHggPSBEaWdlc3Quc3RyaW5nIChhY2N1IF4gSW50LnRvX3N0cmluZyB4KSBpblxuICAgIGxldCBleHRyYWN0IGQgPVxuICAgICAgQ2hhci5jb2RlIGQuWzBdICsgKENoYXIuY29kZSBkLlsxXSBsc2wgOCkgKyAoQ2hhci5jb2RlIGQuWzJdIGxzbCAxNilcbiAgICAgICsgKENoYXIuY29kZSBkLlszXSBsc2wgMjQpXG4gICAgaW5cbiAgICBsZXQgc2VlZCA9IGlmIEFycmF5Lmxlbmd0aCBzZWVkID0gMCB0aGVuIFt8IDAgfF0gZWxzZSBzZWVkIGluXG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggc2VlZCBpblxuICAgIGZvciBpID0gMCB0byA1NCBkb1xuICAgICAgcy5zdC4oaSkgPC0gaTtcbiAgICBkb25lO1xuICAgIGxldCBhY2N1ID0gcmVmIFwieFwiIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0ICsgSW50Lm1heCA1NSBsIGRvXG4gICAgICBsZXQgaiA9IGkgbW9kIDU1IGluXG4gICAgICBsZXQgayA9IGkgbW9kIGwgaW5cbiAgICAgIGFjY3UgOj0gY29tYmluZSAhYWNjdSBzZWVkLihrKTtcbiAgICAgIHMuc3QuKGopIDwtIChzLnN0LihqKSBseG9yIGV4dHJhY3QgIWFjY3UpIGxhbmQgMHgzRkZGRkZGRjsgICgqIFBSIzU1NzUgKilcbiAgICBkb25lO1xuICAgIHMuaWR4IDwtIDBcblxuXG4gIGxldCBtYWtlIHNlZWQgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBmdWxsX2luaXQgcmVzdWx0IHNlZWQ7XG4gICAgcmVzdWx0XG5cblxuICBsZXQgbWFrZV9zZWxmX2luaXQgKCkgPSBtYWtlIChyYW5kb21fc2VlZCAoKSlcblxuICBsZXQgY29weSBzID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgYXNzaWduIHJlc3VsdCBzO1xuICAgIHJlc3VsdFxuXG5cbiAgKCogUmV0dXJucyAzMCByYW5kb20gYml0cyBhcyBhbiBpbnRlZ2VyIDAgPD0geCA8IDEwNzM3NDE4MjQgKilcbiAgbGV0IGJpdHMgcyA9XG4gICAgcy5pZHggPC0gKHMuaWR4ICsgMSkgbW9kIDU1O1xuICAgIGxldCBjdXJ2YWwgPSBzLnN0LihzLmlkeCkgaW5cbiAgICBsZXQgbmV3dmFsID0gcy5zdC4oKHMuaWR4ICsgMjQpIG1vZCA1NSlcbiAgICAgICAgICAgICAgICAgKyAoY3VydmFsIGx4b3IgKChjdXJ2YWwgbHNyIDI1KSBsYW5kIDB4MUYpKSBpblxuICAgIGxldCBuZXd2YWwzMCA9IG5ld3ZhbCBsYW5kIDB4M0ZGRkZGRkYgaW4gICgqIFBSIzU1NzUgKilcbiAgICBzLnN0LihzLmlkeCkgPC0gbmV3dmFsMzA7XG4gICAgbmV3dmFsMzBcblxuXG4gIGxldCByZWMgaW50YXV4IHMgbiA9XG4gICAgbGV0IHIgPSBiaXRzIHMgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IDB4M0ZGRkZGRkYgLSBuICsgMSB0aGVuIGludGF1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgfHwgYm91bmQgPD0gMFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50XCJcbiAgICBlbHNlIGludGF1eCBzIGJvdW5kXG5cbiAgbGV0IHJlYyBpbnQ2M2F1eCBzIG4gPVxuICAgIGxldCBtYXhfaW50XzMyID0gKDEgbHNsIDMwKSArIDB4M0ZGRkZGRkYgaW4gKCogMHg3RkZGRkZGRiAqKVxuICAgIGxldCBiMSA9IGJpdHMgcyBpblxuICAgIGxldCBiMiA9IGJpdHMgcyBpblxuICAgIGxldCAociwgbWF4X2ludCkgPVxuICAgICAgaWYgbiA8PSBtYXhfaW50XzMyIHRoZW5cbiAgICAgICAgKCogMzEgcmFuZG9tIGJpdHMgb24gYm90aCA2NC1iaXQgT0NhbWwgYW5kIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAxNSBiaXRzIG9mIGIxIGFuZCAxNiBiaXRzIG9mIGIyLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoYjIgbGFuZCAweDNGRkZDMDAwKSBsc2wgMSkgbG9yIChiMSBsc3IgMTUpKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50XzMyKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgYjMgPSBiaXRzIHMgaW5cbiAgICAgICAgKCogNjIgcmFuZG9tIGJpdHMgb24gNjQtYml0IE9DYW1sOyB1bnJlYWNoYWJsZSBvbiBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMjAgYml0cyBvZiBiMSBhbmQgMjEgYml0cyBvZiBiMiBhbmQgYjMuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKCgoYjMgbGFuZCAweDNGRkZGRTAwKSBsc2wgMTIpIGxvciAoYjIgbHNyIDkpKSBsc2wgMjApXG4gICAgICAgICAgICBsb3IgKGIxIGxzciAxMClcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludClcbiAgICBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gbWF4X2ludCAtIG4gKyAxIHRoZW4gaW50NjNhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBmdWxsX2ludCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiUmFuZG9tLmZ1bGxfaW50XCJcbiAgICBlbHNlIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB0aGVuXG4gICAgICBpbnQ2M2F1eCBzIGJvdW5kXG4gICAgZWxzZVxuICAgICAgaW50YXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50MzJhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQzMi5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQzMi5zaGlmdF9sZWZ0IChJbnQzMi5vZl9pbnQgKGJpdHMgcyBsYW5kIDEpKSAzMCBpblxuICAgIGxldCByID0gSW50MzIubG9nb3IgYjEgYjIgaW5cbiAgICBsZXQgdiA9IEludDMyLnJlbSByIG4gaW5cbiAgICBpZiBJbnQzMi5zdWIgciB2ID4gSW50MzIuYWRkIChJbnQzMi5zdWIgSW50MzIubWF4X2ludCBuKSAxbFxuICAgIHRoZW4gaW50MzJhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDMyIHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQzMlwiXG4gICAgZWxzZSBpbnQzMmF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDY0YXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50NjQub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMpKSAzMCBpblxuICAgIGxldCBiMyA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzIGxhbmQgNykpIDYwIGluXG4gICAgbGV0IHIgPSBJbnQ2NC5sb2dvciBiMSAoSW50NjQubG9nb3IgYjIgYjMpIGluXG4gICAgbGV0IHYgPSBJbnQ2NC5yZW0gciBuIGluXG4gICAgaWYgSW50NjQuc3ViIHIgdiA+IEludDY0LmFkZCAoSW50NjQuc3ViIEludDY0Lm1heF9pbnQgbikgMUxcbiAgICB0aGVuIGludDY0YXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQ2NCBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwTFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50NjRcIlxuICAgIGVsc2UgaW50NjRhdXggcyBib3VuZFxuXG5cbiAgbGV0IG5hdGl2ZWludCA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgYm91bmQgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChpbnQzMiBzIChOYXRpdmVpbnQudG9faW50MzIgYm91bmQpKVxuICAgIGVsc2UgZnVuIHMgYm91bmQgLT4gSW50NjQudG9fbmF0aXZlaW50IChpbnQ2NCBzIChJbnQ2NC5vZl9uYXRpdmVpbnQgYm91bmQpKVxuXG5cbiAgKCogUmV0dXJucyBhIGZsb2F0IDAgPD0geCA8PSAxIHdpdGggYXQgbW9zdCA2MCBiaXRzIG9mIHByZWNpc2lvbi4gKilcbiAgbGV0IHJhd2Zsb2F0IHMgPVxuICAgIGxldCBzY2FsZSA9IDEwNzM3NDE4MjQuMCAgKCogMl4zMCAqKVxuICAgIGFuZCByMSA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGFuZCByMiA9IFN0ZGxpYi5mbG9hdCAoYml0cyBzKVxuICAgIGluIChyMSAvLiBzY2FsZSArLiByMikgLy4gc2NhbGVcblxuXG4gIGxldCBmbG9hdCBzIGJvdW5kID0gcmF3ZmxvYXQgcyAqLiBib3VuZFxuXG4gIGxldCBib29sIHMgPSAoYml0cyBzIGxhbmQgMSA9IDApXG5cbiAgbGV0IGJpdHMzMiBzID1cbiAgICBsZXQgYjEgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQzMi4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSAxNCkgaW4gICgqIDE2IGJpdHMgKilcbiAgICBJbnQzMi4obG9nb3IgYjEgKHNoaWZ0X2xlZnQgYjIgMTYpKVxuXG4gIGxldCBiaXRzNjQgcyA9XG4gICAgbGV0IGIxID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOSkgaW4gICgqIDIxIGJpdHMgKilcbiAgICBsZXQgYjIgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMyA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDgpIGluICAoKiAyMiBiaXRzICopXG4gICAgSW50NjQuKGxvZ29yIGIxIChsb2dvciAoc2hpZnRfbGVmdCBiMiAyMSkgKHNoaWZ0X2xlZnQgYjMgNDIpKSlcblxuICBsZXQgbmF0aXZlYml0cyA9XG4gICAgaWYgTmF0aXZlaW50LnNpemUgPSAzMlxuICAgIHRoZW4gZnVuIHMgLT4gTmF0aXZlaW50Lm9mX2ludDMyIChiaXRzMzIgcylcbiAgICBlbHNlIGZ1biBzIC0+IEludDY0LnRvX25hdGl2ZWludCAoYml0czY0IHMpXG5cbmVuZFxuXG4oKiBUaGlzIGlzIHRoZSBzdGF0ZSB5b3UgZ2V0IHdpdGggW2luaXQgMjcxODI4MThdIGFuZCB0aGVuIGFwcGx5aW5nXG4gICB0aGUgXCJsYW5kIDB4M0ZGRkZGRkZcIiBmaWx0ZXIgdG8gdGhlbS4gIFNlZSAjNTU3NSwgIzU3OTMsICM1OTc3LiAqKVxubGV0IGRlZmF1bHQgPSB7XG4gIFN0YXRlLnN0ID0gW3xcbiAgICAgIDB4M2FlMjUyMmI7IDB4MWQ4ZDQ2MzQ7IDB4MTViNGZhZDA7IDB4MThiMTRhY2U7IDB4MTJmOGEzYzQ7IDB4M2IwODZjNDc7XG4gICAgICAweDE2ZDQ2N2Q2OyAweDEwMWQ5MWM3OyAweDMyMWRmMTc3OyAweDAxNzZjMTkzOyAweDFmZjcyYmYxOyAweDFlODg5MTA5O1xuICAgICAgMHgwYjQ2NGIxODsgMHgyYjg2Yjk3YzsgMHgwODkxZGE0ODsgMHgwMzEzNzQ2MzsgMHgwODVhYzVhMTsgMHgxNWQ2MWYyZjtcbiAgICAgIDB4M2JjZWQzNTk7IDB4MjljMWMxMzI7IDB4M2E4Njc2NmU7IDB4MzY2ZDhjODY7IDB4MWY1YjYyMjI7IDB4M2NlMWI1OWY7XG4gICAgICAweDJlYmY3OGUxOyAweDI3Y2QxYjg2OyAweDI1OGYzZGMzOyAweDM4OWE4MTk0OyAweDAyZTRjNDRjOyAweDE4YzQzZjdkO1xuICAgICAgMHgwZjZlNTM0ZjsgMHgxZTdkZjM1OTsgMHgwNTVkMGI3ZTsgMHgxMGU4NGU3ZTsgMHgxMjYxOThlNDsgMHgwZTc3MjJjYjtcbiAgICAgIDB4MWNiZWRlMjg7IDB4MzM5MWI5NjQ7IDB4M2Q0MGU5MmE7IDB4MGM1OTkzM2Q7IDB4MGI4Y2QwYjc7IDB4MjRlZmZmMWM7XG4gICAgICAweDI4MDNmZGFhOyAweDA4ZWJjNzJlOyAweDBmNTIyZTMyOyAweDA1Mzk4ZWRjOyAweDIxNDRhMDRjOyAweDBhZWYzY2JkO1xuICAgICAgMHgwMWFkNDcxOTsgMHgzNWI5M2NkNjsgMHgyYTU1OWQ0ZjsgMHgxZTZmZDc2ODsgMHgyNmUyN2YzNjsgMHgxODZmMThjMztcbiAgICAgIDB4MmZiZjk2N2E7XG4gICAgfF07XG4gIFN0YXRlLmlkeCA9IDA7XG59XG5cbmxldCBiaXRzICgpID0gU3RhdGUuYml0cyBkZWZhdWx0XG5sZXQgaW50IGJvdW5kID0gU3RhdGUuaW50IGRlZmF1bHQgYm91bmRcbmxldCBmdWxsX2ludCBib3VuZCA9IFN0YXRlLmZ1bGxfaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQzMiBib3VuZCA9IFN0YXRlLmludDMyIGRlZmF1bHQgYm91bmRcbmxldCBuYXRpdmVpbnQgYm91bmQgPSBTdGF0ZS5uYXRpdmVpbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDY0IGJvdW5kID0gU3RhdGUuaW50NjQgZGVmYXVsdCBib3VuZFxubGV0IGZsb2F0IHNjYWxlID0gU3RhdGUuZmxvYXQgZGVmYXVsdCBzY2FsZVxubGV0IGJvb2wgKCkgPSBTdGF0ZS5ib29sIGRlZmF1bHRcbmxldCBiaXRzMzIgKCkgPSBTdGF0ZS5iaXRzMzIgZGVmYXVsdFxubGV0IGJpdHM2NCAoKSA9IFN0YXRlLmJpdHM2NCBkZWZhdWx0XG5sZXQgbmF0aXZlYml0cyAoKSA9IFN0YXRlLm5hdGl2ZWJpdHMgZGVmYXVsdFxuXG5sZXQgZnVsbF9pbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBzZWVkXG5sZXQgaW5pdCBzZWVkID0gU3RhdGUuZnVsbF9pbml0IGRlZmF1bHQgW3wgc2VlZCB8XVxubGV0IHNlbGZfaW5pdCAoKSA9IGZ1bGxfaW5pdCAocmFuZG9tX3NlZWQoKSlcblxuKCogTWFuaXB1bGF0aW5nIHRoZSBjdXJyZW50IHN0YXRlLiAqKVxuXG5sZXQgZ2V0X3N0YXRlICgpID0gU3RhdGUuY29weSBkZWZhdWx0XG5sZXQgc2V0X3N0YXRlIHMgPSBTdGF0ZS5hc3NpZ24gZGVmYXVsdCBzXG5cbigqKioqKioqKioqKioqKioqKioqKlxuXG4oKiBUZXN0IGZ1bmN0aW9ucy4gIE5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgIFRoZSBbY2hpc3F1YXJlXSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbiA+IDEwci5cbiAgIEl0IHJldHVybnMgYSB0cmlwbGUgKGxvdywgYWN0dWFsLCBoaWdoKS5cbiAgIElmIGxvdyA8PSBhY3R1YWwgPD0gaGlnaCwgdGhlIFtnXSBmdW5jdGlvbiBwYXNzZWQgdGhlIHRlc3QsXG4gICBvdGhlcndpc2UgaXQgZmFpbGVkLlxuXG4gIFNvbWUgcmVzdWx0czpcblxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCA1MDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMDAgMTAwMFxuaW5pdCAyNzE4MjgxODsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyOTk3OTI2NDM7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMTQxNDIxMzY7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZiAxMDI0OyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMDsgY2hpc3F1YXJlIGRpZmYgMTAwMDAwIDEwMFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDI0OyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMjRcbmluaXQgMjcxODI4MTg7IGluaXRfZGlmZjIgMTAwOyBjaGlzcXVhcmUgZGlmZjIgMTAwMDAwIDEwMFxuaW5pdCAxNDE0MjEzNjsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDI5OTc5MjY0MzsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG4tIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk5Ny41LCAxMDYzLjI0NTU1MzIwMzM2NzU0KVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODkuNzQwMDAwMDAwMDA1MjM4NywgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg0ODU4LjU3ODY0Mzc2MjY5LCA1MDQ1LjUsIDUxNDEuNDIxMzU2MjM3MzEpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPVxuKDkzNi43NTQ0NDY3OTY2MzI0NjUsIDk0NC44MDU5OTk5OTk5ODIzMDUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAxOS4xOTc0NDAwMDAwMDM1NSwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1OS4zMTc3NjAwMDAwMDUzNiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTAzOS45ODQ2Mzk5OTk5OTUxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA1NC4zODIwNzk5OTk5OTU3NywgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA5MC4wOTYwMDAwMDAwMDUsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTYwLiwgMTA3Ni43ODcyMDAwMDAwMDYxMiwgMTA4OC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4xNzYwMDAwMDAwMDY3NTIxLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODUuMjE2MDAwMDAwMDAwMzQ5MiwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDgwLjYyMjAwMDAwMDAwMzAyNjgsIDEyMC4pXG5cbiopXG5cbigqIFJldHVybiB0aGUgc3VtIG9mIHRoZSBzcXVhcmVzIG9mIHZbaTAsaTFbICopXG5sZXQgcmVjIHN1bXNxIHYgaTAgaTEgPVxuICBpZiBpMCA+PSBpMSB0aGVuIDAuMFxuICBlbHNlIGlmIGkxID0gaTAgKyAxIHRoZW4gU3RkbGliLmZsb2F0IHYuKGkwKSAqLiBTdGRsaWIuZmxvYXQgdi4oaTApXG4gIGVsc2Ugc3Vtc3EgdiBpMCAoKGkwK2kxKS8yKSArLiBzdW1zcSB2ICgoaTAraTEpLzIpIGkxXG5cblxubGV0IGNoaXNxdWFyZSBnIG4gciA9XG4gIGlmIG4gPD0gMTAgKiByIHRoZW4gaW52YWxpZF9hcmcgXCJjaGlzcXVhcmVcIjtcbiAgbGV0IGYgPSBBcnJheS5tYWtlIHIgMCBpblxuICBmb3IgaSA9IDEgdG8gbiBkb1xuICAgIGxldCB0ID0gZyByIGluXG4gICAgZi4odCkgPC0gZi4odCkgKyAxXG4gIGRvbmU7XG4gIGxldCB0ID0gc3Vtc3EgZiAwIHJcbiAgYW5kIHIgPSBTdGRsaWIuZmxvYXQgclxuICBhbmQgbiA9IFN0ZGxpYi5mbG9hdCBuIGluXG4gIGxldCBzciA9IDIuMCAqLiBzcXJ0IHIgaW5cbiAgKHIgLS4gc3IsICAgKHIgKi4gdCAvLiBuKSAtLiBuLCAgIHIgKy4gc3IpXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBsaW5lYXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb20gbnVtYmVycy5cbiopXG5sZXQgc3QgPSByZWYgMFxubGV0IGluaXRfZGlmZiByID0gc3QgOj0gaW50IHJcbmxldCBkaWZmIHIgPVxuICBsZXQgeDEgPSAhc3RcbiAgYW5kIHgyID0gaW50IHJcbiAgaW5cbiAgc3QgOj0geDI7XG4gIGlmIHgxID49IHgyIHRoZW5cbiAgICB4MSAtIHgyXG4gIGVsc2VcbiAgICByICsgeDEgLSB4MlxuXG5cbmxldCBzdDEgPSByZWYgMFxuYW5kIHN0MiA9IHJlZiAwXG5cblxuKCogVGhpcyBpcyB0byB0ZXN0IGZvciBxdWFkcmF0aWMgZGVwZW5kZW5jaWVzIGJldHdlZW4gc3VjY2Vzc2l2ZSByYW5kb21cbiAgIG51bWJlcnMuXG4qKVxubGV0IGluaXRfZGlmZjIgciA9IHN0MSA6PSBpbnQgcjsgc3QyIDo9IGludCByXG5sZXQgZGlmZjIgciA9XG4gIGxldCB4MSA9ICFzdDFcbiAgYW5kIHgyID0gIXN0MlxuICBhbmQgeDMgPSBpbnQgclxuICBpblxuICBzdDEgOj0geDI7XG4gIHN0MiA6PSB4MztcbiAgKHgzIC0geDIgLSB4MiArIHgxICsgMipyKSBtb2QgclxuXG5cbioqKioqKioqKioqKioqKioqKioqKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgbGlzdHMuICopXG50eXBlICdhIHQgPSAnYSBsaXN0ID0gW10gfCAoOjopIG9mICdhICogJ2EgbGlzdFxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgKilcblxubGV0IHJlYyBsZW5ndGhfYXV4IGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gbGVuXG4gIHwgXzo6bCAtPiBsZW5ndGhfYXV4IChsZW4gKyAxKSBsXG5cbmxldCBsZW5ndGggbCA9IGxlbmd0aF9hdXggMCBsXG5cbmxldCBjb25zIGEgbCA9IGE6OmxcblxubGV0IGhkID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcImhkXCJcbiAgfCBhOjpfIC0+IGFcblxubGV0IHRsID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWlsd2l0aCBcInRsXCJcbiAgfCBfOjpsIC0+IGxcblxubGV0IG50aCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFpbHdpdGggXCJudGhcIlxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IG50aF9vcHQgbCBuID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QubnRoXCIgZWxzZVxuICBsZXQgcmVjIG50aF9hdXggbCBuID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IGE6OmwgLT4gaWYgbiA9IDAgdGhlbiBTb21lIGEgZWxzZSBudGhfYXV4IGwgKG4tMSlcbiAgaW4gbnRoX2F1eCBsIG5cblxubGV0IGFwcGVuZCA9IChAKVxuXG5sZXQgcmVjIHJldl9hcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBhIDo6IGwgLT4gcmV2X2FwcGVuZCBsIChhIDo6IGwyKVxuXG5sZXQgcmV2IGwgPSByZXZfYXBwZW5kIGwgW11cblxubGV0IHJlYyBpbml0X3RhaWxyZWNfYXV4IGFjYyBpIG4gZiA9XG4gIGlmIGkgPj0gbiB0aGVuIGFjY1xuICBlbHNlIGluaXRfdGFpbHJlY19hdXggKGYgaSA6OiBhY2MpIChpKzEpIG4gZlxuXG5sZXQgcmVjIGluaXRfYXV4IGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gW11cbiAgZWxzZVxuICAgIGxldCByID0gZiBpIGluXG4gICAgciA6OiBpbml0X2F1eCAoaSsxKSBuIGZcblxubGV0IHJldl9pbml0X3RocmVzaG9sZCA9XG4gIG1hdGNoIFN5cy5iYWNrZW5kX3R5cGUgd2l0aFxuICB8IFN5cy5OYXRpdmUgfCBTeXMuQnl0ZWNvZGUgLT4gMTBfMDAwXG4gICgqIFdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdGhlIHN0YWNrLCBiZXR0ZXIgYmUgc2FmZSBhbmQgYXNzdW1lIGl0J3NcbiAgICAgc21hbGwuICopXG4gIHwgU3lzLk90aGVyIF8gLT4gNTBcblxubGV0IGluaXQgbGVuIGYgPVxuICBpZiBsZW4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0LmluaXRcIiBlbHNlXG4gIGlmIGxlbiA+IHJldl9pbml0X3RocmVzaG9sZCB0aGVuIHJldiAoaW5pdF90YWlscmVjX2F1eCBbXSAwIGxlbiBmKVxuICBlbHNlIGluaXRfYXV4IDAgbGVuIGZcblxubGV0IHJlYyBmbGF0dGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGw6OnIgLT4gbCBAIGZsYXR0ZW4gclxuXG5sZXQgY29uY2F0ID0gZmxhdHRlblxuXG5sZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbXVxuICB8IGE6OmwgLT4gbGV0IHIgPSBmIGEgaW4gciA6OiBtYXAgZiBsXG5cbmxldCByZWMgbWFwaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgaSBhIGluIHIgOjogbWFwaSAoaSArIDEpIGYgbFxuXG5sZXQgbWFwaSBmIGwgPSBtYXBpIDAgZiBsXG5cbmxldCByZXZfbWFwIGYgbCA9XG4gIGxldCByZWMgcm1hcF9mIGFjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdVxuICAgIHwgYTo6bCAtPiBybWFwX2YgKGYgYSA6OiBhY2N1KSBsXG4gIGluXG4gIHJtYXBfZiBbXSBsXG5cblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGE7IGl0ZXIgZiBsXG5cbmxldCByZWMgaXRlcmkgaSBmID0gZnVuY3Rpb25cbiAgICBbXSAtPiAoKVxuICB8IGE6OmwgLT4gZiBpIGE7IGl0ZXJpIChpICsgMSkgZiBsXG5cbmxldCBpdGVyaSBmIGwgPSBpdGVyaSAwIGYgbFxuXG5sZXQgcmVjIGZvbGRfbGVmdCBmIGFjY3UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGZvbGRfbGVmdCBmIChmIGFjY3UgYSkgbFxuXG5sZXQgcmVjIGZvbGRfcmlnaHQgZiBsIGFjY3UgPVxuICBtYXRjaCBsIHdpdGhcbiAgICBbXSAtPiBhY2N1XG4gIHwgYTo6bCAtPiBmIGEgKGZvbGRfcmlnaHQgZiBsIGFjY3UpXG5cbmxldCByZWMgbWFwMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBsZXQgciA9IGYgYTEgYTIgaW4gciA6OiBtYXAyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lm1hcDJcIlxuXG5sZXQgcmV2X21hcDIgZiBsMSBsMiA9XG4gIGxldCByZWMgcm1hcDJfZiBhY2N1IGwxIGwyID1cbiAgICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgfCAoW10sIFtdKSAtPiBhY2N1XG4gICAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHJtYXAyX2YgKGYgYTEgYTIgOjogYWNjdSkgbDEgbDJcbiAgICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QucmV2X21hcDJcIlxuICBpblxuICBybWFwMl9mIFtdIGwxIGwyXG5cblxubGV0IHJlYyBpdGVyMiBmIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+ICgpXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyOyBpdGVyMiBmIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5pdGVyMlwiXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZm9sZF9sZWZ0MiBmIChmIGFjY3UgYTEgYTIpIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX2xlZnQyXCJcblxubGV0IHJlYyBmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gYWNjdVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gZiBhMSBhMiAoZm9sZF9yaWdodDIgZiBsMSBsMiBhY2N1KVxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZm9sZF9yaWdodDJcIlxuXG5sZXQgcmVjIGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gdHJ1ZVxuICB8IGE6OmwgLT4gcCBhICYmIGZvcl9hbGwgcCBsXG5cbmxldCByZWMgZXhpc3RzIHAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBwIGEgfHwgZXhpc3RzIHAgbFxuXG5sZXQgcmVjIGZvcl9hbGwyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gdHJ1ZVxuICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcCBhMSBhMiAmJiBmb3JfYWxsMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb3JfYWxsMlwiXG5cbmxldCByZWMgZXhpc3RzMiBwIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IGZhbHNlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyIHx8IGV4aXN0czIgcCBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QuZXhpc3RzMlwiXG5cbmxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhbHNlXG4gIHwgYTo6bCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtIHggbFxuXG5sZXQgcmVjIG1lbXEgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGEgPT0geCB8fCBtZW1xIHggbFxuXG5sZXQgcmVjIGFzc29jIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGIgZWxzZSBhc3NvYyB4IGxcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIFNvbWUgYiBlbHNlIGFzc29jX29wdCB4IGxcblxubGV0IHJlYyBhc3NxIHggPSBmdW5jdGlvblxuICAgIFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIGIgZWxzZSBhc3NxIHggbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICAgIFtdIC0+IE5vbmVcbiAgfCAoYSxiKTo6bCAtPiBpZiBhID09IHggdGhlbiBTb21lIGIgZWxzZSBhc3NxX29wdCB4IGxcblxubGV0IHJlYyBtZW1fYXNzb2MgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBjb21wYXJlIGEgeCA9IDAgfHwgbWVtX2Fzc29jIHggbFxuXG5sZXQgcmVjIG1lbV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IGZhbHNlXG4gIHwgKGEsIF8pIDo6IGwgLT4gYSA9PSB4IHx8IG1lbV9hc3NxIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT5cbiAgICAgIGlmIGNvbXBhcmUgYSB4ID0gMCB0aGVuIGwgZWxzZSBwYWlyIDo6IHJlbW92ZV9hc3NvYyB4IGxcblxubGV0IHJlYyByZW1vdmVfYXNzcSB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXVxuICB8IChhLCBfIGFzIHBhaXIpIDo6IGwgLT4gaWYgYSA9PSB4IHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc3EgeCBsXG5cbmxldCByZWMgZmluZCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4geCBlbHNlIGZpbmQgcCBsXG5cbmxldCByZWMgZmluZF9vcHQgcCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBTb21lIHggZWxzZSBmaW5kX29wdCBwIGxcblxubGV0IHJlYyBmaW5kX21hcCBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgfCBTb21lIF8gYXMgcmVzdWx0IC0+IHJlc3VsdFxuICAgICAgIHwgTm9uZSAtPiBmaW5kX21hcCBmIGxcbiAgICAgZW5kXG5cbmxldCBmaW5kX2FsbCBwID1cbiAgbGV0IHJlYyBmaW5kIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2N1XG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIGZpbmQgKHggOjogYWNjdSkgbCBlbHNlIGZpbmQgYWNjdSBsIGluXG4gIGZpbmQgW11cblxubGV0IGZpbHRlciA9IGZpbmRfYWxsXG5cbmxldCBmaWx0ZXJpIHAgbCA9XG4gIGxldCByZWMgYXV4IGkgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiByZXYgYWNjXG4gIHwgeDo6bCAtPiBhdXggKGkgKyAxKSAoaWYgcCBpIHggdGhlbiB4OjphY2MgZWxzZSBhY2MpIGxcbiAgaW5cbiAgYXV4IDAgW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmID1cbiAgbGV0IHJlYyBhdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhdXggYWNjdSBsXG4gICAgICAgIHwgU29tZSB2IC0+IGF1eCAodiA6OiBhY2N1KSBsXG4gIGluXG4gIGF1eCBbXVxuXG5sZXQgY29uY2F0X21hcCBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByZXYgYWNjXG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICBsZXQgeHMgPSBmIHggaW5cbiAgICAgICBhdXggZiAocmV2X2FwcGVuZCB4cyBhY2MpIGxcbiAgaW4gYXV4IGYgW10gbFxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjY3UgbCA9XG4gIGxldCByZWMgYXV4IGFjY3UgbF9hY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY3UsIHJldiBsX2FjY3VcbiAgICB8IHggOjogbCAtPlxuICAgICAgICBsZXQgYWNjdSwgeCA9IGYgYWNjdSB4IGluXG4gICAgICAgIGF1eCBhY2N1ICh4IDo6IGxfYWNjdSkgbCBpblxuICBhdXggYWNjdSBbXSBsXG5cbmxldCBwYXJ0aXRpb24gcCBsID1cbiAgbGV0IHJlYyBwYXJ0IHllcyBubyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiB5ZXMsIHJldiBubylcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gcGFydCAoeCA6OiB5ZXMpIG5vIGwgZWxzZSBwYXJ0IHllcyAoeCA6OiBubykgbCBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgcCBsID1cbiAgbGV0IHJlYyBwYXJ0IGxlZnQgcmlnaHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IChyZXYgbGVmdCwgcmV2IHJpZ2h0KVxuICB8IHggOjogbCAtPlxuICAgICBiZWdpbiBtYXRjaCBwIHggd2l0aFxuICAgICAgIHwgRWl0aGVyLkxlZnQgdiAtPiBwYXJ0ICh2IDo6IGxlZnQpIHJpZ2h0IGxcbiAgICAgICB8IEVpdGhlci5SaWdodCB2IC0+IHBhcnQgbGVmdCAodiA6OiByaWdodCkgbFxuICAgICBlbmRcbiAgaW5cbiAgcGFydCBbXSBbXSBsXG5cbmxldCByZWMgc3BsaXQgPSBmdW5jdGlvblxuICAgIFtdIC0+IChbXSwgW10pXG4gIHwgKHgseSk6OmwgLT5cbiAgICAgIGxldCAocngsIHJ5KSA9IHNwbGl0IGwgaW4gKHg6OnJ4LCB5OjpyeSlcblxubGV0IHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggKGwxLCBsMikgd2l0aFxuICAgIChbXSwgW10pIC0+IFtdXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiAoYTEsIGEyKSA6OiBjb21iaW5lIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5jb21iaW5lXCJcblxuKCoqIHNvcnRpbmcgKilcblxubGV0IHJlYyBtZXJnZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBsMiAtPiBsMlxuICB8IGwxLCBbXSAtPiBsMVxuICB8IGgxIDo6IHQxLCBoMiA6OiB0MiAtPlxuICAgICAgaWYgY21wIGgxIGgyIDw9IDBcbiAgICAgIHRoZW4gaDEgOjogbWVyZ2UgY21wIHQxIGwyXG4gICAgICBlbHNlIGgyIDo6IG1lcmdlIGNtcCBsMSB0MlxuXG5cbmxldCBzdGFibGVfc29ydCBjbXAgbCA9XG4gIGxldCByZWMgcmV2X21lcmdlIGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBpZiBjbXAgaDEgaDIgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPD0gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA8PSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA8PSAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICBlbHNlIGlmIGNtcCB4MiB4MyA8PSAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gcmV2X3NvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gcmV2X3NvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZV9yZXYgczEgczIgW10sIHRsKVxuICBhbmQgcmV2X3NvcnQgbiBsID1cbiAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICB8IDIsIHgxIDo6IHgyIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID0gaWYgY21wIHgxIHgyID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV0gaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGlmIGNtcCB4MSB4MiA+IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MTsgeDI7IHgzXVxuICAgICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzID4gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCBzb3J0ID0gc3RhYmxlX3NvcnRcbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiBOb3RlOiBvbiBhIGxpc3Qgb2YgbGVuZ3RoIGJldHdlZW4gYWJvdXQgMTAwMDAwIChkZXBlbmRpbmcgb24gdGhlIG1pbm9yXG4gICBoZWFwIHNpemUgYW5kIHRoZSB0eXBlIG9mIHRoZSBsaXN0KSBhbmQgU3lzLm1heF9hcnJheV9zaXplLCBpdCBpc1xuICAgYWN0dWFsbHkgZmFzdGVyIHRvIHVzZSB0aGUgZm9sbG93aW5nLCBidXQgaXQgbWlnaHQgYWxzbyB1c2UgbW9yZSBtZW1vcnlcbiAgIGJlY2F1c2UgdGhlIGFyZ3VtZW50IGxpc3QgY2Fubm90IGJlIGRlYWxsb2NhdGVkIGluY3JlbWVudGFsbHkuXG5cbiAgIEFsc28sIHRoZXJlIHNlZW1zIHRvIGJlIGEgYnVnIGluIHRoaXMgY29kZSBvciBpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIG9ial90cnVuY2F0ZS5cblxuZXh0ZXJuYWwgb2JqX3RydW5jYXRlIDogJ2EgYXJyYXkgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcblxubGV0IGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYSA9XG4gIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGFjY3UgbiBwID1cbiAgICBpZiBwIDw9IDAgdGhlbiBhY2N1IGVsc2UgYmVnaW5cbiAgICAgIGlmIHAgPSBuIHRoZW4gYmVnaW5cbiAgICAgICAgb2JqX3RydW5jYXRlIGEgcDtcbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSAobi0xMDAwKSAocC0xKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbG9vcCAoYS4ocC0xKSA6OiBhY2N1KSBuIChwLTEpXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBbXSAobC0xMDAwKSBsXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgQXJyYXkuc3RhYmxlX3NvcnQgY21wIGE7XG4gIGFycmF5X3RvX2xpc3RfaW5fcGxhY2UgYVxuXG4qKVxuXG5cbigqKiBzb3J0aW5nICsgcmVtb3ZpbmcgZHVwbGljYXRlcyAqKVxuXG5sZXQgc29ydF91bmlxIGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlIHQxIHQyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSBpZiBjIDwgMFxuICAgICAgICB0aGVuIHJldl9tZXJnZSB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlIGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyByZXZfbWVyZ2VfcmV2IGwxIGwyIGFjY3UgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbDIgLT4gcmV2X2FwcGVuZCBsMiBhY2N1XG4gICAgfCBsMSwgW10gLT4gcmV2X2FwcGVuZCBsMSBhY2N1XG4gICAgfCBoMTo6dDEsIGgyOjp0MiAtPlxuICAgICAgICBsZXQgYyA9IGNtcCBoMSBoMiBpblxuICAgICAgICBpZiBjID0gMCB0aGVuIHJldl9tZXJnZV9yZXYgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPiAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlX3JldiB0MSBsMiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgcmV2X21lcmdlX3JldiBsMSB0MiAoaDI6OmFjY3UpXG4gIGluXG4gIGxldCByZWMgc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDFdIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyXSBlbHNlIFt4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IDMsIHgxIDo6IHgyIDo6IHgzIDo6IHRsIC0+XG4gICAgICAgIGxldCBzID1cbiAgICAgICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4Ml0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDNdIGVsc2UgW3gzOyB4Ml1cbiAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MTsgeDJdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDM7IHgyXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDE7IHgyXVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIHgxIHgzIGluXG4gICAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MjsgeDFdXG4gICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGxldCBjID0gY21wIHgyIHgzIGluXG4gICAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgICAgZWxzZSBpZiBjID4gMCB0aGVuIFt4MjsgeDM7IHgxXVxuICAgICAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSBzb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHNvcnQgbjIgbDIgaW5cbiAgICAgICAgKHJldl9tZXJnZSBzMSBzMiBbXSwgdGwpXG4gIGluXG4gIGxldCBsZW4gPSBsZW5ndGggbCBpblxuICBpZiBsZW4gPCAyIHRoZW4gbCBlbHNlIGZzdCAoc29ydCBsZW4gbClcblxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyAtPiAtMVxuICB8IF8sIFtdIC0+IDFcbiAgfCBfIDo6IGwxLCBfIDo6IGwyIC0+IGNvbXBhcmVfbGVuZ3RocyBsMSBsMlxuOztcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+XG4gICAgaWYgbiA9IDAgdGhlbiAwIGVsc2VcbiAgICAgIGlmIG4gPiAwIHRoZW4gLTEgZWxzZSAxXG4gIHwgXyA6OiBsIC0+XG4gICAgaWYgbiA8PSAwIHRoZW4gMSBlbHNlXG4gICAgICBjb21wYXJlX2xlbmd0aF93aXRoIGwgKG4tMSlcbjs7XG5cbigqKiB7MSBDb21wYXJpc29ufSAqKVxuXG4oKiBOb3RlOiB3ZSBhcmUgKm5vdCogc2hvcnRjdXR0aW5nIHRoZSBsaXN0IGJ5IHVzaW5nXG4gICBbTGlzdC5jb21wYXJlX2xlbmd0aHNdIGZpcnN0OyB0aGlzIG1heSBiZSBzbG93ZXIgb24gbG9uZyBsaXN0c1xuICAgaW1tZWRpYXRlbHkgc3RhcnQgd2l0aCBkaXN0aW5jdCBlbGVtZW50cy4gSXQgaXMgYWxzbyBpbmNvcnJlY3QgZm9yXG4gICBbY29tcGFyZV0gYmVsb3csIGFuZCBpdCBpcyBiZXR0ZXIgKHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZSkgdG9cbiAgIHVzZSB0aGUgc2FtZSBhcHByb2FjaCBmb3IgYm90aCBmdW5jdGlvbnMuICopXG5sZXQgcmVjIGVxdWFsIGVxIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfOjpfIHwgXzo6XywgW10gLT4gZmFsc2VcbiAgfCBhMTo6bDEsIGEyOjpsMiAtPiBlcSBhMSBhMiAmJiBlcXVhbCBlcSBsMSBsMlxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfOjpfIC0+IC0xXG4gIHwgXzo6XywgW10gLT4gMVxuICB8IGExOjpsMSwgYTI6OmwyIC0+XG4gICAgbGV0IGMgPSBjbXAgYTEgYTIgaW5cbiAgICBpZiBjIDw+IDAgdGhlbiBjXG4gICAgZWxzZSBjb21wYXJlIGNtcCBsMSBsMlxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGwgPVxuICBsZXQgcmVjIGF1eCBsICgpID0gbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBTZXEuTmlsXG4gICAgfCB4IDo6IHRhaWwgLT4gU2VxLkNvbnMgKHgsIGF1eCB0YWlsKVxuICBpblxuICBhdXggbFxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCByZWMgZGlyZWN0IGRlcHRoIHNlcSA6IF8gbGlzdCA9XG4gICAgaWYgZGVwdGg9MFxuICAgIHRoZW5cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIHNlcVxuICAgICAgfD4gcmV2ICgqIHRhaWxyZWMgKilcbiAgICBlbHNlIG1hdGNoIHNlcSgpIHdpdGhcbiAgICAgIHwgU2VxLk5pbCAtPiBbXVxuICAgICAgfCBTZXEuQ29ucyAoeCwgbmV4dCkgLT4geCA6OiBkaXJlY3QgKGRlcHRoLTEpIG5leHRcbiAgaW5cbiAgZGlyZWN0IDUwMCBzZXFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogT3BlcmF0aW9ucyBvbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgdmFsdWVzICopXG5cbnR5cGUgdFxuXG50eXBlIHJhd19kYXRhID0gbmF0aXZlaW50XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIHJhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhID0gXCJjYW1sX29ial9yYXdfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X3Jhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX29ial9zZXRfcmF3X2ZpZWxkXCJcblxuZXh0ZXJuYWwgbmV3X2Jsb2NrIDogaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX29ial9ibG9ja1wiXG5leHRlcm5hbCBkdXAgOiB0IC0+IHQgPSBcImNhbWxfb2JqX2R1cFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IGZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAwXG5sZXQgbGFzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMjQ1XG5cbmxldCBsYXp5X3RhZyA9IDI0NlxubGV0IGNsb3N1cmVfdGFnID0gMjQ3XG5sZXQgb2JqZWN0X3RhZyA9IDI0OFxubGV0IGluZml4X3RhZyA9IDI0OVxubGV0IGZvcndhcmRfdGFnID0gMjUwXG5cbmxldCBub19zY2FuX3RhZyA9IDI1MVxuXG5sZXQgYWJzdHJhY3RfdGFnID0gMjUxXG5sZXQgc3RyaW5nX3RhZyA9IDI1MlxubGV0IGRvdWJsZV90YWcgPSAyNTNcbmxldCBkb3VibGVfYXJyYXlfdGFnID0gMjU0XG5sZXQgY3VzdG9tX3RhZyA9IDI1NVxubGV0IGZpbmFsX3RhZyA9IGN1c3RvbV90YWdcblxuXG5sZXQgaW50X3RhZyA9IDEwMDBcbmxldCBvdXRfb2ZfaGVhcF90YWcgPSAxMDAxXG5sZXQgdW5hbGlnbmVkX3RhZyA9IDEwMDJcblxubW9kdWxlIENsb3N1cmUgPSBzdHJ1Y3RcbiAgdHlwZSBpbmZvID0ge1xuICAgIGFyaXR5OiBpbnQ7XG4gICAgc3RhcnRfZW52OiBpbnQ7XG4gIH1cblxuICBsZXQgaW5mb19vZl9yYXcgKGluZm8gOiBuYXRpdmVpbnQpID1cbiAgICBsZXQgb3BlbiBOYXRpdmVpbnQgaW5cbiAgICBsZXQgYXJpdHkgPVxuICAgICAgKCogc2lnbmVkOiBuZWdhdGl2ZSBmb3IgdHVwbGVkIGZ1bmN0aW9ucyAqKVxuICAgICAgaWYgU3lzLndvcmRfc2l6ZSA9IDY0IHRoZW5cbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDU2KVxuICAgICAgZWxzZVxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gMjQpXG4gICAgaW5cbiAgICBsZXQgc3RhcnRfZW52ID1cbiAgICAgICgqIHN0YXJ0X2VudiBpcyB1bnNpZ25lZCwgYnV0IHdlIGtub3cgaXQgY2FuIGFsd2F5cyBmaXQgYW4gT0NhbWxcbiAgICAgICAgIGludGVnZXIgc28gd2UgdXNlIFt0b19pbnRdIGluc3RlYWQgb2YgW3Vuc2lnbmVkX3RvX2ludF0uICopXG4gICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKHNoaWZ0X2xlZnQgaW5mbyA4KSA5KSBpblxuICAgIHsgYXJpdHk7IHN0YXJ0X2VudiB9XG5cbiAgKCogbm90ZTogd2UgZXhwZWN0IGEgY2xvc3VyZSwgbm90IGFuIGluZml4IHBvaW50ZXIgKilcbiAgbGV0IGluZm8gKG9iaiA6IHQpID1cbiAgICBhc3NlcnQgKHRhZyBvYmogPSBjbG9zdXJlX3RhZyk7XG4gICAgaW5mb19vZl9yYXcgKHJhd19maWVsZCBvYmogMSlcbmVuZFxuXG5tb2R1bGUgRXh0ZW5zaW9uX2NvbnN0cnVjdG9yID1cbnN0cnVjdFxuICB0eXBlIHQgPSBleHRlbnNpb25fY29uc3RydWN0b3JcbiAgbGV0IG9mX3ZhbCB4ID1cbiAgICBsZXQgeCA9IHJlcHIgeCBpblxuICAgIGxldCBzbG90ID1cbiAgICAgIGlmIChpc19ibG9jayB4KSAmJiAodGFnIHgpIDw+IG9iamVjdF90YWcgJiYgKHNpemUgeCkgPj0gMSB0aGVuIGZpZWxkIHggMFxuICAgICAgZWxzZSB4XG4gICAgaW5cbiAgICBsZXQgbmFtZSA9XG4gICAgICBpZiAoaXNfYmxvY2sgc2xvdCkgJiYgKHRhZyBzbG90KSA9IG9iamVjdF90YWcgdGhlbiBmaWVsZCBzbG90IDBcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcbiAgICBpblxuICAgICAgaWYgKHRhZyBuYW1lKSA9IHN0cmluZ190YWcgdGhlbiAob2JqIHNsb3QgOiB0KVxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIG5hbWUgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMCkgOiBzdHJpbmcpXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gaWQgKHNsb3QgOiB0KSA9XG4gICAgKG9iaiAoZmllbGQgKHJlcHIgc2xvdCkgMSkgOiBpbnQpXG5lbmRcblxubGV0IGV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5vZl92YWxcbmxldCBleHRlbnNpb25fbmFtZSA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5uYW1lXG5sZXQgZXh0ZW5zaW9uX2lkID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLmlkXG5cbm1vZHVsZSBFcGhlbWVyb24gPSBzdHJ1Y3RcbiAgdHlwZSBvYmpfdCA9IHRcblxuICB0eXBlIHQgKCoqIGVwaGVtZXJvbiAqKVxuXG4gICAoKiogVG8gY2hhbmdlIGluIHN5bmMgd2l0aCB3ZWFrLmggKilcbiAgbGV0IGFkZGl0aW9uYWxfdmFsdWVzID0gMlxuICBsZXQgbWF4X2VwaGVfbGVuZ3RoID0gU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2VwaGVfY3JlYXRlXCI7O1xuICBsZXQgY3JlYXRlIGwgPVxuICAgIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gbWF4X2VwaGVfbGVuZ3RoKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uY3JlYXRlXCI7XG4gICAgY3JlYXRlIGxcblxuICBsZXQgbGVuZ3RoIHggPSBzaXplKHJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG4gIGxldCByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gbXNnID1cbiAgICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGV4dGVybmFsIGdldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlcIlxuICBsZXQgZ2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleVwiO1xuICAgIGdldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleV9jb3B5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5X2NvcHlcIlxuICBsZXQgZ2V0X2tleV9jb3B5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5X2NvcHlcIjtcbiAgICBnZXRfa2V5X2NvcHkgZSBvXG5cbiAgZXh0ZXJuYWwgc2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9rZXlcIlxuICBsZXQgc2V0X2tleSBlIG8geCA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5zZXRfa2V5XCI7XG4gICAgc2V0X2tleSBlIG8geFxuXG4gIGV4dGVybmFsIHVuc2V0X2tleTogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG4gIGxldCB1bnNldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnVuc2V0X2tleVwiO1xuICAgIHVuc2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBjaGVja19rZXk6IHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19rZXlcIlxuICBsZXQgY2hlY2tfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5jaGVja19rZXlcIjtcbiAgICBjaGVja19rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgYmxpdF9rZXkgOiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgID0gXCJjYW1sX2VwaGVfYmxpdF9rZXlcIlxuXG4gIGxldCBibGl0X2tleSBlMSBvMSBlMiBvMiBsID1cbiAgICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmJsaXRfa2V5XCJcbiAgICBlbHNlIGlmIGwgPD4gMCB0aGVuIGJsaXRfa2V5IGUxIG8xIGUyIG8yIGxcblxuICBleHRlcm5hbCBnZXRfZGF0YTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YVwiXG4gIGV4dGVybmFsIGdldF9kYXRhX2NvcHk6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVwiXG4gIGV4dGVybmFsIHNldF9kYXRhOiB0IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfZGF0YVwiXG4gIGV4dGVybmFsIHVuc2V0X2RhdGE6IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2RhdGFcIlxuICBleHRlcm5hbCBjaGVja19kYXRhOiB0IC0+IGJvb2wgPSBcImNhbWxfZXBoZV9jaGVja19kYXRhXCJcbiAgZXh0ZXJuYWwgYmxpdF9kYXRhIDogdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9ibGl0X2RhdGFcIlxuXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSW50ZXJuYWxzIG9mIGZvcmNpbmcgbGF6eSB2YWx1ZXMuICopXG5cbnR5cGUgJ2EgdCA9ICdhIGxhenlfdFxuXG5leGNlcHRpb24gVW5kZWZpbmVkXG5cbmxldCByYWlzZV91bmRlZmluZWQgPSBPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIFVuZGVmaW5lZClcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogT2JqLnQgLT4gT2JqLnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfbWFrZV9mb3J3YXJkXCJcblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgdHJ5XG4gICAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gICAgcmVzdWx0XG4gIHdpdGggZSAtPlxuICAgIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCAoT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBlKSk7XG4gICAgcmFpc2UgZVxuXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV92YWxfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICBtYWtlX2ZvcndhcmQgKE9iai5yZXByIGJsaykgKE9iai5yZXByIHJlc3VsdCk7XG4gIHJlc3VsdFxuXG5cbigqIFtmb3JjZV0gaXMgbm90IHVzZWQsIHNpbmNlIFtMYXp5LmZvcmNlXSBpcyBkZWNsYXJlZCBhcyBhIHByaW1pdGl2ZVxuICAgd2hvc2UgY29kZSBpbmxpbmVzIHRoZSB0YWcgdGVzdHMgb2YgaXRzIGFyZ3VtZW50LCBleGNlcHQgd2hlbiBhZmxcbiAgIGluc3RydW1lbnRhdGlvbiBpcyB0dXJuZWQgb24uICopXG5cbmxldCBmb3JjZSAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgKCogVXNpbmcgW1N5cy5vcGFxdWVfaWRlbnRpdHldIHByZXZlbnRzIHR3byBwb3RlbnRpYWwgcHJvYmxlbXM6XG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGhhdmUgRm9yd2FyZF90YWcsIHRoZW4gaXRzIHRhZyBjb3VsZCBoYXZlXG4gICAgICAgY2hhbmdlZCBkdXJpbmcgR0MsIHNvIHRoYXQgaW5mb3JtYXRpb24gbXVzdCBiZSBmb3Jnb3R0ZW4gKHNlZSBHUFIjNzEzXG4gICAgICAgYW5kIGlzc3VlICM3MzAxKVxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBpbW11dGFibGUsIHRoZW4gaWYgdGhlIGNvbXBpbGVyXG4gICAgICAgY2Fubm90IHByb3ZlIHRoYXQgdGhlIGxhc3QgYnJhbmNoIGlzIG5vdCB0YWtlbiBpdCB3aWxsIGlzc3VlIGFcbiAgICAgICB3YXJuaW5nIDU5IChtb2RpZmljYXRpb24gb2YgYW4gaW1tdXRhYmxlIHZhbHVlKSAqKVxuICBsZXQgbHp2ID0gU3lzLm9wYXF1ZV9pZGVudGl0eSBsenYgaW5cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV9sYXp5X2Jsb2NrIGx6dlxuXG5cbmxldCBmb3JjZV92YWwgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfdmFsX2xhenlfYmxvY2sgbHp2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbTGF6eV06IGRlZmVycmVkIGNvbXB1dGF0aW9ucyAqKVxuXG5cbigqXG4gICBXQVJOSU5HOiBzb21lIHB1cnBsZSBtYWdpYyBpcyBnb2luZyBvbiBoZXJlLiAgRG8gbm90IHRha2UgdGhpcyBmaWxlXG4gICBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byBwcm9ncmFtIGluIE9DYW1sLlxuKilcblxuXG4oKiBXZSBtYWtlIHVzZSBvZiB0d28gc3BlY2lhbCB0YWdzIHByb3ZpZGVkIGJ5IHRoZSBydW50aW1lOlxuICAgW2xhenlfdGFnXSBhbmQgW2ZvcndhcmRfdGFnXS5cblxuICAgQSB2YWx1ZSBvZiB0eXBlIFsnYSBMYXp5LnRdIGNhbiBiZSBvbmUgb2YgdGhyZWUgdGhpbmdzOlxuICAgMS4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2xhenlfdGFnXS4gIEl0cyBmaWVsZCBpcyBhIGNsb3N1cmUgb2ZcbiAgICAgIHR5cGUgW3VuaXQgLT4gJ2FdIHRoYXQgY29tcHV0ZXMgdGhlIHZhbHVlLlxuICAgMi4gQSBibG9jayBvZiBzaXplIDEgd2l0aCB0YWcgW2ZvcndhcmRfdGFnXS4gIEl0cyBmaWVsZCBpcyB0aGUgdmFsdWVcbiAgICAgIG9mIHR5cGUgWydhXSB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIDMuIEFueXRoaW5nIGVsc2UgZXhjZXB0IGEgZmxvYXQuICBUaGlzIGhhcyB0eXBlIFsnYV0gYW5kIGlzIHRoZSB2YWx1ZVxuICAgICAgdGhhdCB3YXMgY29tcHV0ZWQuXG4gICBFeGNlcHRpb25zIGFyZSBzdG9yZWQgaW4gZm9ybWF0ICgxKS5cbiAgIFRoZSBHQyB3aWxsIG1hZ2ljYWxseSBjaGFuZ2UgdGhpbmdzIGZyb20gKDIpIHRvICgzKSBhY2NvcmRpbmcgdG8gaXRzXG4gICBmYW5jeS5cblxuICAgSWYgT0NhbWwgd2FzIGNvbmZpZ3VyZWQgd2l0aCB0aGUgLWZsYXQtZmxvYXQtYXJyYXkgb3B0aW9uICh3aGljaCBpc1xuICAgY3VycmVudGx5IHRoZSBkZWZhdWx0KSwgdGhlIGZvbGxvd2luZyBpcyBhbHNvIHRydWU6XG4gICBXZSBjYW5ub3QgdXNlIHJlcHJlc2VudGF0aW9uICgzKSBmb3IgYSBbZmxvYXQgTGF6eS50XSBiZWNhdXNlXG4gICBbY2FtbF9tYWtlX2FycmF5XSBhc3N1bWVzIHRoYXQgb25seSBhIFtmbG9hdF0gdmFsdWUgY2FuIGhhdmUgdGFnXG4gICBbRG91YmxlX3RhZ10uXG5cbiAgIFdlIGhhdmUgdG8gdXNlIHRoZSBidWlsdC1pbiB0eXBlIGNvbnN0cnVjdG9yIFtsYXp5X3RdIHRvXG4gICBsZXQgdGhlIGNvbXBpbGVyIGltcGxlbWVudCB0aGUgc3BlY2lhbCB0eXBpbmcgYW5kIGNvbXBpbGF0aW9uXG4gICBydWxlcyBmb3IgdGhlIFtsYXp5XSBrZXl3b3JkLlxuKilcblxudHlwZSAnYSB0ID0gJ2EgQ2FtbGludGVybmFsTGF6eS50XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWQgPSBDYW1saW50ZXJuYWxMYXp5LlVuZGVmaW5lZFxuXG5leHRlcm5hbCBtYWtlX2ZvcndhcmQgOiAnYSAtPiAnYSBsYXp5X3QgPSBcImNhbWxfbGF6eV9tYWtlX2ZvcndhcmRcIlxuXG5leHRlcm5hbCBmb3JjZSA6ICdhIHQgLT4gJ2EgPSBcIiVsYXp5X2ZvcmNlXCJcblxuXG5sZXQgZm9yY2VfdmFsID0gQ2FtbGludGVybmFsTGF6eS5mb3JjZV92YWxcblxubGV0IGZyb21fZnVuIChmIDogdW5pdCAtPiAnYXJnKSA9XG4gIGxldCB4ID0gT2JqLm5ld19ibG9jayBPYmoubGF6eV90YWcgMSBpblxuICBPYmouc2V0X2ZpZWxkIHggMCAoT2JqLnJlcHIgZik7XG4gIChPYmoub2JqIHggOiAnYXJnIHQpXG5cbmxldCBmcm9tX3ZhbCAodiA6ICdhcmcpID1cbiAgbGV0IHQgPSBPYmoudGFnIChPYmoucmVwciB2KSBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHx8IHQgPSBPYmoubGF6eV90YWcgfHwgdCA9IE9iai5kb3VibGVfdGFnIHRoZW4gYmVnaW5cbiAgICBtYWtlX2ZvcndhcmQgdlxuICBlbmQgZWxzZSBiZWdpblxuICAgIChPYmoubWFnaWMgdiA6ICdhcmcgdClcbiAgZW5kXG5cblxubGV0IGlzX3ZhbCAobCA6ICdhcmcgdCkgPSBPYmoudGFnIChPYmoucmVwciBsKSA8PiBPYmoubGF6eV90YWdcblxubGV0IGxhenlfZnJvbV9mdW4gPSBmcm9tX2Z1blxuXG5sZXQgbGF6eV9mcm9tX3ZhbCA9IGZyb21fdmFsXG5cbmxldCBsYXp5X2lzX3ZhbCA9IGlzX3ZhbFxuXG5cbmxldCBtYXAgZiB4ID1cbiAgbGF6eSAoZiAoZm9yY2UgeCkpXG5cbmxldCBtYXBfdmFsIGYgeCA9XG4gIGlmIGlzX3ZhbCB4XG4gIHRoZW4gbGF6eV9mcm9tX3ZhbCAoZiAoZm9yY2UgeCkpXG4gIGVsc2UgbGF6eSAoZiAoZm9yY2UgeCkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IGRlZmF1bHRcbmxldCBnZXQgPSBmdW5jdGlvbiBTb21lIHYgLT4gdiB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJvcHRpb24gaXMgTm9uZVwiXG5sZXQgYmluZCBvIGYgPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IGYgdlxubGV0IGpvaW4gPSBmdW5jdGlvbiBTb21lIG8gLT4gbyB8IE5vbmUgLT4gTm9uZVxubGV0IG1hcCBmIG8gPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IFNvbWUgKGYgdilcbmxldCBmb2xkIH5ub25lIH5zb21lID0gZnVuY3Rpb24gU29tZSB2IC0+IHNvbWUgdiB8IE5vbmUgLT4gbm9uZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBmIHYgfCBOb25lIC0+ICgpXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gdHJ1ZSB8IFNvbWUgXyAtPiBmYWxzZVxubGV0IGlzX3NvbWUgPSBmdW5jdGlvbiBOb25lIC0+IGZhbHNlIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGVxdWFsIGVxIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBlcSB2MCB2MVxufCBOb25lLCBOb25lIC0+IHRydWVcbnwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBjbXAgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGNtcCB2MCB2MVxufCBOb25lLCBOb25lIC0+IDBcbnwgTm9uZSwgU29tZSBfIC0+IC0xXG58IFNvbWUgXywgTm9uZSAtPiAxXG5cbmxldCB0b19yZXN1bHQgfm5vbmUgPSBmdW5jdGlvbiBOb25lIC0+IEVycm9yIG5vbmUgfCBTb21lIHYgLT4gT2sgdlxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB2IC0+IFt2XVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE5vbmUgLT4gU2VxLmVtcHR5IHwgU29tZSB2IC0+IFNlcS5yZXR1cm4gdlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2UpIHQgPSAoJ2EsICdlKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdlXG5cbmxldCBvayB2ID0gT2sgdlxubGV0IGVycm9yIGUgPSBFcnJvciBlXG5sZXQgdmFsdWUgciB+ZGVmYXVsdCA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGRlZmF1bHRcbmxldCBnZXRfb2sgPSBmdW5jdGlvbiBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIEVycm9yIF9cIlxubGV0IGdldF9lcnJvciA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZSB8IE9rIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgT2sgX1wiXG5sZXQgYmluZCByIGYgPSBtYXRjaCByIHdpdGggT2sgdiAtPiBmIHYgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IGpvaW4gPSBmdW5jdGlvbiBPayByIC0+IHIgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcCBmID0gZnVuY3Rpb24gT2sgdiAtPiBPayAoZiB2KSB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IEVycm9yIChmIGUpIHwgT2sgXyBhcyB2IC0+IHZcbmxldCBmb2xkIH5vayB+ZXJyb3IgPSBmdW5jdGlvbiBPayB2IC0+IG9rIHYgfCBFcnJvciBlIC0+IGVycm9yIGVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBPayB2IC0+IGYgdiB8IEVycm9yIF8gLT4gKClcbmxldCBpdGVyX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGYgZSB8IE9rIF8gLT4gKClcbmxldCBpc19vayA9IGZ1bmN0aW9uIE9rIF8gLT4gdHJ1ZSB8IEVycm9yIF8gLT4gZmFsc2VcbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uIEVycm9yIF8gLT4gdHJ1ZSB8IE9rIF8gLT4gZmFsc2VcblxubGV0IGVxdWFsIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IF8sIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgT2sgXywgRXJyb3IgXyAtPiAtMVxufCBFcnJvciBfLCBPayBfIC0+IDFcblxubGV0IHRvX29wdGlvbiA9IGZ1bmN0aW9uIE9rIHYgLT4gU29tZSB2IHwgRXJyb3IgXyAtPiBOb25lXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE9rIHYgLT4gW3ZdIHwgRXJyb3IgXyAtPiBbXVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE9rIHYgLT4gU2VxLnJldHVybiB2IHwgRXJyb3IgXyAtPiBTZXEuZW1wdHlcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBVdGlscyBhcm91bmQgY2hhcn1cblxuICAgIEBzaW5jZSAwLjE0ICopXG5cbmluY2x1ZGUgQ2hhclxuXG5sZXQgcHBfYnVmID0gQnVmZmVyLmFkZF9jaGFyXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfY2hhclxubGV0IG9mX2ludF9leG4gPSBDaGFyLmNoclxubGV0IG9mX2ludCBjID0gdHJ5IFNvbWUgKG9mX2ludF9leG4gYykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxubGV0IHRvX2ludCA9IENoYXIuY29kZVxubGV0IHRvX3N0cmluZyBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID0gKVxuICBsZXQgKCA8PiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PiApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGNociBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiQ2hhci5jaHJcIiBlbHNlIHVuc2FmZV9jaHIgblxuXG5leHRlcm5hbCBieXRlc19jcmVhdGU6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0IGVzY2FwZWQgPSBmdW5jdGlvblxuICB8ICdcXCcnIC0+IFwiXFxcXCdcIlxuICB8ICdcXFxcJyAtPiBcIlxcXFxcXFxcXCJcbiAgfCAnXFxuJyAtPiBcIlxcXFxuXCJcbiAgfCAnXFx0JyAtPiBcIlxcXFx0XCJcbiAgfCAnXFxyJyAtPiBcIlxcXFxyXCJcbiAgfCAnXFxiJyAtPiBcIlxcXFxiXCJcbiAgfCAnICcgLi4gJ34nIGFzIGMgLT5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDEgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwIGM7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcbiAgfCBjIC0+XG4gICAgICBsZXQgbiA9IGNvZGUgYyBpblxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgNCBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgJ1xcXFwnO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDEgKHVuc2FmZV9jaHIgKDQ4ICsgbiAvIDEwMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDIgKHVuc2FmZV9jaHIgKDQ4ICsgKG4gLyAxMCkgbW9kIDEwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMyAodW5zYWZlX2NociAoNDggKyBuIG1vZCAxMCkpO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG5cbmxldCBsb3dlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWidcbiAgfCAnXFwxOTInIC4uICdcXDIxNCdcbiAgfCAnXFwyMTYnIC4uICdcXDIyMicgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneidcbiAgfCAnXFwyMjQnIC4uICdcXDI0NidcbiAgfCAnXFwyNDgnIC4uICdcXDI1NCcgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbmxldCBsb3dlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxudHlwZSB0ID0gY2hhclxuXG5sZXQgY29tcGFyZSBjMSBjMiA9IGNvZGUgYzEgLSBjb2RlIGMyXG5sZXQgZXF1YWwgKGMxOiB0KSAoYzI6IHQpID0gY29tcGFyZSBjMSBjMiA9IDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gaW50XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxuZXh0ZXJuYWwgbmVnIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCBhZGQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBzdWIgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXN1YmludFwiXG5leHRlcm5hbCBtdWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCBkaXYgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCByZW0gOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5leHRlcm5hbCBzdWNjIDogaW50IC0+IGludCA9IFwiJXN1Y2NpbnRcIlxuZXh0ZXJuYWwgcHJlZCA6IGludCAtPiBpbnQgPSBcIiVwcmVkaW50XCJcbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCBsb2dvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxubGV0IGxvZ25vdCB4ID0gbG9neG9yIHggKC0xKVxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNyaW50XCJcbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5cbigqXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcbmxldCBvZl9zdHJpbmcgcyA9IHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcbiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmxldCB0b19zdHJpbmcgeCA9IGZvcm1hdF9pbnQgXCIlZFwiIHhcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMuIFdoZW4geW91IG1vZGlmeSB0aGUgb25lIGluIHRoaXMgZmlsZSB5b3UgbmVlZCB0b1xuICAgbW9kaWZ5IGl0cyBkdXBsaWNhdGUgaW4gc3RyaW5nLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBieXRlcyAtPiBpbnQgPSBcIiVieXRlc19sZW5ndGhcIlxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGdldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcbmV4dGVybmFsIHVuc2FmZV9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gYnl0ZXMgPSBcIiVieXRlc19vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2JsaXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubGV0IG1ha2UgbiBjID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICB1bnNhZmVfZmlsbCBzIDAgbiBjO1xuICBzXG5cbmxldCBpbml0IG4gZiA9XG4gIGxldCBzID0gY3JlYXRlIG4gaW5cbiAgZm9yIGkgPSAwIHRvIG4gLSAxIGRvXG4gICAgdW5zYWZlX3NldCBzIGkgKGYgaSlcbiAgZG9uZTtcbiAgc1xuXG5sZXQgZW1wdHkgPSBjcmVhdGUgMFxuXG5sZXQgY29weSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCByID0gY3JlYXRlIGxlbiBpblxuICB1bnNhZmVfYmxpdCBzIDAgciAwIGxlbjtcbiAgclxuXG5sZXQgdG9fc3RyaW5nIGIgPSB1bnNhZmVfdG9fc3RyaW5nIChjb3B5IGIpXG5sZXQgb2Zfc3RyaW5nIHMgPSBjb3B5ICh1bnNhZmVfb2Zfc3RyaW5nIHMpXG5cbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuc3ViIC8gQnl0ZXMuc3ViXCJcbiAgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGxlbiBpblxuICAgIHVuc2FmZV9ibGl0IHMgb2ZzIHIgMCBsZW47XG4gICAgclxuICBlbmRcblxubGV0IHN1Yl9zdHJpbmcgYiBvZnMgbGVuID0gdW5zYWZlX3RvX3N0cmluZyAoc3ViIGIgb2ZzIGxlbilcblxuKCogYWRkaXRpb24gd2l0aCBhbiBvdmVyZmxvdyBjaGVjayAqKVxubGV0ICgrKykgYSBiID1cbiAgbGV0IGMgPSBhICsgYiBpblxuICBtYXRjaCBhIDwgMCwgYiA8IDAsIGMgPCAwIHdpdGhcbiAgfCB0cnVlICwgdHJ1ZSAsIGZhbHNlXG4gIHwgZmFsc2UsIGZhbHNlLCB0cnVlICAtPiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmV4dGVuZFwiICgqIG92ZXJmbG93ICopXG4gIHwgXyAtPiBjXG5cbmxldCBleHRlbmQgcyBsZWZ0IHJpZ2h0ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzICsrIGxlZnQgKysgcmlnaHQgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIGxldCAoc3Jjb2ZmLCBkc3RvZmYpID0gaWYgbGVmdCA8IDAgdGhlbiAtbGVmdCwgMCBlbHNlIDAsIGxlZnQgaW5cbiAgbGV0IGNweWxlbiA9IEludC5taW4gKGxlbmd0aCBzIC0gc3Jjb2ZmKSAobGVuIC0gZHN0b2ZmKSBpblxuICBpZiBjcHlsZW4gPiAwIHRoZW4gdW5zYWZlX2JsaXQgcyBzcmNvZmYgciBkc3RvZmYgY3B5bGVuO1xuICByXG5cbmxldCBmaWxsIHMgb2ZzIGxlbiBjID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuZmlsbCAvIEJ5dGVzLmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIHMgb2ZzIGxlbiBjXG5cbmxldCBibGl0IHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggczEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIHMyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCeXRlcy5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbmxldCBibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gc3RyaW5nX2xlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5ibGl0IC8gQnl0ZXMuYmxpdF9zdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9ibGl0X3N0cmluZyBzMSBvZnMxIHMyIG9mczIgbGVuXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJCeXRlcy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IGVtcHR5XG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpblxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKGNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0IHMxIHMyID1cbiAgbGV0IGwxID0gbGVuZ3RoIHMxIGluXG4gIGxldCBsMiA9IGxlbmd0aCBzMiBpblxuICBsZXQgciA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgdW5zYWZlX2JsaXQgczEgMCByIDAgbDE7XG4gIHVuc2FmZV9ibGl0IHMyIDAgciBsMSBsMjtcbiAgclxuXG5cbmV4dGVybmFsIGNoYXJfY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBjaGFyX2NocjogaW50IC0+IGNoYXIgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgbGV0IGogPSByZWYgKGxlbiAtIDEpIGluXG4gIHdoaWxlICFqID49ICFpICYmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgIWopIGRvXG4gICAgZGVjciBqXG4gIGRvbmU7XG4gIGlmICFqID49ICFpIHRoZW5cbiAgICBzdWIgcyAhaSAoIWogLSAhaSArIDEpXG4gIGVsc2VcbiAgICBlbXB0eVxuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgbiA6PSAhbiArXG4gICAgICAobWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcbicgfCAnXFx0JyB8ICdcXHInIHwgJ1xcYicgLT4gMlxuICAgICAgIHwgJyAnIC4uICd+JyAtPiAxXG4gICAgICAgfCBfIC0+IDQpXG4gIGRvbmU7XG4gIGlmICFuID0gbGVuZ3RoIHMgdGhlbiBjb3B5IHMgZWxzZSBiZWdpblxuICAgIGxldCBzJyA9IGNyZWF0ZSAhbiBpblxuICAgIG4gOj0gMDtcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvXG4gICAgICBiZWdpbiBtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICgnXFxcIicgfCAnXFxcXCcpIGFzIGMgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICduJ1xuICAgICAgfCAnXFx0JyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ3QnXG4gICAgICB8ICdcXHInIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAncidcbiAgICAgIHwgJ1xcYicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdiJ1xuICAgICAgfCAoJyAnIC4uICd+JykgYXMgYyAtPiB1bnNhZmVfc2V0IHMnICFuIGNcbiAgICAgIHwgYyAtPlxuICAgICAgICAgIGxldCBhID0gY2hhcl9jb2RlIGMgaW5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJztcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSAvIDEwMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyAoYSAvIDEwKSBtb2QgMTApKTtcbiAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAoY2hhcl9jaHIgKDQ4ICsgYSBtb2QgMTApKTtcbiAgICAgIGVuZDtcbiAgICAgIGluY3IgblxuICAgIGRvbmU7XG4gICAgcydcbiAgZW5kXG5cbmxldCBtYXAgZiBzID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBsID0gMCB0aGVuIHMgZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG8gdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwaSBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IHMgaSkpIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBzIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIudXBwZXJjYXNlX2FzY2lpIHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9IG1hcCBDaGFyLmxvd2VyY2FzZV9hc2NpaSBzXG5cbmxldCBhcHBseTEgZiBzID1cbiAgaWYgbGVuZ3RoIHMgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjb3B5IHMgaW5cbiAgICB1bnNhZmVfc2V0IHIgMCAoZih1bnNhZmVfZ2V0IHMgMCkpO1xuICAgIHJcbiAgZW5kXG5cbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IHVuY2FwaXRhbGl6ZV9hc2NpaSBzID0gYXBwbHkxIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleCBzIGMgPSBpbmRleF9yZWMgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4X2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW4gaW52YWxpZF9hcmcgXCJTdHJpbmcuaW5kZXhfZnJvbSAvIEJ5dGVzLmluZGV4X2Zyb21cIiBlbHNlXG4gIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjIHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgcmluZGV4X3JlYyBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyByaW5kZXhfcmVjX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIHJpbmRleF9yZWNfb3B0IHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yY29udGFpbnNfZnJvbSAvIEJ5dGVzLnJjb250YWluc19mcm9tXCJcbiAgZWxzZVxuICAgIHRyeSBpZ25vcmUgKHJpbmRleF9yZWMgcyBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cblxudHlwZSB0ID0gYnl0ZXNcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9ieXRlc19lcXVhbFwiIFtAQG5vYWxsb2NdXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPSBtYXAgQ2hhci51cHBlcmNhc2Ugc1xubGV0IGxvd2VyY2FzZSBzID0gbWFwIENoYXIubG93ZXJjYXNlIHNcblxubGV0IGNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgdW5jYXBpdGFsaXplIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2Ugc1xuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBzID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA9IGxlbmd0aCBzIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gZ2V0IHMgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBuID0gcmVmIDAgaW5cbiAgbGV0IGJ1ZiA9IHJlZiAobWFrZSAyNTYgJ1xcMDAwJykgaW5cbiAgbGV0IHJlc2l6ZSAoKSA9XG4gICAgKCogcmVzaXplICopXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWluICgyICogbGVuZ3RoICFidWYpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgIGlmIGxlbmd0aCAhYnVmID0gbmV3X2xlbiB0aGVuIGZhaWx3aXRoIFwiQnl0ZXMub2Zfc2VxOiBjYW5ub3QgZ3JvdyBieXRlc1wiO1xuICAgIGxldCBuZXdfYnVmID0gbWFrZSBuZXdfbGVuICdcXDAwMCcgaW5cbiAgICBibGl0ICFidWYgMCBuZXdfYnVmIDAgIW47XG4gICAgYnVmIDo9IG5ld19idWZcbiAgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIGMgLT5cbiAgICAgICBpZiAhbiA9IGxlbmd0aCAhYnVmIHRoZW4gcmVzaXplKCk7XG4gICAgICAgc2V0ICFidWYgIW4gYztcbiAgICAgICBpbmNyIG4pXG4gICAgaTtcbiAgc3ViICFidWYgMCAhblxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG4oKiBUaGUgZ2V0XyBmdW5jdGlvbnMgYXJlIGFsbCBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxuXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNnVcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWJ5dGVzX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9ieXRlc19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX2J5dGVzX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfYnl0ZXNfZ2V0NjRcIlxuXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVjYW1sX2J5dGVzX3NldDE2dVwiXG5leHRlcm5hbCBzZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3NhZmVfc2V0XCJcbmV4dGVybmFsIHNldF9pbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZcIlxuZXh0ZXJuYWwgc2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyIC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDMyXCJcbmV4dGVybmFsIHNldF9pbnQ2NF9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NFwiXG5leHRlcm5hbCBzd2FwMTYgOiBpbnQgLT4gaW50ID0gXCIlYnN3YXAxNlwiXG5leHRlcm5hbCBzd2FwMzIgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWJzd2FwX2ludDMyXCJcbmV4dGVybmFsIHN3YXA2NCA6IGludDY0IC0+IGludDY0ID0gXCIlYnN3YXBfaW50NjRcIlxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IHVuc2FmZV9nZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX2dldF91aW50MTZfbmUgYiBpXG4gIGVsc2Ugc3dhcDE2ICh1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGkpXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSB4XG5cbmxldCB1bnNhZmVfc2V0X3VpbnQxNl9iZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuXG4gIHRoZW4gdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHggZWxzZVxuICB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuXG5sZXQgc2V0X2ludDE2X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQxNl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2xlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9iZSBiIGkgeCA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X3VpbnQ4ID0gc2V0X2ludDhcbmxldCBzZXRfdWludDE2X25lID0gc2V0X2ludDE2X25lXG5sZXQgc2V0X3VpbnQxNl9iZSA9IHNldF9pbnQxNl9iZVxubGV0IHNldF91aW50MTZfbGUgPSBzZXRfaW50MTZfbGVcblxuKCogVVRGIGNvZGVjcyBhbmQgdmFsaWRhdGlvbnMgKilcblxubGV0IGRlY19pbnZhbGlkID0gVWNoYXIudXRmX2RlY29kZV9pbnZhbGlkXG5sZXRbQGlubGluZV0gZGVjX3JldCBuIHUgPSBVY2hhci51dGZfZGVjb2RlIG4gKFVjaGFyLnVuc2FmZV9vZl9pbnQgdSlcblxuKCogSW4gY2FzZSBvZiBkZWNvZGluZyBlcnJvciwgaWYgd2UgZXJyb3Igb24gdGhlIGZpcnN0IGJ5dGUsIHdlXG4gICBjb25zdW1lIHRoZSBieXRlLCBvdGhlcndpc2Ugd2UgY29uc3VtZSB0aGUgW25dIGJ5dGVzIHByZWNlZWRpbmdcbiAgIHRoZSBlcnJvcmluZyBieXRlLlxuXG4gICBUaGlzIG1lYW5zIHRoYXQgaWYgYSBjbGllbnQgdXNlcyBkZWNvZGVzIHdpdGhvdXQgY2FyaW5nIGFib3V0XG4gICB2YWxpZGl0eSBpdCBuYXR1cmFsbHkgcmVwbGFjZSBib2d1cyBkYXRhIHdpdGggVWNoYXIucmVwIGFjY29yZGluZ1xuICAgdG8gdGhlIFdIQVRXRyBFbmNvZGluZyBzdGFuZGFyZC4gT3RoZXIgc2NoZW1lcyBhcmUgcG9zc2libGUgYnlcbiAgIGNvbnN1bHRpbmcgdGhlIG51bWJlciBvZiB1c2VkIGJ5dGVzIG9uIGludmFsaWQgZGVjb2Rlcy4gRm9yIG1vcmVcbiAgIGRldGFpbHMgc2VlIGh0dHBzOi8vaHNpdm9uZW4uZmkvYnJva2VuLXV0Zi04L1xuXG4gICBGb3IgdGhpcyByZWFzb24gaW4gW2dldF91dGZfOF91Y2hhcl0gd2UgZ3JhZHVhbGx5IGNoZWNrIHRoZSBuZXh0XG4gICBieXRlIGlzIGF2YWlsYWJsZSByYXRoZXIgdGhhbiBkb2luZyBpdCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgIGZpcnN0IGJ5dGUuIENvbnRyYXN0IHdpdGggW2lzX3ZhbGlkX3V0Zl84XS4gKilcblxuKCogVVRGLTggKilcblxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feEJGIGIgPSBiIGxzciA2IDw+IDBiMTBcbmxldFtAaW5saW5lXSBub3RfaW5feEEwX3RvX3hCRiBiID0gYiBsc3IgNSA8PiAwYjEwMVxubGV0W0BpbmxpbmVdIG5vdF9pbl94ODBfdG9feDlGIGIgPSBiIGxzciA1IDw+IDBiMTAwXG5sZXRbQGlubGluZV0gbm90X2luX3g5MF90b194QkYgYiA9IGIgPCAweDkwIHx8IDB4QkYgPCBiXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OEYgYiA9IGIgbHNyIDQgPD4gMHg4XG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8yIGIwIGIxID1cbiAgKChiMCBsYW5kIDB4MUYpIGxzbCA2KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpKVxuXG5sZXRbQGlubGluZV0gdXRmXzhfdWNoYXJfMyBiMCBiMSBiMiA9XG4gICgoYjAgbGFuZCAweDBGKSBsc2wgMTIpIGxvclxuICAoKGIxIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIyIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzID1cbiAgKChiMCBsYW5kIDB4MDcpIGxzbCAxOCkgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgMTIpIGxvclxuICAoKGIyIGxhbmQgMHgzRikgbHNsIDYpIGxvclxuICAoKGIzIGxhbmQgMHgzRikpXG5cbmxldCBnZXRfdXRmXzhfdWNoYXIgYiBpID1cbiAgbGV0IGIwID0gZ2V0X3VpbnQ4IGIgaSBpbiAoKiByYWlzZXMgaWYgW2ldIGlzIG5vdCBhIHZhbGlkIGluZGV4LiAqKVxuICBsZXQgZ2V0ID0gdW5zYWZlX2dldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIENoYXIudW5zYWZlX2NociBiMCB3aXRoICgqIFNlZSBUaGUgVW5pY29kZSBTdGFuZGFyZCwgVGFibGUgMy43ICopXG4gIHwgJ1xceDAwJyAuLiAnXFx4N0YnIC0+IGRlY19yZXQgMSBiMFxuICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBkZWNfcmV0IDIgKHV0Zl84X3VjaGFyXzIgYjAgYjEpXG4gIHwgJ1xceEUwJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94QTBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RTEnIC4uICdcXHhFQycgfCAnXFx4RUUnIC4uICdcXHhFRicgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBkZWNfcmV0IDMgKHV0Zl84X3VjaGFyXzMgYjAgYjEgYjIpXG4gIHwgJ1xceEVEJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDlGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RjAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g5MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgJ1xceEY0JyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feDhGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgbGV0IGIzID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMyB0aGVuIGRlY19pbnZhbGlkIDMgZWxzZVxuICAgICAgZGVjX3JldCA0ICh1dGZfOF91Y2hhcl80IGIwIGIxIGIyIGIzKVxuICB8IF8gLT4gZGVjX2ludmFsaWQgMVxuXG5sZXQgc2V0X3V0Zl84X3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDggaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4MDA3RiAtPlxuICAgICAgc2V0X3VpbnQ4IGIgaSB1O1xuICAgICAgMVxuICB8IHUgd2hlbiB1IDw9IDB4MDdGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4QzAgbG9yICh1IGxzciA2KSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMilcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEUwIGxvciAodSBsc3IgMTIpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDMpXG4gIHwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2VcbiAgICAgIChzZXRfdWludDggYiBpICgweEYwIGxvciAodSBsc3IgMTgpKTtcbiAgICAgICBzZXQgYiAoaSArIDEpICgweDgwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDB4M0YpKTtcbiAgICAgICBzZXQgYiAoaSArIDIpICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIGxhc3QgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpO1xuICAgICAgIDQpXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl84IGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gICAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIChnZXQgYiBpKSB3aXRoXG4gICAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gbG9vcCBtYXggYiAoaSArIDEpXG4gICAgfCAnXFx4QzInIC4uICdcXHhERicgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RTAnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feEEwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAyIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RUQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g5RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94OTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAyKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhGMScgLi4gJ1xceEYzJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEY0JyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194OEYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgXyAtPiBmYWxzZVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZCRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmJlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZiZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9iZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuXG4oKiBVVEYtMTZMRSAqKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSA9XG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBtYXggdGhlbiBpbnZhbGlkX2FyZyBcImluZGV4IG91dCBvZiBib3VuZHNcIiBlbHNlXG4gIGlmIGkgPSBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBkZWNfcmV0IDIgdVxuICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGRlY19pbnZhbGlkIDJcbiAgfCBoaSAtPiAoKiBjb21iaW5lIFtoaV0gd2l0aCBhIGxvdyBzdXJyb2dhdGUgKilcbiAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAobWF4IC0gaSArIDEpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19pbnZhbGlkIDIgKCogcmV0cnkgaGVyZSAqKVxuICAgICAgfCBsbyAtPlxuICAgICAgICAgIGxldCB1ID0gKCgoaGkgbGFuZCAweDNGRikgbHNsIDEwKSBsb3IgKGxvIGxhbmQgMHgzRkYpKSArIDB4MTAwMDAgaW5cbiAgICAgICAgICBkZWNfcmV0IDQgdVxuXG5sZXQgc2V0X3V0Zl8xNmxlX3VjaGFyIGIgaSB1ID1cbiAgbGV0IHNldCA9IHVuc2FmZV9zZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuICB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgIGxldCBsYXN0ID0gaSArIDEgaW5cbiAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiAwIGVsc2UgKHNldCBiIGkgdTsgMilcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgbGV0IHUnID0gdSAtIDB4MTAwMDAgaW5cbiAgICAgIGxldCBoaSA9ICgweEQ4MDAgbG9yICh1JyBsc3IgMTApKSBpblxuICAgICAgbGV0IGxvID0gKDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpKSBpblxuICAgICAgc2V0IGIgaSBoaTsgc2V0IGIgKGkgKyAyKSBsbzsgNFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBpc192YWxpZF91dGZfMTZsZSBiID1cbiAgbGV0IHJlYyBsb29wIG1heCBiIGkgPVxuICAgIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBpblxuICAgIGlmIGkgPiBtYXggdGhlbiB0cnVlIGVsc2VcbiAgICBpZiBpID0gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgIHwgdSB3aGVuIHUgPCAweEQ4MDAgfHwgdSA+IDB4REZGRiAtPiBsb29wIG1heCBiIChpICsgMilcbiAgICB8IHUgd2hlbiB1ID4gMHhEQkZGIC0+IGZhbHNlXG4gICAgfCBfaGkgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBnZXQgYiAoaSArIDIpIHdpdGhcbiAgICAgICAgfCB1IHdoZW4gdSA8IDB4REMwMCB8fCB1ID4gMHhERkZGIC0+IGZhbHNlXG4gICAgICAgIHwgX2xvIC0+IGxvb3AgbWF4IGIgKGkgKyA0KVxuICBpblxuICBsb29wIChsZW5ndGggYiAtIDEpIGIgMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTdHJpbmcgb3BlcmF0aW9ucywgYmFzZWQgb24gYnl0ZSBzZXF1ZW5jZSBvcGVyYXRpb25zICopXG5cbigqIFdBUk5JTkc6IFNvbWUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBhcmUgZHVwbGljYXRlZCBpbiBieXRlcy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBieXRlcy5tbC5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgXCJkdXBsaWNhdGVkXCIgY29tbWVudCBhYm92ZSB0aGVpciBkZWZpbml0aW9uLlxuKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlc3RyaW5nX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+ICBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV9maWxsIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2ZpbGxfc3RyaW5nXCIgW0BAbm9hbGxvY11cblxubW9kdWxlIEIgPSBCeXRlc1xuXG5sZXQgYnRzID0gQi51bnNhZmVfdG9fc3RyaW5nXG5sZXQgYm9zID0gQi51bnNhZmVfb2Zfc3RyaW5nXG5cbmxldCBtYWtlIG4gYyA9XG4gIEIubWFrZSBuIGMgfD4gYnRzXG5sZXQgaW5pdCBuIGYgPVxuICBCLmluaXQgbiBmIHw+IGJ0c1xubGV0IGVtcHR5ID0gXCJcIlxubGV0IGNvcHkgcyA9XG4gIEIuY29weSAoYm9zIHMpIHw+IGJ0c1xubGV0IG9mX2J5dGVzID0gQi50b19zdHJpbmdcbmxldCB0b19ieXRlcyA9IEIub2Zfc3RyaW5nXG5sZXQgc3ViIHMgb2ZzIGxlbiA9XG4gIEIuc3ViIChib3Mgcykgb2ZzIGxlbiB8PiBidHNcbmxldCBmaWxsID1cbiAgQi5maWxsXG5sZXQgYmxpdCA9XG4gIEIuYmxpdF9zdHJpbmdcblxubGV0IGVuc3VyZV9nZSAoeDppbnQpIHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29uY2F0XCJcblxubGV0IHJlYyBzdW1fbGVuZ3RocyBhY2Mgc2VwbGVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBoZCA6OiBbXSAtPiBsZW5ndGggaGQgKyBhY2NcbiAgfCBoZCA6OiB0bCAtPiBzdW1fbGVuZ3RocyAoZW5zdXJlX2dlIChsZW5ndGggaGQgKyBzZXBsZW4gKyBhY2MpIGFjYykgc2VwbGVuIHRsXG5cbmxldCByZWMgdW5zYWZlX2JsaXRzIGRzdCBwb3Mgc2VwIHNlcGxlbiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZHN0XG4gIHwgaGQgOjogW10gLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7IGRzdFxuICB8IGhkIDo6IHRsIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpO1xuICAgIHVuc2FmZV9ibGl0IHNlcCAwIGRzdCAocG9zICsgbGVuZ3RoIGhkKSBzZXBsZW47XG4gICAgdW5zYWZlX2JsaXRzIGRzdCAocG9zICsgbGVuZ3RoIGhkICsgc2VwbGVuKSBzZXAgc2VwbGVuIHRsXG5cbmxldCBjb25jYXQgc2VwID0gZnVuY3Rpb25cbiAgICBbXSAtPiBcIlwiXG4gIHwgbCAtPiBsZXQgc2VwbGVuID0gbGVuZ3RoIHNlcCBpbiBidHMgQEBcbiAgICAgICAgICB1bnNhZmVfYmxpdHNcbiAgICAgICAgICAgIChCLmNyZWF0ZSAoc3VtX2xlbmd0aHMgMCBzZXBsZW4gbCkpXG4gICAgICAgICAgICAwIHNlcCBzZXBsZW4gbFxuXG5sZXQgY2F0ID0gKCBeIClcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGl0ZXIgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmICh1bnNhZmVfZ2V0IHMgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlcmkgZiBzID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbmxldCBtYXAgZiBzID1cbiAgQi5tYXAgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IG1hcGkgZiBzID1cbiAgQi5tYXBpIGYgKGJvcyBzKSB8PiBidHNcbmxldCBmb2xkX3JpZ2h0IGYgeCBhID1cbiAgQi5mb2xkX3JpZ2h0IGYgKGJvcyB4KSBhXG5sZXQgZm9sZF9sZWZ0IGYgYSB4ID1cbiAgQi5mb2xkX2xlZnQgZiBhIChib3MgeClcbmxldCBleGlzdHMgZiBzID1cbiAgQi5leGlzdHMgZiAoYm9zIHMpXG5sZXQgZm9yX2FsbCBmIHMgPVxuICBCLmZvcl9hbGwgZiAoYm9zIHMpXG5cbigqIEJld2FyZTogd2UgY2Fubm90IHVzZSBCLnRyaW0gb3IgQi5lc2NhcGUgYmVjYXVzZSB0aGV5IGFsd2F5cyBtYWtlIGFcbiAgIGNvcHksIGJ1dCBTdHJpbmcubWxpIHNwZWxscyBvdXQgc29tZSBjYXNlcyB3aGVyZSB3ZSBhcmUgbm90IGFsbG93ZWRcbiAgIHRvIG1ha2UgYSBjb3B5LiAqKVxuXG5sZXQgaXNfc3BhY2UgPSBmdW5jdGlvblxuICB8ICcgJyB8ICdcXDAxMicgfCAnXFxuJyB8ICdcXHInIHwgJ1xcdCcgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxubGV0IHRyaW0gcyA9XG4gIGlmIHMgPSBcIlwiIHRoZW4gc1xuICBlbHNlIGlmIGlzX3NwYWNlICh1bnNhZmVfZ2V0IHMgMCkgfHwgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAobGVuZ3RoIHMgLSAxKSlcbiAgICB0aGVuIGJ0cyAoQi50cmltIChib3MgcykpXG4gIGVsc2Ugc1xuXG5sZXQgZXNjYXBlZCBzID1cbiAgbGV0IHJlYyBlc2NhcGVfaWZfbmVlZGVkIHMgbiBpID1cbiAgICBpZiBpID49IG4gdGhlbiBzIGVsc2VcbiAgICAgIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJ1xcXCInIHwgJ1xcXFwnIHwgJ1xcMDAwJy4uJ1xcMDMxJyB8ICdcXDEyNycuLiAnXFwyNTUnIC0+XG4gICAgICAgICAgYnRzIChCLmVzY2FwZWQgKGJvcyBzKSlcbiAgICAgIHwgXyAtPiBlc2NhcGVfaWZfbmVlZGVkIHMgbiAoaSsxKVxuICBpblxuICBlc2NhcGVfaWZfbmVlZGVkIHMgKGxlbmd0aCBzKSAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjIHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIGluZGV4X3JlYyBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgaW5kZXhfcmVjX29wdCBzIGxpbSBpIGMgPVxuICBpZiBpID49IGxpbSB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSBpbmRleF9yZWNfb3B0IHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfb3B0IHMgYyA9IGluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMpIDAgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgICBpbmRleF9yZWMgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tX29wdCAvIEJ5dGVzLmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIGluZGV4X3JlY19vcHQgcyBsIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXggcyBjID0gcmluZGV4X3JlYyBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tIHMgaSBjID1cbiAgaWYgaSA8IC0xIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJpbmRleF9mcm9tIC8gQnl0ZXMucmluZGV4X2Zyb21cIlxuICBlbHNlXG4gICAgcmluZGV4X3JlYyBzIGkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9vcHQgcyBjID0gcmluZGV4X3JlY19vcHQgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByaW5kZXhfZnJvbV9vcHQgcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMucmluZGV4X2Zyb21fb3B0XCJcbiAgZWxzZVxuICAgIHJpbmRleF9yZWNfb3B0IHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWluc19mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcuY29udGFpbnNfZnJvbSAvIEJ5dGVzLmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAoaW5kZXhfcmVjIHMgbCBpIGMpOyB0cnVlIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBjb250YWlucyBzIGMgPSBjb250YWluc19mcm9tIHMgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxubGV0IHVwcGVyY2FzZV9hc2NpaSBzID1cbiAgQi51cHBlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2VfYXNjaWkgcyA9XG4gIEIubG93ZXJjYXNlX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZV9hc2NpaSBzID1cbiAgQi5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLnVuY2FwaXRhbGl6ZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3RhcnRzX3dpdGggfnByZWZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9wcmUgPSBsZW5ndGggcHJlZml4IGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fcHJlIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIGkgPD4gdW5zYWZlX2dldCBwcmVmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBsZW5fcyA+PSBsZW5fcHJlICYmIGF1eCAwXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBlbmRzX3dpdGggfnN1ZmZpeCBzID1cbiAgbGV0IGxlbl9zID0gbGVuZ3RoIHNcbiAgYW5kIGxlbl9zdWYgPSBsZW5ndGggc3VmZml4IGluXG4gIGxldCBkaWZmID0gbGVuX3MgLSBsZW5fc3VmIGluXG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBsZW5fc3VmIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgdW5zYWZlX2dldCBzIChkaWZmICsgaSkgPD4gdW5zYWZlX2dldCBzdWZmaXggaSB0aGVuIGZhbHNlXG4gICAgZWxzZSBhdXggKGkgKyAxKVxuICBpbiBkaWZmID49IDAgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHNwbGl0X29uX2NoYXIgc2VwIHMgPVxuICBsZXQgciA9IHJlZiBbXSBpblxuICBsZXQgaiA9IHJlZiAobGVuZ3RoIHMpIGluXG4gIGZvciBpID0gbGVuZ3RoIHMgLSAxIGRvd250byAwIGRvXG4gICAgaWYgdW5zYWZlX2dldCBzIGkgPSBzZXAgdGhlbiBiZWdpblxuICAgICAgciA6PSBzdWIgcyAoaSArIDEpICghaiAtIGkgLSAxKSA6OiAhcjtcbiAgICAgIGogOj0gaVxuICAgIGVuZFxuICBkb25lO1xuICBzdWIgcyAwICFqIDo6ICFyXG5cbigqIERlcHJlY2F0ZWQgZnVuY3Rpb25zIGltcGxlbWVudGVkIHZpYSBvdGhlciBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqKVxuW0BAQG9jYW1sLndhcm5pbmcgXCItM1wiXVxubGV0IHVwcGVyY2FzZSBzID1cbiAgQi51cHBlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBsb3dlcmNhc2UgcyA9XG4gIEIubG93ZXJjYXNlIChib3MgcykgfD4gYnRzXG5sZXQgY2FwaXRhbGl6ZSBzID1cbiAgQi5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5sZXQgdW5jYXBpdGFsaXplIHMgPVxuICBCLnVuY2FwaXRhbGl6ZSAoYm9zIHMpIHw+IGJ0c1xuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxuZXh0ZXJuYWwgZXF1YWwgOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2wgPSBcImNhbWxfc3RyaW5nX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gYm9zIHMgfD4gQi50b19zZXFcblxubGV0IHRvX3NlcWkgcyA9IGJvcyBzIHw+IEIudG9fc2VxaVxuXG5sZXQgb2Zfc2VxIGcgPSBCLm9mX3NlcSBnIHw+IGJ0c1xuXG4oKiBVVEYgZGVjb2RlcnMgYW5kIHZhbGlkYXRvcnMgKilcblxubGV0IGdldF91dGZfOF91Y2hhciBzIGkgPSBCLmdldF91dGZfOF91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfOCBzID0gQi5pc192YWxpZF91dGZfOCAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2YmVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2YmUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2YmUgKGJvcyBzKVxuXG5sZXQgZ2V0X3V0Zl8xNmxlX3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl8xNmxlX3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIHMgPSBCLmlzX3ZhbGlkX3V0Zl8xNmxlIChib3MgcylcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZy9kZWNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgZ2V0X3VpbnQ4IDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlY2FtbF9zdHJpbmdfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfc3RyaW5nX2dldDMyXCJcbmV4dGVybmFsIGdldF9pbnQ2NF9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX3N0cmluZ19nZXQ2NFwiXG5cbmxldCBnZXRfaW50OCBzIGkgPSBCLmdldF9pbnQ4IChib3MgcykgaVxubGV0IGdldF91aW50MTZfbGUgcyBpID0gQi5nZXRfdWludDE2X2xlIChib3MgcykgaVxubGV0IGdldF91aW50MTZfYmUgcyBpID0gQi5nZXRfdWludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9uZSBzIGkgPSBCLmdldF9pbnQxNl9uZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbGUgcyBpID0gQi5nZXRfaW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2JlIHMgaSA9IEIuZ2V0X2ludDE2X2JlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9sZSBzIGkgPSBCLmdldF9pbnQzMl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfYmUgcyBpID0gQi5nZXRfaW50MzJfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2xlIHMgaSA9IEIuZ2V0X2ludDY0X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9iZSBzIGkgPSBCLmdldF9pbnQ2NF9iZSAoYm9zIHMpIGlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQW4gYWxpYXMgZm9yIHRoZSB0eXBlIG9mIGFycmF5cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGFycmF5XG5cbigqIEFycmF5IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbGVuZ3RoIDogJ2EgYXJyYXkgLT4gaW50ID0gXCIlYXJyYXlfbGVuZ3RoXCJcbmV4dGVybmFsIGdldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3NhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9nZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV91bnNhZmVfc2V0XCJcbmV4dGVybmFsIG1ha2U6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgY3JlYXRlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIHVuc2FmZV9zdWIgOiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X3N1YlwiXG5leHRlcm5hbCBhcHBlbmRfcHJpbSA6ICdhIGFycmF5IC0+ICdhIGFycmF5IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2FwcGVuZFwiXG5leHRlcm5hbCBjb25jYXQgOiAnYSBhcnJheSBsaXN0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2FycmF5X2NvbmNhdFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6XG4gICdhIGFycmF5IC0+IGludCAtPiAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfYmxpdFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6XG4gICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9maWxsXCJcbmV4dGVybmFsIGNyZWF0ZV9mbG9hdDogaW50IC0+IGZsb2F0IGFycmF5ID0gXCJjYW1sX21ha2VfZmxvYXRfdmVjdFwiXG5sZXQgbWFrZV9mbG9hdCA9IGNyZWF0ZV9mbG9hdFxuXG5tb2R1bGUgRmxvYXRhcnJheSA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gZmxvYXRhcnJheSA9IFwiY2FtbF9mbG9hdGFycmF5X2NyZWF0ZVwiXG4gIGV4dGVybmFsIGxlbmd0aCA6IGZsb2F0YXJyYXkgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX2dldFwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0XG4gICAgICA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5lbmRcblxubGV0IGluaXQgbCBmID1cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2VcbiAgaWYgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmluaXRcIlxuICAoKiBTZWUgIzY1NzUuIFdlIGNvdWxkIGFsc28gY2hlY2sgZm9yIG1heGltdW0gYXJyYXkgc2l6ZSwgYnV0IHRoaXMgZGVwZW5kc1xuICAgICBvbiB3aGV0aGVyIHdlIGNyZWF0ZSBhIGZsb2F0IGFycmF5IG9yIGEgcmVndWxhciBvbmUuLi4gKilcbiAgZWxzZVxuICAgbGV0IHJlcyA9IGNyZWF0ZSBsIChmIDApIGluXG4gICBmb3IgaSA9IDEgdG8gcHJlZCBsIGRvXG4gICAgIHVuc2FmZV9zZXQgcmVzIGkgKGYgaSlcbiAgIGRvbmU7XG4gICByZXNcblxubGV0IG1ha2VfbWF0cml4IHN4IHN5IGluaXQgPVxuICBsZXQgcmVzID0gY3JlYXRlIHN4IFt8fF0gaW5cbiAgZm9yIHggPSAwIHRvIHByZWQgc3ggZG9cbiAgICB1bnNhZmVfc2V0IHJlcyB4IChjcmVhdGUgc3kgaW5pdClcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBjcmVhdGVfbWF0cml4ID0gbWFrZV9tYXRyaXhcblxubGV0IGNvcHkgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW4gaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgdW5zYWZlX3N1YiBhIDAgbFxuXG5sZXQgYXBwZW5kIGExIGEyID1cbiAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gIGlmIGwxID0gMCB0aGVuIGNvcHkgYTJcbiAgZWxzZSBpZiBsZW5ndGggYTIgPSAwIHRoZW4gdW5zYWZlX3N1YiBhMSAwIGwxXG4gIGVsc2UgYXBwZW5kX3ByaW0gYTEgYTJcblxubGV0IHN1YiBhIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnN1YlwiXG4gIGVsc2UgdW5zYWZlX3N1YiBhIG9mcyBsZW5cblxubGV0IGZpbGwgYSBvZnMgbGVuIHYgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIGEgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZpbGxcIlxuICBlbHNlIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbmxldCBibGl0IGExIG9mczEgYTIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBsZW5ndGggYTEgLSBsZW5cbiAgICAgICAgICAgICB8fCBvZnMyIDwgMCB8fCBvZnMyID4gbGVuZ3RoIGEyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5ibGl0XCJcbiAgZWxzZSB1bnNhZmVfYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuXG5cbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgaXRlcjIgZiBhIGIgPVxuICBpZiBsZW5ndGggYSA8PiBsZW5ndGggYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5pdGVyMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlXG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSBkb25lXG5cbmxldCBtYXAgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IG1hcDIgZiBhIGIgPVxuICBsZXQgbGEgPSBsZW5ndGggYSBpblxuICBsZXQgbGIgPSBsZW5ndGggYiBpblxuICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJBcnJheS5tYXAyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2UgYmVnaW5cbiAgICBpZiBsYSA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gY3JlYXRlIGxhIChmICh1bnNhZmVfZ2V0IGEgMCkgKHVuc2FmZV9nZXQgYiAwKSkgaW5cbiAgICAgIGZvciBpID0gMSB0byBsYSAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpKVxuICAgICAgZG9uZTtcbiAgICAgIHJcbiAgICBlbmRcbiAgZW5kXG5cbmxldCBpdGVyaSBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IG1hcGkgZiBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgIGxldCByID0gY3JlYXRlIGwgKGYgMCAodW5zYWZlX2dldCBhIDApKSBpblxuICAgIGZvciBpID0gMSB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgaSAodW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuICBlbmRcblxubGV0IHRvX2xpc3QgYSA9XG4gIGxldCByZWMgdG9saXN0IGkgcmVzID1cbiAgICBpZiBpIDwgMCB0aGVuIHJlcyBlbHNlIHRvbGlzdCAoaSAtIDEpICh1bnNhZmVfZ2V0IGEgaSA6OiByZXMpIGluXG4gIHRvbGlzdCAobGVuZ3RoIGEgLSAxKSBbXVxuXG4oKiBDYW5ub3QgdXNlIExpc3QubGVuZ3RoIGhlcmUgYmVjYXVzZSB0aGUgTGlzdCBtb2R1bGUgZGVwZW5kcyBvbiBBcnJheS4gKilcbmxldCByZWMgbGlzdF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjdVxuICB8IF86OnQgLT4gbGlzdF9sZW5ndGggKHN1Y2MgYWNjdSkgdFxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgYSA9IGNyZWF0ZSAobGlzdF9sZW5ndGggMCBsKSBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGkrMSkgdGwgaW5cbiAgICAgIGZpbGwgMSB0bFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfbGVmdF9tYXAgZiBhY2MgaW5wdXRfYXJyYXkgPVxuICBsZXQgbGVuID0gbGVuZ3RoIGlucHV0X2FycmF5IGluXG4gIGlmIGxlbiA9IDAgdGhlbiAoYWNjLCBbfHxdKSBlbHNlIGJlZ2luXG4gICAgbGV0IGFjYywgZWx0ID0gZiBhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgMCkgaW5cbiAgICBsZXQgb3V0cHV0X2FycmF5ID0gY3JlYXRlIGxlbiBlbHQgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgYWNjJywgZWx0ID0gZiAhYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IGkpIGluXG4gICAgICBhY2MgOj0gYWNjJztcbiAgICAgIHVuc2FmZV9zZXQgb3V0cHV0X2FycmF5IGkgZWx0O1xuICAgIGRvbmU7XG4gICAgIWFjYywgb3V0cHV0X2FycmF5XG4gIGVuZFxuXG5sZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSBsZW5ndGggYSAtIDEgZG93bnRvIDAgZG9cbiAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICBkb25lO1xuICAhclxuXG5sZXQgZXhpc3RzIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsIHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBmb3JfYWxsMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZm9yX2FsbDJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gbG9vcCAoc3VjYyBpKVxuICAgIGVsc2UgZmFsc2UgaW5cbiAgbG9vcCAwXG5cbmxldCBleGlzdHMyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5leGlzdHMyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW1xIHggYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gZmFsc2VcbiAgICBlbHNlIGlmIHggPT0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX29wdCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBpZiBwIHggdGhlbiBTb21lIHhcbiAgICAgIGVsc2UgbG9vcCAoc3VjYyBpKVxuICBpblxuICBsb29wIDBcblxubGV0IGZpbmRfbWFwIGYgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGYgKHVuc2FmZV9nZXQgYSBpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gbG9vcCAoc3VjYyBpKVxuICAgICAgfCBTb21lIF8gYXMgciAtPiByXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3BsaXQgeCA9XG4gIGlmIHggPSBbfHxdIHRoZW4gW3x8XSwgW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IGEwLCBiMCA9IHVuc2FmZV9nZXQgeCAwIGluXG4gICAgbGV0IG4gPSBsZW5ndGggeCBpblxuICAgIGxldCBhID0gY3JlYXRlIG4gYTAgaW5cbiAgICBsZXQgYiA9IGNyZWF0ZSBuIGIwIGluXG4gICAgZm9yIGkgPSAxIHRvIG4gLSAxIGRvXG4gICAgICBsZXQgYWksIGJpID0gdW5zYWZlX2dldCB4IGkgaW5cbiAgICAgIHVuc2FmZV9zZXQgYSBpIGFpO1xuICAgICAgdW5zYWZlX3NldCBiIGkgYmlcbiAgICBkb25lO1xuICAgIGEsIGJcbiAgZW5kXG5cbmxldCBjb21iaW5lIGEgYiA9XG4gIGxldCBuYSA9IGxlbmd0aCBhIGluXG4gIGxldCBuYiA9IGxlbmd0aCBiIGluXG4gIGlmIG5hIDw+IG5iIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5jb21iaW5lXCI7XG4gIGlmIG5hID0gMCB0aGVuIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCB4ID0gY3JlYXRlIG5hICh1bnNhZmVfZ2V0IGEgMCwgdW5zYWZlX2dldCBiIDApIGluXG4gICAgZm9yIGkgPSAxIHRvIG5hIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCB4IGkgKHVuc2FmZV9nZXQgYSBpLCB1bnNhZmVfZ2V0IGIgaSlcbiAgICBkb25lO1xuICAgIHhcbiAgZW5kXG5cbmV4Y2VwdGlvbiBCb3R0b20gb2YgaW50XG5sZXQgc29ydCBjbXAgYSA9XG4gIGxldCBtYXhzb24gbCBpID1cbiAgICBsZXQgaTMxID0gaStpK2krMSBpblxuICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICBpZiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMCB0aGVuIHggOj0gaTMxKzE7XG4gICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICF4XG4gICAgZW5kIGVsc2VcbiAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgdGhlbiBpMzErMVxuICAgICAgZWxzZSBpZiBpMzEgPCBsIHRoZW4gaTMxIGVsc2UgcmFpc2UgKEJvdHRvbSBpKVxuICBpblxuICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgdHJpY2tsZWRvd24gbCBqIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gIGxldCByZWMgYnViYmxlZG93biBsIGkgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgIGJ1YmJsZWRvd24gbCBqXG4gIGluXG4gIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICBsZXQgcmVjIHRyaWNrbGV1cCBpIGUgPVxuICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgIGlmIGNtcCAoZ2V0IGEgZmF0aGVyKSBlIDwgMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gIGZvciBpID0gbCAtIDEgZG93bnRvIDIgZG9cbiAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgIHRyaWNrbGV1cCAoYnViYmxlIGkgMCkgZTtcbiAgZG9uZTtcbiAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuXG5sZXQgY3V0b2ZmID0gNVxubGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgbGV0IG1lcmdlIHNyYzFvZnMgc3JjMWxlbiBzcmMyIHNyYzJvZnMgc3JjMmxlbiBkc3QgZHN0b2ZzID1cbiAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgIGlmIGNtcCBzMSBzMiA8PSAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgaWYgaTEgPCBzcmMxciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgc3JjMiBpMiBkc3QgKGQgKyAxKSAoc3JjMnIgLSBpMilcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgbGV0IGkyID0gaTIgKyAxIGluXG4gICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICBlbmRcbiAgICBpbiBsb29wIHNyYzFvZnMgKGdldCBhIHNyYzFvZnMpIHNyYzJvZnMgKGdldCBzcmMyIHNyYzJvZnMpIGRzdG9mcztcbiAgaW5cbiAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgd2hpbGUgKCFqID49IGRzdG9mcyAmJiBjbXAgKGdldCBkc3QgIWopIGUgPiAwKSBkb1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgZGVjciBqO1xuICAgICAgZG9uZTtcbiAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICBkb25lO1xuICBpblxuICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsZW4gLyAyIGluXG4gICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICBzb3J0dG8gc3Jjb2ZzIGEgKHNyY29mcyArIGwyKSBsMTtcbiAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgIGxldCBsMSA9IGwgLyAyIGluXG4gICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgbGV0IHQgPSBtYWtlIGwyIChnZXQgYSAwKSBpblxuICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgc29ydHRvIDAgYSBsMiBsMTtcbiAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICBlbmRcblxuXG5sZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgb2ZfcmV2X2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGxlbiA9IGxpc3RfbGVuZ3RoIDAgbCBpblxuICAgICAgbGV0IGEgPSBjcmVhdGUgbGVuIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaS0xKSB0bFxuICAgICAgaW5cbiAgICAgIGZpbGwgKGxlbi0yKSB0bFxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgbCA9IFNlcS5mb2xkX2xlZnQgKGZ1biBhY2MgeCAtPiB4OjphY2MpIFtdIGkgaW5cbiAgb2ZfcmV2X2xpc3QgbFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBTZXRzIG92ZXIgb3JkZXJlZCB0eXBlcyAqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBlbHRcbiAgICB0eXBlIHRcbiAgICB2YWwgZW1wdHk6IHRcbiAgICB2YWwgaXNfZW1wdHk6IHQgLT4gYm9vbFxuICAgIHZhbCBtZW06IGVsdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHNpbmdsZXRvbjogZWx0IC0+IHRcbiAgICB2YWwgcmVtb3ZlOiBlbHQgLT4gdCAtPiB0XG4gICAgdmFsIHVuaW9uOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBpbnRlcjogdCAtPiB0IC0+IHRcbiAgICB2YWwgZGlzam9pbnQ6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGRpZmY6IHQgLT4gdCAtPiB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIHN1YnNldDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGVsdCAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgICB2YWwgbWFwOiAoZWx0IC0+IGVsdCkgLT4gdCAtPiB0XG4gICAgdmFsIGZvbGQ6IChlbHQgLT4gJ2EgLT4gJ2EpIC0+IHQgLT4gJ2EgLT4gJ2FcbiAgICB2YWwgZm9yX2FsbDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChlbHQgLT4gZWx0IG9wdGlvbikgLT4gdCAtPiB0XG4gICAgdmFsIHBhcnRpdGlvbjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHQgKiB0XG4gICAgdmFsIGNhcmRpbmFsOiB0IC0+IGludFxuICAgIHZhbCBlbGVtZW50czogdCAtPiBlbHQgbGlzdFxuICAgIHZhbCBtaW5fZWx0OiB0IC0+IGVsdFxuICAgIHZhbCBtaW5fZWx0X29wdDogdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG1heF9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1heF9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgY2hvb3NlOiB0IC0+IGVsdFxuICAgIHZhbCBjaG9vc2Vfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGVsdCAtPiB0IC0+IHQgKiBib29sICogdFxuICAgIHZhbCBmaW5kOiBlbHQgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9vcHQ6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX2ZpcnN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfbGFzdF9vcHQ6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICAgdmFsIG9mX2xpc3Q6IGVsdCBsaXN0IC0+IHRcbiAgICB2YWwgdG9fc2VxX2Zyb20gOiBlbHQgLT4gdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgdG9fcmV2X3NlcSA6IHQgLT4gZWx0IFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiBlbHQgU2VxLnQgLT4gdCAtPiB0XG4gICAgdmFsIG9mX3NlcSA6IGVsdCBTZXEudCAtPiB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9XG4gIHN0cnVjdFxuICAgIHR5cGUgZWx0ID0gT3JkLnRcbiAgICB0eXBlIHQgPSBFbXB0eSB8IE5vZGUgb2Yge2w6dDsgdjplbHQ7IHI6dDsgaDppbnR9XG5cbiAgICAoKiBTZXRzIGFyZSByZXByZXNlbnRlZCBieSBiYWxhbmNlZCBiaW5hcnkgdHJlZXMgKHRoZSBoZWlnaHRzIG9mIHRoZVxuICAgICAgIGNoaWxkcmVuIGRpZmZlciBieSBhdCBtb3N0IDIgKilcblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgICgqIENyZWF0ZXMgYSBuZXcgbm9kZSB3aXRoIGxlZnQgc29uIGwsIHZhbHVlIHYgYW5kIHJpZ2h0IHNvbiByLlxuICAgICAgIFdlIG11c3QgaGF2ZSBhbGwgZWxlbWVudHMgb2YgbCA8IHYgPCBhbGwgZWxlbWVudHMgb2Ygci5cbiAgICAgICBsIGFuZCByIG11c3QgYmUgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDIuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBoZWlnaHQgZm9yIGJldHRlciBzcGVlZC4gKilcblxuICAgIGxldCBjcmVhdGUgbCB2IHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUsIGJ1dCBwZXJmb3JtcyBvbmUgc3RlcCBvZiByZWJhbGFuY2luZyBpZiBuZWNlc3NhcnkuXG4gICAgICAgQXNzdW1lcyBsIGFuZCByIGJhbGFuY2VkIGFuZCB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAzLlxuICAgICAgIElubGluZSBleHBhbnNpb24gb2YgY3JlYXRlIGZvciBiZXR0ZXIgc3BlZWQgaW4gdGhlIG1vc3QgZnJlcXVlbnQgY2FzZVxuICAgICAgIHdoZXJlIG5vIHJlYmFsYW5jaW5nIGlzIHJlcXVpcmVkLiAqKVxuXG4gICAgbGV0IGJhbCBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgKGNyZWF0ZSBsciB2IHIpXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIGxyIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIlNldC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1scmw7IHY9bHJ2OyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbHJsKSBscnYgKGNyZWF0ZSBscnIgdiByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgdiBybCkgcnYgcnJcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPXJsbDsgdj1ybHY7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsbCkgcmx2IChjcmVhdGUgcmxyIHJ2IHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgICgqIEluc2VydGlvbiBvZiBvbmUgZWxlbWVudCAqKVxuXG4gICAgbGV0IHJlYyBhZGQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB0IGVsc2VcbiAgICAgICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdCBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSBhZGQgeCByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdCBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCBzaW5nbGV0b24geCA9IE5vZGV7bD1FbXB0eTsgdj14OyByPUVtcHR5OyBoPTF9XG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIHYgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQgZWxlbWVudHMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkgZWxlbWVudC5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fZWxlbWVudCB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgYmFsIChhZGRfbWluX2VsZW1lbnQgeCBsKSB2IHJcblxuICAgIGxldCByZWMgYWRkX21heF9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgbCB2IChhZGRfbWF4X2VsZW1lbnQgeCByKVxuXG4gICAgKCogU2FtZSBhcyBjcmVhdGUgYW5kIGJhbCwgYnV0IG5vIGFzc3VtcHRpb25zIGFyZSBtYWRlIG9uIHRoZVxuICAgICAgIHJlbGF0aXZlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCByZWMgam9pbiBsIHYgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fZWxlbWVudCB2IHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2VsZW1lbnQgdiBsXG4gICAgICB8IChOb2Rle2w9bGw7IHY9bHY7IHI9bHI7IGg9bGh9LCBOb2Rle2w9cmw7IHY9cnY7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IChqb2luIGxyIHYgcikgZWxzZVxuICAgICAgICAgIGlmIHJoID4gbGggKyAyIHRoZW4gYmFsIChqb2luIGwgdiBybCkgcnYgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgclxuXG4gICAgKCogU21hbGxlc3QgYW5kIGdyZWF0ZXN0IGVsZW1lbnQgb2YgYSBzZXQgKilcblxuICAgIGxldCByZWMgbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHZ9IC0+IHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0IGxcblxuICAgIGxldCByZWMgbWluX2VsdF9vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gU29tZSB2XG4gICAgICB8IE5vZGV7bH0gLT4gbWluX2VsdF9vcHQgbFxuXG4gICAgbGV0IHJlYyBtYXhfZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7djsgcj1FbXB0eX0gLT4gdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHQgclxuXG4gICAgbGV0IHJlYyBtYXhfZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtyfSAtPiBtYXhfZWx0X29wdCByXG5cbiAgICAoKiBSZW1vdmUgdGhlIHNtYWxsZXN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIHNldCAqKVxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2VsdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LnJlbW92ZV9taW5fZWx0XCJcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyByfSAtPiByXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2VsdCBsKSB2IHJcblxuICAgICgqIE1lcmdlIHR3byB0cmVlcyBsIGFuZCByIGludG8gb25lLlxuICAgICAgIEFsbCBlbGVtZW50cyBvZiBsIG11c3QgcHJlY2VkZSB0aGUgZWxlbWVudHMgb2Ygci5cbiAgICAgICBBc3N1bWUgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi4gKilcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGJhbCB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiBqb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBTcGxpdHRpbmcuICBzcGxpdCB4IHMgcmV0dXJucyBhIHRyaXBsZSAobCwgcHJlc2VudCwgcikgd2hlcmVcbiAgICAgICAgLSBsIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA8IHhcbiAgICAgICAgLSByIGlzIHRoZSBzZXQgb2YgZWxlbWVudHMgb2YgcyB0aGF0IGFyZSA+IHhcbiAgICAgICAgLSBwcmVzZW50IGlzIGZhbHNlIGlmIHMgY29udGFpbnMgbm8gZWxlbWVudCBlcXVhbCB0byB4LFxuICAgICAgICAgIG9yIHRydWUgaWYgcyBjb250YWlucyBhbiBlbGVtZW50IGVxdWFsIHRvIHguICopXG5cbiAgICBsZXQgcmVjIHNwbGl0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIChFbXB0eSwgZmFsc2UsIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIChsLCB0cnVlLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBsciwgcHJlcywgcnIpXG5cbiAgICAoKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2V0IG9wZXJhdGlvbnMgKilcblxuICAgIGxldCBlbXB0eSA9IEVtcHR5XG5cbiAgICBsZXQgaXNfZW1wdHkgPSBmdW5jdGlvbiBFbXB0eSAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9IGFzIHQpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpblxuICAgICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsbCB2IHJcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IHJyID0gcmVtb3ZlIHggciBpblxuICAgICAgICAgICAgICBpZiByID09IHJyIHRoZW4gdFxuICAgICAgICAgICAgICBlbHNlIGJhbCBsIHYgcnJcblxuICAgIGxldCByZWMgdW5pb24gczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIHQyKSAtPiB0MlxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxOyBoPWgxfSwgTm9kZXtsPWwyOyB2PXYyOyByPXIyOyBoPWgyfSkgLT5cbiAgICAgICAgICBpZiBoMSA+PSBoMiB0aGVuXG4gICAgICAgICAgICBpZiBoMiA9IDEgdGhlbiBhZGQgdjIgczEgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwyLCBfLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjEgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgaDEgPSAxIHRoZW4gYWRkIHYxIHMyIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbGV0IChsMSwgXywgcjEpID0gc3BsaXQgdjIgczEgaW5cbiAgICAgICAgICAgICAgam9pbiAodW5pb24gbDEgbDIpIHYyICh1bmlvbiByMSByMilcbiAgICAgICAgICAgIGVuZFxuXG4gICAgbGV0IHJlYyBpbnRlciBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBFbXB0eVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoaW50ZXIgbDEgbDIpIChpbnRlciByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGludGVyIGwxIGwyKSB2MSAoaW50ZXIgcjEgcjIpXG5cbiAgICAoKiBTYW1lIGFzIHNwbGl0LCBidXQgY29tcHV0ZSB0aGUgbGVmdCBhbmQgcmlnaHQgc3VidHJlZXNcbiAgICAgICBvbmx5IGlmIHRoZSBwaXZvdCBlbGVtZW50IGlzIG5vdCBpbiB0aGUgc2V0LiAgVGhlIHJpZ2h0IHN1YnRyZWVcbiAgICAgICBpcyBjb21wdXRlZCBvbiBkZW1hbmQuICopXG5cbiAgICB0eXBlIHNwbGl0X2JpcyA9XG4gICAgICB8IEZvdW5kXG4gICAgICB8IE5vdEZvdW5kIG9mIHQgKiAodW5pdCAtPiB0KVxuXG4gICAgbGV0IHJlYyBzcGxpdF9iaXMgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm90Rm91bmQgKEVtcHR5LCAoZnVuICgpIC0+IEVtcHR5KSlcbiAgICAgIHwgTm9kZXtsOyB2OyByOyBffSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBGb3VuZFxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbWF0Y2ggc3BsaXRfYmlzIHggbCB3aXRoXG4gICAgICAgICAgICB8IEZvdW5kIC0+IEZvdW5kXG4gICAgICAgICAgICB8IE5vdEZvdW5kIChsbCwgcmwpIC0+IE5vdEZvdW5kIChsbCwgKGZ1biAoKSAtPiBqb2luIChybCAoKSkgdiByKSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCByIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxyLCBycikgLT4gTm90Rm91bmQgKGpvaW4gbCB2IGxyLCBycilcblxuICAgIGxldCByZWMgZGlzam9pbnQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIHwgKF8sIEVtcHR5KSAtPiB0cnVlXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBpZiBzMSA9PSBzMiB0aGVuIGZhbHNlXG4gICAgICAgICAgZWxzZSBtYXRjaCBzcGxpdF9iaXMgdjEgdDIgd2l0aFxuICAgICAgICAgICAgICBOb3RGb3VuZChsMiwgcjIpIC0+IGRpc2pvaW50IGwxIGwyICYmIGRpc2pvaW50IHIxIChyMiAoKSlcbiAgICAgICAgICAgIHwgRm91bmQgLT4gZmFsc2VcblxuICAgIGxldCByZWMgZGlmZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gRW1wdHlcbiAgICAgIHwgKHQxLCBFbXB0eSkgLT4gdDFcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIG1hdGNoIHNwbGl0IHYxIHQyIHdpdGhcbiAgICAgICAgICAgIChsMiwgZmFsc2UsIHIyKSAtPlxuICAgICAgICAgICAgICBqb2luIChkaWZmIGwxIGwyKSB2MSAoZGlmZiByMSByMilcbiAgICAgICAgICB8IChsMiwgdHJ1ZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGNvbmNhdCAoZGlmZiBsMSBsMikgKGRpZmYgcjEgcjIpXG5cbiAgICB0eXBlIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBlbHQgKiB0ICogZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIHIsIGUpKVxuXG4gICAgbGV0IHJlYyBjb21wYXJlX2F1eCBlMSBlMiA9XG4gICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICB8IChFbmQsIF8pICAtPiAtMVxuICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICB8IChNb3JlKHYxLCByMSwgZTEpLCBNb3JlKHYyLCByMiwgZTIpKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjIDw+IDBcbiAgICAgICAgICB0aGVuIGNcbiAgICAgICAgICBlbHNlIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG5cbiAgICBsZXQgY29tcGFyZSBzMSBzMiA9XG4gICAgICBjb21wYXJlX2F1eCAoY29uc19lbnVtIHMxIEVuZCkgKGNvbnNfZW51bSBzMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgczEgczIgPVxuICAgICAgY29tcGFyZSBzMSBzMiA9IDBcblxuICAgIGxldCByZWMgc3Vic2V0IHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgRW1wdHksIF8gLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IF8sIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bD1sMTsgdj12MTsgcj1yMX0sIChOb2RlIHtsPWwyOyB2PXYyOyByPXIyfSBhcyB0MikgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IGwxIGwyICYmIHN1YnNldCByMSByMlxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgc3Vic2V0IChOb2RlIHtsPWwxOyB2PXYxOyByPUVtcHR5OyBoPTB9KSBsMiAmJiBzdWJzZXQgcjEgdDJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9RW1wdHk7IHY9djE7IHI9cjE7IGg9MH0pIHIyICYmIHN1YnNldCBsMSB0MlxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGl0ZXIgZiBsOyBmIHY7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIGZvbGQgZiBzIGFjY3UgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBmb2xkIGYgciAoZiB2IChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHAgdiAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2IHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w7IHY7IHJ9KSBhcyB0IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXIgcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IHInID0gZmlsdGVyIHAgciBpblxuICAgICAgICAgIGlmIHB2IHRoZW5cbiAgICAgICAgICAgIGlmIGw9PWwnICYmIHI9PXInIHRoZW4gdCBlbHNlIGpvaW4gbCcgdiByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdiA9IHAgdiBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdlxuICAgICAgICAgIHRoZW4gKGpvaW4gbHQgdiBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IHJmKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZXtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgZWxlbWVudHNfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gZWxlbWVudHNfYXV4ICh2IDo6IGVsZW1lbnRzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBlbGVtZW50cyBzID1cbiAgICAgIGVsZW1lbnRzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2VsdFxuXG4gICAgbGV0IGNob29zZV9vcHQgPSBtaW5fZWx0X29wdFxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiB2XG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lIHYwXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSB2XG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHRyeV9qb2luIGwgdiByID1cbiAgICAgICgqIFtqb2luIGwgdiByXSBjYW4gb25seSBiZSBjYWxsZWQgd2hlbiAoZWxlbWVudHMgb2YgbCA8IHYgPFxuICAgICAgICAgZWxlbWVudHMgb2Ygcik7IHVzZSBbdHJ5X2pvaW4gbCB2IHJdIHdoZW4gdGhpcyBwcm9wZXJ0eSBtYXlcbiAgICAgICAgIG5vdCBob2xkLCBidXQgeW91IGhvcGUgaXQgZG9lcyBob2xkIGluIHRoZSBjb21tb24gY2FzZSAqKVxuICAgICAgaWYgKGwgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSAobWF4X2VsdCBsKSB2IDwgMClcbiAgICAgICYmIChyID0gRW1wdHkgfHwgT3JkLmNvbXBhcmUgdiAobWluX2VsdCByKSA8IDApXG4gICAgICB0aGVuIGpvaW4gbCB2IHJcbiAgICAgIGVsc2UgdW5pb24gbCAoYWRkIHYgcilcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBtYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgIGlmIGwgPT0gbCcgJiYgdiA9PSB2JyAmJiByID09IHInIHRoZW4gdFxuICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuXG4gICAgbGV0IHRyeV9jb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPiB0cnlfam9pbiB0MSAobWluX2VsdCB0MikgKHJlbW92ZV9taW5fZWx0IHQyKVxuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IGFzIHQgLT5cbiAgICAgICAgICgqIGVuZm9yY2UgbGVmdC10by1yaWdodCBldmFsdWF0aW9uIG9yZGVyICopXG4gICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgbGV0IHYnID0gZiB2IGluXG4gICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgYmVnaW4gbWF0Y2ggdicgd2l0aFxuICAgICAgICAgICB8IFNvbWUgdicgLT5cbiAgICAgICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgdHJ5X2pvaW4gbCcgdicgcidcbiAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIHRyeV9jb25jYXQgbCcgcidcbiAgICAgICAgIGVuZFxuXG4gICAgbGV0IG9mX3NvcnRlZF9saXN0IGwgPVxuICAgICAgbGV0IHJlYyBzdWIgbiBsID1cbiAgICAgICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgICAgIHwgMCwgbCAtPiBFbXB0eSwgbFxuICAgICAgICB8IDEsIHgwIDo6IGwgLT4gTm9kZSB7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfSwgbFxuICAgICAgICB8IDIsIHgwIDo6IHgxIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7IHI9RW1wdHk7IGg9Mn0sIGxcbiAgICAgICAgfCAzLCB4MCA6OiB4MSA6OiB4MiA6OiBsIC0+XG4gICAgICAgICAgICBOb2Rle2w9Tm9kZXtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9OyB2PXgxO1xuICAgICAgICAgICAgICAgICByPU5vZGV7bD1FbXB0eTsgdj14Mjsgcj1FbXB0eTsgaD0xfTsgaD0yfSwgbFxuICAgICAgICB8IG4sIGwgLT5cbiAgICAgICAgICBsZXQgbmwgPSBuIC8gMiBpblxuICAgICAgICAgIGxldCBsZWZ0LCBsID0gc3ViIG5sIGwgaW5cbiAgICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgbWlkIDo6IGwgLT5cbiAgICAgICAgICAgIGxldCByaWdodCwgbCA9IHN1YiAobiAtIG5sIC0gMSkgbCBpblxuICAgICAgICAgICAgY3JlYXRlIGxlZnQgbWlkIHJpZ2h0LCBsXG4gICAgICBpblxuICAgICAgZnN0IChzdWIgKExpc3QubGVuZ3RoIGwpIGwpXG5cbiAgICBsZXQgb2ZfbGlzdCBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBlbXB0eVxuICAgICAgfCBbeDBdIC0+IHNpbmdsZXRvbiB4MFxuICAgICAgfCBbeDA7IHgxXSAtPiBhZGQgeDEgKHNpbmdsZXRvbiB4MClcbiAgICAgIHwgW3gwOyB4MTsgeDJdIC0+IGFkZCB4MiAoYWRkIHgxIChzaW5nbGV0b24geDApKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDNdIC0+IGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKVxuICAgICAgfCBbeDA7IHgxOyB4MjsgeDM7IHg0XSAtPiBhZGQgeDQgKGFkZCB4MyAoYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpKSlcbiAgICAgIHwgXyAtPiBvZl9zb3J0ZWRfbGlzdCAoTGlzdC5zb3J0X3VuaXEgT3JkLmNvbXBhcmUgbClcblxuICAgIGxldCBhZGRfc2VxIGkgbSA9XG4gICAgICBTZXEuZm9sZF9sZWZ0IChmdW4gcyB4IC0+IGFkZCB4IHMpIG0gaVxuXG4gICAgbGV0IG9mX3NlcSBpID0gYWRkX3NlcSBpIGVtcHR5XG5cbiAgICBsZXQgcmVjIHNlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBjID0gc2VxX29mX2VudW1fIChjb25zX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKHgsIHQsIHJlc3QpIC0+IFNlcS5Db25zICh4LCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPSByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gYyBFbmQpXG5cbiAgICBsZXQgdG9fc2VxX2Zyb20gbG93IHMgPVxuICAgICAgbGV0IHJlYyBhdXggbG93IHMgYyA9IG1hdGNoIHMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGNcbiAgICAgICAgfCBOb2RlIHtsOyByOyB2OyBffSAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggT3JkLmNvbXBhcmUgdiBsb3cgd2l0aFxuICAgICAgICAgICAgICB8IDAgLT4gTW9yZSAodiwgciwgYylcbiAgICAgICAgICAgICAgfCBuIHdoZW4gbjwwIC0+IGF1eCBsb3cgciBjXG4gICAgICAgICAgICAgIHwgXyAtPiBhdXggbG93IGwgKE1vcmUgKHYsIHIsIGMpKVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgc2VxX29mX2VudW1fIChhdXggbG93IHMgRW5kKVxuICBlbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhKydhIHRcbiAgICB2YWwgZW1wdHk6ICdhIHRcbiAgICB2YWwgaXNfZW1wdHk6ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBtZW06ICBrZXkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGFkZDoga2V5IC0+ICdhIC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCB1cGRhdGU6IGtleSAtPiAoJ2Egb3B0aW9uIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHNpbmdsZXRvbjoga2V5IC0+ICdhIC0+ICdhIHRcbiAgICB2YWwgcmVtb3ZlOiBrZXkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIG1lcmdlOlxuICAgICAgICAgIChrZXkgLT4gJ2Egb3B0aW9uIC0+ICdiIG9wdGlvbiAtPiAnYyBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdCAtPiAnYyB0XG4gICAgdmFsIHVuaW9uOiAoa2V5IC0+ICdhIC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgY29tcGFyZTogKCdhIC0+ICdhIC0+IGludCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogKCdhIC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgZm9yX2FsbDogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgZXhpc3RzOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBmaWx0ZXI6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGZpbHRlcl9tYXA6IChrZXkgLT4gJ2EgLT4gJ2Igb3B0aW9uKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgcGFydGl0aW9uOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gJ2EgdCAqICdhIHRcbiAgICB2YWwgY2FyZGluYWw6ICdhIHQgLT4gaW50XG4gICAgdmFsIGJpbmRpbmdzOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAgIHZhbCBtaW5fYmluZGluZzogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIG1pbl9iaW5kaW5nX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBtYXhfYmluZGluZzogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIG1heF9iaW5kaW5nX29wdDogJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBjaG9vc2U6ICdhIHQgLT4gKGtleSAqICdhKVxuICAgIHZhbCBjaG9vc2Vfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIHNwbGl0OiBrZXkgLT4gJ2EgdCAtPiAnYSB0ICogJ2Egb3B0aW9uICogJ2EgdFxuICAgIHZhbCBmaW5kOiBrZXkgLT4gJ2EgdCAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDoga2V5IC0+ICdhIHQgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfZmlyc3Q6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiBrZXkgKiAnYVxuICAgIHZhbCBmaW5kX2ZpcnN0X29wdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGZpbmRfbGFzdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IGtleSAqICdhXG4gICAgdmFsIGZpbmRfbGFzdF9vcHQ6IChrZXkgLT4gYm9vbCkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIG9wdGlvblxuICAgIHZhbCBtYXA6ICgnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIG1hcGk6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fcmV2X3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGtleSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2UoT3JkOiBPcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcblxuICAgIHR5cGUga2V5ID0gT3JkLnRcblxuICAgIHR5cGUgJ2EgdCA9XG4gICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUgb2Yge2w6J2EgdDsgdjprZXk7IGQ6J2E7IHI6J2EgdDsgaDppbnR9XG5cbiAgICBsZXQgaGVpZ2h0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtofSAtPiBoXG5cbiAgICBsZXQgY3JlYXRlIGwgeCBkIHIgPVxuICAgICAgbGV0IGhsID0gaGVpZ2h0IGwgYW5kIGhyID0gaGVpZ2h0IHIgaW5cbiAgICAgIE5vZGV7bDsgdj14OyBkOyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICBsZXQgc2luZ2xldG9uIHggZCA9IE5vZGV7bD1FbXB0eTsgdj14OyBkOyByPUVtcHR5OyBoPTF9XG5cbiAgICBsZXQgYmFsIGwgeCBkIHIgPVxuICAgICAgbGV0IGhsID0gbWF0Y2ggbCB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBsZXQgaHIgPSBtYXRjaCByIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGlmIGhsID4gaHIgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9bGw7IHY9bHY7IGQ9bGQ7IHI9bHJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgbGwgPj0gaGVpZ2h0IGxyIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIGxsIGx2IGxkIChjcmVhdGUgbHIgeCBkIHIpXG4gICAgICAgICAgICBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIG1hdGNoIGxyIHdpdGhcbiAgICAgICAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICAgICAgICB8IE5vZGV7bD1scmw7IHY9bHJ2OyBkPWxyZDsgcj1scnJ9LT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGxsIGx2IGxkIGxybCkgbHJ2IGxyZCAoY3JlYXRlIGxyciB4IGQgcilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2UgaWYgaHIgPiBobCArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCByIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCByciA+PSBoZWlnaHQgcmwgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHggZCBybCkgcnYgcmQgcnJcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggcmwgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPXJsbDsgdj1ybHY7IGQ9cmxkOyByPXJscn0gLT5cbiAgICAgICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsbCkgcmx2IHJsZCAoY3JlYXRlIHJsciBydiByZCBycilcbiAgICAgICAgICAgIGVuZFxuICAgICAgZW5kIGVsc2VcbiAgICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBlbXB0eSA9IEVtcHR5XG5cbiAgICBsZXQgaXNfZW1wdHkgPSBmdW5jdGlvbiBFbXB0eSAtPiB0cnVlIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBhZGQgeCBkYXRhID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICAgIGlmIGQgPT0gZGF0YSB0aGVuIG0gZWxzZSBOb2Rle2w7IHY9eDsgZD1kYXRhOyByOyBofVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gYWRkIHggZGF0YSBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IGRhdGEgciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgZmluZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gZFxuICAgICAgICAgIGVsc2UgZmluZCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdjAgZDAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSAodjAsIGQwKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0IGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdjAgZDAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3Rfb3B0IGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX29wdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFNvbWUgZFxuICAgICAgICAgIGVsc2UgZmluZF9vcHQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgbWVtIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBjID0gMCB8fCBtZW0geCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bD1FbXB0eTsgdjsgZH0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge2x9IC0+IG1pbl9iaW5kaW5nIGxcblxuICAgIGxldCByZWMgbWluX2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtsfS0+IG1pbl9iaW5kaW5nX29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGUge3Y7IGQ7IHI9RW1wdHl9IC0+ICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZyByXG5cbiAgICBsZXQgcmVjIG1heF9iaW5kaW5nX29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gU29tZSAodiwgZClcbiAgICAgIHwgTm9kZSB7cn0gLT4gbWF4X2JpbmRpbmdfb3B0IHJcblxuICAgIGxldCByZWMgcmVtb3ZlX21pbl9iaW5kaW5nID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyByfSAtPiByXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGJhbCAocmVtb3ZlX21pbl9iaW5kaW5nIGwpIHYgZCByXG5cbiAgICBsZXQgbWVyZ2UgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGJhbCB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCByZWMgcmVtb3ZlIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IChOb2RlIHtsOyB2OyBkOyByfSBhcyBtKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBtZXJnZSBsIHJcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IHJlbW92ZSB4IGwgaW4gaWYgbCA9PSBsbCB0aGVuIG0gZWxzZSBiYWwgbGwgdiBkIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluIGlmIHIgPT0gcnIgdGhlbiBtIGVsc2UgYmFsIGwgdiBkIHJyXG5cbiAgICBsZXQgcmVjIHVwZGF0ZSB4IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIGYgTm9uZSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IEVtcHR5XG4gICAgICAgICAgfCBTb21lIGRhdGEgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IGQ9ZGF0YTsgcj1FbXB0eTsgaD0xfVxuICAgICAgICAgIGVuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSBhcyBtIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgICBtYXRjaCBmIChTb21lIGQpIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBtZXJnZSBsIHJcbiAgICAgICAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZW5kIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gdXBkYXRlIHggZiBsIGluXG4gICAgICAgICAgICBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHVwZGF0ZSB4IGYgciBpblxuICAgICAgICAgICAgaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgaXRlciBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpdGVyIGYgbDsgZiB2IGQ7IGl0ZXIgZiByXG5cbiAgICBsZXQgcmVjIG1hcCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByOyBofSAtPlxuICAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBtYXAgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBtYXBpIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwaSBmIGwgaW5cbiAgICAgICAgICBsZXQgZCcgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcGkgZiByIGluXG4gICAgICAgICAgTm9kZXtsPWwnOyB2OyBkPWQnOyByPXInOyBofVxuXG4gICAgbGV0IHJlYyBmb2xkIGYgbSBhY2N1ID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgZm9sZCBmIHIgKGYgdiBkIChmb2xkIGYgbCBhY2N1KSlcblxuICAgIGxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gdHJ1ZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBwIHYgZCAmJiBmb3JfYWxsIHAgbCAmJiBmb3JfYWxsIHAgclxuXG4gICAgbGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGZhbHNlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkIHx8IGV4aXN0cyBwIGwgfHwgZXhpc3RzIHAgclxuXG4gICAgKCogQmV3YXJlOiB0aG9zZSB0d28gZnVuY3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBhZGRlZCBrIGlzICpzdHJpY3RseSpcbiAgICAgICBzbWFsbGVyIChvciBiaWdnZXIpIHRoYW4gYWxsIHRoZSBwcmVzZW50IGtleXMgaW4gdGhlIHRyZWU7IGl0XG4gICAgICAgZG9lcyBub3QgdGVzdCBmb3IgZXF1YWxpdHkgd2l0aCB0aGUgY3VycmVudCBtaW4gKG9yIG1heCkga2V5LlxuXG4gICAgICAgSW5kZWVkLCB0aGV5IGFyZSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBcImpvaW5cIiBvcGVyYXRpb24gd2hpY2hcbiAgICAgICByZXNwZWN0cyB0aGlzIHByZWNvbmRpdGlvbi5cbiAgICAqKVxuXG4gICAgbGV0IHJlYyBhZGRfbWluX2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fYmluZGluZyBrIHggbCkgdiBkIHJcblxuICAgIGxldCByZWMgYWRkX21heF9iaW5kaW5nIGsgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiBrIHhcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgYmFsIGwgdiBkIChhZGRfbWF4X2JpbmRpbmcgayB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiBkIHIgPVxuICAgICAgbWF0Y2ggKGwsIHIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBhZGRfbWluX2JpbmRpbmcgdiBkIHJcbiAgICAgIHwgKF8sIEVtcHR5KSAtPiBhZGRfbWF4X2JpbmRpbmcgdiBkIGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scjsgaD1saH0sXG4gICAgICAgICBOb2Rle2w9cmw7IHY9cnY7IGQ9cmQ7IHI9cnI7IGg9cmh9KSAtPlxuICAgICAgICAgIGlmIGxoID4gcmggKyAyIHRoZW4gYmFsIGxsIGx2IGxkIChqb2luIGxyIHYgZCByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IGQgcmwpIHJ2IHJkIHJyIGVsc2VcbiAgICAgICAgICBjcmVhdGUgbCB2IGQgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIE5vIGFzc3VtcHRpb24gb24gdGhlIGhlaWdodHMgb2YgbCBhbmQgci4gKilcblxuICAgIGxldCBjb25jYXQgdDEgdDIgPVxuICAgICAgbWF0Y2ggKHQxLCB0Mikgd2l0aFxuICAgICAgICAoRW1wdHksIHQpIC0+IHRcbiAgICAgIHwgKHQsIEVtcHR5KSAtPiB0XG4gICAgICB8IChfLCBfKSAtPlxuICAgICAgICAgIGxldCAoeCwgZCkgPSBtaW5fYmluZGluZyB0MiBpblxuICAgICAgICAgIGpvaW4gdDEgeCBkIChyZW1vdmVfbWluX2JpbmRpbmcgdDIpXG5cbiAgICBsZXQgY29uY2F0X29yX2pvaW4gdDEgdiBkIHQyID1cbiAgICAgIG1hdGNoIGQgd2l0aFxuICAgICAgfCBTb21lIGQgLT4gam9pbiB0MSB2IGQgdDJcbiAgICAgIHwgTm9uZSAtPiBjb25jYXQgdDEgdDJcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBOb25lLCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIFNvbWUgZCwgcilcbiAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCAobGwsIHByZXMsIHJsKSA9IHNwbGl0IHggbCBpbiAobGwsIHByZXMsIGpvaW4gcmwgdiBkIHIpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsciwgcHJlcywgcnIpID0gc3BsaXQgeCByIGluIChqb2luIGwgdiBkIGxyLCBwcmVzLCBycilcblxuICAgIGxldCByZWMgbWVyZ2UgZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSwgXykgd2hlbiBoMSA+PSBoZWlnaHQgczIgLT5cbiAgICAgICAgICBsZXQgKGwyLCBkMiwgcjIpID0gc3BsaXQgdjEgczIgaW5cbiAgICAgICAgICBjb25jYXRfb3Jfam9pbiAobWVyZ2UgZiBsMSBsMikgdjEgKGYgdjEgKFNvbWUgZDEpIGQyKSAobWVyZ2UgZiByMSByMilcbiAgICAgIHwgKF8sIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjJ9KSAtPlxuICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MiAoZiB2MiBkMSAoU29tZSBkMikpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCBfIC0+XG4gICAgICAgICAgYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcmVjIHVuaW9uIGYgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgfCAoRW1wdHksIHMpIHwgKHMsIEVtcHR5KSAtPiBzXG4gICAgICB8IChOb2RlIHtsPWwxOyB2PXYxOyBkPWQxOyByPXIxOyBoPWgxfSxcbiAgICAgICAgIE5vZGUge2w9bDI7IHY9djI7IGQ9ZDI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDIgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MSBkMSByXG4gICAgICAgICAgICB8IFNvbWUgZDIgLT4gY29uY2F0X29yX2pvaW4gbCB2MSAoZiB2MSBkMSBkMikgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCAobDEsIGQxLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgbGV0IGwgPSB1bmlvbiBmIGwxIGwyIGFuZCByID0gdW5pb24gZiByMSByMiBpblxuICAgICAgICAgICAgbWF0Y2ggZDEgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IGpvaW4gbCB2MiBkMiByXG4gICAgICAgICAgICB8IFNvbWUgZDEgLT4gY29uY2F0X29yX2pvaW4gbCB2MiAoZiB2MiBkMSBkMikgclxuXG4gICAgbGV0IHJlYyBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHZkIHRoZW4gaWYgbD09bCcgJiYgcj09cicgdGhlbiBtIGVsc2Ugam9pbiBsJyB2IGQgcidcbiAgICAgICAgICBlbHNlIGNvbmNhdCBsJyByJ1xuXG4gICAgbGV0IHJlYyBmaWx0ZXJfbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBFbXB0eVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW2ZdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyX21hcCBmIGwgaW5cbiAgICAgICAgICBsZXQgZnZkID0gZiB2IGQgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXJfbWFwIGYgciBpblxuICAgICAgICAgIGJlZ2luIG1hdGNoIGZ2ZCB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZCcgLT4gam9pbiBsJyB2IGQnIHInXG4gICAgICAgICAgICB8IE5vbmUgLT4gY29uY2F0IGwnIHInXG4gICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIHBhcnRpdGlvbiBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gKEVtcHR5LCBFbXB0eSlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCAobHQsIGxmKSA9IHBhcnRpdGlvbiBwIGwgaW5cbiAgICAgICAgICBsZXQgcHZkID0gcCB2IGQgaW5cbiAgICAgICAgICBsZXQgKHJ0LCByZikgPSBwYXJ0aXRpb24gcCByIGluXG4gICAgICAgICAgaWYgcHZkXG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IGQgcnQsIGNvbmNhdCBsZiByZilcbiAgICAgICAgICBlbHNlIChjb25jYXQgbHQgcnQsIGpvaW4gbGYgdiBkIHJmKVxuXG4gICAgdHlwZSAnYSBlbnVtZXJhdGlvbiA9IEVuZCB8IE1vcmUgb2Yga2V5ICogJ2EgKiAnYSB0ICogJ2EgZW51bWVyYXRpb25cblxuICAgIGxldCByZWMgY29uc19lbnVtIG0gZSA9XG4gICAgICBtYXRjaCBtIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBjb25zX2VudW0gbCAoTW9yZSh2LCBkLCByLCBlKSlcblxuICAgIGxldCBjb21wYXJlIGNtcCBtMSBtMiA9XG4gICAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiAwXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gMVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHYxIHYyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGxldCBjID0gY21wIGQxIGQyIGluXG4gICAgICAgICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2VcbiAgICAgICAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBjb21wYXJlX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgZXF1YWwgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgZXF1YWxfYXV4IGUxIGUyID1cbiAgICAgICAgICBtYXRjaCAoZTEsIGUyKSB3aXRoXG4gICAgICAgICAgKEVuZCwgRW5kKSAtPiB0cnVlXG4gICAgICAgIHwgKEVuZCwgXykgIC0+IGZhbHNlXG4gICAgICAgIHwgKF8sIEVuZCkgLT4gZmFsc2VcbiAgICAgICAgfCAoTW9yZSh2MSwgZDEsIHIxLCBlMSksIE1vcmUodjIsIGQyLCByMiwgZTIpKSAtPlxuICAgICAgICAgICAgT3JkLmNvbXBhcmUgdjEgdjIgPSAwICYmIGNtcCBkMSBkMiAmJlxuICAgICAgICAgICAgZXF1YWxfYXV4IChjb25zX2VudW0gcjEgZTEpIChjb25zX2VudW0gcjIgZTIpXG4gICAgICBpbiBlcXVhbF9hdXggKGNvbnNfZW51bSBtMSBFbmQpIChjb25zX2VudW0gbTIgRW5kKVxuXG4gICAgbGV0IHJlYyBjYXJkaW5hbCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7bDsgcn0gLT4gY2FyZGluYWwgbCArIDEgKyBjYXJkaW5hbCByXG5cbiAgICBsZXQgcmVjIGJpbmRpbmdzX2F1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPiBiaW5kaW5nc19hdXggKCh2LCBkKSA6OiBiaW5kaW5nc19hdXggYWNjdSByKSBsXG5cbiAgICBsZXQgYmluZGluZ3MgcyA9XG4gICAgICBiaW5kaW5nc19hdXggW10gc1xuXG4gICAgbGV0IGNob29zZSA9IG1pbl9iaW5kaW5nXG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9iaW5kaW5nX29wdFxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBtIChrLHYpIC0+IGFkZCBrIHYgbSkgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoayx2LHQscmVzdCkgLT4gU2VxLkNvbnMgKChrLHYpLCBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3NlcSBtID1cbiAgICAgIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIG0gRW5kKVxuXG4gICAgbGV0IHJlYyBzbm9jX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgZDsgcn0gLT4gc25vY19lbnVtIHIgKE1vcmUodiwgZCwgbCwgZSkpXG5cbiAgICBsZXQgcmVjIHJldl9zZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPlxuICAgICAgICAgIFNlcS5Db25zICgoayx2KSwgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fcmV2X3NlcSBjID1cbiAgICAgIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgbSA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgbSBjID0gbWF0Y2ggbSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCBkLCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgZCwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgbSBFbmQpXG5lbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0geyBtdXRhYmxlIGMgOiAnYSBsaXN0OyBtdXRhYmxlIGxlbiA6IGludDsgfVxuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IGNyZWF0ZSAoKSA9IHsgYyA9IFtdOyBsZW4gPSAwOyB9XG5cbmxldCBjbGVhciBzID0gcy5jIDwtIFtdOyBzLmxlbiA8LSAwXG5cbmxldCBjb3B5IHMgPSB7IGMgPSBzLmM7IGxlbiA9IHMubGVuOyB9XG5cbmxldCBwdXNoIHggcyA9IHMuYyA8LSB4IDo6IHMuYzsgcy5sZW4gPC0gcy5sZW4gKyAxXG5cbmxldCBwb3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6OnRsIC0+IHMuYyA8LSB0bDsgcy5sZW4gPC0gcy5sZW4gLSAxOyBoZFxuICB8IFtdICAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgcG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IFNvbWUgaGRcbiAgfCBbXSAgICAgLT4gTm9uZVxuXG5sZXQgdG9wIHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjpfIC0+IGhkXG4gIHwgW10gICAgLT4gcmFpc2UgRW1wdHlcblxubGV0IHRvcF9vcHQgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gU29tZSBoZFxuICB8IFtdICAgIC0+IE5vbmVcblxubGV0IGlzX2VtcHR5IHMgPSAocy5jID0gW10pXG5cbmxldCBsZW5ndGggcyA9IHMubGVuXG5cbmxldCBpdGVyIGYgcyA9IExpc3QuaXRlciBmIHMuY1xuXG5sZXQgZm9sZCBmIGFjYyBzID0gTGlzdC5mb2xkX2xlZnQgZiBhY2Mgcy5jXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9IExpc3QudG9fc2VxIHMuY1xuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHMgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHMgZztcbiAgc1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBGcmFuY29pcyBQb3R0aWVyLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICBKZXJlbWllIERpbWlubywgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leGNlcHRpb24gRW1wdHlcblxudHlwZSAnYSBjZWxsID1cbiAgfCBOaWxcbiAgfCBDb25zIG9mIHsgY29udGVudDogJ2E7IG11dGFibGUgbmV4dDogJ2EgY2VsbCB9XG5cbnR5cGUgJ2EgdCA9IHtcbiAgbXV0YWJsZSBsZW5ndGg6IGludDtcbiAgbXV0YWJsZSBmaXJzdDogJ2EgY2VsbDtcbiAgbXV0YWJsZSBsYXN0OiAnYSBjZWxsXG59XG5cbmxldCBjcmVhdGUgKCkgPSB7XG4gIGxlbmd0aCA9IDA7XG4gIGZpcnN0ID0gTmlsO1xuICBsYXN0ID0gTmlsXG59XG5cbmxldCBjbGVhciBxID1cbiAgcS5sZW5ndGggPC0gMDtcbiAgcS5maXJzdCA8LSBOaWw7XG4gIHEubGFzdCA8LSBOaWxcblxubGV0IGFkZCB4IHEgPVxuICBsZXQgY2VsbCA9IENvbnMge1xuICAgIGNvbnRlbnQgPSB4O1xuICAgIG5leHQgPSBOaWxcbiAgfSBpblxuICBtYXRjaCBxLmxhc3Qgd2l0aFxuICB8IE5pbCAtPlxuICAgIHEubGVuZ3RoIDwtIDE7XG4gICAgcS5maXJzdCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG4gIHwgQ29ucyBsYXN0IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggKyAxO1xuICAgIGxhc3QubmV4dCA8LSBjZWxsO1xuICAgIHEubGFzdCA8LSBjZWxsXG5cbmxldCBwdXNoID1cbiAgYWRkXG5cbmxldCBwZWVrIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudCB9IC0+IGNvbnRlbnRcblxubGV0IHBlZWtfb3B0IHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gTm9uZVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gU29tZSBjb250ZW50XG5cbmxldCB0b3AgPVxuICBwZWVrXG5cbmxldCB0YWtlIHEgPVxuICBtYXRjaCBxLmZpcnN0IHdpdGhcbiAgfCBOaWwgLT4gcmFpc2UgRW1wdHlcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgY29udGVudFxuXG5sZXQgdGFrZV9vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSAtPlxuICAgIGNsZWFyIHE7XG4gICAgU29tZSBjb250ZW50XG4gIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgIHEubGVuZ3RoIDwtIHEubGVuZ3RoIC0gMTtcbiAgICBxLmZpcnN0IDwtIG5leHQ7XG4gICAgU29tZSBjb250ZW50XG5cbmxldCBwb3AgPVxuICB0YWtlXG5cbmxldCBjb3B5ID1cbiAgbGV0IHJlYyBjb3B5IHFfcmVzIHByZXYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gcV9yZXMubGFzdCA8LSBwcmV2OyBxX3Jlc1xuICAgIHwgQ29ucyB7IGNvbnRlbnQ7IG5leHQgfSAtPlxuICAgICAgbGV0IHJlcyA9IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gaW5cbiAgICAgIGJlZ2luIG1hdGNoIHByZXYgd2l0aFxuICAgICAgfCBOaWwgLT4gcV9yZXMuZmlyc3QgPC0gcmVzXG4gICAgICB8IENvbnMgcCAtPiBwLm5leHQgPC0gcmVzXG4gICAgICBlbmQ7XG4gICAgICBjb3B5IHFfcmVzIHJlcyBuZXh0XG4gIGluXG4gIGZ1biBxIC0+IGNvcHkgeyBsZW5ndGggPSBxLmxlbmd0aDsgZmlyc3QgPSBOaWw7IGxhc3QgPSBOaWwgfSBOaWwgcS5maXJzdFxuXG5sZXQgaXNfZW1wdHkgcSA9XG4gIHEubGVuZ3RoID0gMFxuXG5sZXQgbGVuZ3RoIHEgPVxuICBxLmxlbmd0aFxuXG5sZXQgaXRlciA9XG4gIGxldCByZWMgaXRlciBmIGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBmIGNvbnRlbnQ7XG4gICAgICBpdGVyIGYgbmV4dFxuICBpblxuICBmdW4gZiBxIC0+IGl0ZXIgZiBxLmZpcnN0XG5cbmxldCBmb2xkID1cbiAgbGV0IHJlYyBmb2xkIGYgYWNjdSBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBhY2N1XG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgYWNjdSA9IGYgYWNjdSBjb250ZW50IGluXG4gICAgICBmb2xkIGYgYWNjdSBuZXh0XG4gIGluXG4gIGZ1biBmIGFjY3UgcSAtPiBmb2xkIGYgYWNjdSBxLmZpcnN0XG5cbmxldCB0cmFuc2ZlciBxMSBxMiA9XG4gIGlmIHExLmxlbmd0aCA+IDAgdGhlblxuICAgIG1hdGNoIHEyLmxhc3Qgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTEubGVuZ3RoO1xuICAgICAgcTIuZmlyc3QgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuICAgIHwgQ29ucyBsYXN0IC0+XG4gICAgICBxMi5sZW5ndGggPC0gcTIubGVuZ3RoICsgcTEubGVuZ3RoO1xuICAgICAgbGFzdC5uZXh0IDwtIHExLmZpcnN0O1xuICAgICAgcTIubGFzdCA8LSBxMS5sYXN0O1xuICAgICAgY2xlYXIgcTFcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBxID1cbiAgbGV0IHJlYyBhdXggYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgIHwgTmlsIC0+IFNlcS5OaWxcbiAgICB8IENvbnMgeyBjb250ZW50PXg7IG5leHQ7IH0gLT4gU2VxLkNvbnMgKHgsIGF1eCBuZXh0KVxuICBpblxuICBhdXggcS5maXJzdFxuXG5sZXQgYWRkX3NlcSBxIGkgPSBTZXEuaXRlciAoZnVuIHggLT4gcHVzaCB4IHEpIGlcblxubGV0IG9mX3NlcSBnID1cbiAgbGV0IHEgPSBjcmVhdGUoKSBpblxuICBhZGRfc2VxIHEgZztcbiAgcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBEYW5pZWwgZGUgUmF1Z2xhdWRyZSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBjZWxsIG9wdGlvblxuYW5kICdhIGNlbGwgPSB7IG11dGFibGUgY291bnQgOiBpbnQ7IG11dGFibGUgZGF0YSA6ICdhIGRhdGEgfVxuYW5kICdhIGRhdGEgPVxuICAgIFNlbXB0eVxuICB8IFNjb25zIG9mICdhICogJ2EgZGF0YVxuICB8IFNhcHAgb2YgJ2EgZGF0YSAqICdhIGRhdGFcbiAgfCBTbGF6eSBvZiAnYSBkYXRhIExhenkudFxuICB8IFNnZW4gb2YgJ2EgZ2VuXG4gIHwgU2J1ZmZpbyA6IGJ1ZmZpbyAtPiBjaGFyIGRhdGFcbmFuZCAnYSBnZW4gPSB7IG11dGFibGUgY3VyciA6ICdhIG9wdGlvbiBvcHRpb247IGZ1bmMgOiBpbnQgLT4gJ2Egb3B0aW9uIH1cbmFuZCBidWZmaW8gPVxuICB7IGljIDogaW5fY2hhbm5lbDsgYnVmZiA6IGJ5dGVzOyBtdXRhYmxlIGxlbiA6IGludDsgbXV0YWJsZSBpbmQgOiBpbnQgfVxuXG5leGNlcHRpb24gRmFpbHVyZVxuZXhjZXB0aW9uIEVycm9yIG9mIHN0cmluZ1xuXG5sZXQgY291bnQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gMFxuICB8IFNvbWUgeyBjb3VudCB9IC0+IGNvdW50XG5sZXQgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBTZW1wdHlcbiAgfCBTb21lIHsgZGF0YSB9IC0+IGRhdGFcblxubGV0IGZpbGxfYnVmZiBiID1cbiAgYi5sZW4gPC0gaW5wdXQgYi5pYyBiLmJ1ZmYgMCAoQnl0ZXMubGVuZ3RoIGIuYnVmZik7IGIuaW5kIDwtIDBcblxuXG5sZXQgcmVjIGdldF9kYXRhIDogdHlwZSB2LiBpbnQgLT4gdiBkYXRhIC0+IHYgZGF0YSA9IGZ1biBjb3VudCBkIC0+IG1hdGNoIGQgd2l0aFxuICgqIFJldHVybnMgZWl0aGVyIFNlbXB0eSBvciBTY29ucyhhLCBfKSBldmVuIHdoZW4gZCBpcyBhIGdlbmVyYXRvclxuICAgIG9yIGEgYnVmZmVyLiBJbiB0aG9zZSBjYXNlcywgdGhlIGl0ZW0gYSBpcyBzZWVuIGFzIGV4dHJhY3RlZCBmcm9tXG4gdGhlIGdlbmVyYXRvci9idWZmZXIuXG4gVGhlIGNvdW50IHBhcmFtZXRlciBpcyB1c2VkIGZvciBjYWxsaW5nIGBTZ2VuLWZ1bmN0aW9ucycuICAqKVxuICAgU2VtcHR5IHwgU2NvbnMgKF8sIF8pIC0+IGRcbiB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgY291bnQgZDEgd2l0aFxuICAgICAgIFNjb25zIChhLCBkMTEpIC0+IFNjb25zIChhLCBTYXBwIChkMTEsIGQyKSlcbiAgICAgfCBTZW1wdHkgLT4gZ2V0X2RhdGEgY291bnQgZDJcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNnZW4ge2N1cnIgPSBTb21lIE5vbmV9IC0+IFNlbXB0eVxuIHwgU2dlbiAoe2N1cnIgPSBTb21lKFNvbWUgYSl9IGFzIGcpIC0+XG4gICAgIGcuY3VyciA8LSBOb25lOyBTY29ucyhhLCBkKVxuIHwgU2dlbiBnIC0+XG4gICAgIGJlZ2luIG1hdGNoIGcuZnVuYyBjb3VudCB3aXRoXG4gICAgICAgTm9uZSAtPiBnLmN1cnIgPC0gU29tZShOb25lKTsgU2VtcHR5XG4gICAgIHwgU29tZSBhIC0+IFNjb25zKGEsIGQpXG4gICAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgZW5kXG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIFNlbXB0eSBlbHNlXG4gICAgICAgbGV0IHIgPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZCBpblxuICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICAgIGIuaW5kIDwtIHN1Y2MgYi5pbmQ7IFNjb25zKHIsIGQpXG4gfCBTbGF6eSBmIC0+IGdldF9kYXRhIGNvdW50IChMYXp5LmZvcmNlIGYpXG5cblxubGV0IHJlYyBwZWVrX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB2IG9wdGlvbiA9IGZ1biBzIC0+XG4gKCogY29uc3VsdCB0aGUgZmlyc3QgaXRlbSBvZiBzICopXG4gbWF0Y2ggcy5kYXRhIHdpdGhcbiAgIFNlbXB0eSAtPiBOb25lXG4gfCBTY29ucyAoYSwgXykgLT4gU29tZSBhXG4gfCBTYXBwIChfLCBfKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBzLmNvdW50IHMuZGF0YSB3aXRoXG4gICAgICAgU2NvbnMoYSwgXykgYXMgZCAtPiBzLmRhdGEgPC0gZDsgU29tZSBhXG4gICAgIHwgU2VtcHR5IC0+IE5vbmVcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNsYXp5IGYgLT4gcy5kYXRhIDwtIChMYXp5LmZvcmNlIGYpOyBwZWVrX2RhdGEgc1xuIHwgU2dlbiB7Y3VyciA9IFNvbWUgYX0gLT4gYVxuIHwgU2dlbiBnIC0+IGxldCB4ID0gZy5mdW5jIHMuY291bnQgaW4gZy5jdXJyIDwtIFNvbWUgeDsgeFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBiZWdpbiBzLmRhdGEgPC0gU2VtcHR5OyBOb25lIGVuZFxuICAgICBlbHNlIFNvbWUgKEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kKVxuXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHMgLT4gcGVla19kYXRhIHNcblxuXG5sZXQgcmVjIGp1bmtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHVuaXQgPSBmdW4gcyAtPlxuICBtYXRjaCBzLmRhdGEgd2l0aFxuICAgIFNjb25zIChfLCBkKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBzLmRhdGEgPC0gZFxuICB8IFNnZW4gKHtjdXJyID0gU29tZSBffSBhcyBnKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBnLmN1cnIgPC0gTm9uZVxuICB8IFNidWZmaW8gYiAtPlxuICAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgIGlmIGIubGVuID09IDAgdGhlbiBzLmRhdGEgPC0gU2VtcHR5XG4gICAgICBlbHNlIChzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBiLmluZCA8LSBzdWNjIGIuaW5kKVxuICB8IF8gLT5cbiAgICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgICAgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIF8gLT4ganVua19kYXRhIHNcblxuXG5sZXQganVuayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgZGF0YSAtPiBqdW5rX2RhdGEgZGF0YVxuXG5sZXQgcmVjIG5nZXRfZGF0YSBuIHMgPVxuICBpZiBuIDw9IDAgdGhlbiBbXSwgcy5kYXRhLCAwXG4gIGVsc2VcbiAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICBTb21lIGEgLT5cbiAgICAgICAganVua19kYXRhIHM7XG4gICAgICAgIGxldCAoYWwsIGQsIGspID0gbmdldF9kYXRhIChwcmVkIG4pIHMgaW4gYSA6OiBhbCwgU2NvbnMgKGEsIGQpLCBzdWNjIGtcbiAgICB8IE5vbmUgLT4gW10sIHMuZGF0YSwgMFxuXG5cbmxldCBucGVla19kYXRhIG4gcyA9XG4gIGxldCAoYWwsIGQsIGxlbikgPSBuZ2V0X2RhdGEgbiBzIGluXG4gIHMuY291bnQgPC0gKHMuY291bnQgLSBsZW4pO1xuICBzLmRhdGEgPC0gZDtcbiAgYWxcblxuXG5sZXQgbnBlZWsgbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgZCAtPiBucGVla19kYXRhIG4gZFxuXG5sZXQgbmV4dCBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIGEgLT4ganVuayBzOyBhXG4gIHwgTm9uZSAtPiByYWlzZSBGYWlsdXJlXG5cblxubGV0IGVtcHR5IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgXyAtPiByYWlzZSBGYWlsdXJlXG4gIHwgTm9uZSAtPiAoKVxuXG5cbmxldCBpdGVyIGYgc3RybSA9XG4gIGxldCByZWMgZG9fcmVjICgpID1cbiAgICBtYXRjaCBwZWVrIHN0cm0gd2l0aFxuICAgICAgU29tZSBhIC0+IGp1bmsgc3RybTsgaWdub3JlKGYgYSk7IGRvX3JlYyAoKVxuICAgIHwgTm9uZSAtPiAoKVxuICBpblxuICBkb19yZWMgKClcblxuXG4oKiBTdHJlYW0gYnVpbGRpbmcgZnVuY3Rpb25zICopXG5cbmxldCBmcm9tIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTZ2VuIHtjdXJyID0gTm9uZTsgZnVuYyA9IGZ9fVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gTGlzdC5mb2xkX3JpZ2h0IChmdW4geCBsIC0+IFNjb25zICh4LCBsKSkgbCBTZW1wdHl9XG5cblxubGV0IG9mX3N0cmluZyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICAoKiBXZSBjYW5ub3QgdXNlIHRoZSBpbmRleCBwYXNzZWQgYnkgdGhlIFtmcm9tXSBmdW5jdGlvbiBkaXJlY3RseVxuICAgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0gY291bnQsIHdpdGggYWJzb2x1dGVseSBub1xuICAgICAgIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgc3RhcnQgZnJvbSAwLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2VcbiAgICAgICBvZiBbU3RyZWFtLmljb25zICdjJyAoU3RyZWFtLmZyb21fc3RyaW5nIFwiYWJcIildLCB0aGUgZmlyc3RcbiAgICAgICBhY2Nlc3MgdG8gdGhlIHN0cmluZyB3aWxsIGJlIG1hZGUgd2l0aCBjb3VudCBbMV0gYWxyZWFkeS5cbiAgICAqKVxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IFN0cmluZy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgcy5bY10pXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9ieXRlcyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBCeXRlcy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgKEJ5dGVzLmdldCBzIGMpKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfY2hhbm5lbCBpYyA9XG4gIFNvbWUge2NvdW50ID0gMDtcbiAgICAgICAgZGF0YSA9IFNidWZmaW8ge2ljID0gaWM7IGJ1ZmYgPSBCeXRlcy5jcmVhdGUgNDA5NjsgbGVuID0gMDsgaW5kID0gMH19XG5cblxuKCogU3RyZWFtIGV4cHJlc3Npb25zIGJ1aWxkZXJzICopXG5cbmxldCBpYXBwIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNhcHAgKGRhdGEgaSwgZGF0YSBzKX1cbmxldCBpY29ucyBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgZGF0YSBzKX1cbmxldCBpc2luZyBpID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIFNlbXB0eSl9XG5cbmxldCBsYXBwIGYgcyA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNhcHAgKGRhdGEgKGYgKCkpLCBkYXRhIHMpKSl9XG5cbmxldCBsY29ucyBmIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgZGF0YSBzKSkpfVxubGV0IGxzaW5nIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgU2VtcHR5KSkpfVxuXG5sZXQgc2VtcHR5ID0gTm9uZVxubGV0IHNsYXp5IGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShkYXRhIChmICgpKSkpfVxuXG4oKiBGb3IgZGVidWdnaW5nIHVzZSAqKVxuXG5sZXQgcmVjIGR1bXAgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgdCAtPiB1bml0ID0gZnVuIGYgcyAtPlxuICBwcmludF9zdHJpbmcgXCJ7Y291bnQgPSBcIjtcbiAgcHJpbnRfaW50IChjb3VudCBzKTtcbiAgcHJpbnRfc3RyaW5nIFwiOyBkYXRhID0gXCI7XG4gIGR1bXBfZGF0YSBmIChkYXRhIHMpO1xuICBwcmludF9zdHJpbmcgXCJ9XCI7XG4gIHByaW50X25ld2xpbmUgKClcbmFuZCBkdW1wX2RhdGEgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgZGF0YSAtPiB1bml0ID0gZnVuIGYgLT5cbiAgZnVuY3Rpb25cbiAgICBTZW1wdHkgLT4gcHJpbnRfc3RyaW5nIFwiU2VtcHR5XCJcbiAgfCBTY29ucyAoYSwgZCkgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNjb25zIChcIjtcbiAgICAgIGYgYTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2FwcCAoXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMjtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNsYXp5IF8gLT4gcHJpbnRfc3RyaW5nIFwiU2xhenlcIlxuICB8IFNnZW4gXyAtPiBwcmludF9zdHJpbmcgXCJTZ2VuXCJcbiAgfCBTYnVmZmlvIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2J1ZmZpb1wiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICBQaWVycmUgV2VpcyBhbmQgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk5IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4dGVuc2libGUgYnVmZmVycyAqKVxuXG50eXBlIHQgPVxuIHttdXRhYmxlIGJ1ZmZlciA6IGJ5dGVzO1xuICBtdXRhYmxlIHBvc2l0aW9uIDogaW50O1xuICBtdXRhYmxlIGxlbmd0aCA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIubGVuZ3RoXVxuICAgLSBbYi5sZW5ndGggPSBCeXRlcy5sZW5ndGggYi5idWZmZXJdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4ge2J1ZmZlciA9IHM7IHBvc2l0aW9uID0gMDsgbGVuZ3RoID0gbjsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX2JsaXQgc3JjLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPj0gYi5wb3NpdGlvbiB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgYi5idWZmZXIgPC0gYi5pbml0aWFsX2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXG5cbigqIFtyZXNpemUgYiBtb3JlXSBlbnN1cmVzIHRoYXQgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkc1xuICAgYnkgZHluYW1pY2FsbHkgZXh0ZW5kaW5nIFtiLmJ1ZmZlcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmxlbmd0aF0uXG5cbiAgIEluIHBhcnRpY3VsYXIsIGFmdGVyIFtyZXNpemUgYiBtb3JlXSBpcyBjYWxsZWQsIGEgZGlyZWN0IGFjY2VzcyBvZlxuICAgc2l6ZSBbbW9yZV0gYXQgW2IucG9zaXRpb25dIHdpbGwgYWx3YXlzIGJlIGluLWJvdW5kcywgc28gdGhhdFxuICAgKHVuc2FmZV97Z2V0LHNldH0pIG1heSBiZSB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbiopXG5sZXQgcmVzaXplIGIgbW9yZSA9XG4gIGxldCBvbGRfcG9zID0gYi5wb3NpdGlvbiBpblxuICBsZXQgb2xkX2xlbiA9IGIubGVuZ3RoIGluXG4gIGxldCBuZXdfbGVuID0gcmVmIG9sZF9sZW4gaW5cbiAgd2hpbGUgb2xkX3BvcyArIG1vcmUgPiAhbmV3X2xlbiBkbyBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiBkb25lO1xuICBpZiAhbmV3X2xlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgaWYgb2xkX3BvcyArIG1vcmUgPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgdGhlbiBuZXdfbGVuIDo9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIGVsc2UgZmFpbHdpdGggXCJCdWZmZXIuYWRkOiBjYW5ub3QgZ3JvdyBidWZmZXJcIlxuICBlbmQ7XG4gIGxldCBuZXdfYnVmZmVyID0gQnl0ZXMuY3JlYXRlICFuZXdfbGVuIGluXG4gICgqIFBSIzYxNDg6IGxldCdzIGtlZXAgdXNpbmcgW2JsaXRdIHJhdGhlciB0aGFuIFt1bnNhZmVfYmxpdF0gaW5cbiAgICAgdGhpcyB0cmlja3kgZnVuY3Rpb24gdGhhdCBpcyBzbG93IGFueXdheS4gKilcbiAgQnl0ZXMuYmxpdCBiLmJ1ZmZlciAwIG5ld19idWZmZXIgMCBiLnBvc2l0aW9uO1xuICBiLmJ1ZmZlciA8LSBuZXdfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSAhbmV3X2xlbjtcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gIGFzc2VydCAob2xkX3BvcyArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICAoKVxuICAoKiBOb3RlOiB0aGVyZSBhcmUgdmFyaW91cyBzaXR1YXRpb25zIChwcmVlbXB0aXZlIHRocmVhZHMsIHNpZ25hbHMgYW5kXG4gICAgIGdjIGZpbmFsaXplcnMpIHdoZXJlIE9DYW1sIGNvZGUgbWF5IGJlIHJ1biBhc3luY2hyb25vdXNseTsgaW5cbiAgICAgcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIGEgcmFjZSB3aXRoIGFub3RoZXIgdXNlciBvZiBbYl0sIGNoYW5naW5nXG4gICAgIGl0cyBtdXRhYmxlIGZpZWxkcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBbcmVzaXplXSBjYWxsLiBUaGUgQnVmZmVyXG4gICAgIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBjb3JyZWN0bmVzcyBndWFyYW50ZWUgaWYgdGhhdCBoYXBwZW5zLFxuICAgICBidXQgd2UgbXVzdCBzdGlsbCBlbnN1cmUgdGhhdCB0aGUgZGF0YXN0cnVjdHVyZSBpbnZhcmlhbnRzIGhvbGQgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgLS0gYXMgd2UgcGxhbiB0byB1c2UgW3Vuc2FmZV97Z2V0LHNldH1dLlxuXG4gICAgIFRoZXJlIGFyZSB0d28gcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzIGluIHRoaXMgZnVuY3Rpb24sXG4gICAgIFtyZWZdIGFuZCBbQnl0ZXMuY3JlYXRlXSwgYnV0IGFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBmaWVsZHNcbiAgICAgb2YgW2JdIGhhcHBlbiBiZWZvcmUgYm90aCBvZiB0aGVtIG9yIGFmdGVyIGJvdGggb2YgdGhlbS5cblxuICAgICBXZSB0aGVyZWZvcmUgYXNzdW1lIHRoYXQgW2IucG9zaXRpb25dIG1heSBjaGFuZ2UgYXQgdGhlc2UgYWxsb2NhdGlvbnMsXG4gICAgIGFuZCBjaGVjayB0aGF0IHRoZSBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIHBvc3Rjb25kaXRpb25cbiAgICAgaG9sZHMgZm9yIGJvdGggdmFsdWVzIG9mIFtiLnBvc2l0aW9uXSwgYmVmb3JlIG9yIGFmdGVyIHRoZSBmdW5jdGlvblxuICAgICBpcyBjYWxsZWQuIE1vcmUgcHJlY2lzZWx5LCB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgbXVzdCBob2xkIGlmIHRoZVxuICAgICBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3RseSwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGJ1ZmZlciBpbnZhcmlhbnRzOlxuICAgICAtIFtvbGQoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW25ldyhiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbb2xkKGIubGVuZ3RoKSA8PSBuZXcoYi5sZW5ndGgpXVxuXG4gICAgIE5vdGU6IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBvbGQoYi5sZW5ndGgpXSBkb2VzICpub3QqXG4gICAgIGhvbGQgaW4gZ2VuZXJhbCwgYXMgaXQgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIHdoZXJlIHlvdSBuZWVkXG4gICAgIHRvIGNhbGwgW3Jlc2l6ZV0gdG8gaW5jcmVhc2UgW2IubGVuZ3RoXS5cblxuICAgICBOb3RlOiBbYXNzZXJ0XSBhYm92ZSBkb2VzIG5vdCBtZWFuIHRoYXQgd2Uga25vdyB0aGUgY29uZGl0aW9uc1xuICAgICBhbHdheXMgaG9sZCwgYnV0IHRoYXQgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gY29ycmVjdGx5XG4gICAgIG9ubHkgaWYgdGhleSBob2xkLlxuXG4gICAgIE5vdGU6IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG9lcyBub3QgbmVlZFxuICAgICB0byBiZSBjaGVja2VkIHdpdGggdGhpcyBsZXZlbCBvZiBzY3J1dGlueSwgZ2l2ZW4gdGhhdCB0aGV5XG4gICAgIHJlYWQvd3JpdGUgdGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBjaGVja2luZyB0aGF0XG4gICAgIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZCBvciBjYWxsaW5nIFtyZXNpemVdLlxuICAqKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciBwb3MgYztcbiAgYi5wb3NpdGlvbiA8LSBwb3MgKyAxXG5cbmxldCB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXggPSA0XG5sZXQgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heCA9IDRcblxubGV0IHJlYyBhZGRfdXRmXzhfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzhfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfOF91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfOF91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IHJlYyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1ID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDtcbiAgbGV0IG4gPSBCeXRlcy5zZXRfdXRmXzE2YmVfdWNoYXIgYi5idWZmZXIgcG9zIHUgaW5cbiAgaWYgbiA9IDBcbiAgdGhlbiAocmVzaXplIGIgdWNoYXJfdXRmXzE2X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl8xNmJlX3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZsZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZsZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2bGVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCBhZGRfc3Vic3RyaW5nIGIgcyBvZmZzZXQgbGVuID1cbiAgaWYgb2Zmc2V0IDwgMCB8fCBsZW4gPCAwIHx8IG9mZnNldCA+IFN0cmluZy5sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9zdWJzdHJpbmcvYWRkX3N1YmJ5dGVzXCI7XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfc3ViYnl0ZXMgYiBzIG9mZnNldCBsZW4gPVxuICBhZGRfc3Vic3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcykgb2Zmc2V0IGxlblxuXG5sZXQgYWRkX3N0cmluZyBiIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2J5dGVzIGIgcyA9IGFkZF9zdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKVxuXG5sZXQgYWRkX2J1ZmZlciBiIGJzID1cbiAgYWRkX3N1YmJ5dGVzIGIgYnMuYnVmZmVyIDAgYnMucG9zaXRpb25cblxuKCogdGhpcyAocHJpdmF0ZSkgZnVuY3Rpb24gY291bGQgbW92ZSBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG5sZXQgcmVhbGx5X2lucHV0X3VwX3RvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWQgPVxuICAgIGlmIHRvX3JlYWQgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBpbnB1dCBpYyBidWYgb2ZzIHRvX3JlYWQgaW5cbiAgICAgIGlmIHIgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBhbHJlYWR5X3JlYWQgPSBhbHJlYWR5X3JlYWQgKyByIGluXG4gICAgICAgIGxldCBvZnMgPSBvZnMgKyByIGluXG4gICAgICAgIGxldCB0b19yZWFkID0gdG9fcmVhZCAtIHIgaW5cbiAgICAgICAgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW4gbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZDowIH5vZnMgfnRvX3JlYWQ6bGVuXG5cblxubGV0IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiA9XG4gIGlmIGIucG9zaXRpb24gKyBsZW4gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgbGV0IG4gPSByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW4gaW5cbiAgKCogVGhlIGFzc2VydGlvbiBiZWxvdyBtYXkgZmFpbCBpbiB3ZWlyZCBzY2VuYXJpbyB3aGVyZVxuICAgICB0aHJlYWRlZC9maW5hbGl6ZXIgY29kZSwgcnVuIGFzeW5jaHJvbm91c2x5IGR1cmluZyB0aGVcbiAgICAgW3JlYWxseV9pbnB1dF91cF90b10gY2FsbCwgcmFjZXMgb24gdGhlIGJ1ZmZlcjsgd2UgZG9uJ3QgZW5zdXJlXG4gICAgIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwgYnV0IG5lZWQgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudHMgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgKHNlZSBkaXNjdXNzaW9uIG9mIFtyZXNpemVdKS4gKilcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbiA8PSBiLmxlbmd0aCk7XG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIChzdGFydCArIDEpIGluXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgbGV0IGlkZW50LCBuZXh0X2kgPSBmaW5kX2lkZW50IHMgaiBsaW0gaW5cbiAgICAgICAgIGFkZF9zdHJpbmcgYiAoZiBpZGVudCk7XG4gICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICB8IGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9PSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgJ1xcXFwnO1xuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJ1xcXFwnIGFzIGN1cnJlbnQgLT5cbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgICAgfCBjdXJyZW50IC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IGFkZF9zZXEgYiBzZXEgPSBTZXEuaXRlciAoYWRkX2NoYXIgYikgc2VxXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBiID0gY3JlYXRlIDMyIGluXG4gIGFkZF9zZXEgYiBpO1xuICBiXG5cbigqKiB7NiBCaW5hcnkgZW5jb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MzIgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjR1XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMSBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIHVuc2FmZV9zZXRfaW50OCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgdW5zYWZlX3NldF9pbnQxNiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgdW5zYWZlX3NldF9pbnQzMiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgODtcbiAgdW5zYWZlX3NldF9pbnQ2NCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAoKiBUb29scyB0byBtYW5pcHVsYXRlIHNjYW5uaW5nIHNldCBvZiBjaGFycyAoc2VlICVbLi4uXSkgKilcblxudHlwZSBtdXRhYmxlX2NoYXJfc2V0ID0gYnl0ZXNcblxuKCogQ3JlYXRlIGEgZnJlc2gsIGVtcHR5LCBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGNyZWF0ZV9jaGFyX3NldCAoKSA9IEJ5dGVzLm1ha2UgMzIgJ1xcMDAwJ1xuXG4oKiBBZGQgYSBjaGFyIGluIGEgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICBCeXRlcy5zZXQgY2hhcl9zZXQgc3RyX2luZFxuICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKEJ5dGVzLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsb3IgbWFzaykpXG5cbmxldCBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBCeXRlcy50b19zdHJpbmcgY2hhcl9zZXRcblxuKCogQ29tcHV0ZSB0aGUgY29tcGxlbWVudCBvZiBhIGNoYXIgc2V0LiAqKVxubGV0IHJldl9jaGFyX3NldCBjaGFyX3NldCA9XG4gIGxldCBjaGFyX3NldCcgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgZm9yIGkgPSAwIHRvIDMxIGRvXG4gICAgQnl0ZXMuc2V0IGNoYXJfc2V0JyBpXG4gICAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IGkpIGx4b3IgMHhGRikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGNoYXJfc2V0J1xuXG4oKiBSZXR1cm4gdHJ1ZSBpZiBhIGBjJyBpcyBpbiBgY2hhcl9zZXQnLiAqKVxubGV0IGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgKGludF9vZl9jaGFyIChTdHJpbmcuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxhbmQgbWFzaykgPD4gMFxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogSWdub3JlZCBwYXJhbSBjb252ZXJzaW9uICopXG5cbigqIEdBRFQgdXNlZCB0byBhYnN0cmFjdCBhbiBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlci4gKilcbigqIFNlZSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiID0gUGFyYW1fZm9ybWF0X0VCQiA6XG4gICAgKCd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYXJhbV9mb3JtYXRfZWJiXG5cbigqIENvbXB1dGUgYSBwYWRkaW5nIGFzc29jaWF0ZWQgdG8gYSBwYWRfb3B0aW9uIChzZWUgXCIlXzQyZFwiKS4gKilcbmxldCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wYWRkaW5nXG4gIHwgU29tZSB3aWR0aCAtPiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuXG4oKiBDb21wdXRlIGEgcHJlY2lzaW9uIGFzc29jaWF0ZWQgdG8gYSBwcmVjX29wdGlvbiAoc2VlIFwiJV8uNDJmXCIpLiAqKVxubGV0IHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQgPSBtYXRjaCBwcmVjX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBOb19wcmVjaXNpb25cbiAgfCBTb21lIG5kZWMgLT4gTGl0X3ByZWNpc2lvbiBuZGVjXG5cbigqIFR1cm4gYW4gaWdub3JlZCBwYXJhbSBpbnRvIGl0cyBlcXVpdmFsZW50IG5vdC1pZ25vcmVkIGZvcm1hdCBub2RlLiAqKVxuKCogVXNlZCBmb3IgZm9ybWF0IHByZXR0eS1wcmludGluZyBhbmQgU2NhbmYuICopXG5sZXQgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+ICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYXJhbV9mb3JtYXRfZWJiID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2hhciBmbXQpXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX2NoYXIgZm10KVxuICB8IElnbm9yZWRfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDMyIChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50MzIgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChOYXRpdmVpbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQ2NCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDY0IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfZmxvYXQgKHBhZF9vcHQsIHByZWNfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGbG9hdCAoKEZsb2F0X2ZsYWdfLCBGbG9hdF9mKSxcbiAgICAgICAgICAgICAgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Jvb2wgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEJvb2wgKHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChSZWFkZXIgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10KVxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlcyAqKVxuXG50eXBlICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlbiA9XG4gIHwgQWNjX29wZW5fdGFnIG9mICgnYiwgJ2MpIGFjY1xuICB8IEFjY19vcGVuX2JveCBvZiAoJ2IsICdjKSBhY2NcblxuKCogUmV2ZXJzZWQgbGlzdCBvZiBwcmludGluZyBhdG9tcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBwcmludGYgYXJndW1lbnRzLiAqKVxuYW5kICgnYiwgJ2MpIGFjYyA9XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IG9mICgnYiwgJ2MpIGFjYyAqIGZvcm1hdHRpbmdfbGl0XG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gb2YgKCdiLCAnYykgYWNjICogKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuXG4gICAgICAoKiBTcGVjaWFsIGZtdHRpbmcgKGJveCkgKilcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBMaXRlcmFsIHN0cmluZyAqKVxuICB8IEFjY19jaGFyX2xpdGVyYWwgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIExpdGVyYWwgY2hhciAqKVxuICB8IEFjY19kYXRhX3N0cmluZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIEdlbmVyYXRlZCBzdHJpbmcgKilcbiAgfCBBY2NfZGF0YV9jaGFyICAgICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBHZW5lcmF0ZWQgY2hhciAqKVxuICB8IEFjY19kZWxheSAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IgLT4gJ2MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBEZWxheWVkIHByaW50aW5nICglYSwgJXQpICopXG4gIHwgQWNjX2ZsdXNoICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAgICAgICAgICAgICAgKCogRmx1c2ggKilcbiAgfCBBY2NfaW52YWxpZF9hcmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nXG4gICAgICAoKiBSYWlzZSBJbnZhbGlkX2FyZ3VtZW50IG1zZyAqKVxuICB8IEVuZF9vZl9hY2NcblxuKCogTGlzdCBvZiBoZXRlcm9nZW5lb3VzIHZhbHVlcy4gKilcbigqIFVzZWQgdG8gYWNjdW11bGF0ZSBzY2FuZiBjYWxsYmFjayBhcmd1bWVudHMuICopXG50eXBlICgnYSwgJ2IpIGhldGVyX2xpc3QgPVxuICB8IENvbnMgOiAnYyAqICgnYSwgJ2IpIGhldGVyX2xpc3QgLT4gKCdjIC0+ICdhLCAnYikgaGV0ZXJfbGlzdFxuICB8IE5pbCA6ICgnYiwgJ2IpIGhldGVyX2xpc3RcblxuKCogRXhpc3RlbnRpYWwgQmxhY2sgQm94ZXMuICopXG4oKiBVc2VkIHRvIGFic3RyYWN0IHNvbWUgZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRkaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmIgPSBQYWRkaW5nX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXR0eS4gKilcbigqIFNlZSB0aGUgdHlwZV9wYWRwcmVjIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmIgPSBQYWRwcmVjX2ZtdHR5X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICd6KSBwcmVjaXNpb24gKiAoJ3osICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZGRpbmdfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiID0gUGFkZGluZ19mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwYWRkaW5nICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wcmVjaXNpb25fZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmIgPSBQcmVjaXNpb25fZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkcHJlY19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmIgPSBQYWRwcmVjX2ZtdF9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAncCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ3AsICdiLCAnYywgJ2UsICdmKSBwYWRwcmVjX2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgdGhlICdhIGFuZCAnZCBwYXJhbWV0ZXJzIG9mIGFuIGZtdC4gKilcbigqIE91dHB1dCB0eXBlIG9mIHRoZSBmb3JtYXQgcGFyc2luZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiID0gRm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdiLCAnYywgJ2UsICdmKSBmbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2Zvcm1hdF9nZW4gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiID0gRm10X2ZtdHR5X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXQgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10dHkgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYiA9IEZtdHR5X2ZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10dHkgKlxuICAgICAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10X2ZtdHR5X2ViYiAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgZm10dHkgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIGZvcm1hdCB0eXBlcy4gKilcbnR5cGUgZm10dHlfZWJiID0gRm10dHlfRUJCIDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+IGZtdHR5X2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcGFkZGluZyB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcGFkZGluZ3MuICopXG50eXBlIHBhZGRpbmdfZWJiID0gUGFkZGluZ19FQkIgOiAoJ2EsICdiKSBwYWRkaW5nIC0+IHBhZGRpbmdfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwcmVjaXNpb24gdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHByZWNpc2lvbnMuICopXG50eXBlIHByZWNpc2lvbl9lYmIgPSBQcmVjaXNpb25fRUJCIDogKCdhLCAnYikgcHJlY2lzaW9uIC0+IHByZWNpc2lvbl9lYmJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb25zdGFudHMgKilcblxuKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IHByaW50aW5nLiAqKVxubGV0IGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252ID1cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyB8IEZsb2F0X2ggfCBGbG9hdF9IXG4gIHwgRmxvYXRfQ0YgLT4gLTZcbiAgKCogRm9yICVoICVIIGFuZCAlI0YgZm9ybWF0cywgYSBuZWdhdGl2ZSBwcmVjaXNpb24gbWVhbnMgXCJhcyBtYW55IGRpZ2l0cyBhc1xuICAgICBuZWNlc3NhcnlcIi4gIEZvciB0aGUgb3RoZXIgRlAgZm9ybWF0cywgd2UgdGFrZSB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgb2YgdGhlIHByZWNpc2lvbiwgaGVuY2UgNiBkaWdpdHMgYnkgZGVmYXVsdC4gKilcbiAgfCBGbG9hdF9GIC0+IDEyXG4gICgqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBPQ2FtbCBmbG9hdCBwcmludGluZyAoJUYpLiAqKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEV4dGVybmFscyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQ6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDMyOiBzdHJpbmcgLT4gaW50MzIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDMyX2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfbmF0aXZlaW50OiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQ2NDogc3RyaW5nIC0+IGludDY0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQ2NF9mb3JtYXRcIlxuZXh0ZXJuYWwgaGV4c3RyaW5nX29mX2Zsb2F0OiBmbG9hdCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0XCJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICgqIFRvb2xzIHRvIHByZXR0eS1wcmludCBmb3JtYXRzICopXG5cbigqIFR5cGUgb2YgZXh0ZW5zaWJsZSBjaGFyYWN0ZXIgYnVmZmVycy4gKilcbnR5cGUgYnVmZmVyID0ge1xuICBtdXRhYmxlIGluZCA6IGludDtcbiAgbXV0YWJsZSBieXRlcyA6IGJ5dGVzO1xufVxuXG4oKiBDcmVhdGUgYSBmcmVzaCBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NyZWF0ZSBpbml0X3NpemUgPSB7IGluZCA9IDA7IGJ5dGVzID0gQnl0ZXMuY3JlYXRlIGluaXRfc2l6ZSB9XG5cbigqIENoZWNrIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgZ3JvdyBpdCBpZiBuZWVkZWQuICopXG5sZXQgYnVmZmVyX2NoZWNrX3NpemUgYnVmIG92ZXJoZWFkID1cbiAgbGV0IGxlbiA9IEJ5dGVzLmxlbmd0aCBidWYuYnl0ZXMgaW5cbiAgbGV0IG1pbl9sZW4gPSBidWYuaW5kICsgb3ZlcmhlYWQgaW5cbiAgaWYgbWluX2xlbiA+IGxlbiB0aGVuIChcbiAgICBsZXQgbmV3X2xlbiA9IEludC5tYXggKGxlbiAqIDIpIG1pbl9sZW4gaW5cbiAgICBsZXQgbmV3X3N0ciA9IEJ5dGVzLmNyZWF0ZSBuZXdfbGVuIGluXG4gICAgQnl0ZXMuYmxpdCBidWYuYnl0ZXMgMCBuZXdfc3RyIDAgbGVuO1xuICAgIGJ1Zi5ieXRlcyA8LSBuZXdfc3RyO1xuICApXG5cbigqIEFkZCB0aGUgY2hhcmFjdGVyIGBjJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfY2hhciBidWYgYyA9XG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiAxO1xuICBCeXRlcy5zZXQgYnVmLmJ5dGVzIGJ1Zi5pbmQgYztcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgMVxuXG4oKiBBZGQgdGhlIHN0cmluZyBgcycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX3N0cmluZyBidWYgcyA9XG4gIGxldCBzdHJfbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBzdHJfbGVuO1xuICBTdHJpbmcuYmxpdCBzIDAgYnVmLmJ5dGVzIGJ1Zi5pbmQgc3RyX2xlbjtcbiAgYnVmLmluZCA8LSBidWYuaW5kICsgc3RyX2xlblxuXG4oKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY29udGVudHMgYnVmID1cbiAgQnl0ZXMuc3ViX3N0cmluZyBidWYuYnl0ZXMgMCBidWYuaW5kXG5cbigqKiopXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciBjb252ZXJzaW9uIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9pY29udiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfZCB8IEludF9wZCB8IEludF9zZCB8IEludF9DZCAtPiAnZCcgfCBJbnRfaSB8IEludF9waSB8IEludF9zaVxuICB8IEludF9DaSAtPiAnaScgfCBJbnRfeCB8IEludF9DeCAtPiAneCcgfCBJbnRfWCB8IEludF9DWCAtPiAnWCcgfCBJbnRfb1xuICB8IEludF9DbyAtPiAnbycgfCBJbnRfdSB8IEludF9DdSAtPiAndSdcblxuKCogQ29udmVydCBhIGZsb2F0IGNvbnZlcnNpb24gdG8gY2hhci4gKilcbigqIGBjRicgd2lsbCBiZSAnRicgZm9yIGRpc3BsYXlpbmcgZm9ybWF0IGFuZCAnZycgdG8gY2FsbCBsaWJjIHByaW50ZiAqKVxubGV0IGNoYXJfb2ZfZmNvbnYgPyhjRj0nRicpIGZjb252ID0gbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9mIC0+ICdmJyB8IEZsb2F0X2UgLT4gJ2UnXG4gIHwgRmxvYXRfRSAtPiAnRScgfCBGbG9hdF9nIC0+ICdnJ1xuICB8IEZsb2F0X0cgLT4gJ0cnIHwgRmxvYXRfRiAtPiBjRlxuICB8IEZsb2F0X2ggLT4gJ2gnIHwgRmxvYXRfSCAtPiAnSCdcbiAgfCBGbG9hdF9DRiAtPiAnRidcblxuXG4oKiBDb252ZXJ0IGEgc2Nhbm5pbmcgY291bnRlciB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfY291bnRlciBjb3VudGVyID0gbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyICAtPiAnbCdcbiAgfCBDaGFyX2NvdW50ZXIgIC0+ICduJ1xuICB8IFRva2VuX2NvdW50ZXIgLT4gJ04nXG5cbigqKiopXG5cbigqIFByaW50IGEgY2hhcl9zZXQgaW4gYSBidWZmZXIgd2l0aCB0aGUgT0NhbWwgZm9ybWF0IGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0ID1cbiAgbGV0IHJlYyBwcmludF9zdGFydCBzZXQgPVxuICAgIGxldCBpc19hbG9uZSBjID1cbiAgICAgIGxldCBiZWZvcmUsIGFmdGVyID0gQ2hhci4oY2hyIChjb2RlIGMgLSAxKSwgY2hyIChjb2RlIGMgKyAxKSkgaW5cbiAgICAgIGlzX2luX2NoYXJfc2V0IHNldCBjXG4gICAgICAmJiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCBiZWZvcmUgJiYgaXNfaW5fY2hhcl9zZXQgc2V0IGFmdGVyKSBpblxuICAgIGlmIGlzX2Fsb25lICddJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nO1xuICAgIHByaW50X291dCBzZXQgMTtcbiAgICBpZiBpc19hbG9uZSAnLScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICctJztcbiAgYW5kIHByaW50X291dCBzZXQgaSA9XG4gICAgaWYgaSA8IDI1NiB0aGVuXG4gICAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW4gcHJpbnRfZmlyc3Qgc2V0IGlcbiAgICAgIGVsc2UgcHJpbnRfb3V0IHNldCAoaSArIDEpXG4gIGFuZCBwcmludF9maXJzdCBzZXQgaSA9XG4gICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnXFwyNTUnIC0+IHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICB8ICddJyB8ICctJyAtPiBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgfCBfIC0+IHByaW50X3NlY29uZCBzZXQgKGkgKyAxKTtcbiAgYW5kIHByaW50X3NlY29uZCBzZXQgaSA9XG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuXG4gICAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICAgIHwgJ1xcMjU1JyAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTQ7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NTtcbiAgICAgIHwgJ10nIHwgJy0nIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgICB8IF8gd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAyKTtcbiAgICAgIHwgXyAtPlxuICAgICAgICBwcmludF9pbiBzZXQgKGkgLSAxKSAoaSArIDIpO1xuICAgIGVsc2UgKFxuICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICApXG4gIGFuZCBwcmludF9pbiBzZXQgaSBqID1cbiAgICBpZiBqID0gMjU2IHx8IG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBqKSkgdGhlbiAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGludF9vZl9jaGFyICctJyk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaiAtIDEpO1xuICAgICAgaWYgaiA8IDI1NiB0aGVuIHByaW50X291dCBzZXQgKGogKyAxKTtcbiAgICApIGVsc2VcbiAgICAgIHByaW50X2luIHNldCBpIChqICsgMSk7XG4gIGFuZCBwcmludF9jaGFyIGJ1ZiBpID0gbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgfCAnJScgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIHwgJ0AnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICdAJztcbiAgICB8IGMgICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGluXG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1snO1xuICBwcmludF9zdGFydCAoXG4gICAgaWYgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgJ1xcMDAwJ1xuICAgIHRoZW4gKCBidWZmZXJfYWRkX2NoYXIgYnVmICdeJzsgcmV2X2NoYXJfc2V0IGNoYXJfc2V0IClcbiAgICBlbHNlIGNoYXJfc2V0XG4gICk7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ10nXG5cbigqKiopXG5cbigqIFByaW50IGEgcGFkdHkgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWR0eSBidWYgcGFkdHkgPSBtYXRjaCBwYWR0eSB3aXRoXG4gIHwgTGVmdCAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSdcbiAgfCBSaWdodCAtPiAoKVxuICB8IFplcm9zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJzAnXG5cbigqIFByaW50IHRoZSAnXycgb2YgYW4gaWdub3JlZCBmbGFnIGlmIG5lZWRlZC4gKilcbmxldCBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZyA9XG4gIGlmIGlnbl9mbGFnIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXydcblxuKCoqKilcblxubGV0IGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgd2lkdGggLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHdpZHRoKVxuXG4oKioqKVxuXG4oKiBQcmludCBwYWRkaW5nIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkZGluZyA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwYWRkaW5nIC0+IHVuaXQgPVxuZnVuIGJ1ZiBwYWQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+ICgpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCBuKSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcqJ1xuXG4oKiBQcmludCBwcmVjaXNpb24gaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wcmVjaXNpb24gOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcHJlY2lzaW9uIC0+IHVuaXQgPVxuICBmdW4gYnVmIHByZWMgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uIC0+ICgpXG4gIHwgTGl0X3ByZWNpc2lvbiBuIC0+XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIG4pO1xuICB8IEFyZ19wcmVjaXNpb24gLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIuKlwiXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBvciAnIycgYXNzb2NpYXRlZCB0byBhbiBpbnQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X3BkIHwgSW50X3BpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgSW50X3NkIHwgSW50X3NpIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgSW50X0N4IHwgSW50X0NYIHwgSW50X0NvIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEludF9kIHwgSW50X2kgfCBJbnRfeCB8IEludF9YIHwgSW50X28gfCBJbnRfdSAtPiAoKVxuXG4oKiBQcmludCBhbiBjb21wbGV0ZSBpbnQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlMy4qZFwiKS4gKilcbmxldCBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIGM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqKiopXG5cbigqIFByaW50IHRoZSBvcHRpb25hbCAnKycsICcgJyBhbmQvb3IgJyMnIGFzc29jaWF0ZWQgdG8gYSBmbG9hdCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udiA9XG4gIGJlZ2luIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZmxhZ19wIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJysnXG4gIHwgRmxvYXRfZmxhZ19zIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyAnXG4gIHwgRmxvYXRfZmxhZ18gLT4gKCkgZW5kO1xuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X0NGIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0dcbiAgfCBGbG9hdF9GIHwgRmxvYXRfaCB8IEZsb2F0X0ggLT4gKClcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmbG9hdCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUrKi4zZlwiKS4gKilcbmxldCBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2Zjb252IGZjb252KVxuXG4oKiBDb21wdXRlIHRoZSBsaXRlcmFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIEZvcm1hdHRpbmdfbGl0LiAqKVxuKCogVXNlZCBieSBQcmludGYgYW5kIFNjYW5mIHdoZXJlIGZvcm1hdHRpbmcgaXMgbm90IGludGVycHJldGVkLiAqKVxubGV0IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCA9IG1hdGNoIGZvcm1hdHRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAtPiBcIkBdXCJcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAtPiBcIkB9XCJcbiAgfCBCcmVhayAoc3RyLCBfLCBfKSAgICAtPiBzdHJcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAtPiBcIkA/XCJcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAtPiBcIkBcXG5cIlxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgIC0+IFwiQC5cIlxuICB8IE1hZ2ljX3NpemUgKHN0ciwgXykgIC0+IHN0clxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgIC0+IFwiQEBcIlxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgIC0+IFwiQCVcIlxuICB8IFNjYW5faW5kaWMgYyAtPiBcIkBcIiBeIChTdHJpbmcubWFrZSAxIGMpXG5cbigqKiopXG5cbigqIFByaW50IGEgbGl0ZXJhbCBjaGFyIGluIGEgYnVmZmVyLCBlc2NhcGUgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHIgPSBtYXRjaCBjaHIgd2l0aFxuICB8ICclJyAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlJVwiXG4gIHwgXyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmIGNoclxuXG4oKiBQcmludCBhIGxpdGVyYWwgc3RyaW5nIGluIGEgYnVmZmVyLCBlc2NhcGUgYWxsICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHIgPVxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzdHIgLSAxIGRvXG4gICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgc3RyLltpXVxuICBkb25lXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwcmV0dHktcHJpbnRpbmcgKilcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgdHlwZSAoYW4gZm10dHkpIGluIGEgYnVmZmVyLiAqKVxubGV0IHJlYyBicHJpbnRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIC5cbiAgICBidWZmZXIgLT4gKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiB1bml0ID1cbmZ1biBidWYgZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVjXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlaVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDMyX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVsaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJW5pXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlTGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZsb2F0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVmXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQm9vbF90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbHBoYV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlYVwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFRoZXRhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV0XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQW55X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJT9cIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBSZWFkZXJfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlclwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVfclwiO1xuICAgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIle1wiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlfVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHksIF8sIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJShcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRW5kX29mX2ZtdHR5IC0+ICgpXG5cbigqKiopXG5cbmxldCByZWMgaW50X29mX2N1c3RvbV9hcml0eSA6IHR5cGUgYSBiIGMgLlxuICAoYSwgYiwgYykgY3VzdG9tX2FyaXR5IC0+IGludCA9XG4gIGZ1bmN0aW9uXG4gIHwgQ3VzdG9tX3plcm8gLT4gMFxuICB8IEN1c3RvbV9zdWNjIHggLT4gMSArIGludF9vZl9jdXN0b21fYXJpdHkgeFxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCBpbiBhIGJ1ZmZlci4gKilcbmxldCBicHJpbnRfZm10IGJ1ZiBmbXQgPVxuICBsZXQgcmVjIGZtdGl0ZXIgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYm9vbCAtPiB1bml0ID1cbiAgZnVuIGZtdCBpZ25fZmxhZyAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdzJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdTJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ2wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICduJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdMJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdDJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdhJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAndCc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICBmb3IgX2kgPSAxIHRvIGludF9vZl9jdXN0b21fYXJpdHkgYXJpdHkgZG9cbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICc/JztcbiAgICAgIGRvbmU7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBSZWFkZXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncic7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUhXCI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0cjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgICAgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICd7JztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICd9JztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKCc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgd2lkdGhfb3B0OyBicHJpbnRfY2hhcl9zZXQgYnVmIGNoYXJfc2V0O1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfY291bnRlciBjb3VudGVyKTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgXCIwY1wiOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICAgIGZtdGl0ZXIgZm10JyB0cnVlO1xuXG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0KTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZm10aW5nX2dlbiB3aXRoXG4gICAgICB8IE9wZW5fdGFnIChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkB7XCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIHwgT3Blbl9ib3ggKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQFtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgZW5kO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+ICgpXG5cbiAgaW4gZm10aXRlciBmbXQgZmFsc2VcblxuKCoqKilcblxuKCogQ29udmVydCBhIGZvcm1hdCB0byBzdHJpbmcuICopXG5sZXQgc3RyaW5nX29mX2ZtdCBmbXQgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10IGJ1ZiBmbXQ7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZSBleHRyYWN0aW9uICopXG5cbnR5cGUgKF8sIF8pIGVxID0gUmVmbCA6ICgnYSwgJ2EpIGVxXG5cbigqIEludmFyaWFudDogdGhpcyBmdW5jdGlvbiBpcyB0aGUgaWRlbnRpdHkgb24gdmFsdWVzLlxuXG4gICBJbiBwYXJ0aWN1bGFyLCBpZiAodHkxLCB0eTIpIGhhdmUgZXF1YWwgdmFsdWVzLCB0aGVuXG4gICAodHJhbnMgKHN5bW0gdHkxKSB0eTIpIHJlc3BlY3RzIHRoZSAndHJhbnMnIHByZWNvbmRpdGlvbi4gKilcbmxldCByZWMgc3ltbSA6IHR5cGUgYTEgYjEgYzEgZDEgZTEgZjEgYTIgYjIgYzIgZDIgZTIgZjIgLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXR0eV9yZWxcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT4gQ2hhcl90eSAoc3ltbSByZXN0KVxuICB8IEludF90eSByZXN0IC0+IEludF90eSAoc3ltbSByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT4gSW50MzJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+IEludDY0X3R5IChzeW1tIHJlc3QpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT4gTmF0aXZlaW50X3R5IChzeW1tIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPiBGbG9hdF90eSAoc3ltbSByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPiBCb29sX3R5IChzeW1tIHJlc3QpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT4gU3RyaW5nX3R5IChzeW1tIHJlc3QpXG4gIHwgVGhldGFfdHkgcmVzdCAtPiBUaGV0YV90eSAoc3ltbSByZXN0KVxuICB8IEFscGhhX3R5IHJlc3QgLT4gQWxwaGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbnlfdHkgcmVzdCAtPiBBbnlfdHkgKHN5bW0gcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPiBSZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+IElnbm9yZWRfcmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X2FyZ190eSAodHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyLCB0eTEsIHN5bW0gcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbmxldCByZWMgZm10dHlfcmVsX2RldCA6IHR5cGUgYTEgYiBjIGQxIGUxIGYxIGEyIGQyIGUyIGYyIC5cbiAgKGExLCBiLCBjLCBkMSwgZTEsIGYxLFxuICAgYTIsIGIsIGMsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgICgoZjEsIGYyKSBlcSAtPiAoYTEsIGEyKSBlcSlcbiAgKiAoKGExLCBhMikgZXEgLT4gKGYxLCBmMikgZXEpXG4gICogKChlMSwgZTIpIGVxIC0+IChkMSwgZDIpIGVxKVxuICAqICgoZDEsIGQyKSBlcSAtPiAoZTEsIGUyKSBlcSlcbj0gZnVuY3Rpb25cbiAgfCBFbmRfb2ZfZm10dHkgLT5cbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbClcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZsb2F0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgRm9ybWF0X2FyZ190eSAoX3R5LCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgbGV0IGFnLCBnYSwgZGosIGpkID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZyBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGdhIFJlZmwgaW4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gbGV0IFJlZmwgPSBkaiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGpkIFJlZmwgaW4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG5cbigqIFByZWNvbmRpdGlvbjogd2UgYXNzdW1lIHRoYXQgdGhlIHR3byBmbXR0eV9yZWwgYXJndW1lbnRzIGhhdmUgZXF1YWxcbiAgIHZhbHVlcyAoYXQgcG9zc2libHkgZGlzdGluY3QgdHlwZXMpOyB0aGlzIGludmFyaWFudCBjb21lcyBmcm9tIHRoZSB3YXlcbiAgIGZtdHR5X3JlbCB3aXRuZXNzZXMgYXJlIHByb2R1Y2VkIGJ5IHRoZSB0eXBlLWNoZWNrZXJcblxuICAgVGhlIGNvZGUgYmVsb3cgdXNlcyAoYXNzZXJ0IGZhbHNlKSB3aGVuIHRoaXMgYXNzdW1wdGlvbiBpcyBicm9rZW4uIFRoZVxuICAgY29kZSBwYXR0ZXJuIGlzIHRoZSBmb2xsb3dpbmc6XG5cbiAgICAgfCBGb28geCwgRm9vIHkgLT5cbiAgICAgICAoKiBjYXNlIHdoZXJlIGluZGVlZCBib3RoIHZhbHVlc1xuICAgICAgICAgIHN0YXJ0IHdpdGggY29uc3RydWN0b3IgRm9vICopXG4gICAgIHwgRm9vIF8sIF9cbiAgICAgfCBfLCBGb28gXyAtPlxuICAgICAgICgqIGRpZmZlcmVudCBoZWFkIGNvbnN0cnVjdG9yczogYnJva2VuIHByZWNvbmRpdGlvbiAqKVxuICAgICAgIGFzc2VydCBmYWxzZVxuKilcbmFuZCB0cmFucyA6IHR5cGVcbiAgYTEgYjEgYzEgZDEgZTEgZjFcbiAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgYTMgYjMgYzMgZDMgZTMgZjNcbi5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG4tPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbj0gZnVuIHR5MSB0eTIgLT4gbWF0Y2ggdHkxLCB0eTIgd2l0aFxuICB8IENoYXJfdHkgcmVzdDEsIENoYXJfdHkgcmVzdDIgLT4gQ2hhcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgU3RyaW5nX3R5IHJlc3QxLCBTdHJpbmdfdHkgcmVzdDIgLT4gU3RyaW5nX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBCb29sX3R5IHJlc3QxLCBCb29sX3R5IHJlc3QyIC0+IEJvb2xfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludF90eSByZXN0MSwgSW50X3R5IHJlc3QyIC0+IEludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50MzJfdHkgcmVzdDEsIEludDMyX3R5IHJlc3QyIC0+IEludDMyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQ2NF90eSByZXN0MSwgSW50NjRfdHkgcmVzdDIgLT4gSW50NjRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IE5hdGl2ZWludF90eSByZXN0MSwgTmF0aXZlaW50X3R5IHJlc3QyIC0+IE5hdGl2ZWludF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRmxvYXRfdHkgcmVzdDEsIEZsb2F0X3R5IHJlc3QyIC0+IEZsb2F0X3R5ICh0cmFucyByZXN0MSByZXN0MilcblxuICB8IEFscGhhX3R5IHJlc3QxLCBBbHBoYV90eSByZXN0MiAtPiBBbHBoYV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQWxwaGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbHBoYV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgVGhldGFfdHkgcmVzdDEsIFRoZXRhX3R5IHJlc3QyIC0+IFRoZXRhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBUaGV0YV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFRoZXRhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBBbnlfdHkgcmVzdDEsIEFueV90eSByZXN0MiAtPiBBbnlfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFueV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFueV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgUmVhZGVyX3R5IHJlc3QxLCBSZWFkZXJfdHkgcmVzdDIgLT4gUmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBSZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBSZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QxLCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MiAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIElnbm9yZWRfcmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfYXJnX3R5ICh0eTEsIHJlc3QxKSwgRm9ybWF0X2FyZ190eSAodHkyLCByZXN0MikgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0cmFucyB0eTEgdHkyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfYXJnX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X2FyZ190eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTEyLCByZXN0MSksXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIxLCB0eTIyLCByZXN0MikgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEyKSB0eTIxIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MjIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9zdWJzdF90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9zdWJzdF90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRW5kX29mX2ZtdHR5LCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG4gIHwgRW5kX29mX2ZtdHR5LCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEVuZF9vZl9mbXR0eSAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyBmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBFeHRyYWN0IHRoZSB0eXBlIHJlcHJlc2VudGF0aW9uIChhbiBmbXR0eSkgb2YgYSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfZm10IDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuXG4gIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQzMl90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoTmF0aXZlaW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDY0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEZsb2F0X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuXG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgICAgICAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQm9vbCAocGFkLCByZXN0KSAgICAgICAgICAgLT5cbiAgICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChCb29sX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQWxwaGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gQWxwaGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgIC0+IFRoZXRhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAgICAtPiBmbXR0eV9vZl9jdXN0b20gYXJpdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFJlYWRlciByZXN0ICAgICAgICAgICAgICAgIC0+IFJlYWRlcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCB0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5LCB0eSwgZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+IFN0cmluZ190eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT4gSW50X3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAtPiBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdFxuICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpICAtPlxuICAgIGNvbmNhdF9mbXR0eSAoZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gZm10aW5nX2dlbikgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgLT4gRW5kX29mX2ZtdHR5XG5cbmFuZCBmbXR0eV9vZl9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICh5LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gYXJpdHkgZm10dHkgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IGZtdHR5XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT4gQW55X3R5IChmbXR0eV9vZl9jdXN0b20gYXJpdHkgZm10dHkpXG5cbigqIEV4dHJhY3QgdGhlIGZtdHR5IG9mIGFuIGlnbm9yZWQgcGFyYW1ldGVyIGZvbGxvd2VkIGJ5IHRoZSByZXN0IG9mXG4gICB0aGUgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gY29uY2F0X2ZtdHR5IGZtdHR5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gSWdub3JlZF9yZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwYWRkaW5nIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKnNcIikuICopXG5hbmQgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAgLT4gZm10dHlcbiAgICB8IExpdF9wYWRkaW5nIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wYWRkaW5nIF8gLT4gSW50X3R5IGZtdHR5XG5cbigqIEFkZCBhbiBJbnRfdHkgbm9kZSBpZiBwcmVjaXNpb24gaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikuKilcbmFuZCBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+ICh4LCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG4gIGZ1biBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMgd2l0aFxuICAgIHwgTm9fcHJlY2lzaW9uICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcHJlY2lzaW9uIF8gLT4gZm10dHlcbiAgICB8IEFyZ19wcmVjaXNpb24gICAtPiBJbnRfdHkgZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwaW5nICopXG5cbigqIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBhIGdpdmVuIGZvcm1hdCB0eXBlLiAqKVxuZXhjZXB0aW9uIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIHBhZGRpbmcuICopXG4oKiBUYWtlIGFuIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiB0aGUgaW50ZWdlciBzaG91bGQgYmUga2VwdCBhcyBhcmd1bWVudC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkZGluZyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCwgZm10dHkgd2l0aFxuICB8IE5vX3BhZGRpbmcsIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKE5vX3BhZGRpbmcsIGZtdHR5KVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIF8gLT4gUGFkZGluZ19mbXR0eV9FQkIgKExpdF9wYWRkaW5nIChwYWR0eSx3KSxmbXR0eSlcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgSW50X3R5IHJlc3QgLT4gUGFkZGluZ19mbXR0eV9FQkIgKEFyZ19wYWRkaW5nIHBhZHR5LHJlc3QpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIENvbnZlcnQgYSAodXBhZGRpbmcsIHVwcmVjaXNpb24pIHRvIGEgKHBhZGRpbmcsIHByZWNpc2lvbikuICopXG4oKiBUYWtlIG9uZSBvciB0d28gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIG5lZWRlZC4gKilcbigqIFJhaXNlIFR5cGVfbWlzbWF0Y2ggaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHR5cGVfcGFkcHJlYyA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IHogLlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeikgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYywgdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIE5vX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAsIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTGl0X3ByZWNpc2lvbiBwLCByZXN0KVxuICB8IEFyZ19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEludF90eSByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIEFyZ19wcmVjaXNpb24sIHJlc3QpXG4gIHwgXywgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVHlwZSBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBJZiB0eXBpbmcgc3VjY2VlZCwgZ2VuZXJhdGUgYSBjb3B5IG9mIHRoZSBmb3JtYXQgd2l0aCB0aGUgc2FtZVxuICAgIHR5cGUgcGFyYW1ldGVycyBhcyB0aGUgZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCByZWMgdHlwZV9mb3JtYXQgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgd2l0aFxuICB8IEZtdF9mbXR0eV9FQkIgKGZtdCcsIEVuZF9vZl9mbXR0eSkgLT4gZm10J1xuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXRfZ2VuIDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggZm10LCBmbXR0eSB3aXRoXG4gIHwgQ2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXIgZm10JywgZm10dHknKVxuICB8IENhbWxfY2hhciBmbXRfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfY2hhciBmbXQnLCBmbXR0eScpXG4gIHwgU3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBTdHJpbmdfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKENhbWxfc3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50MzJfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDY0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgRmxvYXRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEJvb2wgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIEJvb2xfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEJvb2wgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBGbHVzaCBmbXRfcmVzdCwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGbHVzaCBmbXQnLCBmbXR0eScpXG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10JyksIGZtdHR5JylcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKENoYXJfbGl0ZXJhbCAoY2hyLCBmbXQnKSwgZm10dHknKVxuXG4gIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5JywgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5MSwgX3N1Yl9mbXR0eTIsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkxKSB0aGVuXG4gICAgICByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID1cbiAgICAgIHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCAoZXJhc2VfcmVsIGZtdHR5X3Jlc3QpXG4gICAgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eTEsIGZtdCcpLCBmbXR0eScpXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBBbHBoYSBmbXRfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChBbHBoYSBmbXQnLCBmbXR0eScpXG4gIHwgVGhldGEgZm10X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoVGhldGEgZm10JywgZm10dHknKVxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nX2dlbiwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9mb3JtYXR0aW5nX2dlbiBmb3JtYXR0aW5nX2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciBmbXRfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoUmVhZGVyIGZtdCcsIGZtdHR5JylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXRfcmVzdCksIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpLCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQnKSwgZm10dHknKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW0gaWduIHJlc3QgZm10dHlfcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdCAtPiBGbXRfZm10dHlfRUJCIChFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0KVxuXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhMSBhMyBiMSBiMyBjMSBjMyBkMSBkMyBlMSBlMiBlMyBmMSBmMiBmMyAuXG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGYxLCBiMSwgYzEsIGUxLCBlMiwgZjIpIGZtdCAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eSAtPlxuICAgIChhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXRfZm10dHlfZWJiID1cbmZ1biBmb3JtYXR0aW5nX2dlbiBmbXQwIGZtdHR5MCAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcblxuKCogVHlwZSBhbiBJZ25vcmVkX3BhcmFtIG5vZGUgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbSA6IHR5cGUgcCBxIHggeSB6IHQgdSB2IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgeSwgeiwgdCwgcSwgcCkgaWdub3JlZCAtPlxuICAgIChwLCB5LCB6LCBxLCB1LCB2KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10X2ZtdHR5X2ViYiA9XG5mdW4gaWduIGZtdCBmbXR0eSAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50IF8gICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50MzIgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfbmF0aXZlaW50IF8gICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfaW50NjQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZmxvYXQgXyAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgIGFzIGlnbicgLT4gdHlwZV9pZ25vcmVkX3BhcmFtX29uZSBpZ24nIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgKElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgc3ViX2ZtdHR5KSkgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5JywgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSkgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5IGZtdCBmbXR0eSBpblxuICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHknKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXQnKSxcbiAgICAgICAgICAgICAgICAgICBmbXR0eScpXG4gIHwgSWdub3JlZF9yZWFkZXIgLT4gKFxuICAgIG1hdGNoIGZtdHR5IHdpdGhcbiAgICB8IElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10JyksIGZtdHR5JylcbiAgICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG5cbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIDogdHlwZSBhMSBhMiBiMSBiMiBjMSBjMiBkMSBkMiBlMSBlMiBmMSBmMiAuXG4gICAgKGEyLCBiMiwgYzIsIGQyLCBkMiwgYTIpIGlnbm9yZWQgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5IC0+XG4gICAgKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGlnbiBmbXQgZm10dHkgLT5cbiAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IGluXG4gIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbiwgZm10JyksIGZtdHR5JylcblxuKCogVHlwaW5nIG9mIHRoZSBjb21wbGV4IGNhc2U6IFwiJV8oLi4uJSlcIi4gKilcbmFuZCB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiA6IHR5cGUgdyB4IHkgeiBwIHMgdCB1IGEgYiBjIGQgZSBmIC5cbiAgICAodywgeCwgeSwgeiwgcywgcCkgZm10dHkgLT5cbiAgICAocCwgeCwgeSwgcywgdCwgdSkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eV9mbXRfZWJiID1cbmZ1biBzdWJfZm10dHkgZm10IGZtdHR5IC0+IG1hdGNoIHN1Yl9mbXR0eSwgZm10dHkgd2l0aFxuICB8IENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQ2hhcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0LCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoU3RyaW5nX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQzMl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQzMl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoTmF0aXZlaW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCwgSW50NjRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0LCBGbG9hdF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGbG9hdF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQm9vbF90eSBzdWJfZm10dHlfcmVzdCwgQm9vbF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChCb29sX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBBbHBoYV90eSBzdWJfZm10dHlfcmVzdCwgQWxwaGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChUaGV0YV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoUmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eSwgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWIyX2ZtdHR5IDw+IEZtdHR5X0VCQiBzdWIyX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5Jywgc3ViX2ZtdHR5X3Jlc3QnKSwgZm10JylcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHksICBzdWIyX2ZtdHR5LCAgc3ViX2ZtdHR5X3Jlc3QpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgICgqIFRPRE8gZGVmaW5lIEZtdHR5X3JlbF9FQkIgdG8gcmVtb3ZlIHRob3NlIGVyYXNlX3JlbCAqKVxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjFfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIyX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IHN1Yl9mbXR0eScgPSB0cmFucyAoc3ltbSBzdWIxX2ZtdHR5Jykgc3ViMl9mbXR0eScgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCBzdWJfZm10dHknIGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gKGVyYXNlX3JlbCBzdWJfZm10dHlfcmVzdCkgZm10IGZtdHR5X3Jlc3RcbiAgICBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eScsIHN1YjJfZm10dHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbSBzdWJfZm10dHlfcmVzdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdCcpXG4gIHwgRW5kX29mX2ZtdHR5LCBmbXR0eSAtPlxuICAgIEZtdHR5X2ZtdF9FQkIgKEVuZF9vZl9mbXR0eSwgdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSlcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgcmVjYXN0YCBpcyBhIGJpdCBkaXNhcHBvaW50aW5nLiBUaGVcbiAgIGludmFyaWFudCBwcm92aWRlZCBieSB0aGUgdHlwZSBhcmUgdmVyeSBzdHJvbmc6IHRoZSBpbnB1dCBmb3JtYXQnc1xuICAgdHlwZSBpcyBpbiByZWxhdGlvbiB0byB0aGUgb3V0cHV0IHR5cGUncyBhcyB3aXRuZXNzZWQgYnkgdGhlXG4gICBmbXR0eV9yZWwgYXJndW1lbnQuIE9uZSB3b3VsZCBhdCBmaXJzdCBleHBlY3QgdGhpcyBmdW5jdGlvbiB0byBiZVxuICAgdG90YWwsIGFuZCBpbXBsZW1lbnRhYmxlIGJ5IGV4aGF1c3RpdmUgcGF0dGVybiBtYXRjaGluZy4gSW5zdGVhZCxcbiAgIHdlIHJldXNlIHRoZSBoaWdobHkgcGFydGlhbCBhbmQgbXVjaCBsZXNzIHdlbGwtZGVmaW5lZCBmdW5jdGlvblxuICAgYHR5cGVfZm9ybWF0YCB0aGF0IGhhcyBsb3N0IGFsbCBrbm93bGVkZ2Ugb2YgdGhlIGNvcnJlc3BvbmRlbmNlXG4gICBiZXR3ZWVuIHRoZSBhcmd1bWVudCdzIHR5cGVzLlxuXG4gICBCZXNpZGVzIHRoZSBmYWN0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXVzZXMgYSBsb3Qgb2YgdGhlXG4gICBgdHlwZV9mb3JtYXRgIGxvZ2ljIChlZy46IHNlZWluZyBJbnRfdHkgaW4gdGhlIGZtdHR5IHBhcmFtZXRlciBkb2VzXG4gICBub3QgbGV0IHlvdSBtYXRjaCBvbiBJbnQgb25seSwgYXMgeW91IG1heSBpbiBmYWN0IGhhdmUgRmxvYXRcbiAgIChBcmdfcGFkZGluZywgLi4uKSAoXCIlLipkXCIpIGJlZ2lubmluZyB3aXRoIGFuIEludF90eSksIGl0IGlzIGFsc29cbiAgIGEgcGFydGlhbCBmdW5jdGlvbiwgYmVjYXVzZSB0aGUgdHlwaW5nIGluZm9ybWF0aW9uIGluIGEgZm9ybWF0IGlzXG4gICBub3QgcXVpdGUgZW5vdWdoIHRvIHJlY29uc3RydWN0IGl0IHVuYW1iaWd1b3VzbHkuIEZvciBleGFtcGxlLCB0aGVcbiAgIGZvcm1hdCB0eXBlcyBvZiBcIiVkJV9yXCIgYW5kIFwiJV9yJWRcIiBoYXZlIHRoZSBzYW1lIGZvcm1hdDZcbiAgIHBhcmFtZXRlcnMsIGJ1dCB0aGV5IGFyZSBub3QgYXQgYWxsIGV4Y2hhbmdlYWJsZSwgYW5kIHB1dHRpbmcgb25lXG4gICBpbiBwbGFjZSBvZiB0aGUgb3RoZXIgbXVzdCByZXN1bHQgaW4gYSBkeW5hbWljIGZhaWx1cmUuXG5cbiAgIEdpdmVuIHRoYXQ6XG4gICAtIHdlJ2QgaGF2ZSB0byBkdXBsaWNhdGUgYSBsb3Qgb2Ygbm9uLXRyaXZpYWwgdHlwaW5nIGxvZ2ljIGZyb20gdHlwZV9mb3JtYXRcbiAgIC0gdGhpcyB3b3VsZG4ndCBldmVuIGVsaW1pbmF0ZSAoYWxsKSB0aGUgZHluYW1pYyBmYWlsdXJlc1xuICAgd2UgZGVjaWRlZCB0byBqdXN0IHJldXNlIHR5cGVfZm9ybWF0IGRpcmVjdGx5IGZvciBub3cuXG4qKVxubGV0IHJlY2FzdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdFxuPSBmdW4gZm10IGZtdHR5IC0+XG4gIHR5cGVfZm9ybWF0IGZtdCAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUHJpbnRpbmcgdG9vbHMgKilcblxuKCogQWRkIHBhZGRpbmcgc3BhY2VzIGFyb3VuZCBhIHN0cmluZy4gKilcbmxldCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCBzdHIgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoLCBwYWR0eSA9XG4gICAgYWJzIHdpZHRoLFxuICAgICgqIHdoaWxlIGxpdGVyYWwgcGFkZGluZyB3aWR0aHMgYXJlIGFsd2F5cyBub24tbmVnYXRpdmUsXG4gICAgICAgZHluYW1pY2FsbHktc2V0IHdpZHRocyAoQXJnX3BhZGRpbmcsIGVnLiAlKmQpIG1heSBiZSBuZWdhdGl2ZTtcbiAgICAgICB3ZSBpbnRlcnByZXQgdGhvc2UgYXMgc3BlY2lmeWluZyBhIHBhZGRpbmctdG8tdGhlLWxlZnQ7IHRoaXNcbiAgICAgICBtZWFucyB0aGF0ICcwJyBtYXkgZ2V0IGRyb3BwZWQgZXZlbiBpZiBpdCB3YXMgZXhwbGljaXRseSBzZXQsXG4gICAgICAgYnV0OlxuICAgICAgIC0gdGhpcyBpcyB3aGF0IHRoZSBsZWdhY3kgaW1wbGVtZW50YXRpb24gZG9lcywgYW5kXG4gICAgICAgICB3ZSBwcmVzZXJ2ZSBjb21wYXRpYmlsaXR5IGlmIHBvc3NpYmxlXG4gICAgICAgLSB3ZSBjb3VsZCBvbmx5IHNpZ25hbCB0aGlzIGlzc3VlIGJ5IGZhaWxpbmcgYXQgcnVudGltZSxcbiAgICAgICAgIHdoaWNoIGlzIG5vdCB2ZXJ5IG5pY2UuLi4gKilcbiAgICBpZiB3aWR0aCA8IDAgdGhlbiBMZWZ0IGVsc2UgcGFkdHkgaW5cbiAgaWYgd2lkdGggPD0gbGVuIHRoZW4gc3RyIGVsc2VcbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSB3aWR0aCAoaWYgcGFkdHkgPSBaZXJvcyB0aGVuICcwJyBlbHNlICcgJykgaW5cbiAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgfCBMZWZ0ICAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgMCBsZW5cbiAgICB8IFJpZ2h0IC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAwICYmIChzdHIuWzBdID0gJysnIHx8IHN0ci5bMF0gPSAnLScgfHwgc3RyLlswXSA9ICcgJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMCBzdHIuWzBdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzICh3aWR0aCAtIGxlbiArIDEpIChsZW4gLSAxKVxuICAgIHwgWmVyb3Mgd2hlbiBsZW4gPiAxICYmIHN0ci5bMF0gPSAnMCcgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzICh3aWR0aCAtIGxlbiArIDIpIChsZW4gLSAyKVxuICAgIHwgWmVyb3MgLT5cbiAgICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAod2lkdGggLSBsZW4pIGxlblxuICAgIGVuZDtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBBZGQgJzAnIHBhZGRpbmcgdG8gaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKilcbmxldCBmaXhfaW50X3ByZWNpc2lvbiBwcmVjIHN0ciA9XG4gIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIG1hdGNoIHN0ci5bMF0gd2l0aFxuICB8ICgnKycgfCAnLScgfCAnICcpIGFzIGMgd2hlbiBwcmVjICsgMSA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMSkgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAwIGM7XG4gICAgU3RyaW5nLmJsaXQgc3RyIDEgcmVzIChwcmVjIC0gbGVuICsgMikgKGxlbiAtIDEpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIHdoZW4gcHJlYyArIDIgPiBsZW4gJiYgbGVuID4gMSAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIChwcmVjICsgMikgJzAnIGluXG4gICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgU3RyaW5nLmJsaXQgc3RyIDIgcmVzIChwcmVjIC0gbGVuICsgNCkgKGxlbiAtIDIpO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIHdoZW4gcHJlYyA+IGxlbiAtPlxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHByZWMgJzAnIGluXG4gICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzIChwcmVjIC0gbGVuKSBsZW47XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCBfIC0+XG4gICAgc3RyXG5cbigqIEVzY2FwZSBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGluZyBjb252ZW50aW9uLiAqKVxubGV0IHN0cmluZ190b19jYW1sX3N0cmluZyBzdHIgPVxuICBsZXQgc3RyID0gU3RyaW5nLmVzY2FwZWQgc3RyIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFxcIicgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfaW50L2ludDMyL25hdGl2ZWludC9pbnQ2NCBmaXJzdCBhcmd1bWVudFxuICAgZnJvbSBhbiBpbnRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfaWNvbnYgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWRcIiB8IEludF9wZCAtPiBcIiUrZFwiIHwgSW50X3NkIC0+IFwiJSBkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVpXCIgfCBJbnRfcGkgLT4gXCIlK2lcIiB8IEludF9zaSAtPiBcIiUgaVwiXG4gIHwgSW50X3ggLT4gXCIleFwiIHwgSW50X0N4IC0+IFwiJSN4XCJcbiAgfCBJbnRfWCAtPiBcIiVYXCIgfCBJbnRfQ1ggLT4gXCIlI1hcIlxuICB8IEludF9vIC0+IFwiJW9cIiB8IEludF9DbyAtPiBcIiUjb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIldVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZMID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVMZFwiIHwgSW50X3BkIC0+IFwiJStMZFwiIHwgSW50X3NkIC0+IFwiJSBMZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlTGlcIiB8IEludF9waSAtPiBcIiUrTGlcIiB8IEludF9zaSAtPiBcIiUgTGlcIlxuICB8IEludF94IC0+IFwiJUx4XCIgfCBJbnRfQ3ggLT4gXCIlI0x4XCJcbiAgfCBJbnRfWCAtPiBcIiVMWFwiIHwgSW50X0NYIC0+IFwiJSNMWFwiXG4gIHwgSW50X28gLT4gXCIlTG9cIiB8IEludF9DbyAtPiBcIiUjTG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJUx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udmwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJWxkXCIgfCBJbnRfcGQgLT4gXCIlK2xkXCIgfCBJbnRfc2QgLT4gXCIlIGxkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVsaVwiIHwgSW50X3BpIC0+IFwiJStsaVwiIHwgSW50X3NpIC0+IFwiJSBsaVwiXG4gIHwgSW50X3ggLT4gXCIlbHhcIiB8IEludF9DeCAtPiBcIiUjbHhcIlxuICB8IEludF9YIC0+IFwiJWxYXCIgfCBJbnRfQ1ggLT4gXCIlI2xYXCJcbiAgfCBJbnRfbyAtPiBcIiVsb1wiIHwgSW50X0NvIC0+IFwiJSNsb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252biA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbmRcIiB8IEludF9wZCAtPiBcIiUrbmRcIiB8IEludF9zZCAtPiBcIiUgbmRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJW5pXCIgfCBJbnRfcGkgLT4gXCIlK25pXCIgfCBJbnRfc2kgLT4gXCIlIG5pXCJcbiAgfCBJbnRfeCAtPiBcIiVueFwiIHwgSW50X0N4IC0+IFwiJSNueFwiXG4gIHwgSW50X1ggLT4gXCIlblhcIiB8IEludF9DWCAtPiBcIiUjblhcIlxuICB8IEludF9vIC0+IFwiJW5vXCIgfCBJbnRfQ28gLT4gXCIlI25vXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVudVwiXG5cbigqIEdlbmVyYXRlIHRoZSBmb3JtYXRfZmxvYXQgZmlyc3QgYXJndW1lbnQgZnJvbSBhIGZsb2F0X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMgPVxuICAgIGxldCBwcmVjID0gYWJzIHByZWMgaW5cbiAgICBsZXQgc3ltYiA9IGNoYXJfb2ZfZmNvbnYgfmNGOidnJyBmY29udiBpblxuICAgIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBwcmVjKTtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmIHN5bWI7XG4gICAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG5sZXQgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgcyA9XG4gIG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICBsZXQgZGlnaXRzID1cbiAgICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgIHwgJzAnLi4nOScgLT4gaW5jciBuXG4gICAgICAgIHwgXyAtPiAoKVxuICAgICAgZG9uZTtcbiAgICAgICFuXG4gICAgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAoZGlnaXRzIC0gMSkgLyAzKSBpblxuICAgIGxldCBwb3MgPSByZWYgMCBpblxuICAgIGxldCBwdXQgYyA9IEJ5dGVzLnNldCBidWYgIXBvcyBjOyBpbmNyIHBvcyBpblxuICAgIGxldCBsZWZ0ID0gcmVmICgoZGlnaXRzIC0gMSkgbW9kIDMgKyAxKSBpblxuICAgIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMgLSAxIGRvXG4gICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnMCcuLic5JyBhcyBjIC0+XG4gICAgICAgICAgaWYgIWxlZnQgPSAwIHRoZW4gKHB1dCAnXyc7IGxlZnQgOj0gMyk7IGRlY3IgbGVmdDsgcHV0IGNcbiAgICAgIHwgYyAtPiBwdXQgY1xuICAgIGRvbmU7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBidWZcbiAgfCBfIC0+IHNcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGNvbnZlcnNpb24uICopXG5sZXQgY29udmVydF9pbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50IChmb3JtYXRfb2ZfaWNvbnYgaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQzMiBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQzMiAoZm9ybWF0X29mX2ljb252bCBpY29udikgbilcbmxldCBjb252ZXJ0X25hdGl2ZWludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9uYXRpdmVpbnQgKGZvcm1hdF9vZl9pY29udm4gaWNvbnYpIG4pXG5sZXQgY29udmVydF9pbnQ2NCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQ2NCAoZm9ybWF0X29mX2ljb252TCBpY29udikgbilcblxuKCogQ29udmVydCBhIGZsb2F0IHRvIHN0cmluZy4gKilcbigqIEZpeCBzcGVjaWFsIGNhc2Ugb2YgXCJPQ2FtbCBmbG9hdCBmb3JtYXRcIi4gKilcbmxldCBjb252ZXJ0X2Zsb2F0IGZjb252IHByZWMgeCA9XG4gIGxldCBoZXggKCkgPVxuICAgIGxldCBzaWduID1cbiAgICAgIG1hdGNoIGZzdCBmY29udiB3aXRoXG4gICAgICB8IEZsb2F0X2ZsYWdfcCAtPiAnKydcbiAgICAgIHwgRmxvYXRfZmxhZ19zIC0+ICcgJ1xuICAgICAgfCBfIC0+ICctJyBpblxuICAgIGhleHN0cmluZ19vZl9mbG9hdCB4IHByZWMgc2lnbiBpblxuICBsZXQgYWRkX2RvdF9pZl9uZWVkZWQgc3RyID1cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgcmVjIGlzX3ZhbGlkIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGZhbHNlIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJy4nIHwgJ2UnIHwgJ0UnIC0+IHRydWVcbiAgICAgICAgfCBfIC0+IGlzX3ZhbGlkIChpICsgMSkgaW5cbiAgICBpZiBpc192YWxpZCAwIHRoZW4gc3RyIGVsc2Ugc3RyIF4gXCIuXCIgaW5cbiAgbGV0IGNhbWxfc3BlY2lhbF92YWwgc3RyID0gbWF0Y2ggY2xhc3NpZnlfZmxvYXQgeCB3aXRoXG4gICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+IHN0clxuICAgIHwgRlBfaW5maW5pdGUgLT4gaWYgeCA8IDAuMCB0aGVuIFwibmVnX2luZmluaXR5XCIgZWxzZSBcImluZmluaXR5XCJcbiAgICB8IEZQX25hbiAtPiBcIm5hblwiIGluXG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfaCAtPiBoZXggKClcbiAgfCBGbG9hdF9IIC0+IFN0cmluZy51cHBlcmNhc2VfYXNjaWkgKGhleCAoKSlcbiAgfCBGbG9hdF9DRiAtPiBjYW1sX3NwZWNpYWxfdmFsIChoZXggKCkpXG4gIHwgRmxvYXRfRiAtPlxuICAgIGxldCBzdHIgPSBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4IGluXG4gICAgY2FtbF9zcGVjaWFsX3ZhbCAoYWRkX2RvdF9pZl9uZWVkZWQgc3RyKVxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIC0+XG4gICAgZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeFxuXG4oKiBDb252ZXJ0IGEgY2hhciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIE9DYW1sIGxleGljYWwgY29udmVudGlvbi4gKilcbmxldCBmb3JtYXRfY2FtbF9jaGFyIGMgPVxuICBsZXQgc3RyID0gQ2hhci5lc2NhcGVkIGMgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXCcnIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHR5cGUgdG8gc3RyaW5nICopXG5sZXQgc3RyaW5nX29mX2ZtdHR5IGZtdHR5ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBwcmludGluZyBmdW5jdGlvbiAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBwcmludGluZyBmdW5jdGlvbi4gKilcbigqIFVzZWQgdG8gZ2VuZXJhdGUgUHJpbnRmIGFuZCBGb3JtYXQgcHJpbnRpbmcgZnVuY3Rpb25zLiAqKVxuKCogUGFyYW1ldGVyczpcbiAgICAgazogYSBjb250aW51YXRpb24gZmluYWxseSBhcHBsaWVkIHRvIHRoZSBvdXRwdXQgc3RyZWFtIGFuZCB0aGUgYWNjdW11bGF0b3IuXG4gICAgIG86IHRoZSBvdXRwdXQgc3RyZWFtIChzZWUgaywgJWEgYW5kICV0KS5cbiAgICAgYWNjOiByZXYgbGlzdCBvZiBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzaCwgZm9ybWF0dGluZywgLi4uKS5cbiAgICAgZm10OiB0aGUgZm9ybWF0LiAqKVxubGV0IHJlYyBtYWtlX3ByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2NhbWxfY2hhciBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgKGZ1biBzdHIgLT4gc3RyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ190b19jYW1sX3N0cmluZ1xuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50IGljb252XG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDMyIGljb252XG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9uYXRpdmVpbnQgaWNvbnZcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50NjQgaWNvbnZcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgZmNvbnZcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIHN0cmluZ19vZl9ib29sXG4gIHwgQWxwaGEgcmVzdCAtPlxuICAgIGZ1biBmIHggLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGZ1biBvIC0+IGYgbyB4KSkgcmVzdFxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBmdW4gZiAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgKCkpXG4gIHwgUmVhZGVyIF8gLT5cbiAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICopXG4gICAgKCogSW5kZWVkLCBzaW5jZSBwcmludGYgYW5kIGNvLiB0YWtlIGEgZm9ybWF0NCBhcyBhcmd1bWVudCwgdGhlICdkIGFuZCAnZVxuICAgICAgIHR5cGUgcGFyYW1ldGVycyBvZiBmbXQgYXJlIG9idmlvdXNseSBlcXVhbHMuIFRoZSBSZWFkZXIgaXMgdGhlXG4gICAgICAgb25seSBjb25zdHJ1Y3RvciB3aGljaCB0b3VjaCAnZCBhbmQgJ2UgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBmb3JtYXRcbiAgICAgICB0eXBlLCBpdCBhZGRzIGFuICgtPikgdG8gdGhlICdkIHBhcmFtZXRlcnMuIENvbnNlcXVlbnRseSwgYSBmb3JtYXQ0XG4gICAgICAgY2Fubm90IGNvbnRhaW4gYSBSZWFkZXIgbm9kZSwgZXhjZXB0IGluIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG9cbiAgICAgICBhbiAley4uLiV9LiBJdCdzIG5vdCBhIHByb2JsZW0gYmVjYXVzZSBtYWtlX3ByaW50ZiBkbyBub3QgY2FsbFxuICAgICAgIGl0c2VsZiByZWN1cnNpdmVseSBvbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvICV7Li4uJX0uICopXG4gICAgYXNzZXJ0IGZhbHNlXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mbHVzaCBhY2MpIHJlc3RcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX3N0cmluZ19saXRlcmFsIChhY2MsIHN0cikpIHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfY2hhcl9saXRlcmFsIChhY2MsIGNocikpIHJlc3RcblxuICB8IEZvcm1hdF9hcmcgKF8sIHN1Yl9mbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSBzdHJpbmdfb2ZfZm10dHkgc3ViX2ZtdHR5IGluXG4gICAgKGZ1biBzdHIgLT5cbiAgICAgIGlnbm9yZSBzdHI7XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHkpKSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+IG1ha2VfcHJpbnRmIGsgYWNjXG4gICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgbGV0IG5ld19hY2MgPSBBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVbXCIpIGluXG4gICAgZnVuIF8gLT4gbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICgqIFRoaXMgY2FzZSBzaG91bGQgYmUgcmVmdXNlZCBmb3IgUHJpbnRmLiAqKVxuICAgICgqIEFjY2VwdGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqKVxuICAgICgqIEludGVycHJldCAlbCwgJW4gYW5kICVMIGFzICV1LiAqKVxuICAgIGZ1biBuIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfaW50IFwiJXVcIiBuKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbWFrZV9pZ25vcmVkX3BhcmFtIGsgYWNjIGlnbiByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19saXQgKGFjYywgZm10aW5nX2xpdCkpIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl90YWcga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGxldCBrJyBrYWNjID1cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2dlbiAoYWNjLCBBY2Nfb3Blbl9ib3gga2FjYykpIHJlc3QgaW5cbiAgICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdCdcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBrIGFjY1xuXG4oKiBEZWxheSB0aGUgZXJyb3IgKEludmFsaWRfYXJndW1lbnQgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpLiAqKVxuKCogR2VuZXJhdGUgZnVuY3Rpb25zIHRvIHRha2UgcmVtYWluaW5nIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIFwiJV9cIikuICopXG5hbmQgbWFrZV9pZ25vcmVkX3BhcmFtIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgZm10dHkgZm10XG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcblxuXG4oKiBTcGVjaWFsIGNhc2Ugb2YgcHJpbnRmIFwiJV8oXCIuICopXG5hbmQgbWFrZV9mcm9tX2ZtdHR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgZm10dHkgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBSZWFkZXJfdHkgXyAgICAgICAgICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBfICAgICAtPiBhc3NlcnQgZmFsc2VcbiAgfCBGb3JtYXRfYXJnX3R5IChfLCByZXN0KSAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogSW5zZXJ0IGFuIEFjY19pbnZhbGlkX2FyZyBpbiB0aGUgYWNjdW11bGF0b3IgYW5kIGNvbnRpbnVlIHRvIGdlbmVyYXRlXG4gICBjbG9zdXJlcyB0byBnZXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG5hbmQgbWFrZV9pbnZhbGlkX2FyZyA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGZtdCAtPlxuICBtYWtlX3ByaW50ZiBrIChBY2NfaW52YWxpZF9hcmcgKGFjYywgXCJQcmludGY6IGJhZCBjb252ZXJzaW9uICVfXCIpKSBmbXRcblxuKCogRml4IHBhZGRpbmcsIHRha2UgaXQgYXMgYW4gZXh0cmEgaW50ZWdlciBhcmd1bWVudCBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9wYWRkaW5nIDogdHlwZSB4IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHogLT4gYSkgcGFkZGluZyAtPiAoeiAtPiBzdHJpbmcpIC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCB0cmFucyAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgdHJhbnMgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3aWR0aCAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcblxuKCogRml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBmb3IgaW50LCBpbnQzMiwgbmF0aXZlaW50IG9yIGludDY0LiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IChpbnRfY29udiAtPiB6IC0+IHN0cmluZykgLT5cbiAgICBpbnRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyB0cmFucyBpY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gdHJhbnMgaWNvbnYgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuXG4oKiBDb252ZXJ0IGEgZmxvYXQsIGZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gaWYgbmVlZGVkLiAqKVxuKCogVGFrZSB0aGUgZmxvYXQgYXJndW1lbnQgYW5kIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgZmxvYXQgLT4gYSkgcHJlY2lzaW9uIC0+IGZsb2F0X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgZmNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgKGRlZmF1bHRfZmxvYXRfcHJlY2lzaW9uIGZjb252KSB4IGluXG4gICAgICBsZXQgc3RyJyA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgc3RyIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyJykpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbmFuZCBtYWtlX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gIChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geCAtPiB5ID1cbiAgZnVuIGsgYWNjIHJlc3QgYXJpdHkgZiAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiB4KVxuXG5sZXQgY29uc3QgeCBfID0geFxuXG5sZXQgcmVjIG1ha2VfaXByaW50ZiA6IHR5cGUgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGEgPVxuICBmdW4gayBvIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBDYW1sX3N0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEZsb2F0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBCb29sIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgVGhldGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyByZXN0IGFyaXR5XG4gICAgfCBSZWFkZXIgXyAtPlxuICAgICAgICAoKiBUaGlzIGNhc2UgaXMgaW1wb3NzaWJsZSwgYnkgdHlwaW5nIG9mIGZvcm1hdHMuICBTZWUgdGhlXG4gICAgICAgICAgIG5vdGUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FzZSBmb3IgbWFrZV9wcmludGYuICopXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgICAgZnVuIChGb3JtYXQgKGZtdCwgXykpIC0+XG4gICAgICAgICAgbWFrZV9pcHJpbnRmIGsgb1xuICAgICAgICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG4gICAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pZ25vcmVkX3BhcmFtIChmdW4gXyAtPiBrIG8pIChFbmRfb2ZfYWNjKSBpZ24gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgICAgIGsgb1xuYW5kIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIDpcbiAgdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+IHggPVxuICBmdW4gayBvIGZtdCBwYWQgcHJlYyAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICwgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IEFyZ19wYWRkaW5nIF8sIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpKVxuYW5kIGZuX29mX2N1c3RvbV9hcml0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT5cbiAgc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHkgPVxuICBmdW4gayBvIGZtdCAtPiBmdW5jdGlvblxuICAgIHwgQ3VzdG9tX3plcm8gLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyBmbXRcbiAgICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgICAgIGNvbnN0IChmbl9vZl9jdXN0b21fYXJpdHkgayBvIGZtdCBhcml0eSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29udGludWF0aW9ucyBmb3IgbWFrZV9wcmludGYgKilcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBvIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQHtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIFwiQFtcIjsgb3V0cHV0X2FjYyBvIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X3N0cmluZyBvIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgb3V0cHV0X2NoYXIgbyBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmIG9cbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGZsdXNoIG9cbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBvIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIGJ1ZnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBmIGJcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IGJ1ZnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBidWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAlYSBhbmQgJXQuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiAoZiAoKSlcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgYiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIEVycm9yIG1hbmFnZW1lbnQgKilcblxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBwcmV0dHktcHJpbnRlZCBlcnJvciBtZXNzYWdlLiAqKVxubGV0IGZhaWx3aXRoX21lc3NhZ2UgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGsgYWNjID0gc3RycHV0X2FjYyBidWYgYWNjOyBmYWlsd2l0aCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdHRpbmcgdG9vbHMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhbiBvcGVuIGJsb2NrIGRlc2NyaXB0aW9uIChpbmRlbnQsIGJsb2NrX3R5cGUpICopXG5sZXQgb3Blbl9ib3hfb2Zfc3RyaW5nIHN0ciA9XG4gIGlmIHN0ciA9IFwiXCIgdGhlbiAoMCwgUHBfYm94KSBlbHNlXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IGludmFsaWRfYm94ICgpID0gZmFpbHdpdGhfbWVzc2FnZSBcImludmFsaWQgYm94IGRlc2NyaXB0aW9uICVTXCIgc3RyIGluXG4gICAgbGV0IHJlYyBwYXJzZV9zcGFjZXMgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gaSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcgJyB8ICdcXHQnIC0+IHBhcnNlX3NwYWNlcyAoaSArIDEpXG4gICAgICAgIHwgXyAtPiBpXG4gICAgYW5kIHBhcnNlX2x3b3JkIGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICdhJyAuLiAneicgLT4gcGFyc2VfbHdvcmQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqXG4gICAgYW5kIHBhcnNlX2ludCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IHBhcnNlX2ludCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGogaW5cbiAgICBsZXQgd3N0YXJ0ID0gcGFyc2Vfc3BhY2VzIDAgaW5cbiAgICBsZXQgd2VuZCA9IHBhcnNlX2x3b3JkIHdzdGFydCB3c3RhcnQgaW5cbiAgICBsZXQgYm94X25hbWUgPSBTdHJpbmcuc3ViIHN0ciB3c3RhcnQgKHdlbmQgLSB3c3RhcnQpIGluXG4gICAgbGV0IG5zdGFydCA9IHBhcnNlX3NwYWNlcyB3ZW5kIGluXG4gICAgbGV0IG5lbmQgPSBwYXJzZV9pbnQgbnN0YXJ0IG5zdGFydCBpblxuICAgIGxldCBpbmRlbnQgPVxuICAgICAgaWYgbnN0YXJ0ID0gbmVuZCB0aGVuIDAgZWxzZVxuICAgICAgICB0cnkgaW50X29mX3N0cmluZyAoU3RyaW5nLnN1YiBzdHIgbnN0YXJ0IChuZW5kIC0gbnN0YXJ0KSlcbiAgICAgICAgd2l0aCBGYWlsdXJlIF8gLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICBsZXQgZXhwX2VuZCA9IHBhcnNlX3NwYWNlcyBuZW5kIGluXG4gICAgaWYgZXhwX2VuZCA8PiBsZW4gdGhlbiBpbnZhbGlkX2JveCAoKTtcbiAgICBsZXQgYm94X3R5cGUgPSBtYXRjaCBib3hfbmFtZSB3aXRoXG4gICAgICB8IFwiXCIgfCBcImJcIiAtPiBQcF9ib3hcbiAgICAgIHwgXCJoXCIgICAgICAtPiBQcF9oYm94XG4gICAgICB8IFwidlwiICAgICAgLT4gUHBfdmJveFxuICAgICAgfCBcImh2XCIgICAgIC0+IFBwX2h2Ym94XG4gICAgICB8IFwiaG92XCIgICAgLT4gUHBfaG92Ym94XG4gICAgICB8IF8gICAgICAgIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgKGluZGVudCwgYm94X3R5cGUpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUGFyc2luZyB0b29scyAqKVxuXG4oKiBDcmVhdGUgYSBwYWRkaW5nX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcgYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZGRpbmdfZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcGFkZGluZ19mbXRfZWJiID1cbmZ1biBwYWQgZm10IC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoTm9fcGFkZGluZywgZm10KVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRkaW5nX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgZm10KVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIGZtdClcblxuKCogQ3JlYXRlIGEgcHJlY2lzaW9uX2ZtdF9lYmIgZnJvbSBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wcmVjaXNpb25fZm10X2ViYiA6IHR5cGUgeCB5IC5cbiAgICAoeCwgeSkgcHJlY2lzaW9uIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwcmVjaXNpb25fZm10X2ViYiA9XG5mdW4gcHJlYyBmbXQgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gIHwgTm9fcHJlY2lzaW9uICAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChOb19wcmVjaXNpb24sIGZtdClcbiAgfCBMaXRfcHJlY2lzaW9uIHAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKExpdF9wcmVjaXNpb24gcCwgZm10KVxuICB8IEFyZ19wcmVjaXNpb24gICAtPiBQcmVjaXNpb25fZm10X0VCQiAoQXJnX3ByZWNpc2lvbiwgZm10KVxuXG4oKiBDcmVhdGUgYSBwYWRwcmVjX2ZtdF9lYmIgZnJvbSBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgYW5kIHRoZSBwcmVjaXNpb24gdG8gZGlzam9pbiB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnRzXG4gICBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkcHJlY19mbXRfZWJiIDogdHlwZSB4IHkgeiB0IC5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+XG4gICAgKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgIChfLCBfLCBfLCBfLCBfKSBwYWRwcmVjX2ZtdF9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdCAtPlxuICBsZXQgUHJlY2lzaW9uX2ZtdF9FQkIgKHByZWMsIGZtdCcpID0gbWFrZV9wcmVjaXNpb25fZm10X2ViYiBwcmVjIGZtdCBpblxuICBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIHByZWMsIGZtdCcpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZHByZWNfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBwcmVjLCBmbXQnKVxuICB8IEFyZ19wYWRkaW5nIHMgICAgICAtPiBQYWRwcmVjX2ZtdF9FQkIgKEFyZ19wYWRkaW5nIHMsIHByZWMsIGZtdCcpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBwYXJzaW5nICopXG5cbigqIFBhcnNlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZvcm1hdCBhbmQgY3JlYXRlIGEgZm10X2ViYi4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSBpbiBjYXNlIG9mIGludmFsaWQgZm9ybWF0LiAqKVxubGV0IGZtdF9lYmJfb2Zfc3RyaW5nID9sZWdhY3lfYmVoYXZpb3Igc3RyID1cbiAgKCogUGFyYW1ldGVycyBuYW1pbmcgY29udmVudGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gbGl0X3N0YXJ0OiBzdGFydCBvZiB0aGUgbGl0ZXJhbCBzZXF1ZW5jZS4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzdHJfaW5kOiBjdXJyZW50IGluZGV4IGluIHRoZSBzdHJpbmcuICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGVuZF9pbmQ6IGVuZCBvZiB0aGUgY3VycmVudCAoc3ViLSlmb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcGN0X2luZDogaW5kZXggb2YgdGhlICclJyBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICopXG4gICgqICAgLSB6ZXJvOiAgaXMgdGhlICcwJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIG1pbnVzOiBpcyB0aGUgJy0nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGx1czogIGlzIHRoZSAnKycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBoYXNoOiAgaXMgdGhlICcjJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHNwYWNlOiBpcyB0aGUgJyAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaWduOiAgIGlzIHRoZSAnXycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwYWQ6IHBhZGRpbmcgb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHByZWM6IHByZWNpc2lvbiBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3ltYjogY2hhciByZXByZXNlbnRpbmcgdGhlIGNvbnZlcnNpb24gKCdjJywgJ3MnLCAnZCcsIC4uLikuICopXG4gICgqICAgLSBjaGFyX3NldDogc2V0IG9mIGNoYXJhY3RlcnMgYXMgYml0bWFwIChzZWUgc2NhbmYgJVsuLi5dKS4gICAgKilcblxuICBsZXQgbGVnYWN5X2JlaGF2aW9yID0gbWF0Y2ggbGVnYWN5X2JlaGF2aW9yIHdpdGhcbiAgICB8IFNvbWUgZmxhZyAtPiBmbGFnXG4gICAgfCBOb25lIC0+IHRydWVcbiAgKCogIFdoZW4gdGhpcyBmbGFnIGlzIGVuYWJsZWQsIHRoZSBmb3JtYXQgcGFyc2VyIHRyaWVzIHRvIGJlaGF2ZSBhc1xuICAgICAgdGhlIDw0LjAyIGltcGxlbWVudGF0aW9ucywgaW4gcGFydGljdWxhciBpdCBpZ25vcmVzIG1vc3QgYmVuaW5lXG4gICAgICBub25zZW5zaWNhbCBmb3JtYXQuIFdoZW4gdGhlIGZsYWcgaXMgZGlzYWJsZWQsIGl0IHdpbGwgcmVqZWN0IGFueVxuICAgICAgZm9ybWF0IHRoYXQgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZSBzcGVjaWZpY2F0aW9uLlxuXG4gICAgICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBcIiUrIGRcIjogc3BlY2lmeWluZyBib3RoICcrJyAoaWYgdGhlXG4gICAgICBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoIGEgJysnIHRvIGdldCB0aGUgc2FtZSB3aWR0aCBhc1xuICAgICAgbmVnYXRpdmUgbnVtYmVycykgYW5kICcgJyAoaWYgdGhlIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGhcbiAgICAgIGEgc3BhY2UpIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGJ1dCB0aGUgbGVnYWN5ICg8IDQuMDIpXG4gICAgICBpbXBsZW1lbnRhdGlvbiB3YXMgaGFwcHkgdG8ganVzdCBpZ25vcmUgdGhlIHNwYWNlLlxuICAqKVxuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZCBtc2cgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIG1zZ1xuICBpblxuXG4gICgqIFVzZWQgd2hlbiB0aGUgZW5kIG9mIHRoZSBmb3JtYXQgKG9yIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXQpIHdhcyBlbmNvdW50ZXJlZFxuICAgICAgdW5leHBlY3RlZGx5LiAqKVxuICBsZXQgdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2UgZW5kX2luZFxuICAgICAgXCJ1bmV4cGVjdGVkIGVuZCBvZiBmb3JtYXRcIlxuICBpblxuXG4gICgqIFVzZWQgZm9yICUwYzogbm8gb3RoZXIgd2lkdGhzIGFyZSBpbXBsZW1lbnRlZCAqKVxuICBsZXQgaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kXG4gICAgICBcIm5vbi16ZXJvIHdpZHRocyBhcmUgdW5zdXBwb3J0ZWQgZm9yICVjIGNvbnZlcnNpb25zXCJcbiAgaW5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIG9wdGlvbiBkZXBlbmRlbmN5XG4gICAgIHByb2JsZW0uICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IHN0cl9pbmQgYyBzID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAnJWMnIHdpdGhvdXQgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgYyBzXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGFuIHVuZXhwZWN0ZWRcbiAgICAgY2hhcmFjdGVyLiAqKVxuICBsZXQgZXhwZWN0ZWRfY2hhcmFjdGVyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZCA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlcyBleHBlY3RlZCwgcmVhZCAlQ1wiXG4gICAgICBzdHIgc3RyX2luZCBleHBlY3RlZCByZWFkXG4gIGluXG5cbiAgKCogUGFyc2UgdGhlIHN0cmluZyBmcm9tIGJlZ19pbmQgKGluY2x1ZGVkKSB0byBlbmRfaW5kIChleGNsdWRlZCkuICopXG4gIGxldCByZWMgcGFyc2UgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gYmVnX2luZCBlbmRfaW5kIC0+IHBhcnNlX2xpdGVyYWwgYmVnX2luZCBiZWdfaW5kIGVuZF9pbmRcblxuICAoKiBSZWFkIGxpdGVyYWwgY2hhcmFjdGVycyB1cCB0byAnJScgb3IgJ0AnIHNwZWNpYWwgY2hhcmFjdGVycy4gKilcbiAgYW5kIHBhcnNlX2xpdGVyYWwgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIEVuZF9vZl9mb3JtYXQgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2Zvcm1hdCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfYWZ0ZXJfYXQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfbGl0ZXJhbCBsaXRfc3RhcnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgKCogUGFyc2UgYSBmb3JtYXQgYWZ0ZXIgJyUnICopXG4gIGFuZCBwYXJzZV9mb3JtYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBlbmRfaW5kIC0+IHBhcnNlX2lnbiBwY3RfaW5kIChwY3RfaW5kICsgMSkgZW5kX2luZFxuXG4gIGFuZCBwYXJzZV9pZ24gOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ18nIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgKHN0cl9pbmQrMSkgZW5kX2luZCB0cnVlXG4gICAgICB8IF8gLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgZmFsc2VcblxuICBhbmQgcGFyc2VfZmxhZ3MgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmJcbiAgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgaWduIC0+XG4gICAgbGV0IHplcm8gPSByZWYgZmFsc2UgYW5kIG1pbnVzID0gcmVmIGZhbHNlXG4gICAgYW5kIHBsdXMgPSByZWYgZmFsc2UgYW5kIHNwYWNlID0gcmVmIGZhbHNlXG4gICAgYW5kIGhhc2ggPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgc2V0X2ZsYWcgc3RyX2luZCBmbGFnID1cbiAgICAgICgqIGluIGxlZ2FjeSBtb2RlLCBkdXBsaWNhdGUgZmxhZ3MgYXJlIGFjY2VwdGVkICopXG4gICAgICBpZiAhZmxhZyAmJiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIGR1cGxpY2F0ZSBmbGFnICVDXCJcbiAgICAgICAgICBzdHIgc3RyX2luZCBzdHIuW3N0cl9pbmRdO1xuICAgICAgZmxhZyA6PSB0cnVlO1xuICAgIGluXG4gICAgbGV0IHJlYyByZWFkX2ZsYWdzIHN0cl9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnMCcgLT4gc2V0X2ZsYWcgc3RyX2luZCB6ZXJvOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICctJyAtPiBzZXRfZmxhZyBzdHJfaW5kIG1pbnVzOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJysnIC0+IHNldF9mbGFnIHN0cl9pbmQgcGx1czsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnIycgLT4gc2V0X2ZsYWcgc3RyX2luZCBoYXNoOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyAnIC0+IHNldF9mbGFnIHN0cl9pbmQgc3BhY2U7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmRcbiAgICAgICAgICAhemVybyAhbWludXMgIXBsdXMgIWhhc2ggIXNwYWNlIGlnblxuICAgICAgZW5kXG4gICAgaW5cbiAgICByZWFkX2ZsYWdzIHN0cl9pbmRcblxuICAoKiBUcnkgdG8gcmVhZCBhIGRpZ2l0YWwgb3IgYSAnKicgcGFkZGluZy4gKilcbiAgYW5kIHBhcnNlX3BhZGRpbmcgOiB0eXBlIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCB6ZXJvIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYWR0eSA9IG1hdGNoIHplcm8sIG1pbnVzIHdpdGhcbiAgICAgIHwgZmFsc2UsIGZhbHNlIC0+IFJpZ2h0XG4gICAgICB8IGZhbHNlLCB0cnVlICAtPiBMZWZ0XG4gICAgICB8ICB0cnVlLCBmYWxzZSAtPiBaZXJvc1xuICAgICAgfCAgdHJ1ZSwgdHJ1ZSAgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGVmdFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnLScgXCIwXCIgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgIGxldCBuZXdfaW5kLCB3aWR0aCA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgKExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gKEFyZ19wYWRkaW5nIHBhZHR5KVxuICAgIHwgXyAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgICAgfCBMZWZ0ICAtPlxuICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy0nIFwicGFkZGluZ1wiO1xuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICB8IFplcm9zIC0+XG4gICAgICAgICAoKiBhICcwJyBwYWRkaW5nIGluZGljYXRpb24gbm90IGZvbGxvd2VkIGJ5IGFueXRoaW5nIHNob3VsZFxuICAgICAgICAgICBiZSBpbnRlcnByZXRlZCBhcyBhIFJpZ2h0IHBhZGRpbmcgb2Ygd2lkdGggMC4gVGhpcyBpcyB1c2VkXG4gICAgICAgICAgIGJ5IHNjYW5uaW5nIGNvbnZlcnNpb25zICUwcyBhbmQgJTBjICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIChMaXRfcGFkZGluZyAoUmlnaHQsIDApKVxuICAgICAgfCBSaWdodCAtPlxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBOb19wYWRkaW5nXG4gICAgICBlbmRcblxuICAoKiBJcyBwcmVjaXNpb24gZGVmaW5lZD8gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3BhZGRpbmcgOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnLicgLT5cbiAgICAgIHBhcnNlX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZFxuICAgIHwgc3ltYiAtPlxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBOb19wcmVjaXNpb24gcGFkIHN5bWJcblxuICAoKiBSZWFkIHRoZSBkaWdpdGFsIG9yICcqJyBwcmVjaXNpb24uICopXG4gIGFuZCBwYXJzZV9wcmVjaXNpb24gOiB0eXBlIHggZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgXykgcGFkZGluZyAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZCA9XG4gICAgICBsZXQgbmV3X2luZCwgcHJlYyA9IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwIGluXG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gcHJlYykgaW5cbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kXG4gICAgfCAoJysnIHwgJy0nKSBhcyBzeW1iIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+XG4gICAgICAoKiBMZWdhY3kgbW9kZSB3b3VsZCBhY2NlcHQgYW5kIGlnbm9yZSAnKycgb3IgJy0nIGJlZm9yZSB0aGVcbiAgICAgICAgIGludGVnZXIgZGVzY3JpYmluZyB0aGUgZGVzaXJlZCBwcmVjaXNpb247IG5vdGUgdGhhdCB0aGlzXG4gICAgICAgICBjYW5ub3QgaGFwcGVuIGZvciBwYWRkaW5nIHdpZHRoLCBhcyAnKycgYW5kICctJyBhbHJlYWR5IGhhdmVcbiAgICAgICAgIGEgc2VtYW50aWNzIHRoZXJlLlxuXG4gICAgICAgICBUaGF0IHNhaWQsIHRoZSBpZGVhIChzdXBwb3J0ZWQgYnkgdGhpcyB0d2VhaykgdGhhdCB3aWR0aCBhbmRcbiAgICAgICAgIHByZWNpc2lvbiBsaXRlcmFscyBhcmUgXCJpbnRlZ2VyIGxpdGVyYWxzXCIgaW4gdGhlIE9DYW1sIHNlbnNlIGlzXG4gICAgICAgICBzdGlsbCBibGF0YW50bHkgd3JvbmcsIGFzIDEyM180NTYgb3IgMHhGRiBhcmUgcmVqZWN0ZWQuICopXG4gICAgICBwYXJzZV9saXRlcmFsIChtaW51cyB8fCBzeW1iID0gJy0nKSAoc3RyX2luZCArIDEpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIHBhZCBBcmdfcHJlY2lzaW9uXG4gICAgfCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBub3RlIHRoYXQgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRpZCBub3QgaWdub3JlICcuJyB3aXRob3V0XG4gICAgICAgICAgIGEgbnVtYmVyIChhcyBpdCBkb2VzIGZvciBwYWRkaW5nIGluZGljYXRpb25zKSwgYnV0XG4gICAgICAgICAgIGludGVycHJldHMgaXQgYXMgJy4wJyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiAwKVxuICAgICAgZWxzZVxuICAgICAgICBpbnZhbGlkX2Zvcm1hdF93aXRob3V0IChzdHJfaW5kIC0gMSkgJy4nIFwicHJlY2lzaW9uXCJcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiA6IHR5cGUgeCB5IHogdCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhcnNlX2NvbnYgKHR5cGUgdSkgKHR5cGUgdikgKHBhZHByZWMgOiAodSwgdikgcGFkZGluZykgPVxuICAgICAgcGFyc2VfY29udmVyc2lvbiBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZFxuICAgICAgICBwcmVjIHBhZHByZWMgc3RyLltzdHJfaW5kXSBpblxuICAgICgqIGluIGxlZ2FjeSBtb2RlLCBzb21lIGZvcm1hdHMgKCVzIGFuZCAlUykgYWNjZXB0IGEgd2VpcmQgbWl4IG9mXG4gICAgICAgcGFkZGluZyBhbmQgcHJlY2lzaW9uLCB3aGljaCBpcyBtZXJnZWQgYXMgYSBzaW5nbGUgcGFkZGluZ1xuICAgICAgIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwgaW4gJS4xMHMgdGhlIHByZWNpc2lvbiBpcyBpbXBsaWNpdGx5XG4gICAgICAgdW5kZXJzdG9vZCBhcyBwYWRkaW5nICUxMHMsIGJ1dCB0aGUgbGVmdC1wYWRkaW5nIGNvbXBvbmVudCBtYXlcbiAgICAgICBiZSBzcGVjaWZpZWQgZWl0aGVyIGFzIGEgbGVmdCBwYWRkaW5nIG9yIGEgbmVnYXRpdmUgcHJlY2lzaW9uOlxuICAgICAgICUtLjNzIGFuZCAlLi0zcyBhcmUgZXF1aXZhbGVudCB0byAlLTNzICopXG4gICAgbWF0Y2ggcGFkIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgLT4gKFxuICAgICAgbWF0Y2ggbWludXMsIHByZWMgd2l0aFxuICAgICAgICB8IF8sIE5vX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IE5vX3BhZGRpbmdcbiAgICAgICAgfCBmYWxzZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChSaWdodCwgbikpXG4gICAgICAgIHwgdHJ1ZSwgTGl0X3ByZWNpc2lvbiBuIC0+IHBhcnNlX2NvbnYgKExpdF9wYWRkaW5nIChMZWZ0LCBuKSlcbiAgICAgICAgfCBmYWxzZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBSaWdodClcbiAgICAgICAgfCB0cnVlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIExlZnQpXG4gICAgKVxuICAgIHwgcGFkIC0+IHBhcnNlX2NvbnYgcGFkXG5cbiAgKCogQ2FzZSBhbmFseXNpcyBvbiBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfY29udmVyc2lvbiA6IHR5cGUgeCB5IHogdCB1IHYgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gKHgsIHkpIHBhZGRpbmcgLT5cbiAgICAgICAgKHosIHQpIHByZWNpc2lvbiAtPiAodSwgdikgcGFkZGluZyAtPiBjaGFyIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgcGFkcHJlYyBzeW1iIC0+XG4gICAgKCogRmxhZ3MgdXNlZCB0byBjaGVjayBvcHRpb24gdXNhZ2VzL2NvbXBhdGliaWxpdGllcy4gKilcbiAgICBsZXQgcGx1c191c2VkICA9IHJlZiBmYWxzZSBhbmQgaGFzaF91c2VkID0gcmVmIGZhbHNlXG4gICAgYW5kIHNwYWNlX3VzZWQgPSByZWYgZmFsc2UgYW5kIGlnbl91c2VkICAgPSByZWYgZmFsc2VcbiAgICBhbmQgcGFkX3VzZWQgICA9IHJlZiBmYWxzZSBhbmQgcHJlY191c2VkICA9IHJlZiBmYWxzZSBpblxuXG4gICAgKCogQWNjZXNzIHRvIG9wdGlvbnMsIHVwZGF0ZSBmbGFncy4gKilcbiAgICBsZXQgZ2V0X3BsdXMgICAgKCkgPSBwbHVzX3VzZWQgIDo9IHRydWU7IHBsdXNcbiAgICBhbmQgZ2V0X2hhc2ggICAoKSA9IGhhc2hfdXNlZCA6PSB0cnVlOyBoYXNoXG4gICAgYW5kIGdldF9zcGFjZSAgICgpID0gc3BhY2VfdXNlZCA6PSB0cnVlOyBzcGFjZVxuICAgIGFuZCBnZXRfaWduICAgICAoKSA9IGlnbl91c2VkICAgOj0gdHJ1ZTsgaWduXG4gICAgYW5kIGdldF9wYWQgICAgICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRcbiAgICBhbmQgZ2V0X3ByZWMgICAgKCkgPSBwcmVjX3VzZWQgIDo9IHRydWU7IHByZWNcbiAgICBhbmQgZ2V0X3BhZHByZWMgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZHByZWMgaW5cblxuICAgIGxldCBnZXRfaW50X3BhZCAoKSA6ICh4LHkpIHBhZGRpbmcgPVxuICAgICAgKCogJTUuM2QgaXMgYWNjZXB0ZWQgYW5kIG1lYW5pbmdmdWw6IHBhZCB0byBsZW5ndGggNSB3aXRoXG4gICAgICAgICBzcGFjZXMsIGJ1dCBmaXJzdCBwYWQgd2l0aCB6ZXJvcyB1cHRvIGxlbmd0aCAzICgwLXBhZGRpbmdcbiAgICAgICAgIGlzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcInByZWNpc2lvblwiIGZvciBpbnRlZ2VyIGZvcm1hdHMpLlxuXG4gICAgICAgICAlMDUuM2QgaXMgcmVkdW5kYW50OiBwYWQgdG8gbGVuZ3RoIDUgKndpdGggemVyb3MqLCBidXRcbiAgICAgICAgIGZpcnN0IHBhZCB3aXRoIHplcm9zLi4uIFRvIGFkZCBpbnN1bHQgdG8gdGhlIGluanVyeSwgdGhlXG4gICAgICAgICBsZWdhY3kgaW1wbGVtZW50YXRpb24gaWdub3JlcyB0aGUgMC1wYWRkaW5nIGluZGljYXRpb24gYW5kXG4gICAgICAgICBkb2VzIHRoZSA1IHBhZGRpbmcgd2l0aCBzcGFjZXMgaW5zdGVhZC4gV2UgcmV1c2UgdGhpc1xuICAgICAgICAgaW50ZXJwcmV0YXRpb24gZm9yIGNvbXBhdGliaWxpdHksIGJ1dCBzdGF0aWNhbGx5IHJlamVjdCB0aGlzXG4gICAgICAgICBmb3JtYXQgd2hlbiB0aGUgbGVnYWN5IG1vZGUgaXMgZGlzYWJsZWQsIHRvIHByb3RlY3Qgc3RyaWN0XG4gICAgICAgICB1c2VycyBmcm9tIHRoaXMgY29ybmVyIGNhc2UuICopXG4gICAgICAgbWF0Y2ggZ2V0X3BhZCAoKSwgZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgICAgfCBwYWQsIE5vX3ByZWNpc2lvbiAtPiBwYWRcbiAgICAgICAgIHwgTm9fcGFkZGluZywgXyAgICAgLT4gTm9fcGFkZGluZ1xuICAgICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIG4pLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgbilcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MsIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJzAnIFwicHJlY2lzaW9uXCJcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZCBpblxuXG4gICAgKCogQ2hlY2sgdGhhdCBwYWR0eSA8PiBaZXJvcy4gKilcbiAgICBsZXQgY2hlY2tfbm9fMCBzeW1iICh0eXBlIGEgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA6IChhLGIpIHBhZGRpbmcgPVxuICAgICAgbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKChMZWZ0IHwgUmlnaHQpLCBfKSAtPiBwYWRcbiAgICAgIHwgQXJnX3BhZGRpbmcgKExlZnQgfCBSaWdodCkgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgWmVyb3MgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gQXJnX3BhZGRpbmcgUmlnaHRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgIGluXG5cbiAgICAoKiBHZXQgcGFkZGluZyBhcyBhIHBhZF9vcHRpb24gKHNlZSBcIiVfXCIsIFwiJXtcIiwgXCIlKFwiIGFuZCBcIiVbXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IG9wdF9vZl9wYWQgYyAodHlwZSBhKSAodHlwZSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpID0gbWF0Y2ggcGFkIHdpdGhcbiAgICAgIHwgTm9fcGFkZGluZyAtPiBOb25lXG4gICAgICB8IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpIC0+IFNvbWUgd2lkdGhcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJzAnXCJcbiAgICAgIHwgTGl0X3BhZGRpbmcgKExlZnQsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInLSdcIlxuICAgICAgfCBBcmdfcGFkZGluZyBfIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJyonXCJcbiAgICBpblxuICAgIGxldCBnZXRfcGFkX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkICgpKSBpblxuICAgIGxldCBnZXRfcGFkcHJlY19vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZHByZWMgKCkpIGluXG5cbiAgICAoKiBHZXQgcHJlY2lzaW9uIGFzIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfZlwiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBnZXRfcHJlY19vcHQgKCkgPSBtYXRjaCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICB8IE5vX3ByZWNpc2lvbiAgICAgICAtPiBOb25lXG4gICAgICB8IExpdF9wcmVjaXNpb24gbmRlYyAtPiBTb21lIG5kZWNcbiAgICAgIHwgQXJnX3ByZWNpc2lvbiAgICAgIC0+IGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKidcIlxuICAgIGluXG5cbiAgICBsZXQgZm10X3Jlc3VsdCA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJywnIC0+XG4gICAgICBwYXJzZSBzdHJfaW5kIGVuZF9pbmRcbiAgICB8ICdjJyAtPlxuICAgICAgbGV0IGNoYXJfZm9ybWF0IGZtdF9yZXN0ID0gKCogJWMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKENoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IHNjYW5fZm9ybWF0IGZtdF9yZXN0ID0gKCogJTBjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3NjYW5fbmV4dF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoU2Nhbl9uZXh0X2NoYXIgZm10X3Jlc3QpXG4gICAgICBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGJlZ2luIG1hdGNoIGdldF9wYWRfb3B0ICdjJyB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgMCAtPiBzY2FuX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgICB8IFNvbWUgX24gLT5cbiAgICAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvclxuICAgICAgICAgICB0aGVuIGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmRcbiAgICAgICAgICAgZWxzZSAoKiBsZWdhY3kgaWdub3JlcyAlYyB3aWR0aHMgKikgY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgIGVuZFxuICAgIHwgJ0MnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfY2FtbF9jaGFyLGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoQ2FtbF9jaGFyIGZtdF9yZXN0KVxuICAgIHwgJ3MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoU3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ1MnIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2NhbWxfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChDYW1sX3N0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPlxuICAgICAgbGV0IGljb252ID0gY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ04nIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBUb2tlbl9jb3VudGVyIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyB8ICduJyB8ICdMJyB3aGVuIHN0cl9pbmQ9ZW5kX2luZCB8fCBub3QgKGlzX2ludF9iYXNlIHN0ci5bc3RyX2luZF0pIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb3VudGVyX29mX2NoYXIgc3ltYiBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDMyIChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50MzIgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICduJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKVxuICAgICAgICAgIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTCcgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAgIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2ludDY0IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50NjQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdmJyB8ICdlJyB8ICdFJyB8ICdnJyB8ICdHJyB8ICdGJyB8ICdoJyB8ICdIJyAtPlxuICAgICAgbGV0IGZjb252ID1cbiAgICAgICAgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZFxuICAgICAgICAgIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mbG9hdCAoZ2V0X3BhZF9vcHQgJ18nLCBnZXRfcHJlY19vcHQgKCkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEZsb2F0IChmY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnYicgfCAnQicgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfYm9vbCAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQm9vbCAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdhJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEFscGhhIGZtdF9yZXN0KVxuICAgIHwgJ3QnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoVGhldGEgZm10X3Jlc3QpXG4gICAgfCAncicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2UgRm10X0VCQiAoUmVhZGVyIGZtdF9yZXN0KVxuICAgIHwgJyEnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRmx1c2ggZm10X3Jlc3QpXG4gICAgfCAoJyUnIHwgJ0AnKSBhcyBjIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsIChjLCBmbXRfcmVzdCkpXG4gICAgfCAneycgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICd9JyBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfYXJnIChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfYXJnIChnZXRfcGFkX29wdCAneycsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJygnIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnKScgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnXycsIHN1Yl9mbXR0eSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChGb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICcoJywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnWycgLT5cbiAgICAgIGxldCBuZXh0X2luZCwgY2hhcl9zZXQgPSBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnXycsIGNoYXJfc2V0KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdbJywgY2hhcl9zZXQsIGZtdF9yZXN0KSlcbiAgICB8ICctJyB8ICcrJyB8ICcjJyB8ICcgJyB8ICdfJyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgZmxhZyAlQyBpcyBvbmx5IGFsbG93ZWQgYWZ0ZXIgdGhlICclJScsIGJlZm9yZSBwYWRkaW5nIGFuZCBwcmVjaXNpb25cIlxuICAgICAgICBzdHIgcGN0X2luZCBzeW1iXG4gICAgfCBfIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBpbnZhbGlkIGNvbnZlcnNpb24gXFxcIiUlJWNcXFwiXCIgc3RyIChzdHJfaW5kIC0gMSkgc3ltYlxuICAgIGluXG4gICAgKCogQ2hlY2sgZm9yIHVudXNlZCBvcHRpb25zLCBhbmQgcmVqZWN0IHRoZW0gYXMgaW5jb21wYXRpYmxlLlxuXG4gICAgICAgU3VjaCBjaGVja3MgbmVlZCB0byBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhlIGxlZ2FjeVxuICAgICAgIHBhcnNlciBzaWxlbnRseSBpZ25vcmVkIGluY29tcGF0aWJsZSBmbGFncy4gKilcbiAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yIHRoZW4gYmVnaW5cbiAgICBpZiBub3QgIXBsdXNfdXNlZCAmJiBwbHVzIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCI7XG4gICAgaWYgbm90ICFoYXNoX3VzZWQgJiYgaGFzaCB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiO1xuICAgIGlmIG5vdCAhc3BhY2VfdXNlZCAmJiBzcGFjZSB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiO1xuICAgIGlmIG5vdCAhcGFkX3VzZWQgICYmIFBhZGRpbmdfRUJCIHBhZCA8PiBQYWRkaW5nX0VCQiBOb19wYWRkaW5nIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiYHBhZGRpbmcnXCI7XG4gICAgaWYgbm90ICFwcmVjX3VzZWQgJiYgUHJlY2lzaW9uX0VCQiBwcmVjIDw+IFByZWNpc2lvbl9FQkIgTm9fcHJlY2lzaW9uIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAoaWYgaWduIHRoZW4gJ18nIGVsc2Ugc3ltYilcbiAgICAgICAgXCJgcHJlY2lzaW9uJ1wiO1xuICAgIGlmIGlnbiAmJiBwbHVzIHRoZW4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicrJ1wiO1xuICAgIGVuZDtcbiAgICAoKiB0aGlzIGxhc3QgdGVzdCBtdXN0IG5vdCBiZSBkaXNhYmxlZCBpbiBsZWdhY3kgbW9kZSxcbiAgICAgICBhcyBpZ25vcmluZyBpdCB3b3VsZCB0eXBpY2FsbHkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHR5cGluZ1xuICAgICAgIHRoYW4gd2hhdCB0aGUgbGVnYWN5IHBhcnNlciB1c2VkICopXG4gICAgaWYgbm90ICFpZ25fdXNlZCAmJiBpZ24gdGhlblxuICAgICAgYmVnaW4gbWF0Y2ggc3ltYiB3aXRoXG4gICAgICAgICgqIGFyZ3VtZW50LWxlc3MgZm9ybWF0cyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgaW4gbGVnYWN5IG1vZGUgKilcbiAgICAgICAgfCAoJ0AnIHwgJyUnIHwgJyEnIHwgJywnKSB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiAoKVxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIidfJ1wiXG4gICAgICBlbmQ7XG4gICAgZm10X3Jlc3VsdFxuXG4gICgqIFBhcnNlIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gKGFmdGVyICdAJykuICopXG4gIGFuZCBwYXJzZV9hZnRlcl9hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBFbmRfb2ZfZm9ybWF0KSlcbiAgICBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ1snIC0+XG4gICAgICAgIHBhcnNlX3RhZyBmYWxzZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV9ib3gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ3snIC0+XG4gICAgICAgIHBhcnNlX3RhZyB0cnVlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnfScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX3RhZywgZm10X3Jlc3QpKVxuICAgICAgfCAnLCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAsXCIsIDAsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCBcIiwgMSwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJzsnIC0+XG4gICAgICAgIHBhcnNlX2dvb2RfYnJlYWsgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICc/JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRkZsdXNoLCBmbXRfcmVzdCkpXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGb3JjZV9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICcuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRmx1c2hfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgcGFyc2VfbWFnaWNfc2l6ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ0AnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX2F0LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyB3aGVuIHN0cl9pbmQgKyAxIDwgZW5kX2luZCAmJiBzdHIuW3N0cl9pbmQgKyAxXSA9ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMikgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9wZXJjZW50LCBmbXRfcmVzdCkpXG4gICAgICB8ICclJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgZm10X3Jlc3QpKVxuICAgICAgfCBjIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljIGMsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPG5hbWU+IGFmdGVyIFwiQHtcIiBvciBcIkBbXCIuICopXG4gIGFuZCBwYXJzZV90YWcgOiB0eXBlIGUgZiAuIGJvb2wgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBpc19vcGVuX3RhZyBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICB0cnlcbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBsZXQgaW5kID0gU3RyaW5nLmluZGV4X2Zyb20gc3RyIChzdHJfaW5kICsgMSkgJz4nIGluXG4gICAgICAgIGlmIGluZCA+PSBlbmRfaW5kIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIHN0cl9pbmQgKGluZCAtIHN0cl9pbmQgKyAxKSBpblxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChpbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIChpbmQgKyAxKSBpblxuICAgICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoc3ViX2ZtdCwgc3ViX3N0cikgaW5cbiAgICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcbiAgICAgIHwgXyAtPlxuICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChFbmRfb2ZfZm9ybWF0LCBcIlwiKSBpblxuICAgICAgbGV0IGZvcm1hdHRpbmcgPVxuICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8d2lkdGggb2Zmc2V0PiBhZnRlciBcIkA7XCIuICopXG4gIGFuZCBwYXJzZV9nb29kX2JyZWFrIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGxldCBuZXh0X2luZCwgZm9ybWF0dGluZ19saXQgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHx8IHN0ci5bc3RyX2luZF0gPD4gJzwnIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gKFxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHdpZHRoID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzNdIHdpdGhcbiAgICAgICAgICAgICAgfCAnPicgLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzMtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfMyArIDEsIEJyZWFrIChzLCB3aWR0aCwgMClcbiAgICAgICAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNCwgb2Zmc2V0ID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzMgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzUgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF80IGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfNV0gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfNS1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF81ICsgMSwgQnJlYWsgKHMsIHdpZHRoLCBvZmZzZXQpXG4gICAgICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgKVxuICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBzdHJfaW5kLCBCcmVhayAoXCJAO1wiLCAxLCAwKVxuICAgIGluXG4gICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgdGhlIHNpemUgaW4gYSA8bj4uICopXG4gIGFuZCBwYXJzZV9tYWdpY19zaXplIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIG1hdGNoXG4gICAgICB0cnlcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+XG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgc2l6ZSA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzNdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kIC0gMikgKHN0cl9pbmRfMyAtIHN0cl9pbmQgKyAzKSBpblxuICAgICAgICAgIFNvbWUgKHN0cl9pbmRfMyArIDEsIE1hZ2ljX3NpemUgKHMsIHNpemUpKVxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgTm9uZVxuICAgIHdpdGhcbiAgICB8IFNvbWUgKG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKGZvcm1hdHRpbmdfbGl0LCBmbXRfcmVzdCkpXG4gICAgfCBOb25lIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgJzwnLCBmbXRfcmVzdCkpXG5cbiAgKCogUGFyc2UgYW5kIGNvbnN0cnVjdCBhIGNoYXIgc2V0LiAqKVxuICBhbmQgcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuXG4gICAgbGV0IGNoYXJfc2V0ID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gICAgbGV0IGFkZF9jaGFyIGMgPVxuICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGM7XG4gICAgaW5cbiAgICBsZXQgYWRkX3JhbmdlIGMgYycgPVxuICAgICAgZm9yIGkgPSBpbnRfb2ZfY2hhciBjIHRvIGludF9vZl9jaGFyIGMnIGRvXG4gICAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCAoY2hhcl9vZl9pbnQgaSk7XG4gICAgICBkb25lO1xuICAgIGluXG5cbiAgICBsZXQgZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kID1cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogJyUlJyBhbG9uZSBpcyBub3QgYWNjZXB0ZWQgaW4gY2hhcmFjdGVyIHNldHMsIFxcXG4gICAgICAgICB1c2UgJSUlJSBpbnN0ZWFkIGF0IHBvc2l0aW9uICVkLlwiIHN0ciBzdHJfaW5kXG4gICAgaW5cblxuICAgICgqIFBhcnNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBjaGFyIHNldC4gKilcbiAgICBsZXQgcmVjIHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbGV0IGMgPSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBQYXJzZSB0aGUgY29udGVudCBvZiBhIGNoYXIgc2V0IHVudGlsIHRoZSBmaXJzdCAnXScuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogVGVzdCBmb3IgcmFuZ2UgaW4gY2hhciBzZXQuICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG4gICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIHdoZW4gYyA9ICclJyAtPlxuICAgICAgICBhZGRfY2hhciBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgaWYgYyA9ICclJyB0aGVuIGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZDtcbiAgICAgICAgKCogbm90ZSB0aGF0ICdAJyBhbG9uZSBpcyBhY2NlcHRlZCwgYXMgZG9uZSBieSB0aGUgbGVnYWN5XG4gICAgICAgICAgIGltcGxlbWVudGF0aW9uOyB0aGUgZG9jdW1lbnRhdGlvbiBzcGVjaWZpY2FsbHkgcmVxdWlyZXMgJUBcbiAgICAgICAgICAgc28gd2UgY291bGQgd2FybiBvbiB0aGF0ICopXG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGMnXG5cbiAgICAoKiBNYW5hZ2UgcmFuZ2UgaW4gY2hhciBzZXQgKGV4Y2VwdCBpZiB0aGUgJy0nIHRoZSBsYXN0IGNoYXIgYmVmb3JlICddJykgKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgICB8ICgnJScgfCAnQCcpIGFzIGMnIC0+XG4gICAgICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kXG4gICAgICAgICAgfCBfIC0+IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZFxuICAgICAgICBlbmRcbiAgICAgIHwgYycgLT5cbiAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgaW5cbiAgICBsZXQgc3RyX2luZCwgcmV2ZXJzZSA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICAgIHwgJ14nIC0+IHN0cl9pbmQgKyAxLCB0cnVlXG4gICAgICAgIHwgXyAtPiBzdHJfaW5kLCBmYWxzZSBpblxuICAgIGxldCBuZXh0X2luZCA9IHBhcnNlX2NoYXJfc2V0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgIGxldCBjaGFyX3NldCA9IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCBpblxuICAgIG5leHRfaW5kLCAoaWYgcmV2ZXJzZSB0aGVuIHJldl9jaGFyX3NldCBjaGFyX3NldCBlbHNlIGNoYXJfc2V0KVxuXG4gICgqIENvbnN1bWUgYWxsIG5leHQgc3BhY2VzLCByYWlzZSBhbiBGYWlsdXJlIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3NwYWNlcyBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgaWYgc3RyLltzdHJfaW5kXSA9ICcgJyB0aGVuIHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgZWxzZSBzdHJfaW5kXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmUgaWYgZW5kX2luZCBpc1xuICAgICByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIGFjYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBhY2MgKiAxMCArIChpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnKSBpblxuICAgICAgaWYgbmV3X2FjYyA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBpbnRlZ2VyICVkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltaXQgJWRcIlxuICAgICAgICAgIHN0ciBuZXdfYWNjIFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgICAgZWxzZVxuICAgICAgICBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgbmV3X2FjY1xuICAgIHwgXyAtPiBzdHJfaW5kLCBhY2NcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZVxuICAgICBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9pbnRlZ2VyIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcwJyAuLiAnOScgLT4gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDBcbiAgICB8ICctJyAtPiAoXG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgICBsZXQgbmV4dF9pbmQsIG4gPSBwYXJzZV9wb3NpdGl2ZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgMCBpblxuICAgICAgICBuZXh0X2luZCwgLW5cbiAgICAgIHwgYyAtPlxuICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImRpZ2l0XCIgY1xuICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQWRkIGEgbGl0ZXJhbCB0byBhIGZvcm1hdCBmcm9tIGEgbGl0ZXJhbCBjaGFyYWN0ZXIgc3ViLXNlcXVlbmNlLiAqKVxuICBhbmQgYWRkX2xpdGVyYWwgOiB0eXBlIGEgZCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiAoYSwgXywgXywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBmbXQgLT4gbWF0Y2ggc3RyX2luZCAtIGxpdF9zdGFydCB3aXRoXG4gICAgfCAwICAgIC0+IEZtdF9FQkIgZm10XG4gICAgfCAxICAgIC0+IEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoc3RyLltsaXRfc3RhcnRdLCBmbXQpKVxuICAgIHwgc2l6ZSAtPiBGbXRfRUJCIChTdHJpbmdfbGl0ZXJhbCAoU3RyaW5nLnN1YiBzdHIgbGl0X3N0YXJ0IHNpemUsIGZtdCkpXG5cbiAgKCogU2VhcmNoIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdFxuICAgICAoaS5lLiB0aGUgY29ycmVzcG9uZGluZyBcIiV9XCIgb3IgXCIlKVwiKSAqKVxuICBhbmQgc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kIGMgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogdW5jbG9zZWQgc3ViLWZvcm1hdCwgXFxcbiAgICAgICAgIGV4cGVjdGVkIFxcXCIlJSVjXFxcIiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkXCIgc3RyIGMgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICclJyAtPlxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBpZiBzdHIuW3N0cl9pbmQgKyAxXSA9IGMgdGhlbiAoKiBFbmQgb2YgZm9ybWF0IGZvdW5kICopIHN0cl9pbmQgZWxzZVxuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgIHwgJ18nIC0+XG4gICAgICAgICAgKCogU2VhcmNoIGZvciBcIiVfKFwiIG9yIFwiJV97XCIuICopXG4gICAgICAgICAgaWYgc3RyX2luZCArIDIgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMl0gd2l0aFxuICAgICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kIGNcbiAgICAgICAgICBlbmRcbiAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAoKiAley4uLiV9IHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnKCcgLT5cbiAgICAgICAgICAoKiAlKC4uLiUpIHN1Yi1mb3JtYXQgZm91bmQuICopXG4gICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgfCAnfScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJSguLi4lfS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnKSdcIiAnfSdcbiAgICAgICAgfCAnKScgLT5cbiAgICAgICAgICAoKiBFcnJvcjogJXsuLi4lKS4gKilcbiAgICAgICAgICBleHBlY3RlZF9jaGFyYWN0ZXIgKHN0cl9pbmQgKyAxKSBcImNoYXJhY3RlciAnfSdcIiAnKSdcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgZW5kXG4gICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgKCogQ2hlY2sgaWYgc3ltYiBpcyBhIHZhbGlkIGludCBjb252ZXJzaW9uIGFmdGVyIFwiJWxcIiwgXCIlblwiIG9yIFwiJUxcIiAqKVxuICBhbmQgaXNfaW50X2Jhc2Ugc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+IHRydWVcbiAgICB8IF8gLT4gZmFsc2VcblxuICAoKiBDb252ZXJ0IGEgY2hhciAobCwgbiBvciBMKSB0byBpdHMgYXNzb2NpYXRlZCBjb3VudGVyLiAqKVxuICBhbmQgY291bnRlcl9vZl9jaGFyIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdsJyAtPiBMaW5lX2NvdW50ZXIgIHwgJ24nIC0+IENoYXJfY291bnRlclxuICAgIHwgJ0wnIC0+IFRva2VuX2NvdW50ZXIgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGludF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIG1hdGNoIHBsdXMsIGhhc2gsIHNwYWNlLCBzeW1iIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfZCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X2lcbiAgICB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdkJyAtPiBJbnRfc2QgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnaScgLT4gSW50X3NpXG4gICAgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X3BkIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9waVxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3gnIC0+IEludF94ICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdYJyAtPiBJbnRfWFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3gnIC0+IEludF9DeCB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdYJyAtPiBJbnRfQ1hcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdvJyAtPiBJbnRfb1xuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ28nIC0+IEludF9Db1xuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ3UnIC0+IEludF91XG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnZCcgLT4gSW50X0NkXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnaScgLT4gSW50X0NpXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAndScgLT4gSW50X0N1XG4gICAgfCBfLCB0cnVlLCBfLCAneCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0N4XG4gICAgfCBfLCB0cnVlLCBfLCAnWCcgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NYXG4gICAgfCBfLCB0cnVlLCBfLCAnbycgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gSW50X0NvXG4gICAgfCBfLCB0cnVlLCBfLCAoJ2QnIHwgJ2knIHwgJ3UnKSAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgZmFsc2Ugc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicjJ1wiXG4gICAgfCB0cnVlLCBfLCB0cnVlLCBfIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCB0cnVlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIlxuICAgIHwgdHJ1ZSwgXywgZmFsc2UsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBmYWxzZSBoYXNoIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIGZhbHNlLCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIENvbnZlcnQgKHBsdXMsIHNwYWNlLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBmbG9hdF9jb252LiAqKVxuICBhbmQgY29tcHV0ZV9mbG9hdF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbGV0IGZsYWcgPSBtYXRjaCBwbHVzLCBzcGFjZSB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19cbiAgICB8IGZhbHNlLCAgdHJ1ZSAtPiBGbG9hdF9mbGFnX3NcbiAgICB8ICB0cnVlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX3BcbiAgICB8ICB0cnVlLCAgdHJ1ZSAtPlxuICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEZsb2F0X2ZsYWdfcFxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJyAnIFwiJysnXCIgaW5cbiAgICBsZXQga2luZCA9IG1hdGNoIGhhc2gsIHN5bWIgd2l0aFxuICAgIHwgXywgJ2YnIC0+IEZsb2F0X2ZcbiAgICB8IF8sICdlJyAtPiBGbG9hdF9lXG4gICAgfCBfLCAnRScgLT4gRmxvYXRfRVxuICAgIHwgXywgJ2cnIC0+IEZsb2F0X2dcbiAgICB8IF8sICdHJyAtPiBGbG9hdF9HXG4gICAgfCBfLCAnaCcgLT4gRmxvYXRfaFxuICAgIHwgXywgJ0gnIC0+IEZsb2F0X0hcbiAgICB8IGZhbHNlLCAnRicgLT4gRmxvYXRfRlxuICAgIHwgdHJ1ZSwgJ0YnIC0+IEZsb2F0X0NGXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZSBpblxuICAgIGZsYWcsIGtpbmRcblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgaW5jb21wYXRpYmxlIG9wdGlvbnMuKilcbiAgYW5kIGluY29tcGF0aWJsZV9mbGFnIDogdHlwZSBhIC4gaW50IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZyAtPiBhID1cbiAgICBmdW4gcGN0X2luZCBzdHJfaW5kIHN5bWIgb3B0aW9uIC0+XG4gICAgICBsZXQgc3ViZm10ID0gU3RyaW5nLnN1YiBzdHIgcGN0X2luZCAoc3RyX2luZCAtIHBjdF9pbmQpIGluXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICAlcyBpcyBpbmNvbXBhdGlibGUgd2l0aCAnJWMnIGluIHN1Yi1mb3JtYXQgJVNcIlxuICAgICAgICBzdHIgcGN0X2luZCBvcHRpb24gc3ltYiBzdWJmbXRcblxuICBpbiBwYXJzZSAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICgqIEd1YXJkZWQgc3RyaW5nIHRvIGZvcm1hdCBjb252ZXJzaW9ucyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgc3RyIGZtdHR5ID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCBmbXR0eSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIlxuICAgICAgc3RyIChzdHJpbmdfb2ZfZm10dHkgZm10dHkpXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIGFuIG90aGVyIGZvcm1hdC4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciAoRm9ybWF0IChmbXQnLCBzdHInKSkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IChmbXR0eV9vZl9mbXQgZm10JyksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCIgc3RyIHN0cidcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgWGF2aWVyIExlcm95IGFuZCBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbmxldCBrZnByaW50ZiBrIG8gKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIG8gYWNjOyBrIG8pIEVuZF9vZl9hY2MgZm10XG5sZXQga2JwcmludGYgayBiIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gYnVmcHV0X2FjYyBiIGFjYzsgayBiKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGlrZnByaW50ZiBrIG9jIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgb2MgZm10XG5sZXQgaWticHJpbnRmID0gaWtmcHJpbnRmXG5cbmxldCBmcHJpbnRmIG9jIGZtdCA9IGtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBicHJpbnRmIGIgZm10ID0ga2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgaWZwcmludGYgb2MgZm10ID0gaWtmcHJpbnRmIGlnbm9yZSBvYyBmbXRcbmxldCBpYnByaW50ZiBiIGZtdCA9IGlrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRvdXQgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZGVyciBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgaycgYWNjID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICAgIHN0cnB1dF9hY2MgYnVmIGFjYztcbiAgICBrIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrJyBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiAoZnVuIHMgLT4gcykgZm10XG5cbmxldCBrcHJpbnRmID0ga3NwcmludGZcbiIsIigqIENvbnZfZXJyb3I6IE1vZHVsZSBmb3IgSGFuZGxpbmcgRXJyb3JzIGR1cmluZyBBdXRvbWF0ZWQgWW9qc29uXG4gICBDb252ZXJzaW9ucyAqKVxuXG5vcGVuISBTdGRMYWJlbHNcbm9wZW4gWW9qc29uX2NvbnZcblxubGV0IHNwcmludGYgPSBQcmludGYuc3ByaW50ZlxuXG4oKiBFcnJvcnMgY29uY2VybmluZyB0dXBsZXMgKilcblxubGV0IHR1cGxlX29mX3NpemVfbl9leHBlY3RlZCBsb2MgbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKHNwcmludGYgXCIlc19vZl95b2pzb246IHR1cGxlIG9mIHNpemUgJWQgZXhwZWN0ZWRcIiBsb2MgbikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBzdW0gdHlwZXMgKilcblxubGV0IHN0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRoaXMgY29uc3RydWN0b3IgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgc3RhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyB0YWcgeW9qc29uID1cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogc3VtIHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIiBsb2MgdGFnXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgc3RhZ190YWtlc19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciByZXF1aXJlcyBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgbmVzdGVkX2xpc3RfaW52YWxpZF9zdW0gbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBleHBlY3RlZCBhIHZhcmlhbnQgdHlwZSwgc2F3IGEgbmVzdGVkIGxpc3RcIikgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYW4gZW1wdHkgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCB1bmV4cGVjdGVkX3N0YWcgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB1bmV4cGVjdGVkIHZhcmlhbnQgY29uc3RydWN0b3JcIikgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyByZWNvcmRzICopXG5cbmxldCByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0IH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICBsZXQgZmxkX25hbWVzX3N0ciA9IFN0cmluZy5jb25jYXQgKExpc3QucmV2IHJldl9mbGRfbmFtZXMpIH5zZXA6XCIgXCIgaW5cbiAgbGV0IG1zZyA9IHNwcmludGYgXCIlc19vZl95b2pzb246ICVzOiAlc1wiIGxvYyB3aGF0IGZsZF9uYW1lc19zdHIgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZHVwbGljYXRlX2ZpZWxkcyBsb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb24gPVxuICByZWNvcmRfc3VwZXJmbHVvdXNfZmllbGRzIH53aGF0OlwiZHVwbGljYXRlIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfZXh0cmFfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJleHRyYSBmaWVsZHNcIiB+bG9jIHJldl9mbGRfbmFtZXMgeW9qc29uXG47O1xuXG5sZXQgcmVjIHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBTdHJpbmcuY29uY2F0IChMaXN0LnJldiBmaWVsZHMpIH5zZXA6XCIgXCJcbiAgfCAodHJ1ZSwgZmllbGQpIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCAoZmllbGQgOjogZmllbGRzKSByZXN0XG4gIHwgXyA6OiByZXN0IC0+IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgZmllbGRzIHJlc3Rcbjs7XG5cbmxldCByZWNvcmRfdW5kZWZpbmVkX2VsZW1lbnRzIGxvYyB5b2pzb24gbHN0ID1cbiAgbGV0IHVuZGVmaW5lZCA9IHJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AgW10gbHN0IGluXG4gIGxldCBtc2cgPVxuICAgIHNwcmludGYgXCIlc19vZl95b2pzb246IHRoZSBmb2xsb3dpbmcgcmVjb3JkIGVsZW1lbnRzIHdlcmUgdW5kZWZpbmVkOiAlc1wiIGxvYyB1bmRlZmluZWRcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCByZWNvcmRfbGlzdF9pbnN0ZWFkX2F0b20gbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPSBsb2MgXiBcIl9vZl95b2pzb246IGxpc3QgaW5zdGVhZCBvZiBhdG9tIGZvciByZWNvcmQgZXhwZWN0ZWRcIiBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9wb2x5X2ZpZWxkX3ZhbHVlIGxvYyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBsb2NcbiAgICBeIFwiX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgdmFsdWVzIG9mIHR5cGVzIHJlc3VsdGluZyBmcm9tIHBvbHltb3JwaGljIHJlY29yZCBcXFxuICAgICAgIGZpZWxkc1wiXG4gIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG4oKiBFcnJvcnMgY29uY2VybmluZyBwb2x5bW9ycGhpYyB2YXJpYW50cyAqKVxuXG5leGNlcHRpb24gTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fdmFyaWFudF9tYXRjaCAoKSA9IHJhaXNlIE5vX3ZhcmlhbnRfbWF0Y2hcblxubGV0IG5vX21hdGNoaW5nX3ZhcmlhbnRfZm91bmQgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBubyBtYXRjaGluZyB2YXJpYW50IGZvdW5kXCIpIHlvanNvblxuOztcblxubGV0IHB0YWdfbm9fYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgZG9lcyBub3QgdGFrZSBhcmd1bWVudHNcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19pbmNvcnJlY3Rfbl9hcmdzIGxvYyBjbnN0ciB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmXG4gICAgICBcIiVzX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCB0YWcgJVMgaGFzIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzXCJcbiAgICAgIGxvY1xuICAgICAgY25zdHJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBwdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyB0YWtlcyBhbiBhcmd1bWVudFwiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiBhIG5lc3RlZCBsaXN0IGlzIGFuIGludmFsaWQgcG9seW1vcnBoaWMgdmFyaWFudFwiKVxuICAgIHlvanNvblxuOztcblxubGV0IGVtcHR5X2xpc3RfaW52YWxpZF9wb2x5X3ZhciBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yXG4gICAgKGxvYyBeIFwiX29mX3lvanNvbjogdGhlIGVtcHR5IGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfdHlwZSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHRyeWluZyB0byBjb252ZXJ0IGFuIGVtcHR5IHR5cGVcIikgeW9qc29uXG47O1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNZXNzYWdlIGRpZ2VzdCAoTUQ1KSAqKVxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGVxdWFsID0gU3RyaW5nLmVxdWFsXG5cbmV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG5leHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxubGV0IHN0cmluZyBzdHIgPVxuICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxubGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxubGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX3N0cmluZyBzdHIgb2ZzIGxlblxuXG5sZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxubGV0IGZpbGUgZmlsZW5hbWUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlbmFtZSBpblxuICBtYXRjaCBjaGFubmVsIGljICgtMSkgd2l0aFxuICAgIHwgZCAtPiBjbG9zZV9pbiBpYzsgZFxuICAgIHwgZXhjZXB0aW9uIGUgLT4gY2xvc2VfaW4gaWM7IHJhaXNlIGVcblxubGV0IG91dHB1dCBjaGFuIGRpZ2VzdCA9XG4gIG91dHB1dF9zdHJpbmcgY2hhbiBkaWdlc3RcblxubGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxubGV0IGNoYXJfaGV4IG4gPVxuICBDaGFyLnVuc2FmZV9jaHIgKG4gKyBpZiBuIDwgMTAgdGhlbiBDaGFyLmNvZGUgJzAnIGVsc2UgKENoYXIuY29kZSAnYScgLSAxMCkpXG5cbmxldCB0b19oZXggZCA9XG4gIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDMyIGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBmcm9tX2hleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJEaWdlc3QuZnJvbV9oZXhcIilcbiAgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDE2IGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIEJ5dGVzLnNldCByZXN1bHQgaSAoQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSByZWYgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSByYW5kb21pemVkIDo9IHRydWVcbmxldCBpc19yYW5kb21pemVkICgpID0gIXJhbmRvbWl6ZWRcblxubGV0IHBybmcgPSBsYXp5IChSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQoKSlcblxuKCogRnVuY3Rpb25zIHdoaWNoIGFwcGVhciBiZWZvcmUgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIG11c3QgZWl0aGVyIGJlXG4gICBpbmRlcGVuZGVudCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBvciB0YWtlIGl0IGFzIGEgcGFyYW1ldGVyIChzZWUgIzIyMDIgYW5kXG4gICBjb2RlIGJlbG93IHRoZSBmdW5jdG9yIGRlZmluaXRpb25zLiAqKVxuXG4oKiBDcmVhdGluZyBhIGZyZXNoLCBlbXB0eSB0YWJsZSAqKVxuXG5sZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgaWYgeCA+PSBuIHRoZW4geFxuICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxubGV0IGNyZWF0ZSA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID0gaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykgZWxzZSAwIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlOiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5OiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZTogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZSA6ID9yYW5kb206Ym9vbCAtPiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZCA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQgOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aCA6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlU2VlZGVkKEg6IFNlZWRlZEhhc2hlZFR5cGUpOiAoU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIHR5cGUga2V5ID0gSC50XG4gICAgdHlwZSAnYSBoYXNodGJsID0gKGtleSwgJ2EpIHRcbiAgICB0eXBlICdhIHQgPSAnYSBoYXNodGJsXG4gICAgbGV0IGNyZWF0ZSA9IGNyZWF0ZVxuICAgIGxldCBjbGVhciA9IGNsZWFyXG4gICAgbGV0IHJlc2V0ID0gcmVzZXRcbiAgICBsZXQgY29weSA9IGNvcHlcblxuICAgIGxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAgICAgKEguaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCBtZW0gaCBrZXkgPVxuICAgICAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuKCogUG9seW1vcnBoaWMgaGFzaCBmdW5jdGlvbi1iYXNlZCB0YWJsZXMgKilcbigqIENvZGUgaW5jbHVkZWQgYmVsb3cgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIHRvIGd1YXJkIGFnYWluc3QgYWNjaWRlbnRhbFxuICAgdXNlIC0gc2VlICMyMjAyICopXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxuXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxubGV0IGhhc2hfcGFyYW0gbjEgbjIgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIG4xIG4yIDAgeFxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcblxubGV0IGtleV9pbmRleCBoIGtleSA9XG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0XG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkhhc2h0Ymw6IHVuc3VwcG9ydGVkIGhhc2ggdGFibGUgZm9ybWF0XCJcblxubGV0IGFkZCBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG5sZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgKClcbiAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBiZWdpblxuICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICBlbmRcbiAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG5sZXQgcmVtb3ZlIGgga2V5ID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxubGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxubGV0IGZpbmQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbmxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxubGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiBOb25lXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxubGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IG1lbSBoIGtleSA9XG4gIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQSBwcmV0dHktcHJpbnRpbmcgZmFjaWxpdHkgYW5kIGRlZmluaXRpb24gb2YgZm9ybWF0dGVycyBmb3IgJ3BhcmFsbGVsJ1xuICAgKGkuZS4gdW5yZWxhdGVkIG9yIGluZGVwZW5kZW50KSBwcmV0dHktcHJpbnRpbmcgb24gbXVsdGlwbGUgb3V0IGNoYW5uZWxzLiAqKVxuXG4oKlxuICAgVGhlIHByZXR0eS1wcmludGluZyBlbmdpbmUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuKilcblxubGV0IGlkIHggPSB4XG5cbigqIEEgZGV2b3RlZCB0eXBlIGZvciBzaXplcyB0byBhdm9pZCBjb25mdXNpb25cbiAgIGJldHdlZW4gc2l6ZXMgYW5kIG1lcmUgaW50ZWdlcnMuICopXG5tb2R1bGUgU2l6ZSA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgdG9faW50IDogdCAtPiBpbnRcbiAgdmFsIG9mX2ludCA6IGludCAtPiB0XG4gIHZhbCB6ZXJvIDogdFxuICB2YWwgdW5rbm93biA6IHRcbiAgdmFsIGlzX2tub3duIDogdCAtPiBib29sXG5lbmQgID0gc3RydWN0XG4gIHR5cGUgdCA9IGludFxuXG4gIGxldCB0b19pbnQgPSBpZFxuICBsZXQgb2ZfaW50ID0gaWRcbiAgbGV0IHplcm8gPSAwXG4gIGxldCB1bmtub3duID0gLTFcbiAgbGV0IGlzX2tub3duIG4gPSBuID49IDBcbmVuZFxuXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyBib3hlcyBkZWZpbml0aW9uOlxuICAgYSBwcmV0dHktcHJpbnRpbmcgYm94IGlzIGVpdGhlclxuICAgLSBoYm94OiBob3Jpem9udGFsIGJveCAobm8gbGluZSBzcGxpdHRpbmcpXG4gICAtIHZib3g6IHZlcnRpY2FsIGJveCAoZXZlcnkgYnJlYWsgaGludCBzcGxpdHMgdGhlIGxpbmUpXG4gICAtIGh2Ym94OiBob3Jpem9udGFsL3ZlcnRpY2FsIGJveFxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgYm94IGlmIGl0IGZpdHMgb25cbiAgICAgIHRoZSBjdXJyZW50IGxpbmUsIG90aGVyd2lzZSB0aGUgYm94IGJlaGF2ZXMgYXMgYSB2ZXJ0aWNhbCBib3gpXG4gICAtIGhvdmJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveFxuICAgICAodGhlIGJveCBpcyBjb21wYWN0aW5nIG1hdGVyaWFsLCBwcmludGluZyBhcyBtdWNoIG1hdGVyaWFsIGFzIHBvc3NpYmxlXG4gICAgICBvbiBldmVyeSBsaW5lcylcbiAgIC0gYm94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94IHdpdGggZW5oYW5jZWQgYm94IHN0cnVjdHVyZVxuICAgICAodGhlIGJveCBiZWhhdmVzIGFzIGFuIGhvcml6b250YWwgb3IgdmVydGljYWwgYm94IGJ1dCBicmVhayBoaW50cyBzcGxpdFxuICAgICAgdGhlIGxpbmUgaWYgc3BsaXR0aW5nIHdvdWxkIG1vdmUgdG8gdGhlIGxlZnQpXG4qKVxudHlwZSBib3hfdHlwZSA9IENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5ibG9ja190eXBlID1cbiAgfCBQcF9oYm94IHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0c1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgdG9rZW5zIGRlZmluaXRpb246XG4gICBhcmUgZWl0aGVyIHRleHQgdG8gcHJpbnQgb3IgcHJldHR5IHByaW50aW5nXG4gICBlbGVtZW50cyB0aGF0IGRyaXZlIGluZGVudGF0aW9uIGFuZCBsaW5lIHNwbGl0dGluZy4gKilcbnR5cGUgcHBfdG9rZW4gPVxuICB8IFBwX3RleHQgb2Ygc3RyaW5nICAgICAgICAgICgqIG5vcm1hbCB0ZXh0ICopXG4gIHwgUHBfYnJlYWsgb2YgeyAgICAgICAgICAgICAgKCogY29tcGxldGUgYnJlYWsgKilcbiAgICAgIGZpdHM6IHN0cmluZyAqIGludCAqIHN0cmluZzsgICAoKiBsaW5lIGlzIG5vdCBzcGxpdCAqKVxuICAgICAgYnJlYWtzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICgqIGxpbmUgaXMgc3BsaXQgKilcbiAgICB9XG4gIHwgUHBfdGJyZWFrIG9mIGludCAqIGludCAgICAgKCogZ28gdG8gbmV4dCB0YWJ1bGF0aW9uICopXG4gIHwgUHBfc3RhYiAgICAgICAgICAgICAgICAgICAgKCogc2V0IGEgdGFidWxhdGlvbiAqKVxuICB8IFBwX2JlZ2luIG9mIGludCAqIGJveF90eXBlICgqIGJlZ2lubmluZyBvZiBhIGJveCAqKVxuICB8IFBwX2VuZCAgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIGJveCAqKVxuICB8IFBwX3RiZWdpbiBvZiB0Ym94ICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfdGVuZCAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF9uZXdsaW5lICAgICAgICAgICAgICAgICAoKiB0byBmb3JjZSBhIG5ld2xpbmUgaW5zaWRlIGEgYm94ICopXG4gIHwgUHBfaWZfbmV3bGluZSAgICAgICAgICAgICAgKCogdG8gZG8gc29tZXRoaW5nIG9ubHkgaWYgdGhpcyB2ZXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSBoYXMgYmVlbiBicm9rZW4gKilcbiAgfCBQcF9vcGVuX3RhZyBvZiBzdGFnICAgICAgICAgKCogb3BlbmluZyBhIHRhZyBuYW1lICopXG4gIHwgUHBfY2xvc2VfdGFnICAgICAgICAgICAgICAgKCogY2xvc2luZyB0aGUgbW9zdCByZWNlbnRseSBvcGVuIHRhZyAqKVxuXG5hbmQgc3RhZyA9IC4uXG5cbmFuZCB0Ym94ID0gUHBfdGJveCBvZiBpbnQgbGlzdCByZWYgICgqIFRhYnVsYXRpb24gYm94ICopXG5cbnR5cGUgdGFnID0gc3RyaW5nXG50eXBlIHN0YWcgKz0gU3RyaW5nX3RhZyBvZiB0YWdcblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWU6XG4gICBwcmV0dHktcHJpbnRpbmcgbWF0ZXJpYWwgaXMgbm90IHdyaXR0ZW4gaW4gdGhlIG91dHB1dCBhcyBzb29uIGFzIGVtaXR0ZWQ7XG4gICBpbnN0ZWFkLCB0aGUgbWF0ZXJpYWwgaXMgc2ltcGx5IHJlY29yZGVkIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSxcbiAgIHVudGlsIHRoZSBlbmNsb3NpbmcgYm94IGhhcyBhIGtub3duIGNvbXB1dGVkIHNpemUgYW5kIHByb3BlciBzcGxpdHRpbmdcbiAgIGRlY2lzaW9ucyBjYW4gYmUgbWFkZS5cblxuICAgVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGNvbnRhaW5zIGZvcm1hdHRpbmcgZWxlbWVudHMgdG8gYmUgcHJpbnRlZC5cbiAgIEVhY2ggZm9ybWF0dGluZyBlbGVtZW50IGlzIGEgdHVwbGUgKHNpemUsIHRva2VuLCBsZW5ndGgpLCB3aGVyZVxuICAgLSBsZW5ndGggaXMgdGhlIGRlY2xhcmVkIGxlbmd0aCBvZiB0aGUgdG9rZW4sXG4gICAtIHNpemUgaXMgZWZmZWN0aXZlIHNpemUgb2YgdGhlIHRva2VuIHdoZW4gaXQgaXMgcHJpbnRlZFxuICAgICAoc2l6ZSBpcyBzZXQgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgYm94IGlzIGtub3duLCBzbyB0aGF0IHNpemUgb2YgYnJlYWtcbiAgICAgIGhpbnRzIGFyZSBkZWZpbml0aXZlKS4gKilcbnR5cGUgcHBfcXVldWVfZWxlbSA9IHtcbiAgbXV0YWJsZSBzaXplIDogU2l6ZS50O1xuICB0b2tlbiA6IHBwX3Rva2VuO1xuICBsZW5ndGggOiBpbnQ7XG59XG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGRlZmluaXRpb24uICopXG50eXBlIHBwX3F1ZXVlID0gcHBfcXVldWVfZWxlbSBRdWV1ZS50XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrOiBzY2FubmluZyBlbGVtZW50IGRlZmluaXRpb24uICopXG50eXBlIHBwX3NjYW5fZWxlbSA9IHtcbiAgbGVmdF90b3RhbCA6IGludDsgKCogVmFsdWUgb2YgcHBfbGVmdF90b3RhbCB3aGVuIHRoZSBlbGVtZW50IHdhcyBlbnF1ZXVlZC4gKilcbiAgcXVldWVfZWxlbSA6IHBwX3F1ZXVlX2VsZW1cbn1cblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6XG4gICB0aGUgZm9ybWF0dGluZyBzdGFjayBjb250YWlucyB0aGUgZGVzY3JpcHRpb24gb2YgYWxsIHRoZSBjdXJyZW50bHkgYWN0aXZlXG4gICBib3hlczsgdGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2sgaXMgdXNlZCB0byBzcGxpdCB0aGUgbGluZXNcbiAgIHdoaWxlIHByaW50aW5nIHRva2Vucy4gKilcblxuKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2s6IGZvcm1hdHRpbmcgc3RhY2sgZWxlbWVudCBkZWZpbml0aW9uLlxuICAgRWFjaCBzdGFjayBlbGVtZW50IGRlc2NyaWJlcyBhIHByZXR0eS1wcmludGluZyBib3guICopXG50eXBlIHBwX2Zvcm1hdF9lbGVtID0geyBib3hfdHlwZSA6IGJveF90eXBlOyB3aWR0aCA6IGludCB9XG5cbigqIFRoZSBmb3JtYXR0ZXIgZGVmaW5pdGlvbi5cbiAgIEVhY2ggZm9ybWF0dGVyIHZhbHVlIGlzIGEgcHJldHR5LXByaW50ZXIgaW5zdGFuY2Ugd2l0aCBhbGwgaXRzXG4gICBtYWNoaW5lcnkuICopXG50eXBlIGZvcm1hdHRlciA9IHtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuICBwcF9zY2FuX3N0YWNrIDogcHBfc2Nhbl9lbGVtIFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrLiAqKVxuICBwcF9mb3JtYXRfc3RhY2sgOiBwcF9mb3JtYXRfZWxlbSBTdGFjay50O1xuICBwcF90Ym94X3N0YWNrIDogdGJveCBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2VtYW50aWNzIHRhZyBzdGFjay4gKilcbiAgcHBfdGFnX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICBwcF9tYXJrX3N0YWNrIDogc3RhZyBTdGFjay50O1xuICAoKiBWYWx1ZSBvZiByaWdodCBtYXJnaW4uICopXG4gIG11dGFibGUgcHBfbWFyZ2luIDogaW50O1xuICAoKiBNaW5pbWFsIHNwYWNlIGxlZnQgYmVmb3JlIG1hcmdpbiwgd2hlbiBvcGVuaW5nIGEgYm94LiAqKVxuICBtdXRhYmxlIHBwX21pbl9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBNYXhpbXVtIHZhbHVlIG9mIGluZGVudGF0aW9uOlxuICAgICBubyBib3ggY2FuIGJlIG9wZW5lZCBmdXJ0aGVyLiAqKVxuICBtdXRhYmxlIHBwX21heF9pbmRlbnQgOiBpbnQ7XG4gICgqIFNwYWNlIHJlbWFpbmluZyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxuICBtdXRhYmxlIHBwX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIEN1cnJlbnQgdmFsdWUgb2YgaW5kZW50YXRpb24uICopXG4gIG11dGFibGUgcHBfY3VycmVudF9pbmRlbnQgOiBpbnQ7XG4gICgqIFRydWUgd2hlbiB0aGUgbGluZSBoYXMgYmVlbiBicm9rZW4gYnkgdGhlIHByZXR0eS1wcmludGVyLiAqKVxuICBtdXRhYmxlIHBwX2lzX25ld19saW5lIDogYm9vbDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGFscmVhZHkgcHJpbnRlZC4gKilcbiAgbXV0YWJsZSBwcF9sZWZ0X3RvdGFsIDogaW50O1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgZXZlciBwdXQgaW4gcXVldWUuICopXG4gIG11dGFibGUgcHBfcmlnaHRfdG90YWwgOiBpbnQ7XG4gICgqIEN1cnJlbnQgbnVtYmVyIG9mIG9wZW4gYm94ZXMuICopXG4gIG11dGFibGUgcHBfY3Vycl9kZXB0aCA6IGludDtcbiAgKCogTWF4aW11bSBudW1iZXIgb2YgYm94ZXMgd2hpY2ggY2FuIGJlIHNpbXVsdGFuZW91c2x5IG9wZW4uICopXG4gIG11dGFibGUgcHBfbWF4X2JveGVzIDogaW50O1xuICAoKiBFbGxpcHNpcyBzdHJpbmcuICopXG4gIG11dGFibGUgcHBfZWxsaXBzaXMgOiBzdHJpbmc7XG4gICgqIE91dHB1dCBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgKCogRmx1c2hpbmcgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgYnJlYWsgaGludHMgc3BhY2VzLiAqKVxuICBtdXRhYmxlIHBwX291dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG4gICgqIEFyZSB0YWdzIHByaW50ZWQgPyAqKVxuICBtdXRhYmxlIHBwX3ByaW50X3RhZ3MgOiBib29sO1xuICAoKiBBcmUgdGFncyBtYXJrZWQgPyAqKVxuICBtdXRhYmxlIHBwX21hcmtfdGFncyA6IGJvb2w7XG4gICgqIEZpbmQgb3BlbmluZyBhbmQgY2xvc2luZyBtYXJrZXJzIG9mIHRhZ3MuICopXG4gIG11dGFibGUgcHBfbWFya19vcGVuX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX21hcmtfY2xvc2VfdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfcHJpbnRfb3Blbl90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIG11dGFibGUgcHBfcHJpbnRfY2xvc2VfdGFnIDogc3RhZyAtPiB1bml0O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG4gIHBwX3F1ZXVlIDogcHBfcXVldWU7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBzcGVjaWZpYyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zLiAqKVxudHlwZSBmb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHVuaXQ7XG59XG5cblxuKCogVGhlIGZvcm1hdHRlciBmdW5jdGlvbnMgdG8gb3V0cHV0IG1hdGVyaWFsLiAqKVxudHlwZSBmb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9IHtcbiAgb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gIG91dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9zcGFjZXMgOiBpbnQgLT4gdW5pdDtcbiAgb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xufVxuXG5cbigqXG5cbiAgQXV4aWxpYXJpZXMgYW5kIGJhc2ljIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRW50ZXIgYSB0b2tlbiBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbiA9XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgdG9rZW4ubGVuZ3RoO1xuICBRdWV1ZS5hZGQgdG9rZW4gc3RhdGUucHBfcXVldWVcblxuXG5sZXQgcHBfY2xlYXJfcXVldWUgc3RhdGUgPVxuICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIDE7IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIDE7XG4gIFF1ZXVlLmNsZWFyIHN0YXRlLnBwX3F1ZXVlXG5cblxuKCogUHBfaW5maW5pdHk6IGxhcmdlIHZhbHVlIGZvciBkZWZhdWx0IHRva2VucyBzaXplLlxuXG4gICBQcF9pbmZpbml0eSBpcyBkb2N1bWVudGVkIGFzIGJlaW5nIGdyZWF0ZXIgdGhhbiAxZTEwOyB0byBhdm9pZFxuICAgY29uZnVzaW9uIGFib3V0IHRoZSB3b3JkICdncmVhdGVyJywgd2UgY2hvb3NlIHBwX2luZmluaXR5IGdyZWF0ZXJcbiAgIHRoYW4gMWUxMCArIDE7IGZvciBjb3JyZWN0IGhhbmRsaW5nIG9mIHRlc3RzIGluIHRoZSBhbGdvcml0aG0sXG4gICBwcF9pbmZpbml0eSBtdXN0IGJlIGV2ZW4gb25lIG1vcmUgdGhhbiAxZTEwICsgMTsgbGV0J3Mgc3RhbmQgb24gdGhlXG4gICBzYWZlIHNpZGUgYnkgY2hvb3NpbmcgMS5lMTArMTAuXG5cbiAgIFBwX2luZmluaXR5IGNvdWxkIHByb2JhYmx5IGJlIDEwNzM3NDE4MjMgdGhhdCBpcyAyXjMwIC0gMSwgdGhhdCBpc1xuICAgdGhlIG1pbmltYWwgdXBwZXIgYm91bmQgZm9yIGludGVnZXJzOyBub3cgdGhhdCBtYXhfaW50IGlzIGRlZmluZWQsXG4gICB0aGlzIGxpbWl0IGNvdWxkIGFsc28gYmUgZGVmaW5lZCBhcyBtYXhfaW50IC0gMS5cblxuICAgSG93ZXZlciwgYmVmb3JlIHNldHRpbmcgcHBfaW5maW5pdHkgdG8gc29tZXRoaW5nIGFyb3VuZCBtYXhfaW50LCB3ZVxuICAgbXVzdCBjYXJlZnVsbHkgZG91YmxlLWNoZWNrIGFsbCB0aGUgaW50ZWdlciBhcml0aG1ldGljIG9wZXJhdGlvbnNcbiAgIHRoYXQgaW52b2x2ZSBwcF9pbmZpbml0eSwgc2luY2UgYW55IG92ZXJmbG93IHdvdWxkIHdyZWNrIGhhdm9jIHRoZVxuICAgcHJldHR5LXByaW50aW5nIGFsZ29yaXRobSdzIGludmFyaWFudHMuIEdpdmVuIHRoYXQgdGhpcyBhcml0aG1ldGljXG4gICBjb3JyZWN0bmVzcyBjaGVjayBpcyBkaWZmaWN1bHQgYW5kIGVycm9yIHByb25lIGFuZCBnaXZlbiB0aGF0IDFlMTBcbiAgICsgMSBpcyBpbiBwcmFjdGljZSBsYXJnZSBlbm91Z2gsIHRoZXJlIGlzIG5vIG5lZWQgdG8gYXR0ZW1wdCB0byBzZXRcbiAgIHBwX2luZmluaXR5IHRvIHRoZSB0aGVvcmV0aWNhbGx5IG1heGltdW0gbGltaXQuIEl0IGlzIG5vdCB3b3J0aCB0aGVcbiAgIGJ1cmRlbiAhICopXG5sZXQgcHBfaW5maW5pdHkgPSAxMDAwMDAwMDEwXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgZm9yIHRoZSBmb3JtYXR0ZXIuICopXG5sZXQgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBzID0gc3RhdGUucHBfb3V0X3N0cmluZyBzIDAgKFN0cmluZy5sZW5ndGggcylcbmFuZCBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lICgpXG5hbmQgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X3NwYWNlcyBuXG5hbmQgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBuID0gc3RhdGUucHBfb3V0X2luZGVudCBuXG5cbigqIEZvcm1hdCBhIHRleHR1YWwgdG9rZW4gKilcbmxldCBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHRleHQgPVxuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBzaXplO1xuICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHRleHQ7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIGZhbHNlXG5cbigqIEZvcm1hdCBhIHN0cmluZyBieSBpdHMgbGVuZ3RoLCBpZiBub3QgZW1wdHkgKilcbmxldCBmb3JtYXRfc3RyaW5nIHN0YXRlIHMgPVxuICBpZiBzIDw+IFwiXCIgdGhlbiBmb3JtYXRfcHBfdGV4dCBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrLCBpbmRlbnRpbmcgYSBuZXcgbGluZS4gKilcbmxldCBicmVha19uZXdfbGluZSBzdGF0ZSAoYmVmb3JlLCBvZmZzZXQsIGFmdGVyKSB3aWR0aCA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gdHJ1ZTtcbiAgbGV0IGluZGVudCA9IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2Zmc2V0IGluXG4gICgqIERvbid0IGluZGVudCBtb3JlIHRoYW4gcHBfbWF4X2luZGVudC4gKilcbiAgbGV0IHJlYWxfaW5kZW50ID0gSW50Lm1pbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGluZGVudCBpblxuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSByZWFsX2luZGVudDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgcHBfb3V0cHV0X2luZGVudCBzdGF0ZSBzdGF0ZS5wcF9jdXJyZW50X2luZGVudDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGZvcmNlIGEgbGluZSBicmVhayBpbnNpZGUgYSBib3g6IG5vIG9mZnNldCBpcyBhZGRlZC4gKilcbmxldCBicmVha19saW5lIHN0YXRlIHdpZHRoID0gYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIDAsIFwiXCIpIHdpZHRoXG5cbigqIFRvIGZvcm1hdCBhIGJyZWFrIHRoYXQgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoYmVmb3JlLCB3aWR0aCwgYWZ0ZXIpID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHdpZHRoO1xuICBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIHdpZHRoO1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gaW5kZW50IG5vIG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LCBpZiBvbmUgdHJpZXMgdG8gb3BlbiBhIGJveFxuICAgYmV5b25kIHBwX21heF9pbmRlbnQsIHRoZW4gdGhlIGJveCBpcyByZWplY3RlZCBvbiB0aGUgbGVmdFxuICAgYnkgc2ltdWxhdGluZyBhIGJyZWFrLiAqKVxubGV0IHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZVxuICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgIGlmIHdpZHRoID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuXG4gICAgICBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2ZpdHMgfCBQcF9oYm94IC0+ICgpXG4gICAgICB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG5cblxuKCogVG8gc2tpcCBhIHRva2VuLCBpZiB0aGUgcHJldmlvdXMgbGluZSBoYXMgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfc2tpcF90b2tlbiBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHByaW50X2lmX25ld2xpbmUgbXVzdCBoYXZlIGJlZW4gdGhlIGxhc3QgcHJpbnRpbmcgY29tbWFuZCAqKVxuICB8IFNvbWUgeyBzaXplOyBsZW5ndGg7IF8gfSAtPlxuICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gc3RhdGUucHBfbGVmdF90b3RhbCAtIGxlbmd0aDtcbiAgICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgKyBTaXplLnRvX2ludCBzaXplXG5cblxuKCpcblxuICBUaGUgbWFpbiBwcmV0dHkgcHJpbnRpbmcgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBGb3JtYXR0aW5nIGEgdG9rZW4gd2l0aCBhIGdpdmVuIHNpemUuICopXG5sZXQgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgPSBmdW5jdGlvblxuXG4gIHwgUHBfdGV4dCBzIC0+XG4gICAgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSBzXG5cbiAgfCBQcF9iZWdpbiAob2ZmLCB0eSkgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGlmIGluc2VydGlvbl9wb2ludCA+IHN0YXRlLnBwX21heF9pbmRlbnQgdGhlblxuICAgICAgKCogY2FuIG5vdCBvcGVuIGEgYm94IHJpZ2h0IHRoZXJlLiAqKVxuICAgICAgYmVnaW4gcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSBlbmQ7XG4gICAgbGV0IHdpZHRoID0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIG9mZiBpblxuICAgIGxldCBib3hfdHlwZSA9XG4gICAgICBtYXRjaCB0eSB3aXRoXG4gICAgICB8IFBwX3Zib3ggLT4gUHBfdmJveFxuICAgICAgfCBQcF9oYm94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzIC0+XG4gICAgICAgIGlmIHNpemUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gdHkgZWxzZSBQcF9maXRzIGluXG4gICAgU3RhY2sucHVzaCB7IGJveF90eXBlOyB3aWR0aCB9IHN0YXRlLnBwX2Zvcm1hdF9zdGFja1xuXG4gIHwgUHBfZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF90YmVnaW4gKFBwX3Rib3ggXyBhcyB0Ym94KSAtPlxuICAgIFN0YWNrLnB1c2ggdGJveCBzdGF0ZS5wcF90Ym94X3N0YWNrXG5cbiAgfCBQcF90ZW5kIC0+XG4gICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfc3RhYiAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgcmVjIGFkZF90YWIgbiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgW10gLT4gW25dXG4gICAgICAgIHwgeCA6OiBsIGFzIGxzIC0+IGlmIG4gPCB4IHRoZW4gbiA6OiBscyBlbHNlIHggOjogYWRkX3RhYiBuIGwgaW5cbiAgICAgIHRhYnMgOj0gYWRkX3RhYiAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCkgIXRhYnNcbiAgICBlbmRcblxuICB8IFBwX3RicmVhayAobiwgb2ZmKSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCB0YWIgPVxuICAgICAgICBtYXRjaCAhdGFicyB3aXRoXG4gICAgICAgIHwgW10gLT4gaW5zZXJ0aW9uX3BvaW50XG4gICAgICAgIHwgZmlyc3QgOjogXyAtPlxuICAgICAgICAgIGxldCByZWMgZmluZCA9IGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGhlYWQgOjogdGFpbCAtPlxuICAgICAgICAgICAgICBpZiBoZWFkID49IGluc2VydGlvbl9wb2ludCB0aGVuIGhlYWQgZWxzZSBmaW5kIHRhaWxcbiAgICAgICAgICAgIHwgW10gLT4gZmlyc3QgaW5cbiAgICAgICAgICBmaW5kICF0YWJzIGluXG4gICAgICBsZXQgb2Zmc2V0ID0gdGFiIC0gaW5zZXJ0aW9uX3BvaW50IGluXG4gICAgICBpZiBvZmZzZXQgPj0gMFxuICAgICAgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgKFwiXCIsIG9mZnNldCArIG4sIFwiXCIpXG4gICAgICBlbHNlIGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCB0YWIgKyBvZmYsIFwiXCIpIHN0YXRlLnBwX21hcmdpblxuICAgIGVuZFxuXG4gIHwgUHBfbmV3bGluZSAtPlxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgd2lkdGg7IF99IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcbiAgICBlbmRcblxuICB8IFBwX2lmX25ld2xpbmUgLT5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCAhPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgdGhlbiBwcF9za2lwX3Rva2VuIHN0YXRlXG5cbiAgfCBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IC0+XG4gICAgbGV0IGJlZm9yZSwgb2ZmLCBfID0gYnJlYWtzIGluXG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyBib3hfdHlwZTsgd2lkdGggfSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9ob3Zib3ggLT5cbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2JveCAtPlxuICAgICAgICAoKiBIYXZlIHRoZSBsaW5lIGp1c3QgYmVlbiBicm9rZW4gaGVyZSA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2lzX25ld19saW5lIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHMgZWxzZVxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGggZWxzZVxuICAgICAgICAoKiBicmVhayB0aGUgbGluZSBoZXJlIGxlYWRzIHRvIG5ldyBpbmRlbnRhdGlvbiA/ICopXG4gICAgICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ID4gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9odmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfZml0cyAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF92Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9oYm94IC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICBlbmRcbiAgICBlbmRcblxuICAgfCBQcF9vcGVuX3RhZyB0YWdfbmFtZSAtPlxuICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlcjtcbiAgICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF9tYXJrX3N0YWNrXG5cbiAgIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgIGJlZ2luIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfbWFya19zdGFjayB3aXRoXG4gICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIHRhZ19uYW1lIGluXG4gICAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXJcbiAgICAgZW5kXG5cblxuKCogUHJpbnQgaWYgdG9rZW4gc2l6ZSBpcyBrbm93biBlbHNlIHByaW50aW5nIGlzIGRlbGF5ZWQuXG4gICBQcmludGluZyBpcyBkZWxheWVkIHdoZW4gdGhlIHRleHQgd2FpdGluZyBpbiB0aGUgcXVldWUgcmVxdWlyZXNcbiAgIG1vcmUgcm9vbSB0byBmb3JtYXQgdGhhbiBleGlzdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCByZWMgYWR2YW5jZV9sZWZ0IHN0YXRlID1cbiAgbWF0Y2ggUXVldWUucGVla19vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogTm8gdG9rZW5zIHRvIHByaW50ICopXG4gIHwgU29tZSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSAtPlxuICAgIGxldCBwZW5kaW5nX2NvdW50ID0gc3RhdGUucHBfcmlnaHRfdG90YWwgLSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIGluXG4gICAgaWYgU2l6ZS5pc19rbm93biBzaXplIHx8IHBlbmRpbmdfY291bnQgPj0gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIGJlZ2luXG4gICAgICBRdWV1ZS50YWtlIHN0YXRlLnBwX3F1ZXVlIHw+IGlnbm9yZTsgKCogTm90IGVtcHR5OiB3ZSBwZWVrIGludG8gaXQgKilcbiAgICAgIGxldCBzaXplID0gaWYgU2l6ZS5pc19rbm93biBzaXplIHRoZW4gU2l6ZS50b19pbnQgc2l6ZSBlbHNlIHBwX2luZmluaXR5IGluXG4gICAgICBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSB0b2tlbjtcbiAgICAgIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gbGVuZ3RoICsgc3RhdGUucHBfbGVmdF90b3RhbDtcbiAgICAgIChhZHZhbmNlX2xlZnQgW0B0YWlsY2FsbF0pIHN0YXRlXG4gICAgZW5kXG5cblxuKCogVG8gZW5xdWV1ZSBhIHRva2VuIDogdHJ5IHRvIGFkdmFuY2UuICopXG5sZXQgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHRvayA9IHBwX2VucXVldWUgc3RhdGUgdG9rOyBhZHZhbmNlX2xlZnQgc3RhdGVcblxuXG4oKiBUbyBlbnF1ZXVlIHN0cmluZ3MuICopXG5sZXQgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzID1cbiAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZTsgdG9rZW4gPSBQcF90ZXh0IHM7IGxlbmd0aCA9IFNpemUudG9faW50IHNpemUgfVxuXG5cbmxldCBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzID1cbiAgZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgKFNpemUub2ZfaW50IChTdHJpbmcubGVuZ3RoIHMpKSBzXG5cblxuKCogUm91dGluZXMgZm9yIHNjYW4gc3RhY2tcbiAgIGRldGVybWluZSBzaXplIG9mIGJveGVzLiAqKVxuXG4oKiBUaGUgc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbmxldCBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhY2sgPVxuICBTdGFjay5jbGVhciBzdGFjaztcbiAgbGV0IHF1ZXVlX2VsZW0gPSB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfdGV4dCBcIlwiOyBsZW5ndGggPSAwIH0gaW5cbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAtMTsgcXVldWVfZWxlbSB9IHN0YWNrXG5cbigqIFNldHRpbmcgdGhlIHNpemUgb2YgYm94ZXMgb24gc2NhbiBzdGFjazpcbiAgIGlmIHR5ID0gdHJ1ZSB0aGVuIHNpemUgb2YgYnJlYWsgaXMgc2V0IGVsc2Ugc2l6ZSBvZiBib3ggaXMgc2V0O1xuICAgaW4gZWFjaCBjYXNlIHBwX3NjYW5fc3RhY2sgaXMgcG9wcGVkLlxuXG4gICBOb3RlOlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiBzY2FuIHN0YWNrIGlzIGV4aGF1c3RpdmUsIHNpbmNlIHNjYW5fc3RhY2sgaXMgbmV2ZXJcbiAgIGVtcHR5LlxuICAgUGF0dGVybiBtYXRjaGluZyBvbiB0b2tlbiBpbiBzY2FuIHN0YWNrIGlzIGFsc28gZXhoYXVzdGl2ZSxcbiAgIHNpbmNlIHNjYW5fcHVzaCBpcyB1c2VkIG9uIGJyZWFrcyBhbmQgb3BlbmluZyBvZiBib3hlcy4gKilcbmxldCBzZXRfc2l6ZSBzdGF0ZSB0eSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxuICB8IFNvbWUgeyBsZWZ0X3RvdGFsOyBxdWV1ZV9lbGVtIH0gLT5cbiAgICBsZXQgc2l6ZSA9IFNpemUudG9faW50IHF1ZXVlX2VsZW0uc2l6ZSBpblxuICAgICgqIHRlc3QgaWYgc2NhbiBzdGFjayBjb250YWlucyBhbnkgZGF0YSB0aGF0IGlzIG5vdCBvYnNvbGV0ZS4gKilcbiAgICBpZiBsZWZ0X3RvdGFsIDwgc3RhdGUucHBfbGVmdF90b3RhbCB0aGVuXG4gICAgICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFja1xuICAgIGVsc2VcbiAgICAgIG1hdGNoIHF1ZXVlX2VsZW0udG9rZW4gd2l0aFxuICAgICAgfCBQcF9icmVhayBfIHwgUHBfdGJyZWFrIChfLCBfKSAtPlxuICAgICAgICBpZiB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX2JlZ2luIChfLCBfKSAtPlxuICAgICAgICBpZiBub3QgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF90ZXh0IF8gfCBQcF9zdGFiIHwgUHBfdGJlZ2luIF8gfCBQcF90ZW5kIHwgUHBfZW5kXG4gICAgICB8IFBwX25ld2xpbmUgfCBQcF9pZl9uZXdsaW5lIHwgUHBfb3Blbl90YWcgXyB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICAgICAoKSAoKiBzY2FuX3B1c2ggaXMgb25seSB1c2VkIGZvciBicmVha3MgYW5kIGJveGVzLiAqKVxuXG5cbigqIFB1c2ggYSB0b2tlbiBvbiBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay5cbiAgIElmIGIgaXMgdHJ1ZSBzZXRfc2l6ZSBpcyBjYWxsZWQuICopXG5sZXQgc2Nhbl9wdXNoIHN0YXRlIGIgdG9rZW4gPVxuICBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuO1xuICBpZiBiIHRoZW4gc2V0X3NpemUgc3RhdGUgdHJ1ZTtcbiAgbGV0IGVsZW0gPSB7IGxlZnRfdG90YWwgPSBzdGF0ZS5wcF9yaWdodF90b3RhbDsgcXVldWVfZWxlbSA9IHRva2VuIH0gaW5cbiAgU3RhY2sucHVzaCBlbGVtIHN0YXRlLnBwX3NjYW5fc3RhY2tcblxuXG4oKiBUbyBvcGVuIGEgbmV3IGJveCA6XG4gICB0aGUgdXNlciBtYXkgc2V0IHRoZSBkZXB0aCBib3VuZCBwcF9tYXhfYm94ZXNcbiAgIGFueSB0ZXh0IG5lc3RlZCBkZWVwZXIgaXMgcHJpbnRlZCBhcyB0aGUgZWxsaXBzaXMgc3RyaW5nLiAqKVxubGV0IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgYnJfdHkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX2JlZ2luIChpbmRlbnQsIGJyX3R5KTsgbGVuZ3RoID0gMCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIGZhbHNlIGVsZW0gZWxzZVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmcgc3RhdGUgc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUaGUgYm94IHdoaWNoIGlzIGFsd2F5cyBvcGVuLiAqKVxubGV0IHBwX29wZW5fc3lzX2JveCBzdGF0ZSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hvdmJveFxuXG4oKiBDbG9zZSBhIGJveCwgc2V0dGluZyBzaXplcyBvZiBpdHMgc3ViIGJveGVzLiAqKVxubGV0IHBwX2Nsb3NlX2JveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBiZWdpblxuICAgICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfZW5kOyBsZW5ndGggPSAwIH07XG4gICAgICBzZXRfc2l6ZSBzdGF0ZSB0cnVlOyBzZXRfc2l6ZSBzdGF0ZSBmYWxzZVxuICAgIGVuZDtcbiAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxO1xuICBlbmRcblxuXG4oKiBPcGVuIGEgdGFnLCBwdXNoaW5nIGl0IG9uIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfb3Blbl9zdGFnIHN0YXRlIHRhZ19uYW1lID1cbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gIGJlZ2luXG4gICAgU3RhY2sucHVzaCB0YWdfbmFtZSBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gICAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgdGFnX25hbWVcbiAgZW5kO1xuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIGxldCB0b2tlbiA9IFBwX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuOyBsZW5ndGggPSAwIH1cblxuXG4oKiBDbG9zZSBhIHRhZywgcG9wcGluZyBpdCBmcm9tIHRoZSB0YWcgc3RhY2suICopXG5sZXQgcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgcHBfZW5xdWV1ZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfY2xvc2VfdGFnOyBsZW5ndGggPSAwIH07XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICAgIG1hdGNoIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGFnX3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgfCBTb21lIHRhZ19uYW1lIC0+XG4gICAgICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgdGFnX25hbWVcblxubGV0IHBwX29wZW5fdGFnIHN0YXRlIHMgPSBwcF9vcGVuX3N0YWcgc3RhdGUgKFN0cmluZ190YWcgcylcbmxldCBwcF9jbG9zZV90YWcgc3RhdGUgKCkgPSBwcF9jbG9zZV9zdGFnIHN0YXRlICgpXG5cbmxldCBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfcHJpbnRfdGFncyA8LSBiXG5sZXQgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiID0gc3RhdGUucHBfbWFya190YWdzIDwtIGJcbmxldCBwcF9nZXRfcHJpbnRfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX3ByaW50X3RhZ3NcbmxldCBwcF9nZXRfbWFya190YWdzIHN0YXRlICgpID0gc3RhdGUucHBfbWFya190YWdzXG5sZXQgcHBfc2V0X3RhZ3Mgc3RhdGUgYiA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0YXRlIGI7IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYlxuXG5cbigqIEhhbmRsaW5nIHRhZyBoYW5kbGluZyBmdW5jdGlvbnM6IGdldC9zZXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG1hcmtfb3Blbl9zdGFnID0gc3RhdGUucHBfbWFya19vcGVuX3RhZztcbiAgbWFya19jbG9zZV9zdGFnID0gc3RhdGUucHBfbWFya19jbG9zZV90YWc7XG4gIHByaW50X29wZW5fc3RhZyA9IHN0YXRlLnBwX3ByaW50X29wZW5fdGFnO1xuICBwcmludF9jbG9zZV9zdGFnID0gc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnO1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3N0YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl9zdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV9zdGFnID0gcGN0O1xuICB9ID1cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBtb3Q7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIG1jdDtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gcG90O1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gcGN0XG5cblxuKCogSW5pdGlhbGl6ZSBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9yaW5pdCBzdGF0ZSA9XG4gIHBwX2NsZWFyX3F1ZXVlIHN0YXRlO1xuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc3RhdGUucHBfc2Nhbl9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfZm9ybWF0X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90Ym94X3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF90YWdfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX21hcmtfc3RhY2s7XG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIDA7XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gMDtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9tYXJnaW47XG4gIHBwX29wZW5fc3lzX2JveCBzdGF0ZVxuXG5sZXQgY2xlYXJfdGFnX3N0YWNrIHN0YXRlID1cbiAgU3RhY2suaXRlciAoZnVuIF8gLT4gcHBfY2xvc2VfdGFnIHN0YXRlICgpKSBzdGF0ZS5wcF90YWdfc3RhY2tcblxuXG4oKiBGbHVzaGluZyBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBiID1cbiAgY2xlYXJfdGFnX3N0YWNrIHN0YXRlO1xuICB3aGlsZSBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSBkb1xuICAgIHBwX2Nsb3NlX2JveCBzdGF0ZSAoKVxuICBkb25lO1xuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBwcF9pbmZpbml0eTtcbiAgYWR2YW5jZV9sZWZ0IHN0YXRlO1xuICBpZiBiIHRoZW4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHBwX3Jpbml0IHN0YXRlXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBmb3JtYXQgdmFsdWVzIGFuZCB1c2UgYm94ZXMuXG5cbiopXG5cbigqIFRvIGZvcm1hdCBhIHN0cmluZy4gKilcbmxldCBwcF9wcmludF9hc19zaXplIHN0YXRlIHNpemUgcyA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHNcblxuXG5sZXQgcHBfcHJpbnRfYXMgc3RhdGUgaXNpemUgcyA9XG4gIHBwX3ByaW50X2FzX3NpemUgc3RhdGUgKFNpemUub2ZfaW50IGlzaXplKSBzXG5cblxubGV0IHBwX3ByaW50X3N0cmluZyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG5sZXQgcHBfcHJpbnRfYnl0ZXMgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChCeXRlcy5sZW5ndGggcykgKEJ5dGVzLnRvX3N0cmluZyBzKVxuXG4oKiBUbyBmb3JtYXQgYW4gaW50ZWdlci4gKilcbmxldCBwcF9wcmludF9pbnQgc3RhdGUgaSA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoSW50LnRvX3N0cmluZyBpKVxuXG4oKiBUbyBmb3JtYXQgYSBmbG9hdC4gKilcbmxldCBwcF9wcmludF9mbG9hdCBzdGF0ZSBmID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfZmxvYXQgZilcblxuKCogVG8gZm9ybWF0IGEgYm9vbGVhbi4gKilcbmxldCBwcF9wcmludF9ib29sIHN0YXRlIGIgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9ib29sIGIpXG5cbigqIFRvIGZvcm1hdCBhIGNoYXIuICopXG5sZXQgcHBfcHJpbnRfY2hhciBzdGF0ZSBjID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgMSAoU3RyaW5nLm1ha2UgMSBjKVxuXG5cbigqIE9wZW5pbmcgYm94ZXMuICopXG5sZXQgcHBfb3Blbl9oYm94IHN0YXRlICgpID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaGJveFxuYW5kIHBwX29wZW5fdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX3Zib3hcblxuYW5kIHBwX29wZW5faHZib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9odmJveFxuYW5kIHBwX29wZW5faG92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaG92Ym94XG5hbmQgcHBfb3Blbl9ib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ib3hcblxuXG4oKiBQcmludGluZyBxdWV1ZWQgdGV4dC5cblxuICAgW3BwX3ByaW50X2ZsdXNoXSBwcmludHMgYWxsIHBlbmRpbmcgaXRlbXMgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGFuZFxuICAgdGhlbiBmbHVzaGVzIHRoZSBsb3cgbGV2ZWwgb3V0cHV0IGRldmljZSBvZiB0aGUgZm9ybWF0dGVyIHRvIGFjdHVhbGx5XG4gICBkaXNwbGF5IHByaW50aW5nIG1hdGVyaWFsLlxuXG4gICBbcHBfcHJpbnRfbmV3bGluZV0gYmVoYXZlcyBhcyBbcHBfcHJpbnRfZmx1c2hdIGFmdGVyIHByaW50aW5nIGFuIGFkZGl0aW9uYWxcbiAgIG5ldyBsaW5lLiAqKVxubGV0IHBwX3ByaW50X25ld2xpbmUgc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSB0cnVlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcbmFuZCBwcF9wcmludF9mbHVzaCBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGZhbHNlOyBzdGF0ZS5wcF9vdXRfZmx1c2ggKClcblxuXG4oKiBUbyBnZXQgYSBuZXdsaW5lIHdoZW4gb25lIGRvZXMgbm90IHdhbnQgdG8gY2xvc2UgdGhlIGN1cnJlbnQgYm94LiAqKVxubGV0IHBwX2ZvcmNlX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIFRvIGZvcm1hdCBzb21ldGhpbmcsIG9ubHkgaW4gY2FzZSB0aGUgbGluZSBoYXMganVzdCBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9wcmludF9pZl9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlXG4gICAgICB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfaWZfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogR2VuZXJhbGl6ZWQgYnJlYWsgaGludCB0aGF0IGFsbG93cyBwcmludGluZyBzdHJpbmdzIGJlZm9yZS9hZnRlclxuICAgc2FtZS1saW5lIG9mZnNldCAod2lkdGgpIG9yIG5ldy1saW5lIG9mZnNldCAqKVxubGV0IHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZSB+Zml0cyB+YnJlYWtzID1cbiAgbGV0IGJlZm9yZSwgd2lkdGgsIGFmdGVyID0gZml0cyBpblxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCB0b2tlbiA9IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gaW5cbiAgICBsZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aCBiZWZvcmUgKyB3aWR0aCArIFN0cmluZy5sZW5ndGggYWZ0ZXIgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG4oKiBQcmludGluZyBicmVhayBoaW50czpcbiAgIEEgYnJlYWsgaGludCBpbmRpY2F0ZXMgd2hlcmUgYSBib3ggbWF5IGJlIGJyb2tlbi5cbiAgIElmIGxpbmUgaXMgYnJva2VuIHRoZW4gb2Zmc2V0IGlzIGFkZGVkIHRvIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudFxuICAgYm94IGVsc2UgKHRoZSB2YWx1ZSBvZikgd2lkdGggYmxhbmtzIGFyZSBwcmludGVkLiAqKVxubGV0IHBwX3ByaW50X2JyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIHBwX3ByaW50X2N1c3RvbV9icmVhayBzdGF0ZVxuICAgIH5maXRzOihcIlwiLCB3aWR0aCwgXCJcIikgfmJyZWFrczooXCJcIiwgb2Zmc2V0LCBcIlwiKVxuXG5cbigqIFByaW50IGEgc3BhY2UgOlxuICAgYSBzcGFjZSBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgYSBzaW5nbGUgc3BhY2UgaWYgdGhlIGJyZWFrIGRvZXMgbm90XG4gICBzcGxpdCB0aGUgbGluZTtcbiAgIGEgY3V0IGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBub3RoaW5nIGlmIHRoZSBicmVhayBkb2VzIG5vdCBzcGxpdCB0aGVcbiAgIGxpbmUuICopXG5sZXQgcHBfcHJpbnRfc3BhY2Ugc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAxIDBcbmFuZCBwcF9wcmludF9jdXQgc3RhdGUgKCkgPSBwcF9wcmludF9icmVhayBzdGF0ZSAwIDBcblxuXG4oKiBUYWJ1bGF0aW9uIGJveGVzLiAqKVxubGV0IHBwX29wZW5fdGJveCBzdGF0ZSAoKSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS56ZXJvIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJlZ2luIChQcF90Ym94IChyZWYgW10pKTsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKiBDbG9zZSBhIHRhYnVsYXRpb24gYm94LiAqKVxubGV0IHBwX2Nsb3NlX3Rib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfdGVuZDsgbGVuZ3RoID0gMCB9IGluXG4gICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtO1xuICAgICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggLSAxXG4gIGVuZFxuXG5cbigqIFByaW50IGEgdGFidWxhdGlvbiBicmVhay4gKilcbmxldCBwcF9wcmludF90YnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YnJlYWsgKHdpZHRoLCBvZmZzZXQpOyBsZW5ndGggPSB3aWR0aCB9IGluXG4gICAgc2Nhbl9wdXNoIHN0YXRlIHRydWUgZWxlbVxuXG5cbmxldCBwcF9wcmludF90YWIgc3RhdGUgKCkgPSBwcF9wcmludF90YnJlYWsgc3RhdGUgMCAwXG5cbmxldCBwcF9zZXRfdGFiIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IGVsZW0gPSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfc3RhYjsgbGVuZ3RoID0gMCB9IGluXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW1cblxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gY29udHJvbCB0aGUgcHJldHR5LXByaW50ZXJzXG5cbiopXG5cbigqIFNldF9tYXhfYm94ZXMuICopXG5sZXQgcHBfc2V0X21heF9ib3hlcyBzdGF0ZSBuID0gaWYgbiA+IDEgdGhlbiBzdGF0ZS5wcF9tYXhfYm94ZXMgPC0gblxuXG4oKiBUbyBrbm93IHRoZSBjdXJyZW50IG1heGltdW0gbnVtYmVyIG9mIGJveGVzIGFsbG93ZWQuICopXG5sZXQgcHBfZ2V0X21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG5sZXQgcHBfb3Zlcl9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9jdXJyX2RlcHRoID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbigqIEVsbGlwc2lzLiAqKVxubGV0IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0YXRlIHMgPSBzdGF0ZS5wcF9lbGxpcHNpcyA8LSBzXG5hbmQgcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRvIHNldCB0aGUgbWFyZ2luIG9mIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX2xpbWl0IG4gPVxuICBpZiBuIDwgcHBfaW5maW5pdHkgdGhlbiBuIGVsc2UgcHJlZCBwcF9pbmZpbml0eVxuXG5cbigqIEludGVybmFsIHByZXR0eS1wcmludGVyIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWluX3NwYWNlX2xlZnQgPC0gbjtcbiAgICBzdGF0ZS5wcF9tYXhfaW5kZW50IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3Jpbml0IHN0YXRlXG5cblxuKCogSW5pdGlhbGx5LCB3ZSBoYXZlIDpcbiAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdCwgYW5kXG4gICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luLiAqKVxubGV0IHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG4gPVxuICBpZiBuID4gMSB0aGVuXG4gICAgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIChzdGF0ZS5wcF9tYXJnaW4gLSBuKVxuXG5cbmxldCBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSA9IHN0YXRlLnBwX21heF9pbmRlbnRcblxubGV0IHBwX3NldF9tYXJnaW4gc3RhdGUgbiA9XG4gIGlmIG4gPj0gMSB0aGVuXG4gICAgbGV0IG4gPSBwcF9saW1pdCBuIGluXG4gICAgc3RhdGUucHBfbWFyZ2luIDwtIG47XG4gICAgbGV0IG5ld19tYXhfaW5kZW50ID1cbiAgICAgICgqIFRyeSB0byBtYWludGFpbiBtYXhfaW5kZW50IHRvIGl0cyBhY3R1YWwgdmFsdWUuICopXG4gICAgICBpZiBzdGF0ZS5wcF9tYXhfaW5kZW50IDw9IHN0YXRlLnBwX21hcmdpblxuICAgICAgdGhlbiBzdGF0ZS5wcF9tYXhfaW5kZW50IGVsc2VcbiAgICAgICgqIElmIHBvc3NpYmxlIG1haW50YWluIHBwX21pbl9zcGFjZV9sZWZ0IHRvIGl0cyBhY3R1YWwgdmFsdWUsXG4gICAgICAgICBpZiB0aGlzIGxlYWRzIHRvIGEgdG9vIHNtYWxsIG1heF9pbmRlbnQsIHRha2UgaGFsZiBvZiB0aGVcbiAgICAgICAgIG5ldyBtYXJnaW4sIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiAxLiAqKVxuICAgICAgIEludC5tYXggKEludC5tYXggKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0KVxuICAgICAgICAgICAgICAgIChzdGF0ZS5wcF9tYXJnaW4gLyAyKSkgMSBpblxuICAgICgqIFJlYnVpbGQgaW52YXJpYW50cy4gKilcbiAgICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuZXdfbWF4X2luZGVudFxuXG5cbigqKiBHZW9tZXRyeSBmdW5jdGlvbnMgYW5kIHR5cGVzICopXG50eXBlIGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OmludDsgbWFyZ2luOiBpbnR9XG5cbmxldCB2YWxpZGF0ZV9nZW9tZXRyeSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIGlmIG1heF9pbmRlbnQgPCAyIHRoZW5cbiAgICBFcnJvciBcIm1heF9pbmRlbnQgPCAyXCJcbiAgZWxzZSBpZiBtYXJnaW4gPD0gbWF4X2luZGVudCB0aGVuXG4gICAgRXJyb3IgXCJtYXJnaW4gPD0gbWF4X2luZGVudFwiXG4gIGVsc2UgT2sgKClcblxubGV0IGNoZWNrX2dlb21ldHJ5IGdlb21ldHJ5ID1cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IE9rICgpIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBwcF9nZXRfbWFyZ2luIHN0YXRlICgpID0gc3RhdGUucHBfbWFyZ2luXG5cbmxldCBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSB7bWFyZ2luOyBtYXhfaW5kZW50fSA9XG4gIHBwX3NldF9tYXJnaW4gc3RhdGUgbWFyZ2luO1xuICBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBtYXhfaW5kZW50O1xuICAoKVxuXG5sZXQgcHBfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBtc2cgLT5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoXCJGb3JtYXQucHBfc2V0X2dlb21ldHJ5OiBcIiBeIG1zZykpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIF9tc2cgLT5cbiAgICAgKClcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgPVxuICB7IG1hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RhdGUgKCk7IG1heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGF0ZSAoKSB9XG5cbmxldCBwcF91cGRhdGVfZ2VvbWV0cnkgc3RhdGUgdXBkYXRlID1cbiAgbGV0IGdlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpIGluXG4gIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlICh1cGRhdGUgZ2VvbWV0cnkpXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUge1xuICAgICAgb3V0X3N0cmluZyA9IGY7XG4gICAgICBvdXRfZmx1c2ggPSBnO1xuICAgICAgb3V0X25ld2xpbmUgPSBoO1xuICAgICAgb3V0X3NwYWNlcyA9IGk7XG4gICAgICBvdXRfaW5kZW50ID0gajtcbiAgICB9ID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGpcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgb3V0X3N0cmluZyA9IHN0YXRlLnBwX291dF9zdHJpbmc7XG4gIG91dF9mbHVzaCA9IHN0YXRlLnBwX291dF9mbHVzaDtcbiAgb3V0X25ld2xpbmUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZTtcbiAgb3V0X3NwYWNlcyA9IHN0YXRlLnBwX291dF9zcGFjZXM7XG4gIG91dF9pbmRlbnQgPSBzdGF0ZS5wcF9vdXRfaW5kZW50O1xufVxuXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgc3RyaW5nIG91dHB1dCBhbmQgZmx1c2ggZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGcgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7IHN0YXRlLnBwX291dF9mbHVzaCA8LSBnXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoKVxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9uZXdsaW5lIHN0YXRlICgpID0gc3RhdGUucHBfb3V0X3N0cmluZyBcIlxcblwiIDAgIDFcblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IHNwYWNlcy4gKilcbmxldCBibGFua19saW5lID0gU3RyaW5nLm1ha2UgODAgJyAnXG5sZXQgcmVjIGRpc3BsYXlfYmxhbmtzIHN0YXRlIG4gPVxuICBpZiBuID4gMCB0aGVuXG4gIGlmIG4gPD0gODAgdGhlbiBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCBuIGVsc2VcbiAgYmVnaW5cbiAgICBzdGF0ZS5wcF9vdXRfc3RyaW5nIGJsYW5rX2xpbmUgMCA4MDtcbiAgICBkaXNwbGF5X2JsYW5rcyBzdGF0ZSAobiAtIDgwKVxuICBlbmRcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfaW5kZW50ID0gZGlzcGxheV9ibGFua3NcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zIGFzIHByaW50aW5nIHRvIGEgZ2l2ZW5cbiAgIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RhdGUgb2MgPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIG91dHB1dF9zdWJzdHJpbmcgb2M7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSAoZnVuICgpIC0+IGZsdXNoIG9jKTtcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHN0YXRlO1xuICBzdGF0ZS5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHN0YXRlXG5cbigqXG5cbiAgRGVmaW5pbmcgc3BlY2lmaWMgZm9ybWF0dGVyc1xuXG4qKVxuXG5sZXQgZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8XCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcbmxldCBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnID0gZnVuY3Rpb25cbiAgfCBTdHJpbmdfdGFnIHMgLT4gXCI8L1wiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5cbmxldCBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnID0gaWdub3JlXG5sZXQgZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWcgPSBpZ25vcmVcblxuKCogQnVpbGRpbmcgYSBmb3JtYXR0ZXIgZ2l2ZW4gaXRzIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuXG4gICBPdGhlciBmaWVsZHMgZ2V0IHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZXMuICopXG5sZXQgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqID1cbiAgKCogVGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGZvcm1hdHRlciBjb250YWlucyBhIGR1bW15IGJveC4gKilcbiAgbGV0IHBwX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gIGxldCBzeXNfdG9rID1cbiAgICB7IHNpemUgPSBTaXplLnVua25vd247IHRva2VuID0gUHBfYmVnaW4gKDAsIFBwX2hvdmJveCk7IGxlbmd0aCA9IDAgfSBpblxuICBRdWV1ZS5hZGQgc3lzX3RvayBwcF9xdWV1ZTtcbiAgbGV0IHNjYW5fc3RhY2sgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHNjYW5fc3RhY2s7XG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gMTsgcXVldWVfZWxlbSA9IHN5c190b2sgfSBzY2FuX3N0YWNrO1xuICBsZXQgcHBfbWFyZ2luID0gNzhcbiAgYW5kIHBwX21pbl9zcGFjZV9sZWZ0ID0gMTAgaW5cbiAge1xuICAgIHBwX3NjYW5fc3RhY2sgPSBzY2FuX3N0YWNrO1xuICAgIHBwX2Zvcm1hdF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90Ym94X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3RhZ19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJrX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmdpbiA9IHBwX21hcmdpbjtcbiAgICBwcF9taW5fc3BhY2VfbGVmdCA9IHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX21heF9pbmRlbnQgPSBwcF9tYXJnaW4gLSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9zcGFjZV9sZWZ0ID0gcHBfbWFyZ2luO1xuICAgIHBwX2N1cnJlbnRfaW5kZW50ID0gMDtcbiAgICBwcF9pc19uZXdfbGluZSA9IHRydWU7XG4gICAgcHBfbGVmdF90b3RhbCA9IDE7XG4gICAgcHBfcmlnaHRfdG90YWwgPSAxO1xuICAgIHBwX2N1cnJfZGVwdGggPSAxO1xuICAgIHBwX21heF9ib3hlcyA9IG1heF9pbnQ7XG4gICAgcHBfZWxsaXBzaXMgPSBcIi5cIjtcbiAgICBwcF9vdXRfc3RyaW5nID0gZjtcbiAgICBwcF9vdXRfZmx1c2ggPSBnO1xuICAgIHBwX291dF9uZXdsaW5lID0gaDtcbiAgICBwcF9vdXRfc3BhY2VzID0gaTtcbiAgICBwcF9vdXRfaW5kZW50ID0gajtcbiAgICBwcF9wcmludF90YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya190YWdzID0gZmFsc2U7XG4gICAgcHBfbWFya19vcGVuX3RhZyA9IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZztcbiAgICBwcF9tYXJrX2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWc7XG4gICAgcHBfcHJpbnRfb3Blbl90YWcgPSBkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnO1xuICAgIHBwX3ByaW50X2Nsb3NlX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnO1xuICAgIHBwX3F1ZXVlID0gcHBfcXVldWU7XG4gIH1cblxuXG4oKiBCdWlsZCBhIGZvcm1hdHRlciBvdXQgb2YgaXRzIG91dCBmdW5jdGlvbnMuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9mdW5jdGlvbnMgb3V0X2Z1bnMgPVxuICBwcF9tYWtlX2Zvcm1hdHRlclxuICAgIG91dF9mdW5zLm91dF9zdHJpbmdcbiAgICBvdXRfZnVucy5vdXRfZmx1c2hcbiAgICBvdXRfZnVucy5vdXRfbmV3bGluZVxuICAgIG91dF9mdW5zLm91dF9zcGFjZXNcbiAgICBvdXRfZnVucy5vdXRfaW5kZW50XG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3aXRoIGRlZmF1bHQgZnVuY3Rpb25zIHRvIG91dHB1dCBzcGFjZXMsXG4gIGluZGVudGF0aW9uLCBhbmQgbmV3IGxpbmVzLiAqKVxubGV0IG1ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCA9XG4gIGxldCBwcGYgPSBwcF9tYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggaWdub3JlIGlnbm9yZSBpZ25vcmUgaW5cbiAgcHBmLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBwcGY7XG4gIHBwZi5wcF9vdXRfc3BhY2VzIDwtIGRpc3BsYXlfYmxhbmtzIHBwZjtcbiAgcHBmLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgcHBmO1xuICBwcGZcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgPVxuICBtYWtlX2Zvcm1hdHRlciAob3V0cHV0X3N1YnN0cmluZyBvYykgKGZ1biAoKSAtPiBmbHVzaCBvYylcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdyaXRpbmcgdG8gYSBnaXZlbiBbQnVmZmVyLnRdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9idWZmZXIgYiA9XG4gIG1ha2VfZm9ybWF0dGVyIChCdWZmZXIuYWRkX3N1YnN0cmluZyBiKSBpZ25vcmVcblxuXG4oKiBBbGxvY2F0aW5nIGJ1ZmZlciBmb3IgcHJldHR5LXByaW50aW5nIHB1cnBvc2VzLlxuICAgRGVmYXVsdCBidWZmZXIgc2l6ZSBpcyBwcF9idWZmZXJfc2l6ZSBvciA1MTIuXG4qKVxubGV0IHBwX2J1ZmZlcl9zaXplID0gNTEyXG5sZXQgcHBfbWFrZV9idWZmZXIgKCkgPSBCdWZmZXIuY3JlYXRlIHBwX2J1ZmZlcl9zaXplXG5cbigqIFRoZSBzdGFuZGFyZCAoc2hhcmVkKSBidWZmZXIuICopXG5sZXQgc3RkYnVmID0gcHBfbWFrZV9idWZmZXIgKClcblxuKCogUHJlZGVmaW5lZCBmb3JtYXR0ZXJzIHN0YW5kYXJkIGZvcm1hdHRlciB0byBwcmludFxuICAgdG8gW1N0ZGxpYi5zdGRvdXRdLCBbU3RkbGliLnN0ZGVycl0sIGFuZCB7IXN0ZGJ1Zn0uICopXG5sZXQgc3RkX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3Rkb3V0XG5hbmQgZXJyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBTdGRsaWIuc3RkZXJyXG5hbmQgc3RyX2Zvcm1hdHRlciA9IGZvcm1hdHRlcl9vZl9idWZmZXIgc3RkYnVmXG5cblxuKCogW2ZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZl0gZmx1c2hlcyBmb3JtYXR0ZXIgW3BwZl0sXG4gICB0aGVuIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGJ1ZmZlciBbYnVmXSB0aGF0IGlzIHJlc2V0LlxuICAgRm9ybWF0dGVyIFtwcGZdIGlzIHN1cHBvc2VkIHRvIHByaW50IHRvIGJ1ZmZlciBbYnVmXSwgb3RoZXJ3aXNlIHRoaXNcbiAgIGZ1bmN0aW9uIGlzIG5vdCByZWFsbHkgdXNlZnVsLiAqKVxubGV0IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYnVmIHBwZiA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZTtcbiAgbGV0IHMgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gIEJ1ZmZlci5yZXNldCBidWY7XG4gIHNcblxuXG4oKiBGbHVzaCBbc3RyX2Zvcm1hdHRlcl0gYW5kIGdldCB0aGUgY29udGVudHMgb2YgW3N0ZGJ1Zl0uICopXG5sZXQgZmx1c2hfc3RyX2Zvcm1hdHRlciAoKSA9IGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgc3RkYnVmIHN0cl9mb3JtYXR0ZXJcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nXG4qKVxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmcgaXMgcHJldHR5LXByaW50aW5nIHdpdGggbm8gbG93IGxldmVsIG91dHB1dC5cblxuICBXaGVuIHVzaW5nIGEgc3ltYm9saWMgZm9ybWF0dGVyLCBhbGwgcmVndWxhciBwcmV0dHktcHJpbnRpbmcgYWN0aXZpdGllc1xuICBvY2N1ciBidXQgb3V0cHV0IG1hdGVyaWFsIGlzIHN5bWJvbGljIGFuZCBzdG9yZWQgaW4gYSBidWZmZXIgb2Ygb3V0cHV0XG4gIGl0ZW1zLiBBdCB0aGUgZW5kIG9mIHByZXR0eS1wcmludGluZywgZmx1c2hpbmcgdGhlIG91dHB1dCBidWZmZXIgYWxsb3dzXG4gIHBvc3QtcHJvY2Vzc2luZyBvZiBzeW1ib2xpYyBvdXRwdXQgYmVmb3JlIGxvdyBsZXZlbCBvdXRwdXQgb3BlcmF0aW9ucy5cbiopXG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2l0ZW0gPVxuICB8IE91dHB1dF9mbHVzaFxuICB8IE91dHB1dF9uZXdsaW5lXG4gIHwgT3V0cHV0X3N0cmluZyBvZiBzdHJpbmdcbiAgfCBPdXRwdXRfc3BhY2VzIG9mIGludFxuICB8IE91dHB1dF9pbmRlbnQgb2YgaW50XG5cbnR5cGUgc3ltYm9saWNfb3V0cHV0X2J1ZmZlciA9IHtcbiAgbXV0YWJsZSBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgOiBzeW1ib2xpY19vdXRwdXRfaXRlbSBsaXN0O1xufVxuXG5sZXQgbWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyICgpID1cbiAgeyBzeW1ib2xpY19vdXRwdXRfY29udGVudHMgPSBbXSB9XG5cbmxldCBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gW11cblxubGV0IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIExpc3QucmV2IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZsdXNoX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IGl0ZW1zID0gZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iIGluXG4gIGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iO1xuICBpdGVtc1xuXG5sZXQgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBpdGVtID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBpdGVtIDo6IHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHNcblxubGV0IGZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBzeW1ib2xpY19mbHVzaCBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X2ZsdXNoXG4gIGFuZCBzeW1ib2xpY19uZXdsaW5lIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfbmV3bGluZVxuICBhbmQgc3ltYm9saWNfc3RyaW5nIHNvYiBzIGkgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3N0cmluZyAoU3RyaW5nLnN1YiBzIGkgbikpXG4gIGFuZCBzeW1ib2xpY19zcGFjZXMgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zcGFjZXMgbilcbiAgYW5kIHN5bWJvbGljX2luZGVudCBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X2luZGVudCBuKSBpblxuXG4gIGxldCBmID0gc3ltYm9saWNfc3RyaW5nIHNvYlxuICBhbmQgZyA9IHN5bWJvbGljX2ZsdXNoIHNvYlxuICBhbmQgaCA9IHN5bWJvbGljX25ld2xpbmUgc29iXG4gIGFuZCBpID0gc3ltYm9saWNfc3BhY2VzIHNvYlxuICBhbmQgaiA9IHN5bWJvbGljX2luZGVudCBzb2IgaW5cbiAgcHBfbWFrZV9mb3JtYXR0ZXIgZiBnIGggaSBqXG5cbigqXG5cbiAgQmFzaWMgZnVuY3Rpb25zIG9uIHRoZSAnc3RhbmRhcmQnIGZvcm1hdHRlclxuICAodGhlIGZvcm1hdHRlciB0aGF0IHByaW50cyB0byBbU3RkbGliLnN0ZG91dF0pLlxuXG4qKVxuXG5sZXQgb3Blbl9oYm94ID0gcHBfb3Blbl9oYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3Zib3ggPSBwcF9vcGVuX3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faHZib3ggPSBwcF9vcGVuX2h2Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2hvdmJveCA9IHBwX29wZW5faG92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2JveCA9IHBwX29wZW5fYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9ib3ggPSBwcF9jbG9zZV9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdGFnID0gcHBfb3Blbl90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3RhZyA9IHBwX2Nsb3NlX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9zdGFnID0gcHBfb3Blbl9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV9zdGFnID0gcHBfY2xvc2Vfc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYXMgPSBwcF9wcmludF9hcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3RyaW5nID0gcHBfcHJpbnRfc3RyaW5nIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ieXRlcyA9IHBwX3ByaW50X2J5dGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pbnQgPSBwcF9wcmludF9pbnQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Zsb2F0ID0gcHBfcHJpbnRfZmxvYXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2NoYXIgPSBwcF9wcmludF9jaGFyIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9ib29sID0gcHBfcHJpbnRfYm9vbCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnJlYWsgPSBwcF9wcmludF9icmVhayBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY3V0ID0gcHBfcHJpbnRfY3V0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zcGFjZSA9IHBwX3ByaW50X3NwYWNlIHN0ZF9mb3JtYXR0ZXJcbmFuZCBmb3JjZV9uZXdsaW5lID0gcHBfZm9yY2VfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmx1c2ggPSBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfbmV3bGluZSA9IHBwX3ByaW50X25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2lmX25ld2xpbmUgPSBwcF9wcmludF9pZl9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIG9wZW5fdGJveCA9IHBwX29wZW5fdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGJveCA9IHBwX2Nsb3NlX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RicmVhayA9IHBwX3ByaW50X3RicmVhayBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfdGFiID0gcHBfc2V0X3RhYiBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGFiID0gcHBfcHJpbnRfdGFiIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXJnaW4gPSBwcF9zZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2luZGVudCA9IHBwX3NldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9nZW9tZXRyeSA9IHBwX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgc2FmZV9zZXRfZ2VvbWV0cnkgPSBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2dlb21ldHJ5ID0gcHBfZ2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCB1cGRhdGVfZ2VvbWV0cnkgPSBwcF91cGRhdGVfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9ib3hlcyA9IHBwX3NldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfYm94ZXMgPSBwcF9nZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvdmVyX21heF9ib3hlcyA9IHBwX292ZXJfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9lbGxpcHNpc190ZXh0ID0gcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9lbGxpcHNpc190ZXh0ID0gcHBfZ2V0X2VsbGlwc2lzX3RleHQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfcHJpbnRfdGFncyA9XG4gIHBwX3NldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfcHJpbnRfdGFncyA9XG4gIHBwX2dldF9wcmludF90YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfbWFya190YWdzID1cbiAgcHBfc2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmtfdGFncyA9XG4gIHBwX2dldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF90YWdzID1cbiAgcHBfc2V0X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuXG5cbigqIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqKVxuXG4oKiBUbyBmb3JtYXQgYSBsaXN0ICopXG5sZXQgcmVjIHBwX3ByaW50X2xpc3QgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAoKVxuICB8IFt2XSAtPiBwcF92IHBwZiB2XG4gIHwgdiA6OiB2cyAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF9wcmludF9saXN0IH5wcF9zZXAgcHBfdiBwcGYgdnNcblxuKCogVG8gZm9ybWF0IGEgc2VxdWVuY2UgKilcbmxldCByZWMgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbmxldCBwcF9wcmludF9zZXEgPyhwcF9zZXAgPSBwcF9wcmludF9jdXQpIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxuKCogVG8gZm9ybWF0IGZyZWUtZmxvd2luZyB0ZXh0ICopXG5sZXQgcHBfcHJpbnRfdGV4dCBwcGYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGxlZnQgPSByZWYgMCBpblxuICBsZXQgcmlnaHQgPSByZWYgMCBpblxuICBsZXQgZmx1c2ggKCkgPVxuICAgIHBwX3ByaW50X3N0cmluZyBwcGYgKFN0cmluZy5zdWIgcyAhbGVmdCAoIXJpZ2h0IC0gIWxlZnQpKTtcbiAgICBpbmNyIHJpZ2h0OyBsZWZ0IDo9ICFyaWdodDtcbiAgaW5cbiAgd2hpbGUgKCFyaWdodCA8PiBsZW4pIGRvXG4gICAgbWF0Y2ggcy5bIXJpZ2h0XSB3aXRoXG4gICAgICB8ICdcXG4nIC0+XG4gICAgICAgIGZsdXNoICgpO1xuICAgICAgICBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgZmx1c2ggKCk7IHBwX3ByaW50X3NwYWNlIHBwZiAoKVxuICAgICAgKCogdGhlcmUgaXMgbm8gc3BlY2lmaWMgc3VwcG9ydCBmb3IgJ1xcdCdcbiAgICAgICAgIGFzIGl0IGlzIHVuY2xlYXIgd2hhdCBhIHJpZ2h0IHNlbWFudGljcyB3b3VsZCBiZSAqKVxuICAgICAgfCBfIC0+IGluY3IgcmlnaHRcbiAgZG9uZTtcbiAgaWYgIWxlZnQgPD4gbGVuIHRoZW4gZmx1c2ggKClcblxubGV0IHBwX3ByaW50X29wdGlvbiA/KG5vbmUgPSBmdW4gXyAoKSAtPiAoKSkgcHBfdiBwcGYgPSBmdW5jdGlvblxufCBOb25lIC0+IG5vbmUgcHBmICgpXG58IFNvbWUgdiAtPiBwcF92IHBwZiB2XG5cbmxldCBwcF9wcmludF9yZXN1bHQgfm9rIH5lcnJvciBwcGYgPSBmdW5jdGlvblxufCBPayB2IC0+IG9rIHBwZiB2XG58IEVycm9yIGUgLT4gZXJyb3IgcHBmIGVcblxubGV0IHBwX3ByaW50X2VpdGhlciB+bGVmdCB+cmlnaHQgcHBmID0gZnVuY3Rpb25cbnwgRWl0aGVyLkxlZnQgbCAtPiBsZWZ0IHBwZiBsXG58IEVpdGhlci5SaWdodCByIC0+IHJpZ2h0IHBwZiByXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBjb21wdXRlX3RhZyBvdXRwdXQgdGFnX2FjYyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDE2IGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBvdXRwdXQgcHBmIHRhZ19hY2M7XG4gIHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgbGV0IGxlbiA9IEJ1ZmZlci5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBCdWZmZXIuY29udGVudHMgYnVmXG4gIGVsc2UgQnVmZmVyLnN1YiBidWYgMSAobGVuIC0gMilcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gIERlZmluaW5nIGNvbnRpbnVhdGlvbnMgdG8gYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBvZlxuICBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuXG5cbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG4oKiBJbnRlcnByZXQgYSBmb3JtYXR0aW5nIGVudGl0eSBvbiBhIGZvcm1hdHRlci4gKilcbmxldCBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGZtdGluZ19saXQgPSBtYXRjaCBmbXRpbmdfbGl0IHdpdGhcbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX2JveCBwcGYgKClcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgIC0+IHBwX2Nsb3NlX3RhZyBwcGYgKClcbiAgfCBCcmVhayAoXywgd2lkdGgsIG9mZnNldCkgIC0+IHBwX3ByaW50X2JyZWFrIHBwZiB3aWR0aCBvZmZzZXRcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2ZsdXNoIHBwZiAoKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX3ByaW50X25ld2xpbmUgcHBmICgpXG4gIHwgTWFnaWNfc2l6ZSAoXywgXykgICAgICAgICAtPiAoKVxuICB8IEVzY2FwZWRfYXQgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnJSdcbiAgfCBTY2FuX2luZGljIGMgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJzsgcHBfcHJpbnRfY2hhciBwcGYgY1xuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYub3V0cHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBmIHBwZjtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBEaWZmZXIgZnJvbSBQcmludGYuYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZm9ybWF0dGluZy4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBzdHJwdXRfYWNjIHBwZiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBjKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChTdHJpbmcubWFrZSAxIGMpO1xuICB8IEFjY19kZWxheSAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKGYgKCkpO1xuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZjtcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfb3Blbl9zdGFnIHBwZiAoU3RyaW5nX3RhZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSlcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgbGV0IChpbmRlbnQsIGJ0eSkgPSBvcGVuX2JveF9vZl9zdHJpbmcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykgaW5cbiAgICBwcF9vcGVuX2JveF9nZW4gcHBmIGluZGVudCBidHlcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9jaGFyIHBwZiBjO1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIChmICgpKTtcbiAgfCBBY2NfZmx1c2ggcCAgICAgICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIHBwZiBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqXG5cbiAgRGVmaW5pbmcgW2ZwcmludGZdIGFuZCB2YXJpb3VzIGZsYXZvcnMgb2YgW2ZwcmludGZdLlxuXG4qKVxuXG5sZXQga2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgcHBmIGFjYzsgayBwcGYpXG4gICAgRW5kX29mX2FjYyBmbXRcblxuYW5kIGlrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIHBwZiBmbXRcblxubGV0IGlmcHJpbnRmIF9wcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgaWdub3JlICgpIGZtdFxuXG5sZXQgZnByaW50ZiBwcGYgPSBrZnByaW50ZiBpZ25vcmUgcHBmXG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkX2Zvcm1hdHRlciBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgZXJyX2Zvcm1hdHRlciBmbXRcblxubGV0IGtkcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZlxuICAgIChmdW4gYWNjIC0+IGsgKGZ1biBwcGYgLT4gb3V0cHV0X2FjYyBwcGYgYWNjKSlcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5sZXQgZHByaW50ZiBmbXQgPSBrZHByaW50ZiAoZnVuIGkgLT4gaSkgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgc3RycHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgc3ByaW50ZiBmbXQgPSBrc3ByaW50ZiBpZCBmbXRcblxubGV0IGthc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGIgPSBwcF9tYWtlX2J1ZmZlciAoKSBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9XG4gICAgb3V0cHV0X2FjYyBwcGYgYWNjO1xuICAgIGsgKGZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIgYiBwcGYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG5sZXQgYXNwcmludGYgZm10ID0ga2FzcHJpbnRmIGlkIGZtdFxuXG4oKiBGbHVzaGluZyBzdGFuZGFyZCBmb3JtYXR0ZXJzIGF0IGVuZCBvZiBleGVjdXRpb24uICopXG5cbmxldCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzICgpID1cbiAgcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlciAoKTtcbiAgcHBfcHJpbnRfZmx1c2ggZXJyX2Zvcm1hdHRlciAoKVxuXG5sZXQgKCkgPSBhdF9leGl0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnNcblxuKCpcblxuICBEZXByZWNhdGVkIHN0dWZmLlxuXG4qKVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZVxuICAgIH5vdXQ6ZiB+Zmx1c2g6ZyB+bmV3bGluZTpoIH5zcGFjZXM6aSA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSBmIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaVxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gsXG4gICBzdGF0ZS5wcF9vdXRfbmV3bGluZSwgc3RhdGUucHBfb3V0X3NwYWNlcylcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBnZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBnZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IGVycm9yIHByb25lIGZ1bmN0aW9uLCBkbyBub3QgdXNlIGl0LlxuICAgVGhpcyBmdW5jdGlvbiBpcyBuZWl0aGVyIGNvbXBvc2l0aW9uYWwgbm9yIGluY3JlbWVudGFsLCBzaW5jZSBpdCBmbHVzaGVzXG4gICB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYXQgZWFjaCBjYWxsLlxuICAgVG8gZ2V0IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHksIGRlZmluZSBhIGZvcm1hdHRlciBvZiB5b3VyIG93biB3cml0aW5nIHRvXG4gICB0aGUgYnVmZmVyIGFyZ3VtZW50LCBhcyBpblxuICAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYlxuICAgdGhlbiB1c2UgeyFmcHJpbnRmIHBwZn0gYXMgdXN1YWwuICopXG5sZXQgYnByaW50ZiBiIChGb3JtYXQgKGZtdCwgXykgOiAoJ2EsIGZvcm1hdHRlciwgdW5pdCkgZm9ybWF0KSA9XG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID0gb3V0cHV0X2FjYyBwcGYgYWNjOyBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2UgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbigqIERlcHJlY2F0ZWQgOiBhbGlhcyBmb3Iga3NwcmludGYuICopXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG5cblxuXG4oKiBEZXByZWNhdGVkIHRhZyBmdW5jdGlvbnMgKilcblxudHlwZSBmb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIG1hcmtfY2xvc2VfdGFnIDogdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl90YWcgOiB0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2VfdGFnIDogdGFnIC0+IHVuaXQ7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl90YWcgPSBtb3Q7XG4gICAgIG1hcmtfY2xvc2VfdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2VfdGFnID0gcGN0O1xuICAgfSA9XG4gIGxldCBzdHJpbmdpZnkgZiBlID0gZnVuY3Rpb24gU3RyaW5nX3RhZyBzIC0+IGYgcyB8IF8gLT4gZSBpblxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIHN0cmluZ2lmeSBtb3QgXCJcIjtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gc3RyaW5naWZ5IG1jdCBcIlwiO1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBzdHJpbmdpZnkgcG90ICgpO1xuICBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWcgPC0gc3RyaW5naWZ5IHBjdCAoKVxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIGZtdCAoKSA9XG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBmbXQgKCkgaW5cbiAgbGV0IG1hcmtfb3Blbl90YWcgcyA9IGZ1bnMubWFya19vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IG1hcmtfY2xvc2VfdGFnIHMgPSBmdW5zLm1hcmtfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfb3Blbl90YWcgcyA9IGZ1bnMucHJpbnRfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9jbG9zZV90YWcgcyA9IGZ1bnMucHJpbnRfY2xvc2Vfc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICB7bWFya19vcGVuX3RhZzsgbWFya19jbG9zZV90YWc7IHByaW50X29wZW5fdGFnOyBwcmludF9jbG9zZV90YWd9XG5cbmxldCBzZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFJlZ2lzdGVyaW5nIE9DYW1sIHZhbHVlcyB3aXRoIHRoZSBDIHJ1bnRpbWUgZm9yIGxhdGVyIGNhbGxiYWNrcyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiBPYmoudCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCByZWdpc3RlciBuYW1lIHYgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIChPYmoucmVwciB2KVxuXG5sZXQgcmVnaXN0ZXJfZXhjZXB0aW9uIG5hbWUgKGV4biA6IGV4bikgPVxuICBsZXQgZXhuID0gT2JqLnJlcHIgZXhuIGluXG4gIGxldCBzbG90ID0gaWYgT2JqLnRhZyBleG4gPSBPYmoub2JqZWN0X3RhZyB0aGVuIGV4biBlbHNlIE9iai5maWVsZCBleG4gMCBpblxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIHNsb3RcbiIsIm1vZHVsZSBKcyA9IHN0cnVjdFxuICB0eXBlIHRcblxuICB0eXBlICdhIGpzX2FycmF5ID0gdFxuXG4gIHR5cGUgKCdhLCAnYikgbWV0aF9jYWxsYmFjayA9IHRcblxuICBleHRlcm5hbCBzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIHRvX3N0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgYnl0ZXN0cmluZyA6IHN0cmluZyAtPiB0ID0gXCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19ieXRlc3RyaW5nIDogdCAtPiBzdHJpbmcgPSBcImNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcIlxuXG4gIGV4dGVybmFsIGJvb2wgOiBib29sIC0+IHQgPSBcImNhbWxfanNfZnJvbV9ib29sXCJcblxuICBleHRlcm5hbCB0b19ib29sIDogdCAtPiBib29sID0gXCJjYW1sX2pzX3RvX2Jvb2xcIlxuXG4gIGV4dGVybmFsIGFycmF5IDogJ2EgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19hcnJheSA6IHQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfanNfdG9fYXJyYXlcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9mbG9hdCA6IGZsb2F0IC0+IHQgPSBcImNhbWxfanNfZnJvbV9mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgZmxvYXRfb2ZfbnVtYmVyIDogdCAtPiBmbG9hdCA9IFwiY2FtbF9qc190b19mbG9hdFwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX2ludDMyIDogaW50MzIgLT4gdCA9IFwiY2FtbF9qc19mcm9tX2ludDMyXCJcblxuICBleHRlcm5hbCBpbnQzMl9vZl9udW1iZXIgOiB0IC0+IGludDMyID0gXCJjYW1sX2pzX3RvX2ludDMyXCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IHQgPSBcImNhbWxfanNfZnJvbV9uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIG5hdGl2ZWludF9vZl9udW1iZXIgOiB0IC0+IG5hdGl2ZWludCA9IFwiY2FtbF9qc190b19uYXRpdmVpbnRcIlxuXG4gIGV4dGVybmFsIHR5cGVvZiA6IHQgLT4gdCA9IFwiY2FtbF9qc190eXBlb2ZcIlxuXG4gIGV4dGVybmFsIGluc3RhbmNlb2YgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19pbnN0YW5jZW9mXCJcblxuICBleHRlcm5hbCBkZWJ1Z2dlciA6IHVuaXQgLT4gdW5pdCA9IFwiZGVidWdnZXJcIlxuXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gdCAtPiB0ID0gXCJjYW1sX2pzX2dldFwiXG5cbiAgZXh0ZXJuYWwgc2V0IDogdCAtPiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19zZXRcIlxuXG4gIGV4dGVybmFsIGRlbGV0ZSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2pzX2RlbGV0ZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbCA6IHQgLT4gdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgZnVuX2NhbGwgOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19mdW5fY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsIDogdCAtPiBzdHJpbmcgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX21ldGhfY2FsbFwiXG5cbiAgZXh0ZXJuYWwgbmV3X29iaiA6IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX25ld1wiXG5cbiAgZXh0ZXJuYWwgbmV3X29ial9hcnIgOiB0IC0+IHQganNfYXJyYXkgLT4gdCA9IFwiY2FtbF9vanNfbmV3X2FyclwiXG5cbiAgZXh0ZXJuYWwgb2JqIDogKHN0cmluZyAqIHQpIGFycmF5IC0+IHQgPSBcImNhbWxfanNfb2JqZWN0XCJcblxuICBleHRlcm5hbCBlcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19lcXVhbHNcIlxuXG4gIGV4dGVybmFsIHN0cmljdF9lcXVhbHMgOiB0IC0+IHQgLT4gYm9vbCA9IFwiY2FtbF9qc19zdHJpY3RfZXF1YWxzXCJcblxuICBleHRlcm5hbCBwdXJlX2V4cHIgOiAodW5pdCAtPiAnYSkgLT4gJ2EgPSBcImNhbWxfanNfcHVyZV9leHByXCJcblxuICBleHRlcm5hbCBldmFsX3N0cmluZyA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19ldmFsX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwganNfZXhwciA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc19leHByXCJcblxuICBleHRlcm5hbCBwdXJlX2pzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfcHVyZV9qc19leHByXCJcblxuICBleHRlcm5hbCBjYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyZ3VtZW50cyA6XG4gICAgKHQganNfYXJyYXkgLT4gJ2IpIC0+ICgnYywgdCBqc19hcnJheSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCBjYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrIDogKCdiIC0+ICdhKSAtPiAoJ2IsICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFja193aXRoX2FyaXR5IDogaW50IC0+ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3RcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICgnYiAtPiB0IGpzX2FycmF5IC0+ICdhKSAtPiAoJ2IsIHQganNfYXJyYXkgLT4gJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzXCJcblxuICBleHRlcm5hbCB3cmFwX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2MsICdhIC0+ICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9jYWxsYmFja1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9tZXRoX2NhbGxiYWNrIDogKCdhIC0+ICdiKSAtPiAoJ2EsICdiKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrXCJcbmVuZFxuXG5tb2R1bGUgU3lzID0gc3RydWN0XG4gIHR5cGUgJ2EgY2FsbGJhY2sgPSAnYVxuXG4gIGV4dGVybmFsIGNyZWF0ZV9maWxlIDogbmFtZTpzdHJpbmcgLT4gY29udGVudDpzdHJpbmcgLT4gdW5pdCA9IFwiY2FtbF9jcmVhdGVfZmlsZVwiXG5cbiAgZXh0ZXJuYWwgcmVhZF9maWxlIDogbmFtZTpzdHJpbmcgLT4gc3RyaW5nID0gXCJjYW1sX3JlYWRfZmlsZV9jb250ZW50XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9vdXRwdXQnIDogb3V0X2NoYW5uZWwgLT4gKGpzX3N0cmluZzpKcy50IC0+IHVuaXQpIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcIlxuXG4gIGV4dGVybmFsIHNldF9jaGFubmVsX2lucHV0JyA6IGluX2NoYW5uZWwgLT4gKHVuaXQgLT4gc3RyaW5nKSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXCJcblxuICBleHRlcm5hbCBtb3VudF9wb2ludCA6IHVuaXQgLT4gc3RyaW5nIGxpc3QgPSBcImNhbWxfbGlzdF9tb3VudF9wb2ludFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfYXV0b2xvYWQgOiBzdHJpbmcgLT4gKHN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvbikgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21vdW50X2F1dG9sb2FkXCJcblxuICBleHRlcm5hbCB1bm1vdW50IDogc3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfdW5tb3VudFwiXG5cbiAgdHlwZSByZWRpcmVjdGlvblxuXG4gIGV4dGVybmFsIHJlZGlyZWN0X2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiBpbnRvOm91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uXG4gICAgPSBcImNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFwiXG5cbiAgZXh0ZXJuYWwgcmVzdG9yZV9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gcmVkaXJlY3Rpb24gLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVzdG9yZVwiXG5cbiAgbW9kdWxlIENvbmZpZyA9IHN0cnVjdFxuICAgIGV4dGVybmFsIHVzZV9qc19zdHJpbmcgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nXCJcblxuICAgIGV4dGVybmFsIGVmZmVjdHMgOiB1bml0IC0+IGJvb2wgPSBcImNhbWxfanNvb19mbGFnc19lZmZlY3RzXCJcbiAgZW5kXG5cbiAgbGV0IHZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uc1xuXG4gIGxldCBnaXRfdmVyc2lvbiA9IFJ1bnRpbWVfdmVyc2lvbi5naXRfdmVyc2lvblxuZW5kXG5cbm1vZHVsZSBFcnJvciA6IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgcmFpc2VfIDogdCAtPiAnYVxuXG4gIHZhbCBhdHRhY2hfanNfYmFja3RyYWNlIDogZXhuIC0+IGZvcmNlOmJvb2wgLT4gZXhuXG4gICgqKiBBdHRhY2ggYSBKYXZhc1NjcmlwdCBlcnJvciB0byBhbiBPQ2FtbCBleGNlcHRpb24uICBpZiBbZm9yY2UgPSBmYWxzZV0gYW5kIGFcbiAgICBKYXZhc1NjcmlwdCBlcnJvciBpcyBhbHJlYWR5IGF0dGFjaGVkLCBpdCB3aWxsIGRvIG5vdGhpbmcuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIHRvXG4gICAgc3RvcmUgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IEphdmFTY3JpcHQgc3RhY2sgdHJhY2VzLlxuXG4gICAgQXR0YWNoaW5nIEphdmFzU2NyaXB0IGVycm9ycyB3aWxsIGhhcHBlbiBhdXRvbWF0aWNhbGx5IHdoZW4gY29tcGlsaW5nIHdpdGhcbiAgICBbLS1lbmFibGUgd2l0aC1qcy1lcnJvcl0uICopXG5cbiAgdmFsIG9mX2V4biA6IGV4biAtPiB0IG9wdGlvblxuICAoKiogRXh0cmFjdCBhIEphdmFTY3JpcHQgZXJyb3IgYXR0YWNoZWQgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLCBpZiBhbnkuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgICAgaW5zcGVjdCBhbiBldmVudHVhbCBzdGFjayBzdHJhY2UsIGVzcGVjaWFsbHkgd2hlbiBzb3VyY2VtYXAgaXMgZW5hYmxlZC4gKilcblxuICBleGNlcHRpb24gRXhuIG9mIHRcbiAgKCoqIFRoZSBbRXJyb3JdIGV4Y2VwdGlvbiB3cmFwIGphdmFzY3JpcHQgZXhjZXB0aW9ucyB3aGVuIGNhdWdodCBieSBPQ2FtbCBjb2RlLlxuICAgICAgSW4gY2FzZSB0aGUgamF2YXNjcmlwdCBleGNlcHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIGphdmFzY3JpcHQgW0Vycm9yXSxcbiAgICAgIGl0IHdpbGwgYmUgc2VyaWFsaXplZCBhbmQgd3JhcHBlZCBpbnRvIGEgW0ZhaWx1cmVdIGV4Y2VwdGlvbi5cbiAgKilcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHRcblxuICBleGNlcHRpb24gRXhuIG9mIHRcblxuICBsZXQgXyA9IENhbGxiYWNrLnJlZ2lzdGVyX2V4Y2VwdGlvbiBcImpzRXJyb3JcIiAoRXhuIChPYmoubWFnaWMgW3x8XSkpXG5cbiAgbGV0IHJhaXNlXyA6IHQgLT4gJ2EgPSBKcy5qc19leHByIFwiKGZ1bmN0aW9uIChleG4pIHsgdGhyb3cgZXhuIH0pXCJcblxuICBleHRlcm5hbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb24gPSBcImNhbWxfanNfZXJyb3Jfb3B0aW9uX29mX2V4Y2VwdGlvblwiXG5cbiAgZXh0ZXJuYWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4biA9IFwiY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2VcIlxuZW5kXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyLTYwXCJdXG5cbm1vZHVsZSBGb3JfY29tcGF0aWJpbGl0eV9vbmx5ID0gc3RydWN0XG4gICgqIEFkZCBwcmltaXRpdmVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIEV4aXN0aW5nIHVzZXJzIG1pZ2h0XG4gICAgIGRlcGVuZCBvbiBpdCAoZS5nLiBnZW5fanNfYXBpKSwgd2UgZG9udCB3YW50IHRoZSBvY2FtbCBjb21waWxlclxuICAgICB0byBjb21wbGFpbiBhYm91dCB0aGVzZXMgbWlzc2luZyBwcmltaXRpdmVzLiAqKVxuXG4gIGV4dGVybmFsIGNhbWxfanNfZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gSnMudCA9IFwiY2FtbF9qc19mcm9tX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19ieXRlX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX2J5dGVfc3RyaW5nXCJcblxuICBleHRlcm5hbCBjYW1sX2pzX3RvX3N0cmluZyA6IEpzLnQgLT4gc3RyaW5nID0gXCJjYW1sX2pzX3RvX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X29mX2pzX2FycmF5IDogJ2EgSnMuanNfYXJyYXkgLT4gJ2EgbGlzdCA9IFwiY2FtbF9saXN0X29mX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCBjYW1sX2xpc3RfdG9fanNfYXJyYXkgOiAnYSBsaXN0IC0+ICdhIEpzLmpzX2FycmF5ID0gXCJjYW1sX2xpc3RfdG9fanNfYXJyYXlcIlxuXG4gIGV4dGVybmFsIHZhcmlhYmxlIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX2pzX3ZhclwiXG5lbmRcblxubW9kdWxlIFR5cGVkX2FycmF5ID0gc3RydWN0XG4gIHR5cGUgKCdhLCAnYikgdHlwZWRBcnJheSA9IEpzLnRcblxuICB0eXBlIGFycmF5QnVmZmVyID0gSnMudFxuXG4gIHR5cGUgdWludDhBcnJheSA9IEpzLnRcblxuICBleHRlcm5hbCBraW5kIDogKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiKSBCaWdhcnJheS5raW5kXG4gICAgPSBcImNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgZnJvbV9nZW5hcnJheSA6XG4gICAgKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnQgLT4gKCdhLCAnYikgdHlwZWRBcnJheVxuICAgID0gXCJjYW1sX2JhX3RvX3R5cGVkX2FycmF5XCJcblxuICBleHRlcm5hbCB0b19nZW5hcnJheSA6XG4gICAgKCdhLCAnYikgdHlwZWRBcnJheSAtPiAoJ2EsICdiLCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuR2VuYXJyYXkudFxuICAgID0gXCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXlcIlxuXG4gIG1vZHVsZSBCaWdzdHJpbmcgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSAoY2hhciwgQmlnYXJyYXkuaW50OF91bnNpZ25lZF9lbHQsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5BcnJheTEudFxuXG4gICAgZXh0ZXJuYWwgdG9fYXJyYXlCdWZmZXIgOiB0IC0+IGFycmF5QnVmZmVyID0gXCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIHRvX3VpbnQ4QXJyYXkgOiB0IC0+IHVpbnQ4QXJyYXkgPSBcImJpZ3N0cmluZ190b190eXBlZF9hcnJheVwiXG5cbiAgICBleHRlcm5hbCBvZl9hcnJheUJ1ZmZlciA6IGFycmF5QnVmZmVyIC0+IHQgPSBcImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXJcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gdCA9IFwiYmlnc3RyaW5nX29mX3R5cGVkX2FycmF5XCJcbiAgZW5kXG5cbiAgZXh0ZXJuYWwgb2ZfdWludDhBcnJheSA6IHVpbnQ4QXJyYXkgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9hcnJheVwiXG5lbmRcblxubW9kdWxlIEludDY0ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZV9pbnQ2NF9sb19taV9oaSA6IGludCAtPiBpbnQgLT4gaW50IC0+IEludDY0LnRcbiAgICA9IFwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcIlxuZW5kXG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxubW9kdWxlIEEgPSBBdHRyc1xuXG50eXBlICdhIHZhbGlkYXRpb24gPSBPayBvZiAnYSB8IEVycm9yIG9mIHN0cmluZyB8IEVtcHR5XG50eXBlIGxhYmVsID0gRWx3ZC50IEVsd2QuY29sXG50eXBlICdhIGRlc2MgPSB7IG5hbWUgOiBzdHJpbmc7IGRlZmF1bHQgOiAnYTsgbGFiZWwgOiBsYWJlbCB9XG5cbigqIEEgZm9ybSBmaWVsZCBpcyBjb21wb3NlZCBvZjpcbiAgIC0gQW4gaHRtbCBpbnB1dCBlbGVtZW50IHdpdGggcG90ZW50aWFsIHZhbGlkYXRpb24gdmlhIGF0dHJpYnV0ZXNcbiAgIC0gQSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHRoYXQgcmVwbGFjZSBvciBjb21wbGV0ZSB0aGUgc3RhbmRhcmQgdmFsaWRhdGlvblxuICAgLSBBIGZ1bmN0aW9uIHRoYXQgcmV0aWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50ICopXG50eXBlICdhIHQgPSB7XG4gIGVsdCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBvcHRpb24gTHdkLnZhcjtcbiAgdmFsaWRhdGUgOiAnYSAtPiAnYSB2YWxpZGF0aW9uO1xufVxuXG5sZXQgZ2V0X3ZhbHVlIHQgPVxuICBsZXQganYgPSBFbC50b19qdiB0IGluXG4gIEp2LmdldCBqdiBcInZhbHVlXCJcblxubGV0IG1ha2VfaGFuZGxlciB+KHZhbHVlIDogSnYudCAtPiAnYSkgfih2YWx1ZV9jaGFuZ2VfZXZlbnQgOiBfIEV2LnR5cGUnKVxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdmFyID0gTHdkLnZhciBkZWZhdWx0X3ZhbHVlIGluXG4gIGxldCBvbl9jaGFuZ2UgPVxuICAgIEVsd2QuaGFuZGxlciB2YWx1ZV9jaGFuZ2VfZXZlbnQgKGZ1biBldiAtPlxuICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgbGV0IHYgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgTHdkLnNldCB2YXIgKFNvbWUgKHZhbHVlIHYpKSlcbiAgaW5cbiAgKG9uX2NoYW5nZSwgdmFyKVxuXG4oKiBUT0RPOiBpdCdzIHByb2JhYmx5IGJldHRlciB0byBzcGxpdCB0aGUgdmFsaWRhdGlvbiBhcHJ0IGZyb20gdGhlIGZpZWxkXG4gICBjcmVhdGlvbi4gVmFsaWRhdGlvbiBtYWtlIG1vcmUgc2Vuc2UgaW4gdGhlIGNhc2Ugb2YgYSBmb3JtLiBUaGVyZSBpcyBhblxuICAgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb24gZm9yIHRoZSB0ZXh0IGlucHV0cyBpbiBgRmllbGRfdGV4dGlucHV0YCB0aGF0IHNob3VsZFxuICAgYmUgdXNlZCBpbnN0ZWFkLiAqKVxubGV0IG1ha2VfaW5wdXQgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldlxuICAgID8ocmVxdWlyZWQgPSBmYWxzZSkgfnZhbHVlX2NoYW5nZV9ldmVudCA/cGF0dGVybiB+dHlwZScgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCB0eXBlJyA9IEF0LnR5cGUnIChKc3RyLnYgdHlwZScpIGluXG4gIGxldCBhdCA9IGBQIHR5cGUnIDo6IGF0IGluXG4gIGxldCBhdCA9XG4gICAgYXQgfD4gQS5hZGRfYm9vbCBBdC5yZXF1aXJlZCByZXF1aXJlZCB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wYXR0ZXJuIHBhdHRlcm5cbiAgaW5cbiAgbGV0IHZhbGlkYXRlID0gT3B0aW9uLnZhbHVlIHZhbGlkYXRlIH5kZWZhdWx0OihmdW4gdiAtPiBPayB2KSBpblxuICBsZXQgb25fY2hhbmdlLCB2YWx1ZSA9XG4gICAgbWFrZV9oYW5kbGVyIH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50IGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IE9wdGlvbi50b19saXN0IGV2IGluXG4gIGxldCBlbHQgPSBFbHdkLmlucHV0ID9kIH5hdCB+ZXYgKCkgaW5cbiAgeyBlbHQ7IHZhbHVlOyB2YWxpZGF0ZSB9XG5cbmxldCB0ZXh0X2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgZGVmYXVsdF92YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgYXRcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS5wbGFjZWhvbGRlciBwbGFjZWhvbGRlclxuICAgIHw+IEEuYWRkX29wdCBBdC5OYW1lLnZhbHVlIGRlZmF1bHRfdmFsdWVcbiAgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZCA/cGF0dGVyblxuICAgIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgfnR5cGUnOlwidGV4dFwiIGRlZmF1bHRfdmFsdWVcblxubGV0IHBhc3N3b3JkX2lucHV0ID92YWxpZGF0ZSA/ZCA/KGF0ID0gW10pID9ldiA/cmVxdWlyZWQgP3BhdHRlcm4gP3BsYWNlaG9sZGVyXG4gICAgX3ZhbHVlID1cbiAgbGV0IGF0ID0gYXQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXIgaW5cbiAgbGV0IHZhbHVlID0gSnYudG9fc3RyaW5nIGluXG4gIG1ha2VfaW5wdXQgfnZhbHVlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYua2V5dXAgP3ZhbGlkYXRlID9kIH5hdCA/ZXYgP3JlcXVpcmVkXG4gICAgP3BhdHRlcm4gfnR5cGUnOlwicGFzc3dvcmRcIiBOb25lXG5cbmxldCBzdWJtaXQgP2QgPyhhdCA9IFtdKSA/ZXYgdGV4dCA9XG4gIGxldCBhdCA9IEEuYWRkIEF0Lk5hbWUudmFsdWUgdGV4dCBhdCBpblxuICAoKiBUT0RPIHRoaXMgc2hvdWxkIGJlIG1vcmUgcHJlY2lzZS4gU3VibWl0IGlucHV0cyBhcmUgZGlmZmVyZW50LiAqKVxuICBtYWtlX2lucHV0IH52YWx1ZTppZ25vcmUgfnZhbHVlX2NoYW5nZV9ldmVudDpFdi5jaGFuZ2UgP2QgfmF0ID9ldlxuICAgIH50eXBlJzpcInN1Ym1pdFwiIE5vbmVcbiIsInR5cGUgdCA9IEp2LnRcblxuZXh0ZXJuYWwgb2ZfanYgOiBKdi50IC0+IHQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCB4IHQgPSBKdi5nZXQgdCBcInhcIiB8PiBKdi50b19pbnRcbmxldCB5IHQgPSBKdi5nZXQgdCBcInlcIiB8PiBKdi50b19pbnRcbmxldCB3aWR0aCB0ID0gSnYuZ2V0IHQgXCJ3aWR0aFwiIHw+IEp2LnRvX2ludFxubGV0IGhlaWdodCB0ID0gSnYuZ2V0IHQgXCJoZWlnaHRcIiB8PiBKdi50b19pbnRcbmxldCB0b3AgdCA9IEp2LmdldCB0IFwidG9wXCIgfD4gSnYudG9faW50XG5sZXQgcmlnaHQgdCA9IEp2LmdldCB0IFwicmlnaHRcIiB8PiBKdi50b19pbnRcbmxldCBib3R0b20gdCA9IEp2LmdldCB0IFwiYm90dG9tXCIgfD4gSnYudG9faW50XG5sZXQgbGVmdCB0ID0gSnYuZ2V0IHQgXCJsZWZ0XCIgfD4gSnYudG9faW50XG4iLCJvcGVuIEJyclxuXG50eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5tb2R1bGUgRW50cnkgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnYudFxuXG4gIGV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG4gIHR5cGUgYm94X3NpemUgPSB7IGJsb2NrX3NpemUgOiBpbnQ7IGlubGluZV9zaXplIDogaW50IH1cblxuICBsZXQgYm94X3NpemVfb2ZfanYganYgPVxuICAgIHtcbiAgICAgIGJsb2NrX3NpemUgPSBKdi5nZXQganYgXCJibG9ja1NpemVcIiB8PiBKdi50b19pbnQ7XG4gICAgICBpbmxpbmVfc2l6ZSA9IEp2LmdldCBqdiBcImlubGluZVNpemVcIiB8PiBKdi50b19pbnQ7XG4gICAgfVxuXG4gIGxldCBib3JkZXJfYm94X3NpemUgdCA9IEp2LmdldCB0IFwiYm9yZGVyQm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IGNvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJjb250ZW50Qm94U2l6ZVwiIHw+IEp2LnRvX2FycmF5IGJveF9zaXplX29mX2p2XG5cbiAgbGV0IGNvbnRlbnRfcmVjdCB0ID0gSnYuZ2V0IHQgXCJjb250ZW50UmVjdFwiIHw+IERvbV9yZWN0X3JlYWRfb25seS5vZl9qdlxuXG4gIGxldCBkZXZpY2VfcGl4ZWxfY29udGVudF9ib3hfc2l6ZSB0ID1cbiAgICBKdi5nZXQgdCBcImRldmljZVBpeGVsQ29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCB0YXJnZXQgdCA9IEp2LmdldCB0IFwidGFyZ2V0XCIgfD4gRWwub2ZfanZcbmVuZFxuXG50eXBlIGJveCA9IENvbnRlbnRfYm94IHwgQm9yZGVyX2JveCB8IERldmljZV9waXhlbF9jb250ZW50X2JveFxuXG5sZXQgc3RyaW5nX29mX2JveCA9IGZ1bmN0aW9uXG4gIHwgQ29udGVudF9ib3ggLT4gXCJjb250ZW50LWJveFwiXG4gIHwgQm9yZGVyX2JveCAtPiBcImJvcmRlci1ib3hcIlxuICB8IERldmljZV9waXhlbF9jb250ZW50X2JveCAtPiBcImRldmljZS1waXhlbC1jb250ZW50LWJveFwiXG5cbmxldCBkaXNjb25uZWN0IHQgPSBpZ25vcmUgQEAgSnYuY2FsbCB0IFwiZGlzY29ubmVjdFwiIFt8fF1cblxubGV0IG9ic2VydmUgdCA/Ym94IHRhcmdldCA9XG4gIGxldCBhcmdzID1cbiAgICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gICAgbWF0Y2ggYm94IHdpdGhcbiAgICB8IE5vbmUgLT4gW3wgdGFyZ2V0IHxdXG4gICAgfCBTb21lIGIgLT5cbiAgICAgICAgbGV0IGJveCA9IEp2Lm9iaiBbfCAoXCJib3hcIiwgSnYub2Zfc3RyaW5nIChzdHJpbmdfb2ZfYm94IGIpKSB8XSBpblxuICAgICAgICBbfCB0YXJnZXQ7IGJveCB8XVxuICBpblxuICBKdi5jYWxsIHQgXCJvYnNlcnZlXCIgYXJncyB8PiBpZ25vcmVcblxubGV0IHVub2JzZXJ2ZSB0IHRhcmdldCA9XG4gIGxldCB0YXJnZXQgPSBFbC50b19qdiB0YXJnZXQgaW5cbiAgaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfCB0YXJnZXQgfF1cblxubGV0IGNyZWF0ZSB+Y2FsbGJhY2sgPVxuICBsZXQgY2FsbGJhY2sgZW50cmllcyBvYnNlcnZlciA9XG4gICAgbGV0IGVudHJpZXMgPSBKdi50b19saXN0IEVudHJ5Lm9mX2p2IGVudHJpZXMgaW5cbiAgICBjYWxsYmFjayBlbnRyaWVzIChvZl9qdiBvYnNlcnZlcilcbiAgaW5cbiAgbGV0IGFyZ3MgPSBbfCBKdi5yZXByIGNhbGxiYWNrIHxdIGluXG4gIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJSZXNpemVPYnNlcnZlclwiKSBhcmdzXG4iLCJvcGVuIEJyclxuXG50eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgb2ZfbmF2aWdhdG9yIG4gPSBKdi5nZXQgKE5hdmlnYXRvci50b19qdiBuKSBcIm1lZGlhU2Vzc2lvblwiXG5cbm1vZHVsZSBNZWRpYV9tZXRhZGF0YSA9IHN0cnVjdFxuICB0eXBlIGltZyA9IHsgc3JjIDogc3RyaW5nOyBzaXplcyA6IHN0cmluZzsgdHlwZScgOiBzdHJpbmcgfVxuXG4gIGxldCBpbWdfdG9fanYgaW1nID1cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInNyY1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNyYyk7XG4gICAgICAgIChcInNpemVzXCIsIEp2Lm9mX3N0cmluZyBpbWcuc2l6ZXMpO1xuICAgICAgICAoXCJ0eXBlXCIsIEp2Lm9mX3N0cmluZyBpbWcudHlwZScpO1xuICAgICAgfF1cblxuICBsZXQgbWF5YmVfc3RyaW5nIGp2IHByb3AgPVxuICAgIG1hdGNoIEp2LmZpbmQganYgcHJvcCB3aXRoIE5vbmUgLT4gXCJ1bmtub3duXCIgfCBTb21lIGp2IC0+IEp2LnRvX3N0cmluZyBqdlxuXG4gIGxldCBpbWdfb2ZfanYganYgPVxuICAgIGxldCBzcmMgPSBtYXliZV9zdHJpbmcganYgXCJzcmNcIiBpblxuICAgIGxldCBzaXplcyA9IG1heWJlX3N0cmluZyBqdiBcInNpemVzXCIgaW5cbiAgICBsZXQgdHlwZScgPSBtYXliZV9zdHJpbmcganYgXCJ0eXBlXCIgaW5cbiAgICB7IHNyYzsgc2l6ZXM7IHR5cGUnIH1cblxuICB0eXBlIHQgPSB7XG4gICAgdGl0bGUgOiBzdHJpbmc7XG4gICAgYXJ0aXN0IDogc3RyaW5nO1xuICAgIGFsYnVtIDogc3RyaW5nO1xuICAgIGFydHdvcmsgOiBpbWcgbGlzdDtcbiAgfVxuXG4gIGxldCB0b19qdiB0ID1cbiAgICBsZXQgYXJ0d29yayA9IEp2Lm9mX2xpc3QgaW1nX3RvX2p2IHQuYXJ0d29yayBpblxuICAgIEp2Lm9ialxuICAgICAgW3xcbiAgICAgICAgKFwidGl0bGVcIiwgSnYub2Zfc3RyaW5nIHQudGl0bGUpO1xuICAgICAgICAoXCJhcnRpc3RcIiwgSnYub2Zfc3RyaW5nIHQuYXJ0aXN0KTtcbiAgICAgICAgKFwiYWxidW1cIiwgSnYub2Zfc3RyaW5nIHQuYWxidW0pO1xuICAgICAgICAoXCJhcnR3b3JrXCIsIGFydHdvcmspO1xuICAgICAgfF1cblxuICBsZXQgb2ZfanYganYgPVxuICAgIGxldCB0aXRsZSA9IG1heWJlX3N0cmluZyBqdiBcInRpdGxlXCIgaW5cbiAgICBsZXQgYXJ0aXN0ID0gbWF5YmVfc3RyaW5nIGp2IFwiYXJ0aXN0XCIgaW5cbiAgICBsZXQgYWxidW0gPSBtYXliZV9zdHJpbmcganYgXCJhbGJ1bVwiIGluXG4gICAgbGV0IGFydHdvcmsgPVxuICAgICAgbWF0Y2ggSnYuZmluZCBqdiBcImFydHdvcmtcIiB3aXRoXG4gICAgICB8IE5vbmUgLT4gW11cbiAgICAgIHwgU29tZSBqdiAtPiBKdi50b19saXN0IGltZ19vZl9qdiBqdlxuICAgIGluXG4gICAgeyB0aXRsZTsgYXJ0aXN0OyBhbGJ1bTsgYXJ0d29yayB9XG5lbmRcblxubGV0IG1ldGFkYXRhIHQgPSBKdi5nZXQgdCBcIm1ldGFkYXRhXCIgfD4gSnYudG9fb3B0aW9uIE1lZGlhX21ldGFkYXRhLm9mX2p2XG5cbmxldCBzZXRfbWV0YWRhdGEgdCB2ID1cbiAgQ29uc29sZS5sb2cgWyBcIlNldCBtZXRhZGF0YVwiOyBNZWRpYV9tZXRhZGF0YS50b19qdiB2IF07XG4gIGxldCBtZXRhZGF0YSA9XG4gICAgSnYubmV3JyAoSnYuZ2V0IEp2Lmdsb2JhbCBcIk1lZGlhTWV0YWRhdGFcIikgW3wgTWVkaWFfbWV0YWRhdGEudG9fanYgdiB8XVxuICBpblxuICBKdi5zZXQgdCBcIm1ldGFkYXRhXCIgbWV0YWRhdGFcblxubW9kdWxlIEFjdGlvbiA9IHN0cnVjdFxuICB0eXBlIHQgPSBKc3RyLnRcblxuICBsZXQgbmV4dF90cmFjayA9IEpzdHIudiBcIm5leHR0cmFja1wiXG4gIGxldCBwcmV2aW91c190cmFjayA9IEpzdHIudiBcInByZXZpb3VzdHJhY2tcIlxuZW5kXG5cbmxldCBzZXRfYWN0aW9uX2hhbmRsZXIgdCBhY3Rpb24gZiA9XG4gIGxldCBjYWxsYmFjayA9IEp2LmNhbGxiYWNrIH5hcml0eToxIGYgaW5cbiAgSnYuY2FsbCB0IFwic2V0QWN0aW9uSGFuZGxlclwiIFt8IEp2Lm9mX2pzdHIgYWN0aW9uOyBjYWxsYmFjayB8XSB8PiBpZ25vcmVcblxubGV0IHNldF9wb3NpdGlvbl9zdGF0ZSA/ZHVyYXRpb24gP3BsYXliYWNrX3JhdGUgP3Bvc2l0aW9uIHQgPVxuICBsZXQgbWF5YmVfZmxvYXQgbmFtZSB2ID0gT3B0aW9uLm1hcCAoZnVuIHYgLT4gKG5hbWUsIEp2Lm9mX2Zsb2F0IHYpKSB2IGluXG4gIGxldCBkdXJhdGlvbiA9IG1heWJlX2Zsb2F0IFwiZHVyYXRpb25cIiBkdXJhdGlvbiBpblxuICBsZXQgcGxheWJhY2tfcmF0ZSA9IG1heWJlX2Zsb2F0IFwicGxheWJhY2tSYXRlXCIgcGxheWJhY2tfcmF0ZSBpblxuICBsZXQgcG9zaXRpb24gPSBtYXliZV9mbG9hdCBcInBvc2l0aW9uXCIgcG9zaXRpb24gaW5cbiAgbGV0IGFyZ3MgPVxuICAgIGxldCBzdGF0ZV9kaWN0ID1cbiAgICAgIExpc3QuZmlsdGVyX21hcCBGdW4uaWQgWyBkdXJhdGlvbjsgcGxheWJhY2tfcmF0ZTsgcG9zaXRpb24gXVxuICAgIGluXG4gICAgbWF0Y2ggc3RhdGVfZGljdCB3aXRoIFtdIC0+IFt8fF0gfCBzZCAtPiBbfCBKdi5vYmogKEFycmF5Lm9mX2xpc3Qgc2QpIHxdXG4gIGluXG4gIEp2LmNhbGwgdCBcInNldFBvc2l0aW9uU3RhdGVcIiBhcmdzIHw+IGlnbm9yZVxuIiwibW9kdWxlIEp2ID0gSnZcbm1vZHVsZSBKc3RyID0gSnN0clxuXG5tb2R1bGUgQnJyID0gc3RydWN0XG4gIGluY2x1ZGUgQnJyXG5cbiAgbW9kdWxlIEVsID0gc3RydWN0XG4gICAgbW9kdWxlIFMgPSBTdHlsZVxuICAgIGluY2x1ZGUgRWxcbiAgICBtb2R1bGUgU3R5bGUgPSBTXG4gIGVuZFxuXG4gIG1vZHVsZSBFdiA9IHN0cnVjdFxuICAgIGluY2x1ZGUgRXZcblxuICAgIG1vZHVsZSBTdWJtaXQgPSBzdHJ1Y3RcbiAgICAgIHR5cGUgJ2EgZXZlbnQgPSAnYSB0XG4gICAgICB0eXBlIHQgPSBKdi50XG4gICAgZW5kXG5cbiAgICBsZXQgc3VibWl0ID0gVHlwZS52b2lkIChKc3RyLnYgXCJzdWJtaXRcIilcbiAgZW5kXG5cbiAgbW9kdWxlIEF0ID0gc3RydWN0XG4gICAgaW5jbHVkZSBBdFxuXG4gICAgbW9kdWxlIE5hbWUgPSBzdHJ1Y3RcbiAgICAgIGluY2x1ZGUgTmFtZVxuXG4gICAgICBsZXQgcGF0dGVybiA9IEpzdHIudiBcInBhdHRlcm5cIlxuICAgIGVuZFxuXG4gICAgbGV0IGRyYWdnYWJsZSBzID0gdiBOYW1lLmRyYWdnYWJsZSBzXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBCcnJfaW8gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBCcnJfaW9cbiAgbW9kdWxlIEluZGV4ZWRfZGIgPSBJbmRleGVkX2RiXG5cbiAgbW9kdWxlIE1lZGlhID0gc3RydWN0XG4gICAgaW5jbHVkZSBNZWRpYVxuICAgIG1vZHVsZSBTZXNzaW9uID0gTWVkaWFfc2Vzc2lvblxuICBlbmRcblxuICBtb2R1bGUgU3RvcmFnZSA9IHN0cnVjdFxuICAgIGluY2x1ZGUgU3RvcmFnZVxuXG4gICAgbW9kdWxlIE1hbmFnZXIgPSBzdHJ1Y3RcbiAgICAgICgqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TdG9yYWdlTWFuYWdlciAqKVxuICAgICAgdHlwZSB0ID0gSnYudFxuXG4gICAgICBpbmNsdWRlIChKdi5JZCA6IEp2LkNPTlYgd2l0aCB0eXBlIHQgOj0gdClcblxuICAgICAgbGV0IHBlcnNpc3QgdCA9IEp2LmNhbGwgdCBcInBlcnNpc3RcIiBbfHxdIHw+IEZ1dC5vZl9wcm9taXNlIH5vazpKdi50b19ib29sXG4gICAgZW5kXG5cbiAgICBsZXQgbWFuYWdlciAobiA6IEJyci5OYXZpZ2F0b3IudCkgPVxuICAgICAgSnYuZ2V0IChCcnIuTmF2aWdhdG9yLnRvX2p2IG4pIFwic3RvcmFnZVwiIHw+IE1hbmFnZXIub2ZfanZcbiAgZW5kXG5lbmRcblxubW9kdWxlIEJycl93ZWJ3b3JrZXJzID0gQnJyX3dlYndvcmtlcnNcbm1vZHVsZSBCcnJfd2VibWlkaSA9IEJycl93ZWJtaWRpXG5tb2R1bGUgQnJyX3dlYmdwdSA9IEJycl93ZWJncHVcbm1vZHVsZSBCcnJfd2ViY3J5cHRvID0gQnJyX3dlYmNyeXB0b1xubW9kdWxlIEJycl93ZWJhdWRpbyA9IEJycl93ZWJhdWRpb1xubW9kdWxlIEJycl9jYW52YXMgPSBCcnJfY2FudmFzXG5tb2R1bGUgRnV0ID0gRnV0XG5tb2R1bGUgSW50ZXJzZWN0aW9uX29ic2VydmVyID0gSW50ZXJzZWN0aW9uX29ic2VydmVyXG5tb2R1bGUgTXV0YXRpb25fb2JzZXJ2ZXIgPSBNdXRhdGlvbl9vYnNlcnZlclxubW9kdWxlIFJlc2l6ZV9vYnNlcnZlciA9IFJlc2l6ZV9vYnNlcnZlclxubW9kdWxlIERvbV9yZWN0X3JlYWRfb25seSA9IERvbV9yZWN0X3JlYWRfb25seVxuIiwiKCoqIENyZWF0ZS1vbmx5IHZlcnNpb24gb2YgW09iai50XSAqKVxubW9kdWxlIEFueSA6IHNpZ1xuICB0eXBlIHRcbiAgdmFsIGFueSA6ICdhIC0+IHRcbmVuZCA9IHN0cnVjdFxuICB0eXBlIHQgPSBPYmoudFxuICBsZXQgYW55ID0gT2JqLnJlcHJcbmVuZFxuXG50eXBlICdhIGV2YWwgPVxuICB8IEV2YWxfbm9uZVxuICB8IEV2YWxfcHJvZ3Jlc3NcbiAgfCBFdmFsX3NvbWUgb2YgJ2FcblxudHlwZSAnYSB0XyA9XG4gIHwgUHVyZSBvZiAnYVxuICB8IE9wZXJhdG9yIDoge1xuICAgICAgbXV0YWJsZSB2YWx1ZSA6ICdhIGV2YWw7ICgqIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZSA6IHRyYWNlOyAoKiBsaXN0IG9mIHBhcmVudHMgdGhpcyBjYW4gaW52YWxpZGF0ZSAqKVxuICAgICAgbXV0YWJsZSB0cmFjZV9pZHggOiB0cmFjZV9pZHg7ICgqIGxpc3Qgb2YgZGlyZWN0IGNoaWxkcmVuIHRoYXQgY2FuIGludmFsaWRhdGUgdGhpcyAqKVxuICAgICAgZGVzYzogJ2EgZGVzYztcbiAgICB9IC0+ICdhIHRfXG4gIHwgUm9vdCA6IHtcbiAgICAgIG11dGFibGUgdmFsdWUgOiAnYSBldmFsOyAoKiBjYWNoZWQgdmFsdWUgKilcbiAgICAgIG11dGFibGUgdHJhY2VfaWR4IDogdHJhY2VfaWR4OyAoKiBsaXN0IG9mIGRpcmVjdCBjaGlsZHJlbiB0aGF0IGNhbiBpbnZhbGlkYXRlIHRoaXMgKilcbiAgICAgIG11dGFibGUgb25faW52YWxpZGF0ZSA6ICdhIC0+IHVuaXQ7XG4gICAgICBtdXRhYmxlIGFjcXVpcmVkIDogYm9vbDtcbiAgICAgIGNoaWxkIDogJ2EgdF87XG4gICAgfSAtPiAnYSB0X1xuXG5hbmQgXyBkZXNjID1cbiAgfCBNYXAgIDogJ2EgdF8gKiAoJ2EgLT4gJ2IpIC0+ICdiIGRlc2NcbiAgfCBNYXAyIDogJ2EgdF8gKiAnYiB0XyAqICgnYSAtPiAnYiAtPiAnYykgLT4gJ2MgZGVzY1xuICB8IFBhaXIgOiAnYSB0XyAqICdiIHRfIC0+ICgnYSAqICdiKSBkZXNjXG4gIHwgQXBwICA6ICgnYSAtPiAnYikgdF8gKiAnYSB0XyAtPiAnYiBkZXNjXG4gIHwgSm9pbiA6IHsgY2hpbGQgOiAnYSB0XyB0XzsgbXV0YWJsZSBpbnRlcm1lZGlhdGUgOiAnYSB0XyBvcHRpb24gfSAtPiAnYSBkZXNjXG4gIHwgVmFyICA6IHsgbXV0YWJsZSBiaW5kaW5nIDogJ2EgfSAtPiAnYSBkZXNjXG4gIHwgUHJpbSA6IHsgYWNxdWlyZSA6ICdhIHQgLT4gJ2E7XG4gICAgICAgICAgICAgcmVsZWFzZSA6ICdhIHQgLT4gJ2EgLT4gdW5pdCB9IC0+ICdhIGRlc2NcbiAgfCBGaXggOiB7IGRvYyA6ICdhIHRfOyB3cnQgOiBfIHRfIH0gLT4gJ2EgZGVzY1xuXG4oKiBhIHNldCBvZiAoYWN0aXZlKSBwYXJlbnRzIGZvciBhIFsnYSB0XSwgdXNlZCBkdXJpbmcgaW52YWxpZGF0aW9uICopXG5hbmQgdHJhY2UgPVxuICB8IFQwXG4gIHwgVDEgOiBfIHRfIC0+IHRyYWNlXG4gIHwgVDIgOiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFQzIDogXyB0XyAqIF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVDQgOiBfIHRfICogXyB0XyAqIF8gdF8gKiBfIHRfIC0+IHRyYWNlXG4gIHwgVG4gOiB7IG11dGFibGUgYWN0aXZlIDogaW50OyBtdXRhYmxlIGNvdW50IDogaW50O1xuICAgICAgICAgICBtdXRhYmxlIGVudHJpZXMgOiBBbnkudCB0XyBhcnJheSB9IC0+IHRyYWNlXG5cbigqIGEgc2V0IG9mIGRpcmVjdCBjaGlsZHJlbiBmb3IgYSBjb21wb3NpdGUgZG9jdW1lbnQgKilcbmFuZCB0cmFjZV9pZHggPVxuICB8IEkwXG4gIHwgSTEgOiB7IG11dGFibGUgaWR4IDogaW50IDtcbiAgICAgICAgICAgb2JqIDogJ2EgdF87XG4gICAgICAgICAgIG11dGFibGUgbmV4dCA6IHRyYWNlX2lkeCB9IC0+IHRyYWNlX2lkeFxuXG4oKiBUaGUgdHlwZSBzeXN0ZW0gY2Fubm90IHNlZSB0aGF0IHQgaXMgY292YXJpYW50IGluIGl0cyBwYXJhbWV0ZXIuXG4gICBVc2UgdGhlIEZvcmNlIHRvIGNvbnZpbmNlIGl0LiAqKVxuYW5kICsnYSB0XG5leHRlcm5hbCBpbmogOiAnYSB0XyAtPiAnYSB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgcHJqIDogJ2EgdCAtPiAnYSB0XyA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHByajIgOiAnYSB0IHQgLT4gJ2EgdF8gdF8gPSBcIiVpZGVudGl0eVwiXG5cbigqIEJhc2ljIGNvbWJpbmF0b3JzICopXG5sZXQgcmV0dXJuIHggPSBpbmogKFB1cmUgeClcbmxldCBwdXJlIHggPSBpbmogKFB1cmUgeClcblxubGV0IGlzX3B1cmUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIHggLT4gU29tZSB4XG4gIHwgXyAtPiBOb25lXG5cbmxldCBkdW1teSA9IFB1cmUgKEFueS5hbnkgKCkpXG5cbmxldCBvcGVyYXRvciBkZXNjID1cbiAgT3BlcmF0b3IgeyB2YWx1ZSA9IEV2YWxfbm9uZTsgdHJhY2UgPSBUMDsgZGVzYzsgdHJhY2VfaWR4ID0gSTAgfVxuXG5sZXQgbWFwIHggfmYgPSBpbmogKFxuICAgIG1hdGNoIHByaiB4IHdpdGhcbiAgICB8IFB1cmUgdnggLT4gUHVyZSAoZiB2eClcbiAgICB8IHggLT4gb3BlcmF0b3IgKE1hcCAoeCwgZikpXG4gIClcblxubGV0IG1hcDIgeCB5IH5mID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCwgcHJqIHkgd2l0aFxuICAgIHwgUHVyZSB2eCwgUHVyZSB2eSAtPiBQdXJlIChmIHZ4IHZ5KVxuICAgIHwgeCwgeSAtPiBvcGVyYXRvciAoTWFwMiAoeCwgeSwgZikpXG4gIClcblxubGV0IHBhaXIgeCB5ID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCwgcHJqIHkgd2l0aFxuICAgIHwgUHVyZSB2eCwgUHVyZSB2eSAtPiBQdXJlICh2eCwgdnkpXG4gICAgfCB4LCB5IC0+IG9wZXJhdG9yIChQYWlyICh4LCB5KSlcbiAgKVxuXG5sZXQgYXBwIGYgeCA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIGYsIHByaiB4IHdpdGhcbiAgICB8IFB1cmUgdmYsIFB1cmUgdnggLT4gUHVyZSAodmYgdngpXG4gICAgfCBmLCB4IC0+IG9wZXJhdG9yIChBcHAgKGYsIHgpKVxuICApXG5cbmxldCBqb2luIGNoaWxkID0gaW5qIChcbiAgICBtYXRjaCBwcmoyIGNoaWxkIHdpdGhcbiAgICB8IFB1cmUgdiAtPiB2XG4gICAgfCBjaGlsZCAtPiBvcGVyYXRvciAoSm9pbiB7IGNoaWxkOyBpbnRlcm1lZGlhdGUgPSBOb25lIH0pXG4gIClcblxubGV0IGJpbmQgeCB+ZiA9IGpvaW4gKG1hcCB+ZiB4KVxuXG4oKiBNYW5hZ2VtZW50IG9mIHRyYWNlIGluZGljZXMgKilcblxubGV0IGFkZHIgb2Mgb2JqID1cbiAgUHJpbnRmLmZwcmludGYgb2MgXCIweCUwOHhcIiAoT2JqLm1hZ2ljIG9iaiA6IGludClcblxuZXh0ZXJuYWwgdF9lcXVhbCA6IF8gdF8gLT4gXyB0XyAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgb2JqX3QgOiAnYSB0XyAtPiBBbnkudCB0XyA9IFwiJWlkZW50aXR5XCJcblxubGV0IHJlYyBkdW1wX3RyYWNlIDogdHlwZSBhLiBhIHRfIC0+IHVuaXQgPVxuICBmdW4gb2JqIC0+IG1hdGNoIG9iaiB3aXRoXG4gIHwgUHVyZSBfIC0+IFByaW50Zi5lcHJpbnRmIFwiJWE6IFB1cmUgX1xcbiUhXCIgYWRkciBvYmpcbiAgfCBPcGVyYXRvciB0IC0+XG4gICAgUHJpbnRmLmVwcmludGYgXCIlYTogT3BlcmF0b3IgXyAtPiAlYVxcbiUhXCIgYWRkciBvYmogZHVtcF90cmFjZV9hdXggdC50cmFjZTtcbiAgICBiZWdpbiBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT4gKClcbiAgICAgIHwgVDEgYSAtPiBkdW1wX3RyYWNlIGFcbiAgICAgIHwgVDIgKGEsYikgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGJcbiAgICAgIHwgVDMgKGEsYixjKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYjsgZHVtcF90cmFjZSBjXG4gICAgICB8IFQ0IChhLGIsYyxkKSAtPiBkdW1wX3RyYWNlIGE7IGR1bXBfdHJhY2UgYjsgZHVtcF90cmFjZSBjOyBkdW1wX3RyYWNlIGRcbiAgICAgIHwgVG4gdCAtPiBBcnJheS5pdGVyIGR1bXBfdHJhY2UgdC5lbnRyaWVzXG4gICAgZW5kXG4gIHwgUm9vdCBfIC0+IFByaW50Zi5lcHJpbnRmIFwiJWE6IFJvb3QgX1xcbiUhXCIgYWRkciBvYmpcblxuYW5kIGR1bXBfdHJhY2VfYXV4IG9jID0gZnVuY3Rpb25cbiAgfCBUMCAtPiBQcmludGYuZnByaW50ZiBvYyBcIlQwXCJcbiAgfCBUMSBhIC0+IFByaW50Zi5mcHJpbnRmIG9jIFwiVDEgJWFcIiBhZGRyIGFcbiAgfCBUMiAoYSxiKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDIgKCVhLCAlYSlcIiBhZGRyIGEgYWRkciBiXG4gIHwgVDMgKGEsYixjKSAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVDMgKCVhLCAlYSwgJWEpXCIgYWRkciBhIGFkZHIgYiBhZGRyIGNcbiAgfCBUNCAoYSxiLGMsZCkgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQ0ICglYSwgJWEsICVhLCAlYSlcIiBhZGRyIGEgYWRkciBiIGFkZHIgYyBhZGRyIGRcbiAgfCBUbiB0IC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUbiB7YWN0aXZlID0gJWQ7IGNvdW50ID0gJWQ7IGVudHJpZXMgPSBcIlxuICAgICAgdC5hY3RpdmUgdC5jb3VudDtcbiAgICBBcnJheS5pdGVyIChQcmludGYuZnByaW50ZiBvYyBcIiglYSlcIiBhZGRyKSB0LmVudHJpZXM7XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJ9XCJcblxubGV0IGR1bXBfdHJhY2UgeCA9IGR1bXBfdHJhY2UgKG9ial90IChwcmogeCkpXG5cbmxldCBhZGRfaWR4IG9iaiBpZHggPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IHQnLnRyYWNlX2lkeCA8LSBJMSB7IGlkeDsgb2JqOyBuZXh0ID0gdCcudHJhY2VfaWR4IH1cbiAgfCBPcGVyYXRvciB0JyAtPiB0Jy50cmFjZV9pZHggPC0gSTEgeyBpZHg7IG9iajsgbmV4dCA9IHQnLnRyYWNlX2lkeCB9XG5cbmxldCByZWMgcmVtX2lkeF9yZWMgb2JqID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IGFzIHNlbGYgLT5cbiAgICBpZiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gKHQuaWR4LCB0Lm5leHQpXG4gICAgZWxzZSAoXG4gICAgICBsZXQgaWR4LCByZXN1bHQgPSByZW1faWR4X3JlYyBvYmogdC5uZXh0IGluXG4gICAgICB0Lm5leHQgPC0gcmVzdWx0O1xuICAgICAgKGlkeCwgc2VsZilcbiAgICApXG5cbigqIHJlbW92ZSBbb2JqXSBmcm9tIHRoZSBsd2QncyB0cmFjZS4gKilcbmxldCByZW1faWR4IG9iaiA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT5cbiAgICBsZXQgaWR4LCB0cmFjZV9pZHggPSByZW1faWR4X3JlYyBvYmogdCcudHJhY2VfaWR4IGluXG4gICAgdCcudHJhY2VfaWR4IDwtIHRyYWNlX2lkeDsgaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT5cbiAgICBsZXQgaWR4LCB0cmFjZV9pZHggPSByZW1faWR4X3JlYyBvYmogdCcudHJhY2VfaWR4IGluXG4gICAgdCcudHJhY2VfaWR4IDwtIHRyYWNlX2lkeDsgaWR4XG5cbigqIG1vdmUgW29ial0gZnJvbSBvbGQgaW5kZXggdG8gbmV3IGluZGV4LiAqKVxubGV0IHJlYyBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCAtPlxuICAgIGlmIHQuaWR4ID0gb2xkaWR4ICYmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiB0LmlkeCA8LSBuZXdpZHhcbiAgICBlbHNlIG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQubmV4dFxuXG5sZXQgbW92X2lkeCBvYmogb2xkaWR4IG5ld2lkeCA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdCcudHJhY2VfaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT4gbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggdCcudHJhY2VfaWR4XG5cbmxldCByZWMgZ2V0X2lkeF9yZWMgb2JqID0gZnVuY3Rpb25cbiAgfCBJMCAtPiBhc3NlcnQgZmFsc2VcbiAgfCBJMSB0IC0+XG4gICAgaWYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuIHQuaWR4XG4gICAgZWxzZSBnZXRfaWR4X3JlYyBvYmogdC5uZXh0XG5cbigqIGZpbmQgaW5kZXggb2YgW29ial0gaW4gdGhlIGdpdmVuIGx3ZCAqKVxubGV0IGdldF9pZHggb2JqID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiBnZXRfaWR4X3JlYyBvYmogdCcudHJhY2VfaWR4XG4gIHwgT3BlcmF0b3IgdCcgLT4gZ2V0X2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeFxuXG50eXBlIHN0YXR1cyA9XG4gIHwgTmV1dHJhbFxuICB8IFNhZmVcbiAgfCBVbnNhZmVcblxudHlwZSBzZW5zaXRpdml0eSA9XG4gIHwgU3Ryb25nXG4gIHwgRnJhZ2lsZVxuXG4oKiBQcm9wYWdhdGluZyBpbnZhbGlkYXRpb24gcmVjdXJzaXZlbHkuXG4gICBFYWNoIGRvY3VtZW50IGlzIGludmFsaWRhdGVkIGF0IG1vc3Qgb25jZSxcbiAgIGFuZCBvbmx5IGlmIGl0IGhhcyBbdC52YWx1ZSA9IFNvbWUgX10uICopXG5sZXQgcmVjIGludmFsaWRhdGVfbm9kZSA6IHR5cGUgYSAuIHN0YXR1cyByZWYgLT4gc2Vuc2l0aXZpdHkgLT4gYSB0XyAtPiB1bml0ID1cbiAgZnVuIHN0YXR1cyBzZW5zaXRpdml0eSBub2RlIC0+XG4gIG1hdGNoIG5vZGUsIHNlbnNpdGl2aXR5IHdpdGhcbiAgfCBQdXJlIF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCAoe3ZhbHVlOyBffSBhcyB0KSwgXyAtPlxuICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgIGJlZ2luIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9ub25lIC0+ICgpXG4gICAgICB8IEV2YWxfcHJvZ3Jlc3MgLT5cbiAgICAgICAgc3RhdHVzIDo9IFVuc2FmZVxuICAgICAgfCBFdmFsX3NvbWUgeCAtPlxuICAgICAgICBiZWdpbiBtYXRjaCBzZW5zaXRpdml0eSB3aXRoXG4gICAgICAgICAgfCBTdHJvbmcgLT4gKClcbiAgICAgICAgICB8IEZyYWdpbGUgLT4gc3RhdHVzIDo9IFVuc2FmZVxuICAgICAgICBlbmQ7XG4gICAgICAgIHQub25faW52YWxpZGF0ZSB4ICgqIHVzZXIgY2FsbGJhY2sgdGhhdCB7aSBvYnNlcnZlc30gdGhpcyByb290LiAqKVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX30sIEZyYWdpbGUgLT5cbiAgICBiZWdpbiBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICAgIHwgVW5zYWZlIHwgU2FmZSAtPiAoKVxuICAgICAgfCBfIC0+IHN0YXR1cyA6PSBTYWZlXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffSwgXyAtPiAoKVxuICB8IE9wZXJhdG9yIHtkZXNjID0gRml4IHt3cnQgPSBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99OyBffTsgX30sIEZyYWdpbGUgLT5cbiAgICBiZWdpbiBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICAgIHwgU2FmZSB8IFVuc2FmZSAtPiAoKVxuICAgICAgfCBOZXV0cmFsIC0+IHN0YXR1cyA6PSBTYWZlXG4gICAgZW5kXG4gIHwgT3BlcmF0b3Ige2Rlc2MgPSBGaXgge3dydCA9IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfc29tZSBfOyBffTsgX307IF99LCBGcmFnaWxlIC0+XG4gICAgKClcbiAgfCBPcGVyYXRvciB0LCBfIC0+XG4gICAgbGV0IHNlbnNpdGl2aXR5ID1cbiAgICAgIG1hdGNoIHQudmFsdWUgd2l0aCBFdmFsX3Byb2dyZXNzIC0+IEZyYWdpbGUgfCBfIC0+IHNlbnNpdGl2aXR5XG4gICAgaW5cbiAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICAoKiBpbnZhbGlkYXRlIHBhcmVudHMgcmVjdXJzaXZlbHkgKilcbiAgICBpbnZhbGlkYXRlX3RyYWNlIHN0YXR1cyBzZW5zaXRpdml0eSB0LnRyYWNlXG5cbigqIGludmFsaWRhdGUgcmVjdXJzaXZlbHkgZG9jdW1lbnRzIGluIHRoZSBnaXZlbiB0cmFjZSAqKVxuYW5kIGludmFsaWRhdGVfdHJhY2Ugc3RhdHVzIHNlbnNpdGl2aXR5ID0gZnVuY3Rpb25cbiAgfCBUMCAtPiAoKVxuICB8IFQxIHggLT4gaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4XG4gIHwgVDIgKHgsIHkpIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeVxuICB8IFQzICh4LCB5LCB6KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHk7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB6XG4gIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB4O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeTtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHo7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB3XG4gIHwgVG4gdCAtPlxuICAgIGxldCBhY3RpdmUgPSB0LmFjdGl2ZSBpblxuICAgIHQuYWN0aXZlIDwtIDA7XG4gICAgZm9yIGkgPSAwIHRvIGFjdGl2ZSAtIDEgZG9cbiAgICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgdC5lbnRyaWVzLihpKVxuICAgIGRvbmVcblxubGV0IGRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciAoKSA9XG4gIGxldCBjYWxsc3RhY2sgPSBQcmludGV4Yy5nZXRfY2FsbHN0YWNrIDIwIGluXG4gIFByaW50Zi5mcHJpbnRmIHN0ZGVyclxuICAgIFwiTHdkOiB1bnNhZmUgbXV0YXRpb24gKHZhcmlhYmxlIGludmFsaWRhdGVkIGR1cmluZyBldmFsdWF0aW9uKSBhdFxcbiVhXCJcbiAgICBQcmludGV4Yy5wcmludF9yYXdfYmFja3RyYWNlIGNhbGxzdGFja1xuXG5sZXQgdW5zYWZlX211dGF0aW9uX2xvZ2dlciA9IHJlZiBkZWZhdWx0X3Vuc2FmZV9tdXRhdGlvbl9sb2dnZXJcblxubGV0IGRvX2ludmFsaWRhdGUgc2Vuc2l0aXZpdHkgbm9kZSA9XG4gIGxldCBzdGF0dXMgPSByZWYgTmV1dHJhbCBpblxuICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IG5vZGU7XG4gIGxldCB1bnNhZmUgPVxuICAgIG1hdGNoICFzdGF0dXMgd2l0aFxuICAgIHwgTmV1dHJhbCB8IFNhZmUgLT4gZmFsc2VcbiAgICB8IFVuc2FmZSAtPiB0cnVlXG4gIGluXG4gIGlmIHVuc2FmZSB0aGVuICF1bnNhZmVfbXV0YXRpb25fbG9nZ2VyICgpXG5cbigqIFZhcmlhYmxlcyAqKVxudHlwZSAnYSB2YXIgPSAnYSB0X1xubGV0IHZhciB4ID0gb3BlcmF0b3IgKFZhciB7YmluZGluZyA9IHh9KVxubGV0IGdldCB4ID0gaW5qIHhcblxubGV0IHNldCAodng6XyB2YXIpIHggOiB1bml0ID1cbiAgbWF0Y2ggdnggd2l0aFxuICB8IE9wZXJhdG9yICh7ZGVzYyA9IFZhciB2OyBffSkgLT5cbiAgICAoKiBzZXQgdGhlIHZhcmlhYmxlLCBhbmQgaW52YWxpZGF0ZSBhbGwgb2JzZXJ2ZXJzICopXG4gICAgdi5iaW5kaW5nIDwtIHg7XG4gICAgZG9faW52YWxpZGF0ZSBTdHJvbmcgdnhcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcGVlayA9IGZ1bmN0aW9uXG4gIHwgT3BlcmF0b3IgKHtkZXNjID0gVmFyIHY7IF99KSAtPiB2LmJpbmRpbmdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXBkYXRlIGYgdiA9IHNldCB2IChmIChwZWVrIHYpKVxuXG5sZXQgbWF5X3VwZGF0ZSBmIHYgPVxuICBtYXRjaCBmIChwZWVrIHYpIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IHNldCB2IHhcblxuKCogUHJpbWl0aXZlcyAqKVxudHlwZSAnYSBwcmltID0gJ2EgdFxubGV0IHByaW0gfmFjcXVpcmUgfnJlbGVhc2UgPVxuICBpbmogKG9wZXJhdG9yIChQcmltIHsgYWNxdWlyZTsgcmVsZWFzZSB9KSlcbmxldCBnZXRfcHJpbSB4ID0geFxuXG5sZXQgaW52YWxpZGF0ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IE9wZXJhdG9yIHtkZXNjID0gUHJpbSBwOyB2YWx1ZTsgX30gYXMgdCAtPlxuICAgICgqIHRoZSB2YWx1ZSBpcyBpbnZhbGlkYXRlZCwgYmUgc3VyZSB0byBpbnZhbGlkYXRlIGFsbCBwYXJlbnRzIGFzIHdlbGwgKilcbiAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfbm9uZSAtPiAoKVxuICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IGRvX2ludmFsaWRhdGUgRnJhZ2lsZSB0O1xuICAgICAgfCBFdmFsX3NvbWUgdiAtPlxuICAgICAgICBkb19pbnZhbGlkYXRlIFN0cm9uZyB0O1xuICAgICAgICBwLnJlbGVhc2UgeCB2XG4gICAgZW5kXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogRml4IHBvaW50ICopXG5cbmxldCBmaXggZG9jIH53cnQgPSBtYXRjaCBwcmogd3J0IHdpdGhcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+IGRvY1xuICB8IE9wZXJhdG9yIF8gYXMgd3J0IC0+IGluaiAob3BlcmF0b3IgKEZpeCB7ZG9jID0gcHJqIGRvYzsgd3J0fSkpXG5cbnR5cGUgcmVsZWFzZV9saXN0ID1cbiAgfCBSZWxlYXNlX2RvbmVcbiAgfCBSZWxlYXNlX21vcmUgOlxuICAgICAgeyBvcmlnaW4gOiAnYSB0XzsgZWxlbWVudCA6ICdiIHRfOyBuZXh0IDogcmVsZWFzZV9saXN0IH0gLT4gcmVsZWFzZV9saXN0XG5cbnR5cGUgcmVsZWFzZV9xdWV1ZSA9IHJlbGVhc2VfbGlzdCByZWZcbmxldCBtYWtlX3JlbGVhc2VfcXVldWUgKCkgPSByZWYgUmVsZWFzZV9kb25lXG5cbnR5cGUgcmVsZWFzZV9mYWlsdXJlID0gZXhuICogUHJpbnRleGMucmF3X2JhY2t0cmFjZVxuXG4oKiBbc3ViX3JlbGVhc2UgW10gb3JpZ2luIHNlbGZdIGlzIGNhbGxlZCB3aGVuIFtvcmlnaW5dIGlzIHJlbGVhc2VkLFxuICAgd2hlcmUgW29yaWdpbl0gaXMgcmVhY2hhYmxlIGZyb20gW3NlbGZdJ3MgdHJhY2UuXG4gICBXZSdyZSBnb2luZyB0byByZW1vdmUgW29yaWdpbl0gZnJvbSB0aGF0IHRyYWNlIGFzIFtvcmlnaW5dIGlzIG5vdyBkZWFkLlxuXG4gICBbc3ViX3JlbGVhc2VdIGNhbm5vdCByYWlzZS5cbiAgIElmIGEgcHJpbWl0aXZlIHJhaXNlcywgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQgYW5kIGEgd2FybmluZyBpcyBlbWl0dGVkLiAqKVxubGV0IHJlYyBzdWJfcmVsZWFzZVxuICA6IHR5cGUgYSBiIC4gcmVsZWFzZV9mYWlsdXJlIGxpc3QgLT4gYSB0XyAtPiBiIHRfIC0+IHJlbGVhc2VfZmFpbHVyZSBsaXN0XG4gID0gZnVuIGZhaWx1cmVzIG9yaWdpbiAtPiBmdW5jdGlvblxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgUHVyZSBfIC0+IGZhaWx1cmVzXG4gICAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAgICgqIGNvbXB1dGUgW3QudHJhY2UgXFwge29yaWdpbn1dICopXG4gICAgICBsZXQgdHJhY2UgPSBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgICAgfCBUMCAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUMSB4IC0+IGFzc2VydCAodF9lcXVhbCB4IG9yaWdpbik7IFQwXG4gICAgICAgIHwgVDIgKHgsIHkpIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQxIHlcbiAgICAgICAgICBlbHNlIGlmIHRfZXF1YWwgeSBvcmlnaW4gdGhlbiBUMSB4XG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUMyAoeCwgeSwgeikgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDIgKHksIHopXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDIgKHgsIHopXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHogb3JpZ2luIHRoZW4gVDIgKHgsIHkpXG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICAgICAgICBpZiB0X2VxdWFsIHggb3JpZ2luIHRoZW4gVDMgKHksIHosIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDMgKHgsIHosIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHogb3JpZ2luIHRoZW4gVDMgKHgsIHksIHcpXG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHcgb3JpZ2luIHRoZW4gVDMgKHgsIHksIHopXG4gICAgICAgICAgZWxzZSBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBUbiB0biBhcyB0cmFjZSAtPlxuICAgICAgICAgIGxldCByZXZpZHggPSByZW1faWR4IHNlbGYgb3JpZ2luIGluXG4gICAgICAgICAgYXNzZXJ0ICh0X2VxdWFsIHRuLmVudHJpZXMuKHJldmlkeCkgb3JpZ2luKTtcbiAgICAgICAgICBsZXQgY291bnQgPSB0bi5jb3VudCAtIDEgaW5cbiAgICAgICAgICB0bi5jb3VudCA8LSBjb3VudDtcbiAgICAgICAgICBpZiByZXZpZHggPCBjb3VudCB0aGVuIChcbiAgICAgICAgICAgIGxldCBvYmogPSB0bi5lbnRyaWVzLihjb3VudCkgaW5cbiAgICAgICAgICAgIHRuLmVudHJpZXMuKHJldmlkeCkgPC0gb2JqO1xuICAgICAgICAgICAgdG4uZW50cmllcy4oY291bnQpIDwtIGR1bW15O1xuICAgICAgICAgICAgbW92X2lkeCBzZWxmIGNvdW50IHJldmlkeCBvYmpcbiAgICAgICAgICApIGVsc2VcbiAgICAgICAgICAgIHRuLmVudHJpZXMuKHJldmlkeCkgPC0gZHVtbXk7XG4gICAgICAgICAgaWYgdG4uYWN0aXZlID4gY291bnQgdGhlbiB0bi5hY3RpdmUgPC0gY291bnQ7XG4gICAgICAgICAgaWYgY291bnQgPSA0IHRoZW4gKFxuICAgICAgICAgICAgKCogZG93bmdyYWRlIHRvIFtUNF0gdG8gc2F2ZSBzcGFjZSAqKVxuICAgICAgICAgICAgbGV0IGEgPSB0bi5lbnRyaWVzLigwKSBhbmQgYiA9IHRuLmVudHJpZXMuKDEpIGluXG4gICAgICAgICAgICBsZXQgYyA9IHRuLmVudHJpZXMuKDIpIGFuZCBkID0gdG4uZW50cmllcy4oMykgaW5cbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGEgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYiA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBjIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGQgOiBpbnQpO1xuICAgICAgICAgICAgVDQgKGEsIGIsIGMsIGQpXG4gICAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggdG4uZW50cmllcyBpblxuICAgICAgICAgICAgaWYgY291bnQgPD0gbGVuIGxzciAyIHRoZW5cbiAgICAgICAgICAgICAgVG4geyBhY3RpdmUgPSB0bi5hY3RpdmU7IGNvdW50ID0gdG4uY291bnQ7XG4gICAgICAgICAgICAgICAgICAgZW50cmllcyA9IEFycmF5LnN1YiB0bi5lbnRyaWVzIDAgKGxlbiBsc3IgMSkgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICB0cmFjZVxuICAgICAgICAgIClcbiAgICAgIGluXG4gICAgICB0LnRyYWNlIDwtIHRyYWNlO1xuICAgICAgbWF0Y2ggdHJhY2Ugd2l0aFxuICAgICAgfCBUMCAtPlxuICAgICAgICAoKiBbc2VsZl0gaXMgbm90IGFjdGl2ZSBhbnltb3JlLCBzaW5jZSBpdCdzIG5vdCByZWFjaGFibGVcbiAgICAgICAgICAgZnJvbSBhbnkgcm9vdC4gV2UgY2FuIHJlbGVhc2UgaXRzIGNhY2hlZCB2YWx1ZSBhbmRcbiAgICAgICAgICAgcmVjdXJzaXZlbHkgcmVsZWFzZSBpdHMgc3VidHJlZS4gKilcbiAgICAgICAgbGV0IHZhbHVlID0gdC52YWx1ZSBpblxuICAgICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICAgIGJlZ2luIG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICAgICAgfCBNYXAgICh4LCBfKSAtPiBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHhcbiAgICAgICAgICB8IE1hcDIgKHgsIHksIF8pIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IFBhaXIgKHgsIHkpIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IEFwcCAgKHgsIHkpIC0+XG4gICAgICAgICAgICBzdWJfcmVsZWFzZSAoc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4KSBzZWxmIHlcbiAgICAgICAgICB8IEpvaW4gKHsgY2hpbGQ7IGludGVybWVkaWF0ZSB9IGFzIHQpIC0+XG4gICAgICAgICAgICBsZXQgZmFpbHVyZXMgPSBzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIGNoaWxkIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgfCBTb21lIGNoaWxkJyAtPlxuICAgICAgICAgICAgICAgIHQuaW50ZXJtZWRpYXRlIDwtIE5vbmU7XG4gICAgICAgICAgICAgICAgc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiBjaGlsZCdcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgVmFyICBfIC0+IGZhaWx1cmVzXG4gICAgICAgICAgfCBGaXgge2RvYzsgd3J0fSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgd3J0KSBzZWxmIGRvY1xuICAgICAgICAgIHwgUHJpbSB0IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICAgICAgICAgIHwgRXZhbF9ub25lICB8IEV2YWxfcHJvZ3Jlc3MgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgfCBFdmFsX3NvbWUgeCAtPlxuICAgICAgICAgICAgICAgIGJlZ2luIG1hdGNoIHQucmVsZWFzZSAoaW5qIHNlbGYpIHggd2l0aFxuICAgICAgICAgICAgICAgICAgfCAoKSAtPiBmYWlsdXJlc1xuICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24gZXhuIC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICAgICAgICAgICAgICAgIChleG4sIGJ0KSA6OiBmYWlsdXJlc1xuICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgZW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBfIC0+IGZhaWx1cmVzXG5cbigqIFtzdWJfYWNxdWlyZV0gY2Fubm90IHJhaXNlICopXG5sZXQgcmVjIHN1Yl9hY3F1aXJlIDogdHlwZSBhIGIgLiBhIHRfIC0+IGIgdF8gLT4gdW5pdCA9IGZ1biBvcmlnaW4gLT5cbiAgZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+ICgpXG4gIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgKCogW2FjcXVpcmVdIGlzIHRydWUgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGlzIG9wZXJhdG9yXG4gICAgICAgaXMgdXNlZCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvIGFjcXVpcmUgaXRzIGNoaWxkcmVuICopXG4gICAgbGV0IGFjcXVpcmUgPSBtYXRjaCB0LnRyYWNlIHdpdGggVDAgLT4gdHJ1ZSB8IF8gLT4gZmFsc2UgaW5cbiAgICBsZXQgdHJhY2UgPSBtYXRjaCB0LnRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT4gVDEgb3JpZ2luXG4gICAgICB8IFQxIHggLT4gVDIgKG9yaWdpbiwgeClcbiAgICAgIHwgVDIgKHgsIHkpIC0+IFQzIChvcmlnaW4sIHgsIHkpXG4gICAgICB8IFQzICh4LCB5LCB6KSAtPiBUNCAob3JpZ2luLCB4LCB5LCB6KVxuICAgICAgfCBUNCAoeCwgeSwgeiwgdykgLT5cbiAgICAgICAgbGV0IG9ial9vcmlnaW4gPSBvYmpfdCBvcmlnaW4gaW5cbiAgICAgICAgbGV0IGVudHJpZXMgPVxuICAgICAgICAgIFt8IG9ial90IHg7IG9ial90IHk7IG9ial90IHo7IG9ial90IHc7IG9ial9vcmlnaW47IGR1bW15OyBkdW1teTsgZHVtbXkgfF1cbiAgICAgICAgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIDQgZG8gYWRkX2lkeCBzZWxmIGkgZW50cmllcy4oaSkgZG9uZTtcbiAgICAgICAgVG4geyBhY3RpdmUgPSA1OyBjb3VudCA9IDU7IGVudHJpZXMgfVxuICAgICAgfCBUbiB0biBhcyB0cmFjZSAtPlxuICAgICAgICBsZXQgaW5kZXggPSB0bi5jb3VudCBpblxuICAgICAgICBsZXQgZW50cmllcywgdHJhY2UgPVxuICAgICAgICAgICgqIHBvc3NpYmx5IHJlc2l6ZSBhcnJheSBbZW50cmllc10gKilcbiAgICAgICAgICBpZiBpbmRleCA8IEFycmF5Lmxlbmd0aCB0bi5lbnRyaWVzIHRoZW4gKFxuICAgICAgICAgICAgdG4uY291bnQgPC0gdG4uY291bnQgKyAxO1xuICAgICAgICAgICAgKHRuLmVudHJpZXMsIHRyYWNlKVxuICAgICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgICBsZXQgZW50cmllcyA9IEFycmF5Lm1ha2UgKGluZGV4ICogMikgZHVtbXkgaW5cbiAgICAgICAgICAgIEFycmF5LmJsaXQgdG4uZW50cmllcyAwIGVudHJpZXMgMCBpbmRleDtcbiAgICAgICAgICAgIChlbnRyaWVzLCBUbiB7IGFjdGl2ZSA9IHRuLmFjdGl2ZTsgY291bnQgPSBpbmRleCArIDE7IGVudHJpZXMgfSlcbiAgICAgICAgICApXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvYmpfb3JpZ2luID0gb2JqX3Qgb3JpZ2luIGluXG4gICAgICAgIGVudHJpZXMuKGluZGV4KSA8LSBvYmpfb3JpZ2luO1xuICAgICAgICBhZGRfaWR4IHNlbGYgaW5kZXggb2JqX29yaWdpbjtcbiAgICAgICAgdHJhY2VcbiAgICBpblxuICAgIHQudHJhY2UgPC0gdHJhY2U7XG4gICAgaWYgYWNxdWlyZSB0aGVuIChcbiAgICAgICgqIGFjcXVpcmUgaW1tZWRpYXRlIGNoaWxkcmVuLCBhbmQgc28gb24gcmVjdXJzaXZlbHkgKilcbiAgICAgIG1hdGNoIHQuZGVzYyB3aXRoXG4gICAgICB8IE1hcCAgKHgsIF8pIC0+IHN1Yl9hY3F1aXJlIHNlbGYgeFxuICAgICAgfCBNYXAyICh4LCB5LCBfKSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBQYWlyICh4LCB5KSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBBcHAgICh4LCB5KSAtPlxuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHg7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgeVxuICAgICAgfCBGaXggIHtkb2M7IHdydH0gLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBkb2M7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgd3J0XG4gICAgICB8IEpvaW4geyBjaGlsZDsgaW50ZXJtZWRpYXRlIH0gLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiBjaGlsZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgXyAtPlxuICAgICAgICAgICAgYXNzZXJ0IGZhbHNlICgqIHRoaXMgY2FuJ3QgaW5pdGlhbGl6ZWQgYWxyZWFkeSwgZmlyc3QtdGltZSBhY3F1aXJlICopXG4gICAgICAgIGVuZFxuICAgICAgfCBWYXIgIF8gLT4gKClcbiAgICAgIHwgUHJpbSBfIC0+ICgpXG4gICAgKVxuXG4oKiBtYWtlIHN1cmUgdGhhdCBbb3JpZ2luXSBpcyBpbiBbc2VsZi50cmFjZV0sIHBhc3NlZCBhcyBsYXN0IGFyZy4gKilcbmxldCBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luID0gZnVuY3Rpb25cbiAgfCBUbiB0biAtPlxuICAgIGxldCBpZHggPSBnZXRfaWR4IHNlbGYgb3JpZ2luIGluICgqIGluZGV4IG9mIFtzZWxmXSBpbiBbb3JpZ2luLnRyYWNlX2lkeF0gKilcbiAgICBsZXQgYWN0aXZlID0gdG4uYWN0aXZlIGluXG4gICAgKCogW2lkeCA8IGFjdGl2ZV0gbWVhbnMgW3NlbGZdIGlzIGFscmVhZHkgdHJhY2VkIGJ5IFtvcmlnaW5dLlxuICAgICAgIFdlIG9ubHkgaGF2ZSB0byBhZGQgW3NlbGZdIHRvIHRoZSBlbnRyaWVzIGlmIFtpZHggPj0gYWN0aXZlXS4gKilcbiAgICBpZiBpZHggPj0gYWN0aXZlIHRoZW4gKFxuICAgICAgdG4uYWN0aXZlIDwtIGFjdGl2ZSArIDE7XG4gICAgKTtcbiAgICBpZiBpZHggPiBhY3RpdmUgdGhlbiAoXG4gICAgICAoKiBzd2FwIHdpdGggbGFzdCBlbnRyeSBpbiBbdG4uZW50cmllc10gKilcbiAgICAgIGxldCBvbGQgPSB0bi5lbnRyaWVzLihhY3RpdmUpIGluXG4gICAgICB0bi5lbnRyaWVzLihpZHgpIDwtIG9sZDtcbiAgICAgIHRuLmVudHJpZXMuKGFjdGl2ZSkgPC0gb2JqX3Qgb3JpZ2luO1xuICAgICAgbW92X2lkeCBzZWxmIGFjdGl2ZSBpZHggb2xkO1xuICAgICAgbW92X2lkeCBzZWxmIGlkeCBhY3RpdmUgb3JpZ2luXG4gICAgKVxuICB8IF8gLT4gKClcblxubGV0IHN1Yl9pc19kYW1hZ2VkID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUHVyZSBfIC0+IGZhbHNlXG4gIHwgT3BlcmF0b3Ige3ZhbHVlOyBffSAtPlxuICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICB8IEV2YWxfbm9uZSAtPiB0cnVlXG4gICAgfCBFdmFsX3NvbWUgXyAtPiBmYWxzZVxuICAgIHwgRXZhbF9wcm9ncmVzcyAtPiBhc3NlcnQgZmFsc2VcblxuKCogW3N1Yl9zYW1wbGUgb3JpZ2luIHNlbGZdIGNvbXB1dGVzIGEgdmFsdWUgZm9yIFtzZWxmXS5cblxuICAgW3N1Yl9zYW1wbGVdIHJhaXNlIGlmIGFueSB1c2VyLXByb3ZpZGVkIGNvbXB1dGF0aW9uIHJhaXNlcy5cbiAgIEdyYXBoIHdpbGwgYmUgbGVmdCBpbiBhIGNvaGVyZW50IHN0YXRlIGJ1dCBleGNlcHRpb24gd2lsbCBiZSBwcm9wYWdhdGVkXG4gICB0byB0aGUgb2JzZXJ2ZXIuICopXG5sZXQgc3ViX3NhbXBsZSBxdWV1ZSA9XG4gIGxldCByZWMgYXV4IDogdHlwZSBhIGIgLiBhIHRfIC0+IGIgdF8gLT4gYiA9IGZ1biBvcmlnaW4gLT5cbiAgICBmdW5jdGlvblxuICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgUHVyZSB4IC0+IHhcbiAgICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICAgKCogdHJ5IHRvIHVzZSBjYWNoZWQgdmFsdWUsIGlmIHByZXNlbnQgKilcbiAgICAgIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX3NvbWUgdmFsdWUgLT5cbiAgICAgICAgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiB0LnRyYWNlO1xuICAgICAgICB2YWx1ZVxuICAgICAgfCBfIC0+XG4gICAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgICAgbGV0IHJlc3VsdCA6IGIgPSBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgICAgIHwgTWFwICAoeCwgZikgLT4gZiAoYXV4IHNlbGYgeClcbiAgICAgICAgICB8IE1hcDIgKHgsIHksIGYpIC0+IGYgKGF1eCBzZWxmIHgpIChhdXggc2VsZiB5KVxuICAgICAgICAgIHwgUGFpciAoeCwgeSkgLT4gKGF1eCBzZWxmIHgsIGF1eCBzZWxmIHkpXG4gICAgICAgICAgfCBBcHAgIChmLCB4KSAtPiAoYXV4IHNlbGYgZikgKGF1eCBzZWxmIHgpXG4gICAgICAgICAgfCBGaXgge2RvYzsgd3J0fSAtPlxuICAgICAgICAgICAgbGV0IF8gPSBhdXggc2VsZiB3cnQgaW5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBhdXggc2VsZiBkb2MgaW5cbiAgICAgICAgICAgIGlmIHN1Yl9pc19kYW1hZ2VkIHdydCB0aGVuXG4gICAgICAgICAgICAgIGF1eCBvcmlnaW4gc2VsZlxuICAgICAgICAgICAgZWxzZSAoXG4gICAgICAgICAgICAgIGlmIHN1Yl9pc19kYW1hZ2VkIGRvYyB0aGVuXG4gICAgICAgICAgICAgICAgZG9faW52YWxpZGF0ZSBGcmFnaWxlIHNlbGY7XG4gICAgICAgICAgICAgIHJlc3VsdFxuICAgICAgICAgICAgKVxuICAgICAgICAgIHwgSm9pbiB4IC0+XG4gICAgICAgICAgICBsZXQgaW50ZXJtZWRpYXRlID1cbiAgICAgICAgICAgICAgKCogV2UgaGF2ZW4ndCB0b3VjaGVkIGFueSBzdGF0ZSB5ZXQsXG4gICAgICAgICAgICAgICAgIGl0IGlzIHNhZmUgZm9yIFthdXhdIHRvIHJhaXNlICopXG4gICAgICAgICAgICAgIGF1eCBzZWxmIHguY2hpbGRcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCB4LmludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgIHguaW50ZXJtZWRpYXRlIDwtIFNvbWUgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICB8IFNvbWUgeCcgd2hlbiB4JyAhPSBpbnRlcm1lZGlhdGUgLT5cbiAgICAgICAgICAgICAgICBxdWV1ZSA6PSBSZWxlYXNlX21vcmUge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPSBzZWxmO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0geCc7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSAhcXVldWU7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHguaW50ZXJtZWRpYXRlIDwtIFNvbWUgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgaW50ZXJtZWRpYXRlO1xuICAgICAgICAgICAgICB8IFNvbWUgXyAtPiAoKVxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgYXV4IHNlbGYgaW50ZXJtZWRpYXRlXG4gICAgICAgICAgfCBWYXIgIHggLT4geC5iaW5kaW5nXG4gICAgICAgICAgfCBQcmltIHQgLT4gdC5hY3F1aXJlIChpbmogc2VsZilcbiAgICAgICAgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IHQudmFsdWUgPC0gRXZhbF9zb21lIHJlc3VsdDtcbiAgICAgICAgICB8IEV2YWxfbm9uZSB8IEV2YWxfc29tZSBfIC0+ICgpXG4gICAgICAgIGVuZDtcbiAgICAgICAgKCogW3NlbGZdIGp1c3QgYmVjYW1lIGFjdGl2ZSwgc28gaXQgbWF5IGludmFsaWRhdGUgW29yaWdpbl0gaW4gY2FzZSBpdHNcbiAgICAgICAgICAgdmFsdWUgY2hhbmdlcyBiZWNhdXNlIG9mIFt0LmRlc2NdLCBsaWtlIGlmIGl0J3MgYSB2YXJpYWJsZSBhbmQgZ2V0c1xuICAgICAgICAgICBtdXRhdGVkLCBvciBpZiBpdCdzIGEgcHJpbWl0aXZlIHRoYXQgZ2V0cyBpbnZhbGlkYXRlZC5cbiAgICAgICAgICAgV2UgbmVlZCB0byBwdXQgW29yaWdpbl0gaW50byBbc2VsZi50cmFjZV0gaW4gY2FzZSBpdCBpc24ndCB0aGVyZSB5ZXQuICopXG4gICAgICAgIGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gdC50cmFjZTtcbiAgICAgICAgcmVzdWx0XG4gIGluXG4gIGF1eFxuXG50eXBlICdhIHJvb3QgPSAnYSB0XG5cbmxldCBvYnNlcnZlID8ob25faW52YWxpZGF0ZT1pZ25vcmUpIGNoaWxkIDogXyByb290ID1cbiAgbGV0IHJvb3QgPSBSb290IHtcbiAgICAgIGNoaWxkID0gcHJqIGNoaWxkO1xuICAgICAgdmFsdWUgPSBFdmFsX25vbmU7XG4gICAgICBvbl9pbnZhbGlkYXRlO1xuICAgICAgdHJhY2VfaWR4ID0gSTA7XG4gICAgICBhY3F1aXJlZCA9IGZhbHNlO1xuICAgIH0gaW5cbiAgaW5qIHJvb3RcblxuZXhjZXB0aW9uIFJlbGVhc2VfZmFpbHVyZSBvZiBleG4gb3B0aW9uICogcmVsZWFzZV9mYWlsdXJlIGxpc3RcblxubGV0IHJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlID1cbiAgbGV0IHJlYyBhdXggZmFpbHVyZXMgPSBmdW5jdGlvblxuICAgIHwgUmVsZWFzZV9kb25lIC0+IGZhaWx1cmVzXG4gICAgfCBSZWxlYXNlX21vcmUgdCAtPlxuICAgICAgbGV0IGZhaWx1cmVzID0gc3ViX3JlbGVhc2UgZmFpbHVyZXMgdC5vcmlnaW4gdC5lbGVtZW50IGluXG4gICAgICBhdXggZmFpbHVyZXMgdC5uZXh0XG4gIGluXG4gIGF1eCBbXSBxdWV1ZVxuXG5sZXQgZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSA9XG4gIGxldCBxdWV1ZScgPSAhcXVldWUgaW5cbiAgcXVldWUgOj0gUmVsZWFzZV9kb25lO1xuICByYXdfZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSdcblxubGV0IHNhbXBsZSBxdWV1ZSB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0IGFzIHNlbGYgLT5cbiAgICBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICB8IEV2YWxfc29tZSB2YWx1ZSAtPiB2YWx1ZVxuICAgIHwgXyAtPlxuICAgICAgKCogbm8gY2FjaGVkIHZhbHVlLCBjb21wdXRlIGl0IG5vdyAqKVxuICAgICAgaWYgbm90IHQuYWNxdWlyZWQgdGhlbiAoXG4gICAgICAgIHQuYWNxdWlyZWQgPC0gdHJ1ZTtcbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB0LmNoaWxkO1xuICAgICAgKTtcbiAgICAgIHQudmFsdWUgPC0gRXZhbF9wcm9ncmVzcztcbiAgICAgIGxldCB2YWx1ZSA9IHN1Yl9zYW1wbGUgcXVldWUgc2VsZiB0LmNoaWxkIGluXG4gICAgICBiZWdpbiBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+IHQudmFsdWUgPC0gRXZhbF9zb21lIHZhbHVlOyAoKiBjYWNoZSB2YWx1ZSAqKVxuICAgICAgICB8IEV2YWxfbm9uZSB8IEV2YWxfc29tZSBfIC0+ICgpXG4gICAgICBlbmQ7XG4gICAgICB2YWx1ZVxuXG5sZXQgaXNfZGFtYWdlZCB4ID0gbWF0Y2ggcHJqIHggd2l0aFxuICB8IFB1cmUgXyB8IE9wZXJhdG9yIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB7dmFsdWUgPSBFdmFsX3NvbWUgXzsgX30gLT4gZmFsc2VcbiAgfCBSb290IHt2YWx1ZSA9IEV2YWxfbm9uZSB8IEV2YWxfcHJvZ3Jlc3M7IF99IC0+IHRydWVcblxubGV0IHJlbGVhc2UgcXVldWUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCBhcyBzZWxmIC0+XG4gICAgaWYgdC5hY3F1aXJlZCB0aGVuIChcbiAgICAgICgqIHJlbGVhc2Ugc3VidHJlZSwgcmVtb3ZlIGNhY2hlZCB2YWx1ZSAqKVxuICAgICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgICB0LmFjcXVpcmVkIDwtIGZhbHNlO1xuICAgICAgcXVldWUgOj0gUmVsZWFzZV9tb3JlIHsgb3JpZ2luID0gc2VsZjsgZWxlbWVudCA9IHQuY2hpbGQ7IG5leHQgPSAhcXVldWUgfVxuICAgIClcblxubGV0IHNldF9vbl9pbnZhbGlkYXRlIHggZiA9XG4gIG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCAtPiB0Lm9uX2ludmFsaWRhdGUgPC0gZlxuXG5sZXQgZmx1c2hfb3JfZmFpbCBtYWluX2V4biBxdWV1ZSA9XG4gIG1hdGNoIGZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgd2l0aFxuICB8IFtdIC0+ICgpXG4gIHwgZmFpbHVyZXMgLT4gcmFpc2UgKFJlbGVhc2VfZmFpbHVyZSAobWFpbl9leG4sIGZhaWx1cmVzKSlcblxubGV0IHF1aWNrX3NhbXBsZSByb290ID1cbiAgbGV0IHF1ZXVlID0gcmVmIFJlbGVhc2VfZG9uZSBpblxuICBtYXRjaCBzYW1wbGUgcXVldWUgcm9vdCB3aXRoXG4gIHwgcmVzdWx0IC0+IGZsdXNoX29yX2ZhaWwgTm9uZSBxdWV1ZTsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIGV4biAtPiBmbHVzaF9vcl9mYWlsIChTb21lIGV4bikgcXVldWU7IHJhaXNlIGV4blxuXG5sZXQgcXVpY2tfcmVsZWFzZSByb290ID1cbiAgbGV0IHF1ZXVlID0gcmVmIFJlbGVhc2VfZG9uZSBpblxuICByZWxlYXNlIHF1ZXVlIHJvb3Q7XG4gIGZsdXNoX29yX2ZhaWwgTm9uZSBxdWV1ZVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICg+Pj0pIHggZiA9IGJpbmQgeCB+ZlxuICBsZXQgKD58PSkgeCBmID0gbWFwIHggfmZcbiAgbGV0ICg8Kj4pID0gYXBwXG5lbmRcblxuKCokUlxuICBsZXQgeCA9IHZhciAwIGluXG4gIGxldCB5ID0gbWFwIH5mOnN1Y2MgKGdldCB4KSBpblxuICBsZXQgb195ID0gTHdkLm9ic2VydmUgeSBpblxuICBhc3NlcnRfZXF1YWwgMSAocXVpY2tfc2FtcGxlIG9feSk7XG4gIHNldCB4IDEwO1xuICBhc3NlcnRfZXF1YWwgMTEgKHF1aWNrX3NhbXBsZSBvX3kpO1xuICAqKVxuIiwiXG50eXBlICdhIG1vbm9pZCA9ICdhICogKCdhIC0+ICdhIC0+ICdhKVxuXG5sZXQgbGlmdF9tb25vaWQgKHplcm8sIHBsdXMpID1cbiAgKEx3ZC5yZXR1cm4gemVybywgTHdkLm1hcDIgfmY6cGx1cylcblxubGV0IG1hcF9yZWR1Y2UgaW5qICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIGxldCByZWMgY29uc19tb25vaWQgYyB4cyB2ID1cbiAgICBtYXRjaCB4cyB3aXRoXG4gICAgfCAoYycsIHYnKSA6OiB4cyB3aGVuIGMgPSBjJyAtPlxuICAgICAgY29uc19tb25vaWQgKGMgKyAxKSB4cyAocGx1cyB2JyB2KVxuICAgIHwgeHMgLT4gKGMsIHYpIDo6IHhzXG4gIGluXG4gIGxldCBjb25zX21vbm9pZCB4cyB2ID0gY29uc19tb25vaWQgMCB4cyAoaW5qIHYpIGluXG4gIG1hdGNoIExpc3QuZm9sZF9sZWZ0IGNvbnNfbW9ub2lkIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gcGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcmVkdWNlIG1vbm9pZCBpdGVtcyA9IG1hcF9yZWR1Y2UgKGZ1biB4IC0+IHgpIG1vbm9pZCBpdGVtc1xuXG5sZXQgcmVjIGNvbnNfbHdkX21vbm9pZCBwbHVzIGMgeHMgdiA9XG4gIG1hdGNoIHhzIHdpdGhcbiAgfCAoYycsIHYnKSA6OiB4cyB3aGVuIGMgPSBjJyAtPlxuICAgIGNvbnNfbHdkX21vbm9pZCBwbHVzIChjICsgMSkgeHMgKEx3ZC5tYXAyIH5mOnBsdXMgdicgdilcbiAgfCB4cyAtPiAoYywgdikgOjogeHNcblxubGV0IHBhY2sgKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbWF0Y2ggTGlzdC5mb2xkX2xlZnQgKGNvbnNfbHdkX21vbm9pZCBwbHVzIDApIFtdIGl0ZW1zIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIHplcm9cbiAgfCAoXyx4KSA6OiB4cyAtPlxuICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIChfLCB2KSAtPiBMd2QubWFwMiB+ZjpwbHVzIHYgYWNjKSB4IHhzXG5cbmxldCBwYWNrX3NlcSAoemVybywgcGx1cykgaXRlbXMgPVxuICBtYXRjaCBTZXEuZm9sZF9sZWZ0IChjb25zX2x3ZF9tb25vaWQgcGx1cyAwKSBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gTHdkLm1hcDIgfmY6cGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcmVjIG1hcF9sIChmOidhIC0+ICdiIEx3ZC50KSAobDonYSBsaXN0KSA6ICdiIGxpc3QgTHdkLnQgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBMd2QucmV0dXJuIFtdXG4gIHwgeCA6OiB0bCAtPiBMd2QubWFwMiB+ZjpMaXN0LmNvbnMgKGYgeCkgKG1hcF9sIGYgdGwpXG5cbmxldCBmbGF0dGVuX2wgKGw6J2EgTHdkLnQgbGlzdCkgOiAnYSBsaXN0IEx3ZC50ID1cbiAgbWFwX2wgKGZ1biB4LT54KSBsXG5cbigqKiB7MSBNaXNjZWxsYW5lb3VzIGZ1bmN0aW9uc31cblxuICAgIEkgZG9uJ3Qga25vdyB3aGVyZSB0byBwdXQgdGhlc2UsIGJ1dCB0aGV5IGFyZSB1c2VmdWwsIGVzcGVjaWFsbHkgZm9yXG4gICAgVUktcmVsYXRlZCBjb21wdXRhdGlvbnMuXG4qKVxuXG5sZXQgbWluaSBhIGIgOiBpbnQgPSBpZiBiIDwgYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBtYXhpIGEgYiA6IGludCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IGNsYW1waSB4IH5taW4gfm1heCA6IGludCA9XG4gIGlmIHggPCBtaW4gdGhlblxuICAgIG1pblxuICBlbHNlIGlmIHggPiBtYXggdGhlblxuICAgIG1heFxuICBlbHNlXG4gICAgeFxuXG5sZXQgbWluZiBhIGIgOiBmbG9hdCA9IGlmIGIgPCBhIHRoZW4gYiBlbHNlIGFcblxubGV0IG1heGYgYSBiIDogZmxvYXQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBjbGFtcGYgeCB+bWluIH5tYXggOiBmbG9hdCA9XG4gIGlmIHggPCBtaW4gdGhlblxuICAgIG1pblxuICBlbHNlIGlmIHggPiBtYXggdGhlblxuICAgIG1heFxuICBlbHNlXG4gICAgeFxuIiwidHlwZSAnYSBiaW5kaW5nID1cbiAgfCBCb3VuZCBvZiB7IHZhbHVlIDogJ2EgOyBtdXRhYmxlIHZhbGlkIDogYm9vbCB9XG4gIHwgVW5ib3VuZFxuXG50eXBlICdhIHRyZWUgPVxuICB8IExlYWZcbiAgfCBOb2RlIG9mIHtcbiAgICAgIG11dGFibGUgdmVyc2lvbiA6IGludDtcbiAgICAgIG11dGFibGUgbGVmdCAgICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIGJpbmRpbmcgOiAnYSBiaW5kaW5nO1xuICAgICAgbXV0YWJsZSByaWdodCAgIDogJ2EgdHJlZTtcbiAgICAgIG11dGFibGUgcGFyZW50ICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIHNpemUgICAgOiBpbnQ7XG4gICAgfVxuICB8IFJvb3Qgb2Yge1xuICAgICAgbXV0YWJsZSB2ZXJzaW9uIDogaW50O1xuICAgICAgbXV0YWJsZSBjaGlsZCA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIGdlbmVyYXRpb24gOiB1bml0IHJlZjtcbiAgICAgIG11dGFibGUgb25faW52YWxpZGF0ZSA6IE9iai50IEx3ZC5wcmltIGxpc3Q7XG4gICAgfVxuXG50eXBlICdhIHQgPSAnYSB0cmVlXG50eXBlICdhIHJvdyA9ICdhIHRyZWVcblxubGV0IG5vdF9vcmlnaW4gPSByZWYgKCkgKCogbm90IHshb3JpZ2lufSAqKVxubGV0IG9yaWdpbiA9IHJlZiAoKSAoKiBub3QgeyFub3Rfb3JpZ2lufSAqKVxuXG5sZXQgbWFrZSAoKSA9XG4gIFJvb3QgeyBjaGlsZCA9IExlYWY7IGdlbmVyYXRpb24gPSBvcmlnaW47IHZlcnNpb24gPSAwOyBvbl9pbnZhbGlkYXRlID0gW10gfVxuXG5sZXQgc2V0X3BhcmVudCB+cGFyZW50ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSBuIC0+IG4ucGFyZW50IDwtIHBhcmVudFxuICB8IExlYWYgLT4gKClcblxubGV0IHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkIH5uZXdjaGlsZCA9XG4gIG1hdGNoIHBhcmVudCB3aXRoXG4gIHwgUm9vdCByIC0+XG4gICAgYXNzZXJ0IChyLmNoaWxkID09IG9sZGNoaWxkKTtcbiAgICByLmNoaWxkIDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5sZWZ0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5sZWZ0IDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5yaWdodCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ucmlnaHQgPC0gbmV3Y2hpbGRcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgbWFrZV9ub2RlIHNldCB+bGVmdCB+cmlnaHQgfnBhcmVudCA9XG4gIGxldCBiaW5kaW5nID0gbWF0Y2ggc2V0IHdpdGhcbiAgICB8IE5vbmUgLT4gVW5ib3VuZFxuICAgIHwgU29tZSB2YWx1ZSAtPiBCb3VuZCB7IHZhbHVlIDsgdmFsaWQgPSB0cnVlIH1cbiAgaW5cbiAgbGV0IG5vZGUgPSBOb2RlIHsgbGVmdDsgcmlnaHQ7IHBhcmVudDsgdmVyc2lvbiA9IDA7IHNpemUgPSAwOyBiaW5kaW5nIH0gaW5cbiAgc2V0X3BhcmVudCBsZWZ0ICB+cGFyZW50Om5vZGU7XG4gIHNldF9wYXJlbnQgcmlnaHQgfnBhcmVudDpub2RlO1xuICBub2RlXG5cbmxldCByZWMgcmF3X2ludmFsaWRhdGUgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBzaXplID0gMDsgXyB9IC0+ICgpXG4gIHwgTm9kZSB0IC0+XG4gICAgdC5zaXplIDwtIDA7XG4gICAgcmF3X2ludmFsaWRhdGUgdC5wYXJlbnRcbiAgfCBSb290IHIgLT5cbiAgICBMaXN0Lml0ZXIgTHdkLmludmFsaWRhdGUgci5vbl9pbnZhbGlkYXRlXG4gIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHByZXBlbmQgP3NldCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6TGVhZiB+cmlnaHQ6ci5jaGlsZCB+cGFyZW50IGluXG4gICAgci5jaGlsZCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcHJlcGVuZCcgeCBzZXQgPSBpZ25vcmUgKHByZXBlbmQgeCB+c2V0KVxuXG5sZXQgYXBwZW5kID9zZXQgPSBmdW5jdGlvblxuICB8IFJvb3QgciBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OnIuY2hpbGQgfnJpZ2h0OkxlYWYgfnBhcmVudCBpblxuICAgIHIuY2hpbGQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGFwcGVuZCcgeCBzZXQgPSBpZ25vcmUgKGFwcGVuZCB4IH5zZXQpXG5cbmxldCBiZWZvcmUgP3NldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHBhcmVudCA9IExlYWYgOyBfIH0gfCBMZWFmIC0+IExlYWZcbiAgfCBOb2RlIG4gYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpuLmxlZnQgfnJpZ2h0OkxlYWYgfnBhcmVudCBpblxuICAgIG4ubGVmdCA8LSBub2RlO1xuICAgIG5vZGVcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBhZnRlciA/c2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgcGFyZW50ID0gTGVhZiA7IF8gfSB8IExlYWYgLT4gTGVhZlxuICB8IE5vZGUgbiBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OkxlYWYgfnJpZ2h0Om4ucmlnaHQgfnBhcmVudCBpblxuICAgIG4ucmlnaHQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgZ2V0ID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgYmluZGluZyA9IEJvdW5kIHsgdmFsdWUgOyBfIH0gOyBfIH0gLT4gU29tZSB2YWx1ZVxuICB8IExlYWYgfCBSb290IF8gfCBOb2RlIHsgYmluZGluZyA9IFVuYm91bmQgOyBfIH0gLT4gTm9uZVxuXG5sZXQgaW52YWxpZGF0ZV9iaW5kaW5nID0gZnVuY3Rpb25cbiAgfCBVbmJvdW5kIC0+ICgpXG4gIHwgQm91bmQgYiAtPiBiLnZhbGlkIDwtIGZhbHNlXG5cbmxldCBzZXRfYmluZGluZyB4ID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmOyBfIH0gLT4gKClcbiAgfCBOb2RlIG4gYXMgdCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHQ7XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmJpbmRpbmcgPC0geFxuXG5sZXQgc2V0IHQgdmFsdWUgPSBzZXRfYmluZGluZyAoQm91bmQgeyB2YWx1ZTsgdmFsaWQgPSB0cnVlIH0pIHRcbmxldCB1bnNldCB0ID0gc2V0X2JpbmRpbmcgVW5ib3VuZCB0XG5cbmxldCBpc19ib3VuZCA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmOyBfIH0gLT4gZmFsc2VcbiAgfCBSb290IF8gfCBOb2RlIF8gLT4gdHJ1ZVxuXG5sZXQgcmVjIGpvaW4gbGVmdCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlICh7IGxlZnQgPSBMZWFmOyBfIH0gYXMgbikgYXMgc2VsZiAtPlxuICAgIG4ubGVmdCA8LSBsZWZ0O1xuICAgIHNldF9wYXJlbnQgbGVmdCB+cGFyZW50OnNlbGY7XG4gICAgc2VsZlxuICB8IE5vZGUgbm9kZSAtPlxuICAgIGpvaW4gbGVmdCBub2RlLmxlZnRcblxubGV0IHJlbW92ZSA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiB8IE5vZGUge3BhcmVudCA9IExlYWY7IF99IC0+ICgpXG4gIHwgTm9kZSAoe2xlZnQ7IHJpZ2h0OyBwYXJlbnQ7IF99IGFzIG4pIGFzIHQgLT5cbiAgICBpbnZhbGlkYXRlX2JpbmRpbmcgbi5iaW5kaW5nO1xuICAgIG4ubGVmdCA8LSBMZWFmO1xuICAgIG4ucmlnaHQgPC0gTGVhZjtcbiAgICBuLnBhcmVudCA8LSBMZWFmO1xuICAgIG4uYmluZGluZyA8LSBVbmJvdW5kO1xuICAgIG4udmVyc2lvbiA8LSBtYXhfaW50O1xuICAgIGxldCBqb2luLCBpbnZhbGlkID0gbWF0Y2ggbGVmdCwgcmlnaHQgd2l0aFxuICAgICAgfCBMZWFmLCBvdGhlciB8IG90aGVyLCBMZWFmIC0+IChvdGhlciwgcGFyZW50KVxuICAgICAgfCBfIC0+IChyaWdodCwgam9pbiBsZWZ0IHJpZ2h0KVxuICAgIGluXG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6dCB+bmV3Y2hpbGQ6am9pbjtcbiAgICBzZXRfcGFyZW50IGpvaW4gfnBhcmVudDtcbiAgICByYXdfaW52YWxpZGF0ZSBpbnZhbGlkXG5cbmxldCByZWMgY2xlYXIgPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlICh7bGVmdDsgcmlnaHQ7IF99IGFzIG4pIC0+XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmxlZnQgPC0gTGVhZjtcbiAgICBuLnJpZ2h0IDwtIExlYWY7XG4gICAgbi5wYXJlbnQgPC0gTGVhZjtcbiAgICBuLmJpbmRpbmcgPC0gVW5ib3VuZDtcbiAgICBuLnZlcnNpb24gPC0gbWF4X2ludDtcbiAgICBjbGVhciBsZWZ0O1xuICAgIGNsZWFyIHJpZ2h0XG4gIHwgUm9vdCByIGFzIHJvb3QgLT5cbiAgICBsZXQgY2hpbGQgPSByLmNoaWxkIGluXG4gICAgci5jaGlsZCA8LSBMZWFmO1xuICAgIGNsZWFyIGNoaWxkO1xuICAgIHJhd19pbnZhbGlkYXRlIHJvb3RcblxuKCogVHJlZSBiYWxhbmNpbmcgKilcblxubGV0IHNpemUgPSBmdW5jdGlvblxuICB8IE5vZGUgbm9kZSAtPlxuICAgIGFzc2VydCAobm9kZS5zaXplIDw+IDApO1xuICAgIG5vZGUuc2l6ZVxuICB8IExlYWYgLT4gMFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCoqIFtzbWFsbGVyX2VsbCBzbWluIHNtYXhdIGlmZlxuICAgIC0gW3NtaW5dIGlzIGxlc3MgdGhhbiBbc21heF1cbiAgICAtIFtzbWluXSBhbmQgW3NtYXhdIGRpZmZlcnMgYnkgbGVzcyB0aGFuIHR3byBtYWduaXR1ZGUgb3JkZXJzLCBpLmVcbiAgICAgIG1zYnMoc21pbikgPj0gbXNicyhzbWF4KSAtIDFcbiAgICAgIHdoZXJlIG1zYnMgaXMgdGhlIGluZGV4IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBzZXQgKilcbmxldCBzbWFsbGVyX2VsbCBzbWluIHNtYXggPSAoc21pbiA8IHNtYXgpICYmICgoc21pbiBsYW5kIHNtYXgpIGxzbCAxIDwgc21heClcblxuKCoqIFtkaXNiYWxhbmNlZCBzbWluIHNtYXhdIGNoZWNrIGlmIHR3byBzdWItdHJlZXMgb2Ygc2l6ZSBbc21pbl0gYW5kIFtzbWF4XSxcbiAgICBhcmUgZGlzYmFsYW5jemVkLiBUaGF0IGlzLCBtc2JzKHNtaW4pIDwgbXNicyhzbWF4KSAtIDEgKilcbmxldCBkaXNiYWxhbmNlZCBzbWluIHNtYXggPSBzbWFsbGVyX2VsbCBzbWluIChzbWF4IGxzciAxKVxuXG5sZXQgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQgfm5ld2NoaWxkID1cbiAgbWF0Y2ggcGFyZW50IHdpdGhcbiAgfCBSb290IHIgLT5cbiAgICBhc3NlcnQgKHIuY2hpbGQgPT0gb2xkY2hpbGQpO1xuICAgIHIuY2hpbGQgPC0gbmV3Y2hpbGQ7XG4gIHwgTm9kZSBuIHdoZW4gbi5sZWZ0ID09IG9sZGNoaWxkIC0+XG4gICAgbi5sZWZ0IDwtIG5ld2NoaWxkXG4gIHwgTm9kZSBuIHdoZW4gbi5yaWdodCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ucmlnaHQgPC0gbmV3Y2hpbGRcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIHJvdF9sZWZ0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IE5vZGUgKHsgcmlnaHQgPSAoTm9kZSBybikgYXMgcjsgX30gYXMgc24pIGFzIHMgLT5cbiAgICBsZXQgcGFyZW50ID0gc24ucGFyZW50IGluXG4gICAgbGV0IHJsID0gbWF0Y2ggcm4ubGVmdCB3aXRoXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiAtPiBMZWFmXG4gICAgICB8IChOb2RlIHJsbikgYXMgcmwgLT5cbiAgICAgICAgcmxuLnBhcmVudCA8LSBzO1xuICAgICAgICBybFxuICAgIGluXG4gICAgcm4ubGVmdCA8LSBzO1xuICAgIHNuLnJpZ2h0IDwtIHJsO1xuICAgIHNuLnBhcmVudCA8LSByO1xuICAgIHJuLnBhcmVudCA8LSBwYXJlbnQ7XG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6cyB+bmV3Y2hpbGQ6cjtcbiAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzKTtcbiAgICBiYWxhbmNlIHZlcnNpb24gclxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmFuZCByb3RfcmlnaHQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTm9kZSAoeyBsZWZ0ID0gKE5vZGUgbG4pIGFzIGw7IF99IGFzIHNuKSBhcyBzIC0+XG4gICAgbGV0IHBhcmVudCA9IHNuLnBhcmVudCBpblxuICAgIGxldCBsciA9IG1hdGNoIGxuLnJpZ2h0IHdpdGhcbiAgICAgIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIC0+IExlYWZcbiAgICAgIHwgKE5vZGUgbHJuKSBhcyBsciAtPlxuICAgICAgICBscm4ucGFyZW50IDwtIHM7XG4gICAgICAgIGxyXG4gICAgaW5cbiAgICBsbi5yaWdodCA8LSBzO1xuICAgIHNuLmxlZnQgPC0gbHI7XG4gICAgc24ucGFyZW50IDwtIGw7XG4gICAgbG4ucGFyZW50IDwtIHBhcmVudDtcbiAgICByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZDpzIH5uZXdjaGlsZDpsO1xuICAgIGlnbm9yZSAoYmFsYW5jZSB2ZXJzaW9uIHMpO1xuICAgIGJhbGFuY2UgdmVyc2lvbiBsXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuYW5kIGluY19sZWZ0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSB7cmlnaHQ7IF99IGFzIHNlbGYgLT5cbiAgICBiZWdpbiBtYXRjaCByaWdodCB3aXRoXG4gICAgICB8IE5vZGUgcm4gd2hlbiBzbWFsbGVyX2VsbCAoc2l6ZSBybi5yaWdodCkgKHNpemUgcm4ubGVmdCkgLT5cbiAgICAgICAgaWdub3JlIChyb3RfcmlnaHQgdmVyc2lvbiByaWdodClcbiAgICAgIHwgXyAtPiAoKVxuICAgIGVuZDtcbiAgICByb3RfbGVmdCB2ZXJzaW9uIHNlbGZcblxuYW5kIGluY19yaWdodCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUge2xlZnQ7IF99IGFzIHNlbGYgLT5cbiAgICBiZWdpbiBtYXRjaCBsZWZ0IHdpdGhcbiAgICAgIHwgTm9kZSBsbiB3aGVuIHNtYWxsZXJfZWxsIChzaXplIGxuLmxlZnQpIChzaXplIGxuLnJpZ2h0KSAtPlxuICAgICAgICBpZ25vcmUgKHJvdF9sZWZ0IHZlcnNpb24gbGVmdClcbiAgICAgIHwgXyAtPiAoKVxuICAgIGVuZDtcbiAgICByb3RfcmlnaHQgdmVyc2lvbiBzZWxmXG5cbmFuZCBiYWxhbmNlIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSBub2RlIGFzIHNlbGYgLT5cbiAgICBsZXQgc2wgPSBzaXplIG5vZGUubGVmdCBhbmQgc3IgPSBzaXplIG5vZGUucmlnaHQgaW5cbiAgICBpZiBzbCA8IHNyIHRoZW4gKFxuICAgICAgaWYgZGlzYmFsYW5jZWQgc2wgc3JcbiAgICAgIHRoZW4gaW5jX2xlZnQgdmVyc2lvbiBzZWxmXG4gICAgICBlbHNlIChub2RlLnZlcnNpb24gPC0gdmVyc2lvbjsgbm9kZS5zaXplIDwtIDEgKyBzbCArIHNyOyBzZWxmKVxuICAgICkgZWxzZSAoXG4gICAgICBpZiBkaXNiYWxhbmNlZCBzciBzbFxuICAgICAgdGhlbiBpbmNfcmlnaHQgdmVyc2lvbiBzZWxmXG4gICAgICBlbHNlIChub2RlLnZlcnNpb24gPC0gdmVyc2lvbjsgbm9kZS5zaXplIDwtIDEgKyBzbCArIHNyOyBzZWxmKVxuICAgIClcblxubGV0IHJlYyBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiAoKVxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIG5vZGUgYXMgc2VsZiAtPlxuICAgIGlmIG5vZGUuc2l6ZSA9IDAgdGhlblxuICAgICAgbWF0Y2ggbm9kZS5sZWZ0IHdpdGhcbiAgICAgIHwgTm9kZSB7c2l6ZSA9IDA7IF99IC0+XG4gICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiBub2RlLmxlZnRcbiAgICAgIHwgXyAtPlxuICAgICAgICBtYXRjaCBub2RlLnJpZ2h0IHdpdGhcbiAgICAgICAgfCBOb2RlIHtzaXplID0gMDsgX30gLT5cbiAgICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gbm9kZS5yaWdodFxuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBsZXQgcGFyZW50ID0gbm9kZS5wYXJlbnQgaW5cbiAgICAgICAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzZWxmKTtcbiAgICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gcGFyZW50XG5cbmxldCByZWMgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSBuIC0+XG4gICAgbi52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uIG4ubGVmdDtcbiAgICByZXNldF92ZXJzaW9uIHZlcnNpb24gbi5yaWdodFxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYmFsYW5jZSA9IGZ1bmN0aW9uXG4gIHwgUm9vdCByIC0+XG4gICAgYmVnaW4gbWF0Y2ggci5jaGlsZCB3aXRoXG4gICAgICB8IE5vZGUgeyBzaXplID0gMDsgXyB9IC0+XG4gICAgICAgIGxldCB2ZXJzaW9uID0gc3VjYyByLnZlcnNpb24gaW5cbiAgICAgICAgbGV0IHZlcnNpb24gPVxuICAgICAgICAgIGlmIHZlcnNpb24gPSBtYXhfaW50IHRoZW4gKFxuICAgICAgICAgICAgci5nZW5lcmF0aW9uIDwtIHJlZiAoKTtcbiAgICAgICAgICAgIHJlc2V0X3ZlcnNpb24gMCByLmNoaWxkO1xuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBlbHNlIHZlcnNpb25cbiAgICAgICAgaW5cbiAgICAgICAgci52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgICAgIGNvbXB1dGVfc3ViX3NpemUgdmVyc2lvbiByLmNoaWxkO1xuICAgICAgICB2ZXJzaW9uXG4gICAgICB8IE5vZGUgXyB8IExlYWYgLT4gci52ZXJzaW9uXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICBlbmRcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcGx1cyAoemVybywgcGx1cykgeCB5ID1cbiAgaWYgeCA9PSB6ZXJvIHRoZW4geVxuICBlbHNlIGlmIHkgPT0gemVybyB0aGVuIHhcbiAgZWxzZSBwbHVzIHggeVxuXG50eXBlICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlID1cbiAgfCBSZWRfbGVhZlxuICB8IFJlZF9ub2RlIG9mIHtcbiAgICAgIGNlbGw6ICdhIHJvdztcbiAgICAgIGJpbmRpbmc6ICdhIGJpbmRpbmc7XG4gICAgICByZWR1Y3Rpb246ICdiO1xuICAgICAgYWdncmVnYXRlOiAnYjtcbiAgICAgIGxlZnQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgICAgIHJpZ2h0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gICAgfVxuXG50eXBlICgnYSwgJ2IpIHJlZHVjdGlvbiA9IHtcbiAgbXV0YWJsZSB2ZXJzaW9uOiBpbnQ7XG4gIHNvdXJjZTogJ2EgdHJlZTtcbiAgbXV0YWJsZSByZXN1bHQgOiAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZTtcbiAgbXV0YWJsZSBnZW5lcmF0aW9uOiB1bml0IHJlZjtcbiAgbWFwcGVyOiAnYSByb3cgLT4gJ2EgLT4gJ2I7XG4gIG1vbm9pZDogJ2IgTHdkX3V0aWxzLm1vbm9pZDtcbn1cblxuXG5sZXQgZXh0cmFjdF9iaW5kaW5ncyB0cmVlID1cbiAgbGV0IHJlYyBhdXggYWNjID0gZnVuY3Rpb25cbiAgICB8IFJlZF9sZWFmIC0+IGFjY1xuICAgIHwgUmVkX25vZGUgcm5vZGUgLT5cbiAgICAgIGxldCBhY2MgPSBhdXggYWNjIHJub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWNjID0gbWF0Y2ggcm5vZGUuYmluZGluZyB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCAtPiBhY2NcbiAgICAgICAgfCBCb3VuZCB7IHZhbGlkID0gZmFsc2U7IF8gfSAtPiBhY2NcbiAgICAgICAgfCBfIC0+IChybm9kZS5iaW5kaW5nLCBybm9kZS5yZWR1Y3Rpb24pIDo6IGFjY1xuICAgICAgaW5cbiAgICAgIGF1eCBhY2Mgcm5vZGUubGVmdFxuICBpblxuICBhdXggW10gdHJlZVxuXG5sZXQgZnVsbF9yZWJ1aWxkIHJlZCB0cmVlID1cbiAgbGV0IGJpbmRpbmdzID0gcmVmIChleHRyYWN0X2JpbmRpbmdzIHJlZC5yZXN1bHQpIGluXG4gIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIC0+XG4gICAgICBsZXQgbGVmdCA9IGF1eCBub2RlLmxlZnQgaW5cbiAgICAgIGxldCByZWR1Y3Rpb24gPVxuICAgICAgICBtYXRjaCBub2RlLmJpbmRpbmcsICFiaW5kaW5ncyB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCwgXyAtPiBmc3QgcmVkLm1vbm9pZFxuICAgICAgICB8IGJpbmRpbmcsICgoYmluZGluZycsIHJlZHVjdGlvbikgOjogYmluZGluZ3MnKVxuICAgICAgICAgIHdoZW4gYmluZGluZyA9PSBiaW5kaW5nJyAtPlxuICAgICAgICAgIGJpbmRpbmdzIDo9IGJpbmRpbmdzJztcbiAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgfCBCb3VuZCBiLCBfIC0+IGFzc2VydCBiLnZhbGlkOyByZWQubWFwcGVyIGNlbGwgYi52YWx1ZVxuICAgICAgaW5cbiAgICAgIGxldCByaWdodCA9IGF1eCBub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gcmVkdWN0aW9uXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgci5hZ2dyZWdhdGUgcmVkdWN0aW9uXG4gICAgICBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiBhZ2dyZWdhdGVcbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCBhZ2dyZWdhdGUgci5hZ2dyZWdhdGVcbiAgICAgIGluXG4gICAgICBSZWRfbm9kZSB7XG4gICAgICAgIGNlbGw7XG4gICAgICAgIGJpbmRpbmcgPSBub2RlLmJpbmRpbmc7XG4gICAgICAgIHJlZHVjdGlvbjtcbiAgICAgICAgYWdncmVnYXRlO1xuICAgICAgICBsZWZ0O1xuICAgICAgICByaWdodDtcbiAgICAgIH1cbiAgICB8IExlYWYgLT4gUmVkX2xlYWZcbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgaW5cbiAgbGV0IHJlc3VsdCA9IGF1eCB0cmVlIGluXG4gIGFzc2VydCAoIWJpbmRpbmdzID0gW10pO1xuICByZXN1bHRcblxubGV0IGV4dHJhY3RfZnJpbmdlIHZlcnNpb24gdHJlZSA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBSZWRfbGVhZiAtPiBhY2NcbiAgICB8IFJlZF9ub2RlIHJub2RlIGFzIHRyZWUgLT5cbiAgICAgIG1hdGNoIHJub2RlLmNlbGwgd2l0aFxuICAgICAgfCBOb2RlIG5vZGUgd2hlbiBub2RlLnZlcnNpb24gPD0gdmVyc2lvbiAtPiB0cmVlIDo6IGFjY1xuICAgICAgfCBfIC0+XG4gICAgICAgIGxldCBhY2MgPSBhdXggYWNjIHJub2RlLnJpZ2h0IGluXG4gICAgICAgIGxldCBhY2MgPSBtYXRjaCBybm9kZS5iaW5kaW5nIHdpdGhcbiAgICAgICAgICB8IFVuYm91bmQgLT4gYWNjXG4gICAgICAgICAgfCBCb3VuZCB7IHZhbGlkID0gZmFsc2U7IF8gfSAtPiBhY2NcbiAgICAgICAgICB8IF8gLT4gdHJlZSA6OiBhY2NcbiAgICAgICAgaW5cbiAgICAgICAgYXV4IGFjYyBybm9kZS5sZWZ0XG4gIGluXG4gIGF1eCBbXSB0cmVlXG5cbmxldCBpbmNyZW1lbnRhbF9yZWJ1aWxkIHJlZCB2ZXJzaW9uIHRyZWUgPVxuICBsZXQgZnJpbmdlID0gcmVmIChleHRyYWN0X2ZyaW5nZSB2ZXJzaW9uIHJlZC5yZXN1bHQpIGluXG4gIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIHdoZW4gbm9kZS52ZXJzaW9uIDw9IHZlcnNpb24gLT5cbiAgICAgIGJlZ2luIG1hdGNoICFmcmluZ2Ugd2l0aFxuICAgICAgICB8IChSZWRfbm9kZSBybm9kZSBhcyByZWR1Y3Rpb24pIDo6IGZyaW5nZScgLT5cbiAgICAgICAgICBhc3NlcnQgKHJub2RlLmNlbGwgPT0gY2VsbCk7XG4gICAgICAgICAgZnJpbmdlIDo9IGZyaW5nZSc7XG4gICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIGVuZFxuICAgIHwgTm9kZSBub2RlIGFzIGNlbGwgLT5cbiAgICAgIGxldCBsZWZ0ID0gYXV4IG5vZGUubGVmdCBpblxuICAgICAgbGV0IHJlZHVjdGlvbiA9XG4gICAgICAgIG1hdGNoIG5vZGUuYmluZGluZywgIWZyaW5nZSB3aXRoXG4gICAgICAgIHwgVW5ib3VuZCwgXyAtPiBmc3QgcmVkLm1vbm9pZFxuICAgICAgICB8IGJpbmRpbmcsIChSZWRfbm9kZSBybm9kZSA6OiBmcmluZ2UnKVxuICAgICAgICAgIHdoZW4gYmluZGluZyA9PSBybm9kZS5iaW5kaW5nIC0+XG4gICAgICAgICAgZnJpbmdlIDo9IGZyaW5nZSc7XG4gICAgICAgICAgcm5vZGUucmVkdWN0aW9uXG4gICAgICAgIHwgQm91bmQgYiwgXyAtPlxuICAgICAgICAgIGFzc2VydCBiLnZhbGlkOyByZWQubWFwcGVyIGNlbGwgYi52YWx1ZVxuICAgICAgaW5cbiAgICAgIGxldCByaWdodCA9IGF1eCBub2RlLnJpZ2h0IGluXG4gICAgICBsZXQgYWdncmVnYXRlID0gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gcmVkdWN0aW9uXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgci5hZ2dyZWdhdGUgcmVkdWN0aW9uXG4gICAgICBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIHJpZ2h0IHdpdGhcbiAgICAgICAgfCBSZWRfbGVhZiAtPiBhZ2dyZWdhdGVcbiAgICAgICAgfCBSZWRfbm9kZSByIC0+IHBsdXMgcmVkLm1vbm9pZCBhZ2dyZWdhdGUgci5hZ2dyZWdhdGVcbiAgICAgIGluXG4gICAgICBSZWRfbm9kZSB7XG4gICAgICAgIGNlbGw7XG4gICAgICAgIGJpbmRpbmcgPSBub2RlLmJpbmRpbmc7XG4gICAgICAgIHJlZHVjdGlvbjtcbiAgICAgICAgYWdncmVnYXRlO1xuICAgICAgICBsZWZ0O1xuICAgICAgICByaWdodDtcbiAgICAgIH1cbiAgICB8IFJvb3QgXyB8IExlYWYgLT4gUmVkX2xlYWZcbiAgaW5cbiAgbGV0IHJlc3VsdCA9IGF1eCB0cmVlIGluXG4gIGFzc2VydCAoIWZyaW5nZSA9IFtdKTtcbiAgcmVzdWx0XG5cbmxldCBldmFsIHJlZCA9XG4gIG1hdGNoIHJlZC5zb3VyY2Ugd2l0aFxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+XG4gICAgbGV0IHZlcnNpb24gPSByZWJhbGFuY2UgcmVkLnNvdXJjZSBpblxuICAgIGlmIHRydWUgdGhlbiAoXG4gICAgICBpZiByZWQuZ2VuZXJhdGlvbiAhPSByb290LmdlbmVyYXRpb24gdGhlbiAoXG4gICAgICAgIHJlZC5nZW5lcmF0aW9uIDwtIHJvb3QuZ2VuZXJhdGlvbjtcbiAgICAgICAgcmVkLnJlc3VsdCA8LSBmdWxsX3JlYnVpbGQgcmVkIHJvb3QuY2hpbGQ7XG4gICAgICApIGVsc2UgKFxuICAgICAgICByZWQucmVzdWx0IDwtIGluY3JlbWVudGFsX3JlYnVpbGQgcmVkIHJlZC52ZXJzaW9uIHJvb3QuY2hpbGRcbiAgICAgICk7XG4gICAgKSBlbHNlIChcbiAgICAgIHJlZC5yZXN1bHQgPC0gZnVsbF9yZWJ1aWxkIHJlZCByb290LmNoaWxkO1xuICAgICk7XG4gICAgcmVkLnZlcnNpb24gPC0gdmVyc2lvbjtcbiAgICBtYXRjaCByZWQucmVzdWx0IHdpdGhcbiAgICB8IFJlZF9sZWFmIC0+IGZzdCByZWQubW9ub2lkXG4gICAgfCBSZWRfbm9kZSByIC0+IHIuYWdncmVnYXRlXG5cbmxldCBvcGFxdWUgOiAnYSBMd2QucHJpbSAtPiBPYmoudCBMd2QucHJpbSA9IE9iai5tYWdpY1xuXG5sZXQgbWFwX3JlZHVjZSBtYXBwZXIgbW9ub2lkIHNvdXJjZSA9XG4gIGxldCByZWR1Y3Rpb24gPSB7XG4gICAgc291cmNlOyBtYXBwZXI7IG1vbm9pZDtcbiAgICByZXN1bHQgPSBSZWRfbGVhZjtcbiAgICBnZW5lcmF0aW9uID0gbm90X29yaWdpbjtcbiAgICB2ZXJzaW9uID0gMDtcbiAgfSBpblxuICBsZXQgcHJpbSA9IEx3ZC5wcmltXG4gICAgICB+YWNxdWlyZTooZnVuIHNlbGYgLT5cbiAgICAgICAgICBtYXRjaCByZWR1Y3Rpb24uc291cmNlIHdpdGhcbiAgICAgICAgICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBSb290IHJvb3QgLT5cbiAgICAgICAgICAgIHJvb3Qub25faW52YWxpZGF0ZSA8LSBvcGFxdWUgc2VsZiA6OiByb290Lm9uX2ludmFsaWRhdGU7XG4gICAgICAgICAgICByZWR1Y3Rpb25cbiAgICAgICAgKVxuICAgICAgfnJlbGVhc2U6KGZ1biBzZWxmIHJlZHVjdGlvbiAtPlxuICAgICAgICAgIG1hdGNoIHJlZHVjdGlvbi5zb3VyY2Ugd2l0aFxuICAgICAgICAgIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IFJvb3Qgcm9vdCAtPlxuICAgICAgICAgICAgcm9vdC5vbl9pbnZhbGlkYXRlIDwtXG4gICAgICAgICAgICAgIExpc3QuZmlsdGVyICgoIT0pIChvcGFxdWUgc2VsZikpIHJvb3Qub25faW52YWxpZGF0ZVxuICAgICAgICApXG4gIGluXG4gIEx3ZC5tYXAgfmY6ZXZhbCAoTHdkLmdldF9wcmltIHByaW0pXG5cbmxldCByZWR1Y2UgbW9ub2lkIHNvdXJjZSA9IG1hcF9yZWR1Y2UgKGZ1biBfIHggLT4geCkgbW9ub2lkIHNvdXJjZVxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgdCAtPlxuICAgIGl0ZXIgZiB0LmxlZnQ7XG4gICAgYmVnaW4gbWF0Y2ggdC5iaW5kaW5nIHdpdGhcbiAgICAgIHwgQm91bmQgeCAtPiBmIHgudmFsdWVcbiAgICAgIHwgVW5ib3VuZCAtPiAoKVxuICAgIGVuZDtcbiAgICBpdGVyIGYgdC5yaWdodFxuICB8IFJvb3QgdCAtPlxuICAgIGl0ZXIgZiB0LmNoaWxkXG5cbmxldCByZWMgbGVmdF9tb3N0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIGxlZnRfbW9zdCBuLmxlZnQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPiBTb21lIHNlbGZcblxubGV0IHJlYyByaWdodF9tb3N0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIHJpZ2h0X21vc3Qgbi5yaWdodCB3aXRoXG4gICAgfCBTb21lIF8gYXMgeCAtPiB4XG4gICAgfCBOb25lIC0+IFNvbWUgc2VsZlxuXG5sZXQgZmlyc3QgOiAnYSB0IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCByb290IC0+IGxlZnRfbW9zdCByb290LmNoaWxkXG5cbmxldCBsYXN0IDogJ2EgdCAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPiByaWdodF9tb3N0IHJvb3QuY2hpbGRcblxubGV0IG5leHQgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggbGVmdF9tb3N0IG4ucmlnaHQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IHJlYyB3YWxrX3Jvb3Qgc2VsZiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBSb290IF8gLT4gTm9uZVxuICAgICAgICB8IE5vZGUgbicgYXMgcGFyZW50IC0+XG4gICAgICAgICAgaWYgbicubGVmdCA9PSBzZWxmIHRoZW4gU29tZSBwYXJlbnQgZWxzZSAoXG4gICAgICAgICAgICBhc3NlcnQgKG4nLnJpZ2h0ID09IHNlbGYpO1xuICAgICAgICAgICAgd2Fsa19yb290IHBhcmVudCBuJy5wYXJlbnRcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgd2Fsa19yb290IHNlbGYgbi5wYXJlbnRcblxubGV0IHByZXYgOiAnYSByb3cgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgLT4gTm9uZVxuICB8IE5vZGUgbiBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggcmlnaHRfbW9zdCBuLmxlZnQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IHJlYyB3YWxrX3Jvb3Qgc2VsZiA9IGZ1bmN0aW9uXG4gICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBSb290IF8gLT4gTm9uZVxuICAgICAgICB8IE5vZGUgbicgYXMgcGFyZW50IC0+XG4gICAgICAgICAgaWYgbicucmlnaHQgPT0gc2VsZiB0aGVuIFNvbWUgcGFyZW50IGVsc2UgKFxuICAgICAgICAgICAgYXNzZXJ0IChuJy5sZWZ0ID09IHNlbGYpO1xuICAgICAgICAgICAgd2Fsa19yb290IHBhcmVudCBuJy5wYXJlbnRcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgd2Fsa19yb290IHNlbGYgbi5wYXJlbnRcbiIsIlxudHlwZSAhKydhIHQgPVxuXG5cbiAgfCBOaWxcbiAgfCBMZWFmIG9mIHsgbXV0YWJsZSBtYXJrOiBpbnQ7IHY6ICdhOyB9XG4gIHwgSm9pbiBvZiB7IG11dGFibGUgbWFyazogaW50OyBsOiAnYSB0OyByOiAnYSB0OyB9XG5cbnR5cGUgJ2Egc2VxID0gJ2EgdFxuXG5sZXQgZW1wdHkgPSBOaWxcblxubGV0IGVsZW1lbnQgdiA9IExlYWYgeyBtYXJrID0gMDsgdiB9XG5cbmxldCBtYXNrX2JpdHMgPSAyXG5cbmxldCBtYXhpIGEgYiA6IGludCA9IGlmIGIgPiBhIHRoZW4gYiBlbHNlIGFcblxubGV0IHJhbmsgPSBmdW5jdGlvblxuICB8IE5pbCAtPiAwXG4gIHwgTGVhZiB0IC0+XG4gICAgaWYgdC5tYXJrIDw+IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJMd2Rfc2VxLnJhbms6IG5vZGUgaXMgbWFya2VkXCI7XG4gICAgMFxuICB8IEpvaW4gdCAtPlxuICAgIGlmIHQubWFyayBsYW5kIG1hc2tfYml0cyA8PiAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiTHdkX3NlcS5yYW5rOiBub2RlIGlzIG1hcmtlZFwiO1xuICAgIHQubWFyayBsc3IgbWFza19iaXRzXG5cbmxldCBjb25jYXQgYSBiID0gbWF0Y2ggYSwgYiB3aXRoXG4gIHwgTmlsLCB4IHwgeCwgTmlsIC0+IHhcbiAgfCBsLCByIC0+IEpvaW4geyBtYXJrID0gKG1heGkgKHJhbmsgbCkgKHJhbmsgcikgKyAxKSBsc2wgbWFza19iaXRzOyBsOyByIH1cblxudHlwZSAoJ2EsICdiKSB2aWV3ID1cbiAgfCBFbXB0eVxuICB8IEVsZW1lbnQgb2YgJ2FcbiAgfCBDb25jYXQgb2YgJ2IgKiAnYlxuXG5sZXQgdmlldyA9IGZ1bmN0aW9uXG4gIHwgTmlsICAgIC0+IEVtcHR5XG4gIHwgTGVhZiB0IC0+IEVsZW1lbnQgdC52XG4gIHwgSm9pbiB0IC0+IENvbmNhdCAodC5sLCB0LnIpXG5cbm1vZHVsZSBCYWxhbmNlZCA6IHNpZ1xuICB0eXBlICdhIHQgPSBwcml2YXRlICdhIHNlcVxuICB2YWwgZW1wdHkgOiAnYSB0XG4gIHZhbCBlbGVtZW50IDogJ2EgLT4gJ2EgdFxuICB2YWwgY29uY2F0IDogJ2EgdCAtPiAnYSB0IC0+ICdhIHRcblxuICB2YWwgdmlldyA6ICdhIHQgLT4gKCdhLCAnYSB0KSB2aWV3XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID0gJ2Egc2VxXG5cbiAgbGV0IGVtcHR5ID0gZW1wdHlcbiAgbGV0IGVsZW1lbnQgPSBlbGVtZW50XG5cbiAgbGV0IGNoZWNrIGwgciA9IGFicyAobCAtIHIpIDw9IDFcblxuICBsZXQgcmVjIG5vZGVfbGVmdCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yIHRoZW4gY29uY2F0IGwgciBlbHNlIG1hdGNoIGwgd2l0aFxuICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LmwpIG1sXG4gICAgICAgIHRoZW4gY29uY2F0IHQubCAobm9kZV9sZWZ0IHQuciByKVxuICAgICAgICBlbHNlIG1hdGNoIHQuciB3aXRoXG4gICAgICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBKb2luIHRyIC0+XG4gICAgICAgICAgICBsZXQgdHJyID0gbm9kZV9sZWZ0IHRyLnIgciBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHQubCkgKHJhbmsgdHIubCkpIChyYW5rIHRycilcbiAgICAgICAgICAgIHRoZW4gY29uY2F0IChjb25jYXQgdC5sIHRyLmwpIHRyclxuICAgICAgICAgICAgZWxzZSBjb25jYXQgdC5sIChjb25jYXQgdHIubCB0cnIpXG5cbiAgbGV0IHJlYyBub2RlX3JpZ2h0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbXIgbWwgdGhlbiBjb25jYXQgbCByIGVsc2UgbWF0Y2ggciB3aXRoXG4gICAgICB8IE5pbCB8IExlYWYgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQucikgbXJcbiAgICAgICAgdGhlbiBjb25jYXQgKG5vZGVfcmlnaHQgbCB0LmwpIHQuclxuICAgICAgICBlbHNlIG1hdGNoIHQubCB3aXRoXG4gICAgICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBKb2luIHRsIC0+XG4gICAgICAgICAgICBsZXQgdGxsID0gbm9kZV9yaWdodCBsIHRsLmwgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0bC5yKSAocmFuayB0LnIpKSAocmFuayB0bGwpXG4gICAgICAgICAgICB0aGVuIGNvbmNhdCB0bGwgKGNvbmNhdCB0bC5yIHQucilcbiAgICAgICAgICAgIGVsc2UgY29uY2F0IChjb25jYXQgdGxsIHRsLnIpIHQuclxuXG4gIGxldCBjb25jYXQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtclxuICAgIHRoZW4gY29uY2F0IGwgclxuICAgIGVsc2UgaWYgbWwgPD0gbXJcbiAgICB0aGVuIG5vZGVfcmlnaHQgbCByXG4gICAgZWxzZSBub2RlX2xlZnQgbCByXG5cbiAgbGV0IHZpZXcgPSB2aWV3XG5lbmRcblxubW9kdWxlIE1hcmtpbmcgOiBzaWdcbiAgdHlwZSBtYXJrID0gKCpwcml2YXRlKikgaW50XG4gIHZhbCBpc19zaGFyZWQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25vdF9zaGFyZWQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25vbmUgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX2JvdGggOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX29sZCA6IG1hcmsgLT4gYm9vbFxuICB2YWwgaXNfbmV3IDogbWFyayAtPiBib29sXG4gICgqdmFsIGhhc19vbGQgOiBtYXJrIC0+IGJvb2wqKVxuICAoKnZhbCBoYXNfbmV3IDogbWFyayAtPiBib29sKilcbiAgdmFsIHNldF9ib3RoIDogbWFyayAtPiBtYXJrXG4gIHZhbCB1bm1hcmsgOiBtYXJrIC0+IG1hcmtcbiAgdmFsIGdldF9pbmRleCA6IG1hcmsgLT4gaW50XG4gIHZhbCB3aXRoX2luZGV4X25ldyA6IGludCAtPiBtYXJrXG5cbiAgdHlwZSBzdGF0c1xuICB2YWwgbWFya2VkIDogc3RhdHMgLT4gaW50XG4gIHZhbCBzaGFyZWQgOiBzdGF0cyAtPiBpbnRcbiAgdmFsIGJsb2NrZWQgOiBzdGF0cyAtPiBpbnRcblxuICB0eXBlIHRyYXZlcnNhbFxuICB2YWwgb2xkX3N0YXRzIDogdHJhdmVyc2FsIC0+IHN0YXRzXG4gIHZhbCBuZXdfc3RhdHMgOiB0cmF2ZXJzYWwgLT4gc3RhdHNcblxuICB2YWwgdW5zYWZlX3RyYXZlcnNlIDogb2xkX3Jvb3Q6XyBzZXEgLT4gbmV3X3Jvb3Q6XyBzZXEgLT4gdHJhdmVyc2FsXG5cbiAgdmFsIHJlc3RvcmUgOiBfIHNlcSAtPiB1bml0XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSBtYXJrID0gaW50XG5cbiAgbGV0IG1hc2tfbm9uZSA9IDBcbiAgbGV0IG1hc2tfb2xkICA9IDFcbiAgbGV0IG1hc2tfbmV3ICA9IDJcbiAgbGV0IG1hc2tfYm90aCA9IDNcblxuICBsZXQgaXNfc2hhcmVkIG0gPSBtID0gLTFcbiAgbGV0IGlzX25vdF9zaGFyZWQgbSA9IG0gPD4gLTFcbiAgbGV0IGlzX25vbmUgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX25vbmVcbiAgbGV0IGlzX2JvdGggbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGhcbiAgbGV0IGlzX29sZCAgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX29sZFxuICBsZXQgaXNfbmV3ICBtID0gbSBsYW5kIG1hc2tfYm90aCA9IG1hc2tfbmV3XG4gICgqbGV0IGhhc19vbGQgbSA9IG0gbGFuZCBtYXNrX29sZCA8PiAwKilcbiAgKCpsZXQgaGFzX25ldyBtID0gbSBsYW5kIG1hc2tfbmV3IDw+IDAqKVxuICBsZXQgc2V0X2JvdGggbSA9IG0gbG9yIG1hc2tfYm90aFxuXG4gIGxldCBnZXRfaW5kZXggbSA9IG0gbHNyIG1hc2tfYml0c1xuICBsZXQgd2l0aF9pbmRleF9uZXcgaW5kZXggPSAoaW5kZXggbHNsIG1hc2tfYml0cykgbG9yIG1hc2tfbmV3XG5cbiAgbGV0IHVubWFyayBtID0gbSBsYW5kIGxub3QgbWFza19ib3RoXG5cbiAgdHlwZSBzdGF0cyA9IHtcbiAgICBtdXRhYmxlIG1hcmtlZDogaW50O1xuICAgIG11dGFibGUgc2hhcmVkOiBpbnQ7XG4gICAgbXV0YWJsZSBibG9ja2VkOiBpbnQ7XG4gIH1cbiAgbGV0IG1hcmtlZCBzID0gcy5tYXJrZWRcbiAgbGV0IHNoYXJlZCBzID0gcy5zaGFyZWRcbiAgbGV0IGJsb2NrZWQgcyA9IHMuYmxvY2tlZFxuXG4gIGxldCBta19zdGF0cyAoKSA9IHsgbWFya2VkID0gMDsgc2hhcmVkID0gMDsgYmxvY2tlZCA9IDAgfVxuXG4gIGxldCBuZXdfbWFya2VkIHN0YXRzID0gc3RhdHMubWFya2VkIDwtIHN0YXRzLm1hcmtlZCArIDFcbiAgbGV0IG5ld19zaGFyZWQgc3RhdHMgPSBzdGF0cy5zaGFyZWQgPC0gc3RhdHMuc2hhcmVkICsgMVxuICBsZXQgbmV3X2Jsb2NrZWQgc3RhdHMgPSBzdGF0cy5ibG9ja2VkIDwtIHN0YXRzLmJsb2NrZWQgKyAxXG5cbiAgbGV0IHJlYyBibG9jayBzdGF0cyBtYXNrID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IG1hc2tfYm90aCAmJiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDBcbiAgICAgIHRoZW4gKFxuICAgICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiBuZXdfbWFya2VkIHN0YXRzIGVsc2UgYXNzZXJ0IGZhbHNlO1xuICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgdCcubWFyayA8LSBtYXJrIGxvciBtYXNrX2JvdGhcbiAgICAgIClcbiAgICB8IEpvaW4gdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiBtYXNrX2JvdGggJiYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwXG4gICAgICB0aGVuIChcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gbmV3X21hcmtlZCBzdGF0cyBlbHNlIGFzc2VydCBmYWxzZTtcbiAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFza19ib3RoO1xuICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLmw7XG4gICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcucjtcbiAgICAgIClcblxuICBsZXQgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIChcbiAgICAgICAgKCogTm90IHlldCBzZWVuICopXG4gICAgICAgIG5ld19tYXJrZWQgc3RhdHM7XG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMCB0aGVuIChcbiAgICAgICAgICAoKiBOZXdseSBzaGFyZWQsIGNsZWFyIG1hc2sgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICAgIG5ld19zaGFyZWQgc3RhdHM7XG4gICAgICAgICkgZWxzZVxuICAgICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFzaztcbiAgICAgICk7XG4gICAgICBpZiBtYXJrIDw+IC0xICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrX2JvdGggdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgIG5ld19zaGFyZWQgc3RhdHNcbiAgICAgIClcbiAgICB8IEpvaW4gdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiAoXG4gICAgICAgICgqIE5vdCB5ZXQgc2VlbiAqKVxuICAgICAgICBuZXdfbWFya2VkIHN0YXRzO1xuICAgICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDAgdGhlbiAoXG4gICAgICAgICAgKCogTmV3bHkgc2hhcmVkLCBjbGVhciBtYXNrICopXG4gICAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgICBuZXdfc2hhcmVkIHN0YXRzO1xuICAgICAgICAgIGJsb2NrIHN0YXRzIG1hc2sgdCcubDtcbiAgICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLnI7XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogRmlyc3QgbWFyayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFzaztcbiAgICAgICAgICBRdWV1ZS5wdXNoIHQgcVxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaWYgbWFyayA8PiAtMSAmJiBtYXJrIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICBuZXdfc2hhcmVkIHN0YXRzXG4gICAgICApXG5cbiAgbGV0IGRlcXVldWUgc3RhdHMgcSBtYXNrID1cbiAgICBtYXRjaCBRdWV1ZS5wb3AgcSB3aXRoXG4gICAgfCBKb2luIHQgLT5cbiAgICAgIGlmIHQubWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2sgdGhlbiAoXG4gICAgICAgIGVucXVldWUgc3RhdHMgcSBtYXNrIHQubDtcbiAgICAgICAgZW5xdWV1ZSBzdGF0cyBxIG1hc2sgdC5yO1xuICAgICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICBsZXQgdHJhdmVyc2UxIHN0YXRzIHEgbWFzayA9XG4gICAgd2hpbGUgbm90IChRdWV1ZS5pc19lbXB0eSBxKSBkb1xuICAgICAgZGVxdWV1ZSBzdGF0cyBxIG1hc2tcbiAgICBkb25lXG5cbiAgbGV0IHJlYyB0cmF2ZXJzZSBzb2xkIHNuZXcgcW9sZCBxbmV3ID1cbiAgICBpZiBRdWV1ZS5pc19lbXB0eSBxb2xkIHRoZW5cbiAgICAgIHRyYXZlcnNlMSBzbmV3IHFuZXcgbWFza19uZXdcbiAgICBlbHNlIGlmIFF1ZXVlLmlzX2VtcHR5IHFuZXcgdGhlblxuICAgICAgdHJhdmVyc2UxIHNvbGQgcW9sZCBtYXNrX29sZFxuICAgIGVsc2UgKFxuICAgICAgZGVxdWV1ZSBzb2xkIHFvbGQgbWFza19vbGQ7XG4gICAgICBkZXF1ZXVlIHNuZXcgcW5ldyBtYXNrX25ldztcbiAgICAgIHRyYXZlcnNlIHNvbGQgc25ldyBxb2xkIHFuZXdcbiAgICApXG5cbiAgdHlwZSB0cmF2ZXJzYWwgPSB7XG4gICAgb2xkX3N0YXRzOiBzdGF0cztcbiAgICBuZXdfc3RhdHM6IHN0YXRzO1xuICB9XG5cbiAgbGV0IG9sZF9zdGF0cyB0ciA9IHRyLm9sZF9zdGF0c1xuICBsZXQgbmV3X3N0YXRzIHRyID0gdHIubmV3X3N0YXRzXG5cbiAgbGV0IHVuc2FmZV90cmF2ZXJzZSB+b2xkX3Jvb3Qgfm5ld19yb290ID1cbiAgICBsZXQgb2xkX3N0YXRzID0gbWtfc3RhdHMgKCkgaW5cbiAgICBsZXQgbmV3X3N0YXRzID0gbWtfc3RhdHMgKCkgaW5cbiAgICBsZXQgb2xkX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IG5ld19xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGVucXVldWUgb2xkX3N0YXRzIG9sZF9xdWV1ZSBtYXNrX29sZCBvbGRfcm9vdDtcbiAgICBlbnF1ZXVlIG5ld19zdGF0cyBuZXdfcXVldWUgbWFza19uZXcgbmV3X3Jvb3Q7XG4gICAgdHJhdmVyc2Ugb2xkX3N0YXRzIG5ld19zdGF0cyBvbGRfcXVldWUgbmV3X3F1ZXVlO1xuICAgIHtvbGRfc3RhdHM7IG5ld19zdGF0c31cblxuICBsZXQgcmVzdG9yZSA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gMFxuICAgIHwgSm9pbiB0IC0+XG4gICAgICB0Lm1hcmsgPC0gKG1heGkgKHJhbmsgdC5sKSAocmFuayB0LnIpICsgMSkgbHNsIG1hc2tfYml0c1xuZW5kXG5cbigqIE1hcmtzIGdvIHRocm91Z2ggbWFueSBzdGF0ZXMuXG5cbiAgIEEgbWFyayBpcyB1c3VhbGx5IHNwbGl0IGluIHR3byBwYXJ0czpcbiAgIC0gdGhlIG1hc2ssIG1hZGUgb2YgdGhlIHR3byBsZWFzdCBzaWduaWZpY2FudCBiaXRzXG4gICAtIHRoZSBpbmRleCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGZvcm1lZCBvZiBhbGwgdGhlIHJlbWFpbmluZyBiaXRzXG5cbiAgIFRoZSBleGNlcHRpb24gaXMgdGhlIGRpc3Rpbmd1aXNoZWQgbWFzayB3aXRoIHZhbHVlIC0xIChhbGwgYml0cyBzZXQgdG8gMSlcbiAgIHRoYXQgZGVub3RlIGEgXCJsb2NrZWRcIiBub2RlLlxuXG4gICBXaGVuIHRoZSBtYXNrIGlzIDAsIHRoZSBpbmRleCBkZW5vdGVzIHRoZSByYW5rIG9mIHRoZSBub2RlOiB0aGUgZGVwdGggb2ZcbiAgIHRoZSB0cmVlIHJvb3RlZCBhdCB0aGlzIG5vZGUuXG4gICBXaGVuIHRoZSBtYXNrIGlzIG5vbi16ZXJvLCB0aGUgaW5kZXggbWVhbmluZyBpcyBsZWZ0IHRvIHRoZSB0cmF2ZXJzYWxcbiAgIGFsZ29yaXRobS5cbiAgIFJlc3RvcmluZyB0aGUgbWFyayBzZXRzIHRoZSBtYXNrIHRvIDAgYW5kIHRoZSBpbmRleHQgdG8gdGhlIHJhbmssXG4gICBidXQgaXMgb25seSBwb3NzaWJsZSB3aGVuIHRoZSBjaGlsZHJlbiBvZiB0aGUgbm9kZSBhcmUgdGhlbXNlbHZlcyByZXN0b3JlZC5cbiopXG5cbm1vZHVsZSBSZWR1Y2VyID0gc3RydWN0XG4gIHR5cGUgKCsnYSwgJ2IpIHhmb3JtID1cbiAgICB8IFhFbXB0eVxuICAgIHwgWExlYWYgb2YgeyBhOiAnYSB0OyBtdXRhYmxlIGI6ICdiIG9wdGlvbjsgfVxuICAgIHwgWEpvaW4gb2YgeyBhOiAnYSB0OyBtdXRhYmxlIGI6ICdiIG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgbDogKCdhLCAnYikgeGZvcm07IHI6ICgnYSwgJ2IpIHhmb3JtOyB9XG5cbiAgdHlwZSAoJ2EsICdiKSB1bm1hcmtfc3RhdGUgPSB7XG4gICAgZHJvcHBlZCA6ICdiIG9wdGlvbiBhcnJheTtcbiAgICBtdXRhYmxlIGRyb3BwZWRfbGVhZiA6IGludDtcbiAgICBtdXRhYmxlIGRyb3BwZWRfam9pbiA6IGludDtcbiAgICBzaGFyZWQgOiAnYSBzZXEgYXJyYXk7XG4gICAgc2hhcmVkX3ggOiAoJ2EsICdiKSB4Zm9ybSBsaXN0IGFycmF5O1xuICAgIG11dGFibGUgc2hhcmVkX2luZGV4OiBpbnQ7XG4gIH1cblxuICBsZXQgbmV4dF9zaGFyZWRfaW5kZXggc3QgPVxuICAgIGxldCByZXN1bHQgPSBzdC5zaGFyZWRfaW5kZXggaW5cbiAgICBzdC5zaGFyZWRfaW5kZXggPC0gcmVzdWx0ICsgMTtcbiAgICByZXN1bHRcblxuICBsZXQgcmVjIHVuYmxvY2sgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+ICgpXG4gICAgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYSm9pbiB7YSA9IE5pbCB8IExlYWYgXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYTGVhZiB7YSA9IExlYWYgdCc7IF99IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW5cbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgIHwgWEpvaW4ge2EgPSBKb2luIHQnOyBsOyByOyBffSAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICB1bmJsb2NrIGw7XG4gICAgICAgIHVuYmxvY2sgclxuICAgICAgKVxuXG4gIGxldCByZWMgdW5tYXJrX29sZCBzdCA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gKClcbiAgICB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhKb2luIHthID0gTmlsIHwgTGVhZiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFhMZWFmIHthID0gTGVhZiB0JyBhcyBhOyBifSBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBkcm9wcGVkX2xlYWYgPSBzdC5kcm9wcGVkX2xlYWYgaW5cbiAgICAgICAgaWYgZHJvcHBlZF9sZWFmID4gLTEgdGhlbiAoXG4gICAgICAgICAgc3QuZHJvcHBlZC4oZHJvcHBlZF9sZWFmKSA8LSBiO1xuICAgICAgICAgIHN0LmRyb3BwZWRfbGVhZiA8LSBkcm9wcGVkX2xlYWYgKyAxO1xuICAgICAgICAgIGFzc2VydCAoc3QuZHJvcHBlZF9sZWFmIDw9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICAgICk7XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFya1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIGE7XG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gW3RdO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcud2l0aF9pbmRleF9uZXcgaW5kZXg7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gTWFya2luZy5nZXRfaW5kZXggbWFyayBpblxuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHQgOjogc3Quc2hhcmVkX3guKGluZGV4KTtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICAgICgqdCcubWFyayA8LSBtYXJrIGxhbmQgbG5vdCBib3RoX21hc2sqKVxuICAgICAgKVxuICAgIHwgWEpvaW4ge2EgPSBKb2luIHQnIGFzIGE7IGw7IHI7IGJ9IGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gYTtcbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSBbdF07XG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy53aXRoX2luZGV4X25ldyBpbmRleDtcbiAgICAgICAgdW5ibG9jayBsO1xuICAgICAgICB1bmJsb2NrIHI7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgaWYgc3QuZHJvcHBlZF9qb2luID4gLTEgdGhlbiAoXG4gICAgICAgICAgbGV0IGRyb3BwZWRfam9pbiA9IHN0LmRyb3BwZWRfam9pbiAtIDEgaW5cbiAgICAgICAgICBzdC5kcm9wcGVkLihkcm9wcGVkX2pvaW4pIDwtIGI7XG4gICAgICAgICAgc3QuZHJvcHBlZF9qb2luIDwtIGRyb3BwZWRfam9pbjtcbiAgICAgICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA8PSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgICApO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgIHVubWFya19vbGQgc3QgbDtcbiAgICAgICAgdW5tYXJrX29sZCBzdCByO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHQgOjogc3Quc2hhcmVkX3guKGluZGV4KTtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgICApXG5cbiAgbGV0IHByZXBhcmVfc2hhcmVkIHN0ID1cbiAgICBmb3IgaSA9IDAgdG8gc3Quc2hhcmVkX2luZGV4IC0gMSBkb1xuICAgICAgYmVnaW4gbWF0Y2ggc3Quc2hhcmVkLihpKSB3aXRoXG4gICAgICAgIHwgTmlsIC0+ICgpXG4gICAgICAgIHwgTGVhZiB0IC0+IHQubWFyayA8LSBNYXJraW5nLnNldF9ib3RoIHQubWFya1xuICAgICAgICB8IEpvaW4gdCAtPiB0Lm1hcmsgPC0gTWFya2luZy5zZXRfYm90aCB0Lm1hcmtcbiAgICAgIGVuZDtcbiAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpKSB3aXRoXG4gICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBbX10gLT4gKClcbiAgICAgIHwgeHMgLT4gc3Quc2hhcmVkX3guKGkpIDwtIExpc3QucmV2IHhzXG4gICAgZG9uZVxuXG4gIGxldCByZWMgdW5tYXJrX25ldyBzdCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gWEVtcHR5XG4gICAgfCBMZWFmIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG1hcmsgbHNyIG1hc2tfYml0cyBpblxuICAgICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaW5kZXgpIHdpdGhcbiAgICAgICAgfCBbXSAtPiBYTGVhZiB7YSA9IHQ7IGIgPSBOb25lfVxuICAgICAgICB8IHggOjogeHMgLT4gc3Quc2hhcmVkX3guKGluZGV4KSA8LSB4czsgeFxuICAgICAgKSBlbHNlIChcbiAgICAgICAgdCcubWFyayA8LSAwO1xuICAgICAgICBYTGVhZiB7YSA9IHQ7IGIgPSBOb25lfVxuICAgICAgKVxuICAgIHwgSm9pbiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgPSAtMSB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbmV4dF9zaGFyZWRfaW5kZXggc3QgaW5cbiAgICAgICAgdCcubWFyayA8LSAwO1xuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSB0O1xuICAgICAgICBsZXQgbCA9IHVubWFya19uZXcgc3QgdCcubCBpblxuICAgICAgICBsZXQgciA9IHVubWFya19uZXcgc3QgdCcuciBpblxuICAgICAgICBYSm9pbiB7YSA9IHQ7IGIgPSBOb25lOyBsOyByfVxuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGluZGV4KSB3aXRoXG4gICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgeCA6OiB4cyAtPlxuICAgICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0geHM7XG4gICAgICAgICAgaWYgeHMgPT0gW10gdGhlbiB0Jy5tYXJrIDwtIDA7XG4gICAgICAgICAgeFxuICAgICAgKSBlbHNlIChcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayB0Jy5tYXJrO1xuICAgICAgICBsZXQgbCA9IHVubWFya19uZXcgc3QgdCcubCBpblxuICAgICAgICBsZXQgciA9IHVubWFya19uZXcgc3QgdCcuciBpblxuICAgICAgICBYSm9pbiB7YSA9IHQ7IGIgPSBOb25lOyBsOyByfVxuICAgICAgKVxuXG4gIHR5cGUgJ2IgZHJvcHBlZCA9IHtcbiAgICBsZWF2ZXM6IGludDtcbiAgICB0YWJsZTogJ2Igb3B0aW9uIGFycmF5O1xuICAgIGV4dHJhX2xlYWY6ICdiIGxpc3Q7XG4gICAgZXh0cmFfam9pbjogJ2IgbGlzdDtcbiAgfVxuXG4gIGxldCBub19kcm9wcGVkID1cbiAgICB7IGxlYXZlcyA9IDA7IHRhYmxlID0gW3x8XTsgZXh0cmFfbGVhZiA9IFtdOyBleHRyYV9qb2luID0gW10gfVxuXG4gIGxldCBkaWZmIGdldF9kcm9wcGVkIHhvbGQgdG5ldyA9IG1hdGNoIHhvbGQsIHRuZXcgd2l0aFxuICAgIHwgWEVtcHR5LCBOaWwgLT4gbm9fZHJvcHBlZCwgWEVtcHR5XG4gICAgfCAoWExlYWYge2E7IF99IHwgWEpvaW4ge2E7IF99KSwgXyB3aGVuIGEgPT0gdG5ldyAtPiBub19kcm9wcGVkLCB4b2xkXG4gICAgfCBfIC0+XG4gICAgICBsZXQgdHJhdmVyc2FsID1cbiAgICAgICAgTWFya2luZy51bnNhZmVfdHJhdmVyc2VcbiAgICAgICAgICB+b2xkX3Jvb3Q6KG1hdGNoIHhvbGQgd2l0aFxuICAgICAgICAgICAgICB8IFhFbXB0eSAtPiBlbXB0eVxuICAgICAgICAgICAgICB8IChYTGVhZiB7YTsgX30gfCBYSm9pbiB7YTsgX30pIC0+IGFcbiAgICAgICAgICAgIClcbiAgICAgICAgICB+bmV3X3Jvb3Q6dG5ld1xuICAgICAgaW5cbiAgICAgIGxldCBzb2xkID0gTWFya2luZy5vbGRfc3RhdHMgdHJhdmVyc2FsIGluXG4gICAgICBsZXQgc25ldyA9IE1hcmtpbmcubmV3X3N0YXRzIHRyYXZlcnNhbCBpblxuICAgICAgbGV0IG5iX2Ryb3BwZWQgPVxuICAgICAgICBNYXJraW5nLm1hcmtlZCBzb2xkIC0gKE1hcmtpbmcuYmxvY2tlZCBzb2xkICsgTWFya2luZy5ibG9ja2VkIHNuZXcpXG4gICAgICBpblxuICAgICAgbGV0IG5iX3NoYXJlZCA9XG4gICAgICAgIE1hcmtpbmcuc2hhcmVkIHNvbGQgKyBNYXJraW5nLnNoYXJlZCBzbmV3XG4gICAgICBpblxuICAgICAgbGV0IHN0ID0ge1xuICAgICAgICBkcm9wcGVkID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiBBcnJheS5tYWtlIG5iX2Ryb3BwZWQgTm9uZSBlbHNlIFt8fF07XG4gICAgICAgIGRyb3BwZWRfbGVhZiA9IGlmIGdldF9kcm9wcGVkIHRoZW4gMCBlbHNlIC0gMTtcbiAgICAgICAgZHJvcHBlZF9qb2luID0gaWYgZ2V0X2Ryb3BwZWQgdGhlbiBuYl9kcm9wcGVkIGVsc2UgLSAxO1xuICAgICAgICBzaGFyZWQgPSBBcnJheS5tYWtlIG5iX3NoYXJlZCBOaWw7XG4gICAgICAgIHNoYXJlZF94ID0gQXJyYXkubWFrZSBuYl9zaGFyZWQgW107XG4gICAgICAgIHNoYXJlZF9pbmRleCA9IDA7XG4gICAgICB9IGluXG4gICAgICAoKlByaW50Zi5lcHJpbnRmIFwic29sZC5zaGFyZWQ6JWQgc29sZC5tYXJrZWQ6JWQgc29sZC5ibG9ja2VkOiVkXFxuJSFcIlxuICAgICAgICBzb2xkLnNoYXJlZCBzb2xkLm1hcmtlZCBzb2xkLmJsb2NrZWQ7XG4gICAgICBQcmludGYuZXByaW50ZiBcInNuZXcuc2hhcmVkOiVkIHNuZXcubWFya2VkOiVkIHNuZXcuYmxvY2tlZDolZFxcbiUhXCJcbiAgICAgICAgc25ldy5zaGFyZWQgc25ldy5tYXJrZWQgc25ldy5ibG9ja2VkOyopXG4gICAgICB1bm1hcmtfb2xkIHN0IHhvbGQ7XG4gICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA9IHN0LmRyb3BwZWRfam9pbik7XG4gICAgICBwcmVwYXJlX3NoYXJlZCBzdDtcbiAgICAgIGxldCByZXN1bHQgPSB1bm1hcmtfbmV3IHN0IHRuZXcgaW5cbiAgICAgICgqUHJpbnRmLmVwcmludGYgXCJuZXdfY29tcHV0ZWQ6JWQlIVxcblwiICFuZXdfY29tcHV0ZWQ7KilcbiAgICAgIGZvciBpID0gc3Quc2hhcmVkX2luZGV4IC0gMSBkb3dudG8gMCBkb1xuICAgICAgICBNYXJraW5nLnJlc3RvcmUgc3Quc2hhcmVkLihpKVxuICAgICAgZG9uZTtcbiAgICAgIGlmIGdldF9kcm9wcGVkIHRoZW4gKFxuICAgICAgICBsZXQgeGxlYWYgPSByZWYgW10gaW5cbiAgICAgICAgbGV0IHhqb2luID0gcmVmIFtdIGluXG4gICAgICAgIGZvciBpID0gMCB0byBzdC5zaGFyZWRfaW5kZXggLSAxIGRvXG4gICAgICAgICAgTGlzdC5pdGVyIChmdW5jdGlvblxuICAgICAgICAgICAgICB8IFhMZWFmIHsgYiA9IFNvbWUgYjsgX30gLT4geGxlYWYgOj0gYiA6OiAheGxlYWZcbiAgICAgICAgICAgICAgfCBYSm9pbiB7IGIgPSBTb21lIGI7IF99IC0+IHhqb2luIDo9IGIgOjogIXhqb2luXG4gICAgICAgICAgICAgIHwgXyAtPiAoKVxuICAgICAgICAgICAgKSBzdC5zaGFyZWRfeC4oaSlcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKHsgbGVhdmVzID0gc3QuZHJvcHBlZF9sZWFmO1xuICAgICAgICAgICB0YWJsZSA9IHN0LmRyb3BwZWQ7XG4gICAgICAgICAgIGV4dHJhX2xlYWYgPSAheGxlYWY7XG4gICAgICAgICAgIGV4dHJhX2pvaW4gPSAheGpvaW4gfSwgcmVzdWx0KVxuICAgICAgKSBlbHNlXG4gICAgICAgIG5vX2Ryb3BwZWQsIHJlc3VsdFxuXG4gIHR5cGUgKCdhLCAnYikgbWFwX3JlZHVjZSA9IHtcbiAgICBtYXA6ICdhIC0+ICdiO1xuICAgIHJlZHVjZTogJ2IgLT4gJ2IgLT4gJ2I7XG4gIH1cblxuICBsZXQgZXZhbCBtYXBfcmVkdWNlID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiBOb25lXG4gICAgfCBvdGhlciAtPlxuICAgICAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgICAgICB8IFhFbXB0eSB8IFhMZWFmIHthID0gTmlsIHwgSm9pbiBfOyBffSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgfCBYTGVhZiB7YiA9IFNvbWUgYjsgX30gfCBYSm9pbiB7YiA9IFNvbWUgYjsgX30gLT4gYlxuICAgICAgICB8IFhMZWFmICh7YSA9IExlYWYgdCc7XyB9IGFzIHQpIC0+XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IG1hcF9yZWR1Y2UubWFwIHQnLnYgaW5cbiAgICAgICAgICB0LmIgPC0gU29tZSByZXN1bHQ7XG4gICAgICAgICAgcmVzdWx0XG4gICAgICAgIHwgWEpvaW4gdCAtPlxuICAgICAgICAgIGxldCBsID0gYXV4IHQubCBhbmQgciA9IGF1eCB0LnIgaW5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gbWFwX3JlZHVjZS5yZWR1Y2UgbCByIGluXG4gICAgICAgICAgdC5iIDwtIFNvbWUgcmVzdWx0O1xuICAgICAgICAgIHJlc3VsdFxuICAgICAgaW5cbiAgICAgIFNvbWUgKGF1eCBvdGhlcilcblxuICB0eXBlICgnYSwgJ2IpIHJlZHVjZXIgPSAoJ2EsICdiKSBtYXBfcmVkdWNlICogKCdhLCAnYikgeGZvcm1cblxuICBsZXQgbWFrZSB+bWFwIH5yZWR1Y2UgPSAoe21hcDsgcmVkdWNlfSwgWEVtcHR5KVxuXG4gIGxldCByZWR1Y2UgKG1hcF9yZWR1Y2UsIHRyZWUgOiBfIHJlZHVjZXIpID1cbiAgICBldmFsIG1hcF9yZWR1Y2UgdHJlZVxuXG4gIGxldCB1cGRhdGUgKG1hcF9yZWR1Y2UsIG9sZF90cmVlIDogXyByZWR1Y2VyKSBuZXdfdHJlZSA6IF8gcmVkdWNlciA9XG4gICAgbGV0IF8sIHRyZWUgPSBkaWZmIGZhbHNlIG9sZF90cmVlIG5ld190cmVlIGluXG4gICAgKG1hcF9yZWR1Y2UsIHRyZWUpXG5cbiAgbGV0IHVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgKG1hcF9yZWR1Y2UsIG9sZF90cmVlIDogXyByZWR1Y2VyKSBuZXdfdHJlZVxuICAgIDogXyBkcm9wcGVkICogXyByZWR1Y2VyID1cbiAgICBsZXQgZHJvcHBlZCwgdHJlZSA9IGRpZmYgdHJ1ZSBvbGRfdHJlZSBuZXdfdHJlZSBpblxuICAgIChkcm9wcGVkLCAobWFwX3JlZHVjZSwgdHJlZSkpXG5cbiAgbGV0IGZvbGRfZHJvcHBlZCBraW5kIGYgZHJvcHBlZCBhY2MgPVxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgbGV0IHN0YXJ0LCBib3VuZCA9IG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsICAgIC0+IDAsIEFycmF5Lmxlbmd0aCBkcm9wcGVkLnRhYmxlXG4gICAgICB8IGBNYXAgICAgLT4gMCwgZHJvcHBlZC5sZWF2ZXNcbiAgICAgIHwgYFJlZHVjZSAtPiBkcm9wcGVkLmxlYXZlcywgQXJyYXkubGVuZ3RoIGRyb3BwZWQudGFibGVcbiAgICBpblxuICAgIGZvciBpID0gc3RhcnQgdG8gYm91bmQgLSAxIGRvXG4gICAgICBtYXRjaCBkcm9wcGVkLnRhYmxlLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSB4IC0+IGFjYyA6PSBmIHggIWFjY1xuICAgIGRvbmU7XG4gICAgYmVnaW4gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgfCBgTWFwIC0+XG4gICAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gYWNjIDo9IGYgeCAhYWNjKSBkcm9wcGVkLmV4dHJhX2xlYWZcbiAgICAgIHwgYFJlZHVjZSAtPiAoKVxuICAgIGVuZDtcbiAgICBiZWdpbiBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCB8IGBSZWR1Y2UgLT5cbiAgICAgICAgTGlzdC5pdGVyIChmdW4geCAtPiBhY2MgOj0gZiB4ICFhY2MpIGRyb3BwZWQuZXh0cmFfam9pblxuICAgICAgfCBgTWFwIC0+ICgpXG4gICAgZW5kO1xuICAgICFhY2NcbmVuZFxuXG4oKiBMd2QgaW50ZXJmYWNlICopXG5cbmxldCByZWMgcHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgPSBmdW5jdGlvblxuICB8IE5pbCAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiB0IC0+IG1hcCB0LnZcbiAgfCBKb2luIHQgLT5cbiAgICByZWR1Y2VcbiAgICAgIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSB0LmwpXG4gICAgICAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgdC5yKVxuXG5sZXQgZm9sZCB+bWFwIH5yZWR1Y2Ugc2VxID1cbiAgbWF0Y2ggTHdkLmlzX3B1cmUgc2VxIHdpdGhcbiAgfCBTb21lIE5pbCAtPiBMd2QucHVyZSBOb25lXG4gIHwgU29tZSBvdGhlciAtPiBMd2QucHVyZSAoU29tZSAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2Ugb3RoZXIpKVxuICB8IE5vbmUgLT5cbiAgICBsZXQgcmVkdWNlciA9IHJlZiAoUmVkdWNlci5tYWtlIH5tYXAgfnJlZHVjZSkgaW5cbiAgICBMd2QubWFwIHNlcSB+ZjpiZWdpbiBmdW4gc2VxIC0+XG4gICAgICBsZXQgcmVkdWNlcicgPSBSZWR1Y2VyLnVwZGF0ZSAhcmVkdWNlciBzZXEgaW5cbiAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICBSZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJ1xuICAgIGVuZFxuXG5sZXQgZm9sZF9tb25vaWQgbWFwICh6ZXJvLCByZWR1Y2UpIHNlcSA9XG4gIG1hdGNoIEx3ZC5pc19wdXJlIHNlcSB3aXRoXG4gIHwgU29tZSBOaWwgLT4gTHdkLnB1cmUgemVyb1xuICB8IFNvbWUgb3RoZXIgLT4gTHdkLnB1cmUgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIG90aGVyKVxuICB8IE5vbmUgLT5cbiAgICBsZXQgcmVkdWNlciA9IHJlZiAoUmVkdWNlci5tYWtlIH5tYXAgfnJlZHVjZSkgaW5cbiAgICBMd2QubWFwIHNlcSB+ZjpiZWdpbiBmdW4gc2VxIC0+XG4gICAgICBsZXQgcmVkdWNlcicgPSBSZWR1Y2VyLnVwZGF0ZSAhcmVkdWNlciBzZXEgaW5cbiAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICBtYXRjaCBSZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJyB3aXRoXG4gICAgICB8IE5vbmUgLT4gemVyb1xuICAgICAgfCBTb21lIHggLT4geFxuICAgIGVuZFxuXG5sZXQgbW9ub2lkID0gKGVtcHR5LCBjb25jYXQpXG5cbmxldCB0cmFuc2Zvcm1fbGlzdCBscyBmID1cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgZiBtb25vaWQgbHNcblxubGV0IG9mX2xpc3QgbHMgPSB0cmFuc2Zvcm1fbGlzdCBscyBlbGVtZW50XG5cbmxldCByZWMgb2Zfc3ViX2FycmF5IGYgYXJyIGkgaiA9XG4gIGlmIGogPCBpIHRoZW4gZW1wdHlcbiAgZWxzZSBpZiBqID0gaSB0aGVuIGYgYXJyLihpKVxuICBlbHNlXG4gICAgbGV0IGsgPSBpICsgKGogLSBpKSAvIDIgaW5cbiAgICBjb25jYXQgKG9mX3N1Yl9hcnJheSBmIGFyciBpIGspIChvZl9zdWJfYXJyYXkgZiBhcnIgKGsgKyAxKSBqKVxuXG5sZXQgdHJhbnNmb3JtX2FycmF5IGFyciBmID0gb2Zfc3ViX2FycmF5IGYgYXJyIDAgKEFycmF5Lmxlbmd0aCBhcnIgLSAxKVxuXG5sZXQgb2ZfYXJyYXkgYXJyID0gdHJhbnNmb3JtX2FycmF5IGFyciBlbGVtZW50XG5cbmxldCB0b19saXN0IHggPVxuICBsZXQgcmVjIGZvbGQgeCBhY2MgPSBtYXRjaCB4IHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IExlYWYgdCAtPiB0LnYgOjogYWNjXG4gICAgfCBKb2luIHQgLT4gZm9sZCB0LmwgKGZvbGQgdC5yIGFjYylcbiAgaW5cbiAgZm9sZCB4IFtdXG5cbmxldCB0b19hcnJheSB4ID1cbiAgbGV0IHJlYyBjb3VudCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gMFxuICAgIHwgTGVhZiBfIC0+IDFcbiAgICB8IEpvaW4gdCAtPiBjb3VudCB0LmwgKyBjb3VudCB0LnJcbiAgaW5cbiAgbWF0Y2ggY291bnQgeCB3aXRoXG4gIHwgMCAtPiBbfHxdXG4gIHwgbiAtPlxuICAgIGxldCByZWMgZmlyc3QgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgdCAtPiB0LnZcbiAgICAgIHwgSm9pbiB0IC0+IGZpcnN0IHQubFxuICAgIGluXG4gICAgbGV0IGZpcnN0ID0gZmlyc3QgeCBpblxuICAgIGxldCBhcnIgPSBBcnJheS5tYWtlIG4gZmlyc3QgaW5cbiAgICBsZXQgcmVjIGZvbGQgaSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiBpXG4gICAgICB8IExlYWYgdCAtPiBhcnIuKGkpIDwtIHQudjsgaSArIDFcbiAgICAgIHwgSm9pbiB0IC0+XG4gICAgICAgIGxldCBpID0gZm9sZCBpIHQubCBpblxuICAgICAgICBsZXQgaSA9IGZvbGQgaSB0LnIgaW5cbiAgICAgICAgaVxuICAgIGluXG4gICAgbGV0IF8gOiBpbnQgPSBmb2xkIDAgeCBpblxuICAgIGFyclxuXG5sZXQgbHdkX2VtcHR5IDogJ2EgdCBMd2QudCA9IEx3ZC5wdXJlIE5pbFxubGV0IGx3ZF9tb25vaWQgOiAnYS4gJ2EgdCBMd2QudCBMd2RfdXRpbHMubW9ub2lkID1cbiAgKGx3ZF9lbXB0eSwgZnVuIHggeSAtPiBMd2QubWFwMiB+Zjpjb25jYXQgeCB5KVxuXG5sZXQgbWFwIGYgc2VxID1cbiAgZm9sZF9tb25vaWQgKGZ1biB4IC0+IGVsZW1lbnQgKGYgeCkpIG1vbm9pZCBzZXFcblxubGV0IGZpbHRlciBmIHNlcSA9XG4gIGZvbGRfbW9ub2lkIChmdW4geCAtPiBpZiBmIHggdGhlbiBlbGVtZW50IHggZWxzZSBlbXB0eSkgbW9ub2lkIHNlcVxuXG5sZXQgZmlsdGVyX21hcCBmIHNlcSA9XG4gIGxldCBzZWxlY3QgeCA9IG1hdGNoIGYgeCB3aXRoXG4gICAgfCBTb21lIHkgLT4gZWxlbWVudCB5XG4gICAgfCBOb25lIC0+IGVtcHR5XG4gIGluXG4gIGZvbGRfbW9ub2lkIHNlbGVjdCBtb25vaWQgc2VxXG5cbmxldCBiaW5kIChzZXEgOiAnYSBzZXEgTHdkLnQpIChmIDogJ2EgLT4gJ2Igc2VxIEx3ZC50KSAgOiAnYiBzZXEgTHdkLnQgPVxuICBMd2Quam9pbiAoZm9sZF9tb25vaWQgZiBsd2RfbW9ub2lkIHNlcSlcblxubGV0IHNlcV9iaW5kIChzZXEgOiAnYSBzZXEgTHdkLnQpIChmIDogJ2EgLT4gJ2Igc2VxKSAgOiAnYiBzZXEgTHdkLnQgPVxuICBmb2xkX21vbm9pZCBmIG1vbm9pZCBzZXFcblxubGV0IGxpZnQgKHNlcSA6ICdhIEx3ZC50IHNlcSBMd2QudCkgOiAnYSBzZXEgTHdkLnQgPVxuICBiaW5kIHNlcSAoTHdkLm1hcCB+ZjplbGVtZW50KVxuXG5tb2R1bGUgQmFsYW5jZWRUcmVlIDogc2lnXG4gIHR5cGUgJ2EgdCA9XG4gICAgfCBMZWFmXG4gICAgfCBOb2RlIG9mIHtcbiAgICAgICAgcmFuazogaW50O1xuICAgICAgICBsOiAnYSB0O1xuICAgICAgICB4OiBpbnQgKiAnYSBzZXE7XG4gICAgICAgIHI6ICdhIHQ7XG4gICAgICAgIG11dGFibGUgc2VxOiAnYSBzZXE7XG4gICAgICB9XG4gIHZhbCBsZWFmIDogJ2EgdFxuICAoKnZhbCBub2RlIDogJ2EgdCAtPiBpbnQgKiAnYSBzZXEgLT4gJ2EgdCAtPiAnYSB0KilcblxuICB2YWwgaW5zZXJ0IDogY21wOignYSAtPiAnYSAtPiBpbnQpIC0+IGludCAtPiAnYSBzZXEgLT4gJ2EgdCAtPiAnYSB0XG4gICgqdmFsIHVuaW9uIDogY21wOignYSAtPiAnYSAtPiBpbnQpIC0+ICdhIHQgLT4gJ2EgdCAtPiAnYSB0KilcbmVuZCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPVxuICAgIHwgTGVhZlxuICAgIHwgTm9kZSBvZiB7XG4gICAgICAgIHJhbms6IGludDtcbiAgICAgICAgbDogJ2EgdDtcbiAgICAgICAgeDogaW50ICogJ2Egc2VxO1xuICAgICAgICByOiAnYSB0O1xuICAgICAgICBtdXRhYmxlIHNlcTogJ2Egc2VxO1xuICAgICAgfVxuXG4gIGxldCBsZWFmID0gTGVhZlxuXG4gIGxldCByYW5rID0gZnVuY3Rpb25cbiAgICB8IExlYWYgLT4gMFxuICAgIHwgTm9kZSB0IC0+IHQucmFua1xuXG4gIGxldCBjaGVjayBsIHIgPSBhYnMgKGwgLSByKSA8PSAxXG5cbiAgbGV0IG5vZGUgbCB4IHIgPVxuICAgIE5vZGUge2w7IHg7IHI7IHNlcSA9IGVtcHR5OyByYW5rID0gbWF4aSAocmFuayBsKSAocmFuayByKSArIDF9XG5cbiAgbGV0IHJlYyBub2RlX2xlZnQgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yIHRoZW4gbm9kZSBsIHggciBlbHNlIG1hdGNoIGwgd2l0aFxuICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBOb2RlIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5sKSBtbFxuICAgICAgICB0aGVuIG5vZGUgdC5sIHQueCAobm9kZV9sZWZ0IHQuciB4IHIpXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5yIHdpdGhcbiAgICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBOb2RlIHRyIC0+XG4gICAgICAgICAgICBsZXQgdHJyID0gbm9kZV9sZWZ0IHRyLnIgeCByIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdC5sKSAocmFuayB0ci5sKSkgKHJhbmsgdHJyKVxuICAgICAgICAgICAgdGhlbiBub2RlIChub2RlIHQubCB0LnggdHIubCkgdHIueCB0cnJcbiAgICAgICAgICAgIGVsc2Ugbm9kZSB0LmwgdC54IChub2RlIHRyLmwgdHIueCB0cnIpXG5cbiAgbGV0IHJlYyBub2RlX3JpZ2h0IGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtciBtbCB0aGVuIG5vZGUgbCB4IHIgZWxzZSBtYXRjaCByIHdpdGhcbiAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQucikgbXJcbiAgICAgICAgdGhlbiBub2RlIChub2RlX3JpZ2h0IGwgeCB0LmwpIHQueCB0LnJcbiAgICAgICAgZWxzZSBtYXRjaCB0Lmwgd2l0aFxuICAgICAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICB8IE5vZGUgdGwgLT5cbiAgICAgICAgICAgIGxldCB0bGwgPSBub2RlX3JpZ2h0IGwgeCB0bC5sIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdGwucikgKHJhbmsgdC5yKSkgKHJhbmsgdGxsKVxuICAgICAgICAgICAgdGhlbiBub2RlIHRsbCB0bC54IChub2RlIHRsLnIgdC54IHQucilcbiAgICAgICAgICAgIGVsc2Ugbm9kZSAobm9kZSB0bGwgdGwueCB0bC5yKSB0LnggdC5yXG5cbiAgbGV0IG5vZGUgbCB4IHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1sIG1yXG4gICAgdGhlbiBub2RlIGwgeCByXG4gICAgZWxzZSBpZiBtbCA8PSBtclxuICAgIHRoZW4gbm9kZV9yaWdodCBsIHggclxuICAgIGVsc2Ugbm9kZV9sZWZ0IGwgeCByXG5cbiAgbGV0IHJlYyBqb2luIGwgciA9IG1hdGNoIGwsIHIgd2l0aFxuICAgIHwgTGVhZiwgdCB8IHQsIExlYWYgLT4gdFxuICAgIHwgTm9kZSB0bCwgTm9kZSB0ciAtPlxuICAgICAgaWYgdGwucmFuayA8PSB0ci5yYW5rIHRoZW5cbiAgICAgICAgbm9kZSAoam9pbiBsIHRyLmwpIHRyLnggdHIuclxuICAgICAgZWxzZVxuICAgICAgICBub2RlIHRsLmwgdGwueCAoam9pbiB0bC5yIHIpXG5cbiAgbGV0IGdldF9lbGVtZW50ID0gZnVuY3Rpb25cbiAgICB8IE5pbCB8IEpvaW4gXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IExlYWYge3Y7X30gLT4gdlxuXG4gICgqbGV0IHJlYyBzcGxpdCB+Y21wIGsgPSBmdW5jdGlvblxuICAgIHwgTGVhZiAtPiBMZWFmLCAwLCBMZWFmXG4gICAgfCBOb2RlIHQgLT5cbiAgICAgIGxldCBjID0gY21wIGsgKGdldF9lbGVtZW50IChzbmQgKHQueCkpKSBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICBsZXQgbCcsIHYnLCByJyA9IHNwbGl0IH5jbXAgayB0LmwgaW5cbiAgICAgICAgbCcsIHYnLCBqb2luIHInIHQuclxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIGxldCBsJywgdicsIHInID0gc3BsaXQgfmNtcCBrIHQuciBpblxuICAgICAgICBqb2luIHQubCBsJywgdicsIHInXG4gICAgICBlbHNlXG4gICAgICAgICh0LmwsIGZzdCB0LngsIHQucilcblxuICBsZXQgcmVjIHVuaW9uIH5jbXAgdDEgdDIgPVxuICAgIG1hdGNoIHQxLCB0MiB3aXRoXG4gICAgfCBMZWFmLCB0IHwgdCwgTGVhZiAtPiB0XG4gICAgfCBOb2RlIHQxLCB0MiAgLT5cbiAgICAgIGxldCBtMSwgazEgPSB0MS54IGluXG4gICAgICBsZXQgbDIsIG0yLCByMiA9IHNwbGl0IH5jbXAgKGdldF9lbGVtZW50IGsxKSB0MiBpblxuICAgICAgbGV0IGwnID0gdW5pb24gfmNtcCB0MS5sIGwyIGluXG4gICAgICBsZXQgcicgPSB1bmlvbiB+Y21wIHQxLnIgcjIgaW5cbiAgICAgIGxldCBtID0gbTEgKyBtMiBpblxuICAgICAgaWYgbSA9IDAgdGhlblxuICAgICAgICBqb2luIGwnIHInXG4gICAgICBlbHNlIChcbiAgICAgICAgYXNzZXJ0IChtID4gMCk7XG4gICAgICAgIG5vZGUgbCcgKG0sIGsxKSByJztcbiAgICAgIClcbiAgICAqKVxuXG4gIGxldCBpbnNlcnQgfmNtcCBtMSBzIHQgPVxuICAgIGFzc2VydCAobTEgPD4gMCk7XG4gICAgbGV0IHJlYyBhdXggPSBmdW5jdGlvblxuICAgICAgfCBMZWFmIC0+IG5vZGUgTGVhZiAobTEsIHMpIExlYWZcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGxldCBtMiwgeCA9IHQueCBpblxuICAgICAgICBsZXQgYyA9IGNtcCAoZ2V0X2VsZW1lbnQgcykgKGdldF9lbGVtZW50IHgpIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW5cbiAgICAgICAgICBsZXQgbSA9IG0xICsgbTIgaW5cbiAgICAgICAgICBpZiBtID0gMCB0aGVuXG4gICAgICAgICAgICBqb2luIHQubCB0LnJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBub2RlIHQubCAobSwgeCkgdC5yXG4gICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgIGxldCBsJyA9IGF1eCB0LmwgaW5cbiAgICAgICAgICBub2RlIGwnIHQueCB0LnJcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCByJyA9IGF1eCB0LnIgaW5cbiAgICAgICAgICBub2RlIHQubCB0LnggcidcbiAgICBpblxuICAgIGF1eCB0XG5lbmRcblxubGV0IHJlYyBzZXFfb2ZfdHJlZSA9IGZ1bmN0aW9uXG4gIHwgQmFsYW5jZWRUcmVlLkxlYWYgLT4gZW1wdHlcbiAgfCBCYWxhbmNlZFRyZWUuTm9kZSB0IC0+XG4gICAgbWF0Y2ggdC5zZXEgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICBsZXQgc2wgPSBzZXFfb2ZfdHJlZSB0LmwgaW5cbiAgICAgIGxldCBzciA9IHNlcV9vZl90cmVlIHQuciBpblxuICAgICAgYXNzZXJ0IChmc3QgdC54ID4gMCk7XG4gICAgICBsZXQgc2VxID0gY29uY2F0IHNsIChjb25jYXQgKHNuZCB0LngpIHNyKSBpblxuICAgICAgdC5zZXEgPC0gc2VxO1xuICAgICAgc2VxXG4gICAgfCBzZXEgLT4gc2VxXG5cbmxldCBzb3J0X3VuaXEgY21wIHNlcSA9XG4gIGxldCBwcmV2aW91c19zZXEgPSByZWYgZW1wdHkgaW5cbiAgbGV0IHByZXZpb3VzX3RyZWUgPSByZWYgQmFsYW5jZWRUcmVlLmxlYWYgaW5cbiAgbGV0IGYgbmV3X3NlcSA9XG4gICAgbGV0IG9sZF9zZXEgPSAhcHJldmlvdXNfc2VxIGluXG4gICAgbGV0IG9sZF90cmVlID0gIXByZXZpb3VzX3RyZWUgaW5cbiAgICBsZXQgXyA9IE1hcmtpbmcudW5zYWZlX3RyYXZlcnNlIH5vbGRfcm9vdDpvbGRfc2VxIH5uZXdfcm9vdDpuZXdfc2VxIGluXG4gICAgbGV0IHJlYyB1bmJsb2NrID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+ICgpXG4gICAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgdC5tYXJrXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdW5ibG9jayB0Lmw7XG4gICAgICAgIHVuYmxvY2sgdC5yO1xuICAgICAgICBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICAgIE1hcmtpbmcucmVzdG9yZSBzZXE7XG4gICAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgKSBlbHNlXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX25vbmUgbWFyaylcbiAgICBpblxuICAgIGxldCByZWMgdW5tYXJrX25ldyB0cmVlID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IHRyZWVcbiAgICAgIHwgTGVhZiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB0Lm1hcmsgPC0gMDtcbiAgICAgICAgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuXG4gICAgICAgICAgQmFsYW5jZWRUcmVlLmluc2VydCB+Y21wICgrMSkgc2VxIHRyZWVcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX2JvdGggbWFyayB8fCBNYXJraW5nLmlzX25vbmUgbWFyayk7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgaWYgTWFya2luZy5pc19uZXcgbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgICB1bm1hcmtfbmV3ICh1bm1hcmtfbmV3IHRyZWUgdC5sKSB0LnJcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICB1bmJsb2NrIHNlcTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICBpblxuICAgIGxldCByZWMgdW5tYXJrX29sZCB0cmVlID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IHRyZWVcbiAgICAgIHwgTGVhZiB0IGFzIHNlcSAtPlxuICAgICAgICBsZXQgbWFyayA9IHQubWFyayBpblxuICAgICAgICB0Lm1hcmsgPC0gMDtcbiAgICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuXG4gICAgICAgICAgQmFsYW5jZWRUcmVlLmluc2VydCB+Y21wICgtMSkgc2VxIHRyZWVcbiAgICAgICAgZWxzZSAoXG4gICAgICAgICAgYXNzZXJ0IChNYXJraW5nLmlzX2JvdGggbWFyayB8fCBNYXJraW5nLmlzX25vbmUgbWFyayk7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgICB8IEpvaW4gdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgaWYgTWFya2luZy5pc19vbGQgbWFyayB0aGVuIChcbiAgICAgICAgICB0Lm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgICB1bm1hcmtfb2xkICh1bm1hcmtfb2xkIHRyZWUgdC5sKSB0LnJcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICB1bmJsb2NrIHNlcTtcbiAgICAgICAgICB0cmVlXG4gICAgICAgIClcbiAgICBpblxuICAgIGxldCBuZXdfdHJlZSA9IHVubWFya19vbGQgKHVubWFya19uZXcgb2xkX3RyZWUgbmV3X3NlcSkgb2xkX3NlcSBpblxuICAgIHByZXZpb3VzX3NlcSA6PSBuZXdfc2VxO1xuICAgIHByZXZpb3VzX3RyZWUgOj0gbmV3X3RyZWU7XG4gICAgc2VxX29mX3RyZWUgbmV3X3RyZWVcbiAgaW5cbiAgTHdkLm1hcCBzZXEgfmZcbiIsIm9wZW4gQnJyXG5vcGVuIEVsXG5cbnR5cGUgdCA9IEVsLnRcblxudHlwZSAnYSBjb2wgPSBbXG4gIHwgYFAgb2YgJ2FcbiAgKCoqIFB1cmUgZWxlbWVudCAqKVxuICB8IGBSIG9mICdhIEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBlbGVtZW50ICopXG4gIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50XG4gICgqKiBSZWFjdGl2ZSBzZXF1ZW5jZSBvZiBlbGVtZW50cyAqKVxuXSBsaXN0XG4oKiogRGVzY3JpYmluZyBjb2xsZWN0aW9ucyBvZiBlbGVtZW50cyAqKVxuXG50eXBlIGhhbmRsZXIgPSBIYW5kbGVyIDoge1xuICAgIG9wdHM6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICB0eXBlJzogJ2EgRXYudHlwZSc7XG4gICAgZnVuYzogJ2EgRXYudCAtPiB1bml0O1xuICB9IC0+IGhhbmRsZXJcblxubGV0IGhhbmRsZXIgP29wdHMgdHlwZScgZnVuYyA9XG4gIEhhbmRsZXIge29wdHM7IHR5cGUnOyBmdW5jfVxuXG5sZXQgaXNfcHVyZV9lbGVtZW50ID0gZnVuY3Rpb25cbiAgfCBgUCBfIC0+IHRydWVcbiAgfCBgUiB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuICB8IGBTIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBleHRyYWN0X3B1cmVfZWxlbWVudCB4ID0gT3B0aW9uLmdldCAoTHdkLmlzX3B1cmUgeClcblxubGV0IGV4dHJhY3RfcHVyZV9lbGVtZW50cyB4cyA9XG4gIExpc3QuZmxhdHRlbiAoXG4gICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgIHwgYFAgeCAtPiBbeF1cbiAgICAgICAgfCBgUiB4IC0+IFtleHRyYWN0X3B1cmVfZWxlbWVudCB4XVxuICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgKSB4c1xuICApXG5cbmxldCBwcmVwYXJlX2NvbCA6IF8gY29sIC0+IF8gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBbXVxuICB8IGNvbCAtPlxuICAgIGxldCBwdXJlLCBpbXB1cmUgPSBMaXN0LnBhcnRpdGlvbiBpc19wdXJlX2VsZW1lbnQgY29sIGluXG4gICAgZXh0cmFjdF9wdXJlX2VsZW1lbnRzIHB1cmUsIGltcHVyZVxuXG4oKiogUmVhY3RpdmUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgKilcblxubGV0IGNvbnN1bWVfY2hpbGRyZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdLCBOb25lXG4gIHwgW2BQIHhdIC0+IFt4XSwgTm9uZVxuICB8IFtgUyB4XSAtPiBbXSwgU29tZSB4XG4gIHwgW2BSIHhdIC0+IFtdLCBTb21lIChMd2QubWFwIH5mOkx3ZF9zZXEuZWxlbWVudCB4KVxuICB8IGNvbCAtPlxuICAgIGlmIExpc3QuZm9yX2FsbCBpc19wdXJlX2VsZW1lbnQgY29sXG4gICAgdGhlblxuICAgICAgTGlzdC5mbGF0dGVuIChcbiAgICAgICAgTGlzdC5tYXAgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gW3hdXG4gICAgICAgICAgICB8IGBSIHggLT4gW2V4dHJhY3RfcHVyZV9lbGVtZW50IHhdXG4gICAgICAgICAgICB8IGBTIHggLT4gTHdkX3NlcS50b19saXN0IChleHRyYWN0X3B1cmVfZWxlbWVudCB4KVxuICAgICAgICAgIClcbiAgICAgICAgICBjb2xcbiAgICAgICksIE5vbmVcbiAgICBlbHNlIFtdLCBTb21lIChcbiAgICAgICAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICAgICAgICB8IGBQIHggLT4gTHdkLnB1cmUgKEx3ZF9zZXEuZWxlbWVudCB4KVxuICAgICAgICAgICAgfCBgUiB4IC0+IEx3ZC5tYXAgfmY6THdkX3NlcS5lbGVtZW50IHhcbiAgICAgICAgICAgIHwgYFMgeCAtPiB4XG4gICAgICAgICAgKSBMd2Rfc2VxLmx3ZF9tb25vaWRcbiAgICAgICAgICBjb2xcbiAgICAgIClcblxudHlwZSBjaGlsZF90cmVlID1cbiAgfCBMZWFmIG9mIEVsLnRcbiAgfCBJbm5lciBvZiB7IG11dGFibGUgYm91bmQ6IEp2LnQ7XG4gICAgICAgICAgICAgICBsZWZ0OiBjaGlsZF90cmVlOyByaWdodDogY2hpbGRfdHJlZTsgfVxuXG5sZXQgY2hpbGRfbm9kZSBub2RlID0gTGVhZiBub2RlXG5cbmxldCBjaGlsZF9qb2luIGxlZnQgcmlnaHQgPSBJbm5lciB7IGJvdW5kID0gSnYubnVsbDsgbGVmdDsgcmlnaHQgfVxuXG5sZXQganZfcGFyZW50Tm9kZSA9IEpzdHIudiBcInBhcmVudE5vZGVcIlxubGV0IGp2X25leHRTaWJsaW5nID0gSnN0ci52IFwibmV4dFNpYmxpbmdcIlxubGV0IGp2X2FwcGVuZCA9IEpzdHIudiBcImFwcGVuZFwiXG5sZXQganZfYmVmb3JlID0gSnN0ci52IFwiYmVmb3JlXCJcbmxldCBqdl9yZW1vdmUgPSBKc3RyLnYgXCJyZW1vdmVcIlxubGV0IGp2X2NvbnRhaW5zID0gSnN0ci52IFwiY29udGFpbnNcIlxuXG5sZXQganZfdG9SZW1vdmUgPVxuICBKc3RyLnYgXCJsd2QtdG8tcmVtb3ZlXCIgKCogSEFDSyBDb3VsZCBiZSB0dXJuZWQgaW50byBhIEphdmFzY3JpcHQgc3ltYm9sICopXG5cbmxldCBjb250YWluc19mb2N1cyBub2RlID1cbiAgbWF0Y2ggQnJyLkRvY3VtZW50LmFjdGl2ZV9lbCAoQnJyLkVsLmRvY3VtZW50IG5vZGUpIHdpdGhcbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSBlbCAtPlxuICAgIEp2LnRvX2Jvb2wgKEp2LmNhbGwnIChFbC50b19qdiBub2RlKSBqdl9jb250YWlucyBbfEVsLnRvX2p2IGVsfF0pXG5cbmxldCB1cGRhdGVfY2hpbGRyZW5cbiAgICAoc2VsZiA6IEVsLnQpXG4gICAgKGNoaWxkcmVuIDogRWwudCBMd2Rfc2VxLnQgTHdkLnQpIDogRWwudCBMd2QudCA9XG4gIGxldCByZWR1Y2VyID1cbiAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlIH5tYXA6Y2hpbGRfbm9kZSB+cmVkdWNlOmNoaWxkX2pvaW4pXG4gIGluXG4gIEx3ZC5tYXAgY2hpbGRyZW4gfmY6YmVnaW4gZnVuIGNoaWxkcmVuIC0+XG4gICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGNoaWxkcmVuIGluXG4gICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICBsZXQgc2NoZWR1bGVfZm9yX3JlbW92YWwgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPiBKdi5zZXQnIChFbC50b19qdiBub2RlKSBqdl90b1JlbW92ZSBKdi50cnVlJztcbiAgICAgIHwgSW5uZXIgXyAtPiAoKVxuICAgIGluXG4gICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwIHNjaGVkdWxlX2Zvcl9yZW1vdmFsIGRyb3BwZWQgKCk7XG4gICAgbGV0IHByZXNlcnZlX2ZvY3VzID0gY29udGFpbnNfZm9jdXMgc2VsZiBpblxuICAgIGJlZ2luIG1hdGNoIEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcicgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgdHJlZSAtPlxuICAgICAgICBsZXQgcmVjIHVwZGF0ZSBhY2MgPSBmdW5jdGlvblxuICAgICAgICAgIHwgTGVhZiBub2RlIC0+XG4gICAgICAgICAgICBsZXQgbm9kZScgPSBFbC50b19qdiBub2RlIGluXG4gICAgICAgICAgICBKdi5kZWxldGUnIG5vZGUnIGp2X3RvUmVtb3ZlO1xuICAgICAgICAgICAgKCpCcnIuQ29uc29sZS5sb2cgW1wiVXBkYXRpbmcgXCI7IG5vZGVdOyopXG4gICAgICAgICAgICBpZiBKdi5nZXQnIG5vZGUnIGp2X3BhcmVudE5vZGUgIT0gRWwudG9fanYgc2VsZiB0aGVuIChcbiAgICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCBhY2NcbiAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgKEp2LmNhbGwnIChFbC50b19qdiBzZWxmKSBqdl9hcHBlbmQgW3xub2RlJ3xdKVxuICAgICAgICAgICAgICBlbHNlIGlnbm9yZSAoSnYuY2FsbCcgYWNjIGp2X2JlZm9yZSBbfG5vZGUnfF0pXG4gICAgICAgICAgICApIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAoKiBDaGVjayBpZiB0aGVyZSBpcyBub3QgYW55IHdvcmsgdG8gZG8gKilcbiAgICAgICAgICAgICAgSnYuZ2V0JyBub2RlJyBqdl9uZXh0U2libGluZyAhPSBhY2MgJiZcbiAgICAgICAgICAgICAgKCogQ2hlY2sgaWYgd2UgYXJlIGluIHRoZSBmb2N1cyBjYXNlIGFuZCB0cnkgdG8gXCJidWJibGUgc29ydFwiIHRvXG4gICAgICAgICAgICAgICAgIHByZXNlcnZlIGZvY3VzICopXG4gICAgICAgICAgICAgIG5vdCAoXG4gICAgICAgICAgICAgICAgcHJlc2VydmVfZm9jdXMgJiYgY29udGFpbnNfZm9jdXMgbm9kZSAmJlxuICAgICAgICAgICAgICAgIGxldCByZWMgc2hpZnRfc2libGluZ3MgKCkgPVxuICAgICAgICAgICAgICAgICAgbGV0IHNpYmxpbmcgPSBKdi5nZXQnIG5vZGUnIGp2X25leHRTaWJsaW5nIGluXG4gICAgICAgICAgICAgICAgICBpZiBzaWJsaW5nID09IGFjYyB0aGVuIHRydWVcbiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgSnYuaXNfbnVsbCBzaWJsaW5nIHRoZW4gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmUgKEp2LmNhbGwnIG5vZGUnIGp2X2JlZm9yZSBbfHNpYmxpbmd8XSk7XG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0X3NpYmxpbmdzICgpXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBzaGlmdF9zaWJsaW5ncyAoKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBKdi5pc19udWxsIGFjY1xuICAgICAgICAgICAgICB0aGVuIGlnbm9yZSAoSnYuY2FsbCcgKEVsLnRvX2p2IHNlbGYpIGp2X2FwcGVuZCBbfG5vZGUnfF0pXG4gICAgICAgICAgICAgIGVsc2UgaWdub3JlIChKdi5jYWxsJyBhY2MganZfYmVmb3JlIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBub2RlJ1xuICAgICAgICAgIHwgSW5uZXIgdCAtPlxuICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCB0LmJvdW5kIHRoZW4gKFxuICAgICAgICAgICAgICBsZXQgYWNjID0gdXBkYXRlIGFjYyB0LnJpZ2h0IGluXG4gICAgICAgICAgICAgIGxldCBhY2MgPSB1cGRhdGUgYWNjIHQubGVmdCBpblxuICAgICAgICAgICAgICB0LmJvdW5kIDwtIGFjYztcbiAgICAgICAgICAgICAgYWNjXG4gICAgICAgICAgICApIGVsc2VcbiAgICAgICAgICAgICAgdC5ib3VuZFxuICAgICAgICBpblxuICAgICAgICBpZ25vcmUgKHVwZGF0ZSBKdi5udWxsIHRyZWUpXG4gICAgZW5kO1xuICAgIGxldCByZW1vdmVfY2hpbGQgY2hpbGQgKCkgPSBtYXRjaCBjaGlsZCB3aXRoXG4gICAgICB8IExlYWYgbm9kZSAtPlxuICAgICAgICBsZXQgbm9kZSA9IEVsLnRvX2p2IG5vZGUgaW5cbiAgICAgICAgaWYgSnYuaXNfc29tZSAoSnYuZ2V0JyBub2RlIGp2X3RvUmVtb3ZlKSB0aGVuIChcbiAgICAgICAgICAoKkJyci5Db25zb2xlLmxvZyBbXCJSZW1vdmluZyBcIjsgbm9kZV07KilcbiAgICAgICAgICBKdi5kZWxldGUnIG5vZGUganZfdG9SZW1vdmU7XG4gICAgICAgICAgaWdub3JlIChKdi5jYWxsJyBub2RlIGp2X3JlbW92ZSBbfHxdKVxuICAgICAgICApXG4gICAgICB8IElubmVyIF8gLT4gKClcbiAgICBpblxuICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcCByZW1vdmVfY2hpbGQgZHJvcHBlZCAoKTtcbiAgICBzZWxmXG4gIGVuZFxuXG5sZXQgcHVyZV91bml0ID0gTHdkLnB1cmUgKClcblxubGV0IGR1bW15X2t2X2F0ID0gKEpzdHIuZW1wdHksIEpzdHIuZW1wdHkpXG5cbmxldCBhdHRhY2hfYXR0cmlicyBlbCBhdHRyaWJzID1cbiAgbGV0IHNldF9rdiAoaywgdikgPVxuICAgIGlmIEpzdHIuZXF1YWwgayBBdC5OYW1lLmNsYXNzJ1xuICAgIHRoZW4gRWwuc2V0X2NsYXNzIHYgdHJ1ZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgKFNvbWUgdikgZWxcbiAgaW5cbiAgbGV0IHVuc2V0X2t2IChrLCB2KSA9XG4gICAgaWYgSnN0ci5lcXVhbCBrIEF0Lk5hbWUuY2xhc3MnXG4gICAgdGhlbiBFbC5zZXRfY2xhc3MgdiBmYWxzZSBlbFxuICAgIGVsc2UgRWwuc2V0X2F0IGsgTm9uZSBlbFxuICBpblxuICBsZXQgc2V0X2x3ZF9hdCAoKSA9XG4gICAgbGV0IHByZXYgPSByZWYgZHVtbXlfa3ZfYXQgaW5cbiAgICBmdW4gYXQgLT5cbiAgICAgIGlmICFwcmV2ICE9IGR1bW15X2t2X2F0IHRoZW5cbiAgICAgICAgdW5zZXRfa3YgIXByZXY7XG4gICAgICBsZXQgcGFpciA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgIHNldF9rdiBwYWlyO1xuICAgICAgcHJldiA6PSBwYWlyXG4gIGluXG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgfCBgUCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBgUiBhdCAtPiBMd2QubWFwIH5mOihzZXRfbHdkX2F0ICgpKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHNldF9hdCcgYXQgPVxuICAgICAgICAgIGxldCBrdiA9IEF0LnRvX3BhaXIgYXQgaW5cbiAgICAgICAgICBzZXRfa3Yga3Y7XG4gICAgICAgICAga3ZcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDpzZXRfYXQnXG4gICAgICAgICAgICAgICAgIH5yZWR1Y2U6KGZ1biBfIF8gLT4gZHVtbXlfa3ZfYXQpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgdXBkYXRlIGF0cyA9XG4gICAgICAgICAgbGV0IGRyb3BwZWQsIHJlZHVjZXInID1cbiAgICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci51cGRhdGVfYW5kX2dldF9kcm9wcGVkICFyZWR1Y2VyIGF0c1xuICAgICAgICAgIGluXG4gICAgICAgICAgcmVkdWNlciA6PSByZWR1Y2VyJztcbiAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXBcbiAgICAgICAgICAgIChmdW4ga3YgKCkgLT4gdW5zZXRfa3Yga3YpXG4gICAgICAgICAgICBkcm9wcGVkICgpO1xuICAgICAgICAgIGlnbm9yZSAoTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJzogXyBvcHRpb24pXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6dXBkYXRlIGF0c1xuICAgICkgKHB1cmVfdW5pdCwgZnVuIF8gXyAtPiBwdXJlX3VuaXQpXG4gICAgYXR0cmlic1xuXG5sZXQgbGlzdGVuIGVsIChIYW5kbGVyIHtvcHRzOyB0eXBlJzsgZnVuY30pID1cbiAgRXYubGlzdGVuID9vcHRzIHR5cGUnIGZ1bmMgKEVsLmFzX3RhcmdldCBlbClcblxubGV0IGF0dGFjaF9ldmVudHMgZWwgZXZlbnRzID1cbiAgTHdkX3V0aWxzLm1hcF9yZWR1Y2UgKGZ1bmN0aW9uXG4gICAgICB8IGBQIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IGBSIGF0IC0+XG4gICAgICAgIGxldCBjYWNoZWQgPSByZWYgTm9uZSBpblxuICAgICAgICBMd2QubWFwIH5mOihmdW4gaCAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggIWNhY2hlZCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgICAgICB8IFNvbWUgbCAtPiBFdi51bmxpc3RlbiBsXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjYWNoZWQgOj0gU29tZSAobGlzdGVuIGVsIGgpXG4gICAgICAgICAgKSBhdFxuICAgICAgfCBgUyBhdHMgLT5cbiAgICAgICAgbGV0IHJlZHVjZXIgPVxuICAgICAgICAgIHJlZiAoTHdkX3NlcS5SZWR1Y2VyLm1ha2VcbiAgICAgICAgICAgICAgICAgfm1hcDoobGlzdGVuIGVsKVxuICAgICAgICAgICAgICAgICB+cmVkdWNlOihmdW4geCBfeSAtPiB4KSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVwZGF0ZSBhdHMgPVxuICAgICAgICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBhdHNcbiAgICAgICAgICBpblxuICAgICAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwXG4gICAgICAgICAgICAoZnVuIGwgKCkgLT4gRXYudW5saXN0ZW4gbClcbiAgICAgICAgICAgIGRyb3BwZWQgKCk7XG4gICAgICAgICAgaWdub3JlIChMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInOiBfIG9wdGlvbilcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLm1hcCB+Zjp1cGRhdGUgYXRzXG4gICAgKSAocHVyZV91bml0LCBmdW4gXyBfIC0+IHB1cmVfdW5pdClcbiAgICBldmVudHNcblxubGV0IHYgP2QgPyhhdD1bXSkgPyhldj1bXSkgdGFnIGNoaWxkcmVuID1cbiAgbGV0IGF0LCBpbXB1cmVfYXQgPSBwcmVwYXJlX2NvbCBhdCBpblxuICBsZXQgZXYsIGltcHVyZV9ldiA9IHByZXBhcmVfY29sIGV2IGluXG4gIGxldCBjaGlsZHJlbiwgaW1wdXJlX2NoaWxkcmVuID0gY29uc3VtZV9jaGlsZHJlbiBjaGlsZHJlbiBpblxuICBsZXQgZWwgPSBFbC52ID9kIH5hdCB0YWcgY2hpbGRyZW4gaW5cbiAgbGV0IHJlc3VsdCA9XG4gICAgbWF0Y2ggaW1wdXJlX2F0LCBpbXB1cmVfY2hpbGRyZW4gd2l0aFxuICAgIHwgW10sIE5vbmUgLT4gTHdkLnB1cmUgZWxcbiAgICB8IFtdLCBTb21lIGNoaWxkcmVuIC0+XG4gICAgICB1cGRhdGVfY2hpbGRyZW4gZWwgY2hpbGRyZW5cbiAgICB8IGF0LCBOb25lIC0+XG4gICAgICBMd2QubWFwIH5mOihmdW4gKCkgLT4gZWwpIChhdHRhY2hfYXR0cmlicyBlbCBhdClcbiAgICB8IGF0LCBTb21lIGNoaWxkcmVuIC0+XG4gICAgICBMd2QubWFwMiB+ZjooZnVuICgpIGVsIC0+IGVsKVxuICAgICAgICAoYXR0YWNoX2F0dHJpYnMgZWwgYXQpXG4gICAgICAgICh1cGRhdGVfY2hpbGRyZW4gZWwgY2hpbGRyZW4pXG4gIGluXG4gIExpc3QuaXRlciAoZnVuIGggLT4gaWdub3JlIChsaXN0ZW4gZWwgaCkpIGV2O1xuICBsZXQgcmVzdWx0ID1cbiAgICBtYXRjaCBpbXB1cmVfZXYgd2l0aFxuICAgIHwgW10gLT4gcmVzdWx0XG4gICAgfCBldnMgLT5cbiAgICAgIEx3ZC5tYXAyIH5mOihmdW4gKCkgZWwgLT4gZWwpXG4gICAgICAgIChhdHRhY2hfZXZlbnRzIGVsIGV2cylcbiAgICAgICAgcmVzdWx0XG4gIGluXG4gIHJlc3VsdFxuXG4oKiogezE6ZWxzIEVsZW1lbnQgY29uc3RydWN0b3JzfSAqKVxuXG50eXBlIGNvbnMgPSAgP2Q6ZG9jdW1lbnQgLT4gP2F0OkF0LnQgY29sIC0+ID9ldjpoYW5kbGVyIGNvbCAtPiB0IGNvbCAtPiB0IEx3ZC50XG4oKiogVGhlIHR5cGUgZm9yIGVsZW1lbnQgY29uc3RydWN0b3JzLiBUaGlzIGlzIHNpbXBseSB7IXZ9IHdpdGggYVxuICAgIHByZS1hcHBsaWVkIGVsZW1lbnQgbmFtZS4gKilcblxudHlwZSB2b2lkX2NvbnMgPSA/ZDpkb2N1bWVudCAtPiA/YXQ6QXQudCBjb2wgLT4gP2V2OmhhbmRsZXIgY29sIC0+IHVuaXQgLT4gdCBMd2QudFxuKCoqIFRoZSB0eXBlIGZvciB2b2lkIGVsZW1lbnQgY29uc3RydWN0b3JzLiBUaGlzIGlzIHNpbXBseSB7IXZ9XG4gICAgd2l0aCBhIHByZS1hcHBsaWVkIGVsZW1lbnQgbmFtZSBhbmQgd2l0aG91dCBjaGlsZHJlbi4gKilcblxubGV0IGNvbnMgbmFtZSA/ZCA/YXQgP2V2IGNzID0gdiA/ZCA/YXQgP2V2IG5hbWUgY3NcbmxldCB2b2lkX2NvbnMgbmFtZSA/ZCA/YXQgP2V2ICgpID0gdiA/ZCA/YXQgP2V2IG5hbWUgW11cblxubGV0IGEgPSBjb25zIE5hbWUuYVxubGV0IGFiYnIgPSBjb25zIE5hbWUuYWJiclxubGV0IGFkZHJlc3MgPSBjb25zIE5hbWUuYWRkcmVzc1xubGV0IGFyZWEgPSB2b2lkX2NvbnMgTmFtZS5hcmVhXG5sZXQgYXJ0aWNsZSA9IGNvbnMgTmFtZS5hcnRpY2xlXG5sZXQgYXNpZGUgPSBjb25zIE5hbWUuYXNpZGVcbmxldCBhdWRpbyA9IGNvbnMgTmFtZS5hdWRpb1xubGV0IGIgPSBjb25zIE5hbWUuYlxubGV0IGJhc2UgPSB2b2lkX2NvbnMgTmFtZS5iYXNlXG5sZXQgYmRpID0gY29ucyBOYW1lLmJkaVxubGV0IGJkbyA9IGNvbnMgTmFtZS5iZG9cbmxldCBibG9ja3F1b3RlID0gY29ucyBOYW1lLmJsb2NrcXVvdGVcbmxldCBib2R5ID0gY29ucyBOYW1lLmJvZHlcbmxldCBiciA9IHZvaWRfY29ucyBOYW1lLmJyXG5sZXQgYnV0dG9uID0gY29ucyBOYW1lLmJ1dHRvblxubGV0IGNhbnZhcyA9IGNvbnMgTmFtZS5jYW52YXNcbmxldCBjYXB0aW9uID0gY29ucyBOYW1lLmNhcHRpb25cbmxldCBjaXRlID0gY29ucyBOYW1lLmNpdGVcbmxldCBjb2RlID0gY29ucyBOYW1lLmNvZGVcbmxldCBjb2wgPSB2b2lkX2NvbnMgTmFtZS5jb2xcbmxldCBjb2xncm91cCA9IGNvbnMgTmFtZS5jb2xncm91cFxubGV0IGNvbW1hbmQgPSBjb25zIE5hbWUuY29tbWFuZFxubGV0IGRhdGFsaXN0ID0gY29ucyBOYW1lLmRhdGFsaXN0XG5sZXQgZGQgPSBjb25zIE5hbWUuZGRcbmxldCBkZWwgPSBjb25zIE5hbWUuZGVsXG5sZXQgZGV0YWlscyA9IGNvbnMgTmFtZS5kZXRhaWxzXG5sZXQgZGZuID0gY29ucyBOYW1lLmRmblxubGV0IGRpdiA9IGNvbnMgTmFtZS5kaXZcbmxldCBkbCA9IGNvbnMgTmFtZS5kbFxubGV0IGR0ID0gY29ucyBOYW1lLmR0XG5sZXQgZW0gPSBjb25zIE5hbWUuZW1cbmxldCBlbWJlZCA9IHZvaWRfY29ucyBOYW1lLmVtYmVkXG5sZXQgZmllbGRzZXQgPSBjb25zIE5hbWUuZmllbGRzZXRcbmxldCBmaWdjYXB0aW9uID0gY29ucyBOYW1lLmZpZ2NhcHRpb25cbmxldCBmaWd1cmUgPSBjb25zIE5hbWUuZmlndXJlXG5sZXQgZm9vdGVyID0gY29ucyBOYW1lLmZvb3RlclxubGV0IGZvcm0gPSBjb25zIE5hbWUuZm9ybVxubGV0IGgxID0gY29ucyBOYW1lLmgxXG5sZXQgaDIgPSBjb25zIE5hbWUuaDJcbmxldCBoMyA9IGNvbnMgTmFtZS5oM1xubGV0IGg0ID0gY29ucyBOYW1lLmg0XG5sZXQgaDUgPSBjb25zIE5hbWUuaDVcbmxldCBoNiA9IGNvbnMgTmFtZS5oNlxubGV0IGhlYWQgPSBjb25zIE5hbWUuaGVhZFxubGV0IGhlYWRlciA9IGNvbnMgTmFtZS5oZWFkZXJcbmxldCBoZ3JvdXAgPSBjb25zIE5hbWUuaGdyb3VwXG5sZXQgaHIgPSB2b2lkX2NvbnMgTmFtZS5oclxubGV0IGh0bWwgPSBjb25zIE5hbWUuaHRtbFxubGV0IGkgPSBjb25zIE5hbWUuaVxubGV0IGlmcmFtZSA9IGNvbnMgTmFtZS5pZnJhbWVcbmxldCBpbWcgPSB2b2lkX2NvbnMgTmFtZS5pbWdcbmxldCBpbnB1dCA9IHZvaWRfY29ucyBOYW1lLmlucHV0XG5sZXQgaW5zID0gY29ucyBOYW1lLmluc1xubGV0IGtiZCA9IGNvbnMgTmFtZS5rYmRcbmxldCBrZXlnZW4gPSBjb25zIE5hbWUua2V5Z2VuXG5sZXQgbGFiZWwgPSBjb25zIE5hbWUubGFiZWxcbmxldCBsZWdlbmQgPSBjb25zIE5hbWUubGVnZW5kXG5sZXQgbGkgPSBjb25zIE5hbWUubGlcbmxldCBsaW5rID0gdm9pZF9jb25zIE5hbWUubGlua1xubGV0IG1hcCA9IGNvbnMgTmFtZS5tYXBcbmxldCBtYXJrID0gY29ucyBOYW1lLm1hcmtcbmxldCBtZW51ID0gY29ucyBOYW1lLm1lbnVcbmxldCBtZXRhID0gdm9pZF9jb25zIE5hbWUubWV0YVxubGV0IG1ldGVyID0gY29ucyBOYW1lLm1ldGVyXG5sZXQgbmF2ID0gY29ucyBOYW1lLm5hdlxubGV0IG5vc2NyaXB0ID0gY29ucyBOYW1lLm5vc2NyaXB0XG5sZXQgb2JqZWN0JyA9IGNvbnMgTmFtZS5vYmplY3QnXG5sZXQgb2wgPSBjb25zIE5hbWUub2xcbmxldCBvcHRncm91cCA9IGNvbnMgTmFtZS5vcHRncm91cFxubGV0IG9wdGlvbiA9IGNvbnMgTmFtZS5vcHRpb25cbmxldCBvdXRwdXQgPSBjb25zIE5hbWUub3V0cHV0XG5sZXQgcCA9IGNvbnMgTmFtZS5wXG5sZXQgcGFyYW0gPSB2b2lkX2NvbnMgTmFtZS5wYXJhbVxubGV0IHByZSA9IGNvbnMgTmFtZS5wcmVcbmxldCBwcm9ncmVzcyA9IGNvbnMgTmFtZS5wcm9ncmVzc1xubGV0IHEgPSBjb25zIE5hbWUucVxubGV0IHJwID0gY29ucyBOYW1lLnJwXG5sZXQgcnQgPSBjb25zIE5hbWUucnRcbmxldCBydWJ5ID0gY29ucyBOYW1lLnJ1YnlcbmxldCBzID0gY29ucyBOYW1lLnNcbmxldCBzYW1wID0gY29ucyBOYW1lLnNhbXBcbmxldCBzY3JpcHQgPSBjb25zIE5hbWUuc2NyaXB0XG5sZXQgc2VjdGlvbiA9IGNvbnMgTmFtZS5zZWN0aW9uXG5sZXQgc2VsZWN0ID0gY29ucyBOYW1lLnNlbGVjdFxubGV0IHNtYWxsID0gY29ucyBOYW1lLnNtYWxsXG5sZXQgc291cmNlID0gdm9pZF9jb25zIE5hbWUuc291cmNlXG5sZXQgc3BhbiA9IGNvbnMgTmFtZS5zcGFuXG5sZXQgc3Ryb25nID0gY29ucyBOYW1lLnN0cm9uZ1xubGV0IHN0eWxlID0gY29ucyBOYW1lLnN0eWxlXG5sZXQgc3ViID0gY29ucyBOYW1lLnN1YlxubGV0IHN1bW1hcnkgPSBjb25zIE5hbWUuc3VtbWFyeVxubGV0IHN1cCA9IGNvbnMgTmFtZS5zdXBcbmxldCB0YWJsZSA9IGNvbnMgTmFtZS50YWJsZVxubGV0IHRib2R5ID0gY29ucyBOYW1lLnRib2R5XG5sZXQgdGQgPSBjb25zIE5hbWUudGRcbmxldCB0ZXh0YXJlYSA9IGNvbnMgTmFtZS50ZXh0YXJlYVxubGV0IHRmb290ID0gY29ucyBOYW1lLnRmb290XG5sZXQgdGggPSBjb25zIE5hbWUudGhcbmxldCB0aGVhZCA9IGNvbnMgTmFtZS50aGVhZFxubGV0IHRpbWUgPSBjb25zIE5hbWUudGltZVxubGV0IHRpdGxlID0gY29ucyBOYW1lLnRpdGxlXG5sZXQgdHIgPSBjb25zIE5hbWUudHJcbmxldCB0cmFjayA9IHZvaWRfY29ucyBOYW1lLnRyYWNrXG5sZXQgdSA9IGNvbnMgTmFtZS51XG5sZXQgdWwgPSBjb25zIE5hbWUudWxcbmxldCB2YXIgPSBjb25zIE5hbWUudmFyXG5sZXQgdmlkZW8gPSBjb25zIE5hbWUudmlkZW9cbmxldCB3YnIgPSB2b2lkX2NvbnMgTmFtZS53YnJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBBcnJheSB1dGlsc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgZXF1YWwgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIG9yZCA9ICdhIC0+ICdhIC0+IGludFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQXJyYXlzfSAqKVxuXG5pbmNsdWRlIEFycmF5XG5cbmxldCBlbXB0eSA9IFt8fF1cblxubGV0IGdldF9zYWZlIGEgaSA9XG4gIGlmIGkgPj0gMCAmJiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIFNvbWUgKEFycmF5LnVuc2FmZV9nZXQgYSBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgbWFwX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgZSkpIGFcbmxldCBtYXBpX2lucGxhY2UgZiBhID0gQXJyYXkuaXRlcmkgKGZ1biBpIGUgLT4gQXJyYXkudW5zYWZlX3NldCBhIGkgKGYgaSBlKSkgYVxubGV0IGZvbGQgPSBBcnJheS5mb2xkX2xlZnRcblxubGV0IGZvbGRpIGYgYWNjIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoZiBhY2MgaSBhLihpKSkgKGkgKyAxKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGRfd2hpbGUgZiBhY2MgYSA9XG4gIGxldCByZWMgZm9sZF93aGlsZV9pIGYgYWNjIGkgPVxuICAgIGlmIGkgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhY2MsIGNvbnQgPSBmIGFjYyBhLihpKSBpblxuICAgICAgbWF0Y2ggY29udCB3aXRoXG4gICAgICB8IGBTdG9wIC0+IGFjY1xuICAgICAgfCBgQ29udGludWUgLT4gZm9sZF93aGlsZV9pIGYgYWNjIChpICsgMSlcbiAgICApIGVsc2VcbiAgICAgIGFjY1xuICBpblxuICBmb2xkX3doaWxlX2kgZiBhY2MgMFxuXG5sZXQgZm9sZF9tYXAgZiBhY2MgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgKCogbmVlZCBzcGVjaWFsIGNhc2UgZm9yIGluaXRpYWxpemluZyB0aGUgcmVzdWx0ICopXG4gIGlmIG4gPSAwIHRoZW5cbiAgICBhY2MsIFt8fF1cbiAgZWxzZSAoXG4gICAgbGV0IGFjYywgYjAgPSBmIGFjYyBhLigwKSBpblxuICAgIGxldCByZXMgPSBBcnJheS5tYWtlIG4gYjAgaW5cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IG5ld19hY2MsIGIgPSBmICFhY2MgYS4oaSkgaW5cbiAgICAgIGFjYyA6PSBuZXdfYWNjO1xuICAgICAgcmVzLihpKSA8LSBiXG4gICAgZG9uZTtcbiAgICAhYWNjLCByZXNcbiAgKVxuXG5sZXQgc2Nhbl9sZWZ0IGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZXMgPSBBcnJheS5tYWtlIChuICsgMSkgYWNjIGluXG4gIEFycmF5Lml0ZXJpXG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gZiByZXMuKGkpIHggaW5cbiAgICAgIHJlcy4oaSArIDEpIDwtIG5ld19hY2MpXG4gICAgYTtcbiAgcmVzXG5cbmxldCByZXZlcnNlX2luX3BsYWNlIGEgPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbGVuID4gMCB0aGVuXG4gICAgZm9yIGsgPSAwIHRvIChsZW4gLSAxKSAvIDIgZG9cbiAgICAgIGxldCB0ID0gYS4oaykgaW5cbiAgICAgIGEuKGspIDwtIGEuKGxlbiAtIDEgLSBrKTtcbiAgICAgIGEuKGxlbiAtIDEgLSBrKSA8LSB0XG4gICAgZG9uZVxuXG5sZXQgc29ydGVkIGNtcCBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgQXJyYXkuc29ydCBjbXAgYjtcbiAgYlxuXG5sZXQgc29ydF9pbmRpY2VzIGNtcCBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGxldCBiID0gQXJyYXkuaW5pdCBsZW4gKGZ1biBrIC0+IGspIGluXG4gIEFycmF5LnNvcnQgKGZ1biBrMSBrMiAtPiBjbXAgYS4oazEpIGEuKGsyKSkgYjtcbiAgYlxuXG5sZXQgc29ydF9yYW5raW5nIGNtcCBhID0gc29ydF9pbmRpY2VzIGNvbXBhcmUgKHNvcnRfaW5kaWNlcyBjbXAgYSlcblxubGV0IHJldiBhID1cbiAgbGV0IGIgPSBBcnJheS5jb3B5IGEgaW5cbiAgcmV2ZXJzZV9pbl9wbGFjZSBiO1xuICBiXG5cbmV4Y2VwdGlvbiBGb3VuZFxuXG5sZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIGVsdCBhID1cbiAgdHJ5XG4gICAgQXJyYXkuaXRlciAoZnVuIGUgLT4gaWYgZXEgZSBlbHQgdGhlbiByYWlzZV9ub3RyYWNlIEZvdW5kKSBhO1xuICAgIGZhbHNlXG4gIHdpdGggRm91bmQgLT4gdHJ1ZVxuXG5sZXQgcmVjIGZpbmRfYXV4IGYgYSBpID1cbiAgaWYgaSA+PSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgTm9uZVxuICBlbHNlIChcbiAgICBtYXRjaCBmIGkgYS4oaSkgd2l0aFxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgICB8IE5vbmUgLT4gZmluZF9hdXggZiBhIChpICsgMSlcbiAgKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgZmluZF9tYXAgZiBhID0gZmluZF9hdXggKGZ1biBfIC0+IGYpIGEgMFxubGV0IGZpbmQgPSBmaW5kX21hcFxubGV0IGZpbmRfbWFwX2kgZiBhID0gZmluZF9hdXggZiBhIDBcbmxldCBmaW5kaSA9IGZpbmRfbWFwX2lcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxubGV0IGZpbmRfaWR4IHAgYSA9XG4gIGZpbmRfYXV4XG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgKGksIHgpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYSAwXG5cbmxldCBtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5tYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21heCBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPCAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtYXhfZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWF4IGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtYXhfZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IG1pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRcbiAgICAgICAgIChmdW4gYWNjIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYWNjIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGVsdFxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgYS4oMCkgYSlcblxubGV0IG1pbl9leG4gY21wIGEgPVxuICBtYXRjaCBtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5Lm1pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgYXJnbWluIGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZGlcbiAgICAgICAgIChmdW4gYWNjIGkgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhLihhY2MpIGVsdCA+IDAgdGhlblxuICAgICAgICAgICAgIGlcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIDAgYSlcblxubGV0IGFyZ21pbl9leG4gY21wIGEgPVxuICBtYXRjaCBhcmdtaW4gY21wIGEgd2l0aFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ0FycmF5LmFyZ21pbl9leG5cIlxuICB8IFNvbWUgZWx0IC0+IGVsdFxuXG5sZXQgZmlsdGVyX21hcCBmIGEgPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW4gKFxuICAgICAgbGV0IGEnID0gQXJyYXkub2ZfbGlzdCBhY2MgaW5cbiAgICAgIHJldmVyc2VfaW5fcGxhY2UgYSc7XG4gICAgICBhJ1xuICAgICkgZWxzZSAoXG4gICAgICBtYXRjaCBmIGEuKGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBhdXggYWNjIChpICsgMSlcbiAgICAgIHwgU29tZSB4IC0+IGF1eCAoeCA6OiBhY2MpIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBmaWx0ZXIgcCBhID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW4geCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgU29tZSB4XG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgYVxuXG4oKiBhcHBlbmQgW3JldiBhXSBpbiBmcm9udCBvZiBbYWNjXSAqKVxubGV0IHJlYyBfX3Jldl9hcHBlbmRfbGlzdCBhIGFjYyBpID1cbiAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBhY2NcbiAgZWxzZVxuICAgIF9fcmV2X2FwcGVuZF9saXN0IGEgKGEuKGkpIDo6IGFjYykgKGkgKyAxKVxuXG5sZXQgZmxhdF9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbGV0IGEnID0gZiBhLihpKSBpblxuICAgICAgYXV4IChfX3Jldl9hcHBlbmRfbGlzdCBhJyBhY2MgMCkgKGkgKyAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIDBcblxubGV0IG1vbm9pZF9wcm9kdWN0IGYgYTEgYTIgPVxuICBsZXQgbmExID0gbGVuZ3RoIGExIGluXG4gIGluaXRcbiAgICAobmExICogbGVuZ3RoIGEyKVxuICAgIChmdW4gaV9wcm9kIC0+XG4gICAgICBsZXQgaSA9IGlfcHJvZCBtb2QgbmExIGluXG4gICAgICBsZXQgaiA9IGlfcHJvZCAvIG5hMSBpblxuICAgICAgZiBhMS4oaSkgYTIuKGopKVxuXG5sZXQgcmVjIF9sb29rdXBfcmVjIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW5cbiAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSBpZiBpID0gaiB0aGVuXG4gICAgaWYgY21wIGsgYS4oaSkgPSAwIHRoZW5cbiAgICAgIGlcbiAgICBlbHNlXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgZWxzZSAoXG4gICAgbGV0IG1pZGRsZSA9IChqICsgaSkgLyAyIGluXG4gICAgbWF0Y2ggY21wIGsgYS4obWlkZGxlKSB3aXRoXG4gICAgfCAwIC0+IG1pZGRsZVxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIGkgKG1pZGRsZSAtIDEpXG4gICAgfCBfIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChtaWRkbGUgKyAxKSBqXG4gIClcblxubGV0IF9sb29rdXBfZXhuIH5jbXAgayBhIGkgaiA9XG4gIGlmIGkgPiBqIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICBtYXRjaCBjbXAgayBhLihpKSB3aXRoXG4gIHwgMCAtPiBpXG4gIHwgbiB3aGVuIG4gPCAwIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gbG93ICopXG4gIHwgXyB3aGVuIGkgPSBqIC0+IHJhaXNlIE5vdF9mb3VuZCAoKiB0b28gaGlnaCAqKVxuICB8IF8gLT5cbiAgICAobWF0Y2ggY21wIGsgYS4oaikgd2l0aFxuICAgIHwgMCAtPiBqXG4gICAgfCBuIHdoZW4gbiA8IDAgLT4gX2xvb2t1cF9yZWMgfmNtcCBrIGEgKGkgKyAxKSAoaiAtIDEpXG4gICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZClcbigqIHRvbyBoaWdoICopXG5cbmxldCBsb29rdXBfZXhuIH5jbXAgayBhID0gX2xvb2t1cF9leG4gfmNtcCBrIGEgMCAoQXJyYXkubGVuZ3RoIGEgLSAxKVxuXG5sZXQgbG9va3VwIH5jbXAgayBhID1cbiAgdHJ5IFNvbWUgKF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSkpXG4gIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxubGV0IGJzZWFyY2ggfmNtcCBrIGEgPVxuICBsZXQgcmVjIGF1eCBpIGogPVxuICAgIGlmIGkgPiBqIHRoZW5cbiAgICAgIGBKdXN0X2FmdGVyIGpcbiAgICBlbHNlIChcbiAgICAgIGxldCBtaWRkbGUgPSBpICsgKChqIC0gaSkgLyAyKSBpblxuICAgICAgKCogYXZvaWQgb3ZlcmZsb3cgKilcbiAgICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgICAgfCAwIC0+IGBBdCBtaWRkbGVcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IGF1eCBpIChtaWRkbGUgLSAxKVxuICAgICAgfCBfIC0+IGF1eCAobWlkZGxlICsgMSkgalxuICAgIClcbiAgaW5cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuXG4gICAgYEVtcHR5XG4gIGVsc2UgKFxuICAgIG1hdGNoIGNtcCBhLigwKSBrLCBjbXAgYS4obiAtIDEpIGsgd2l0aFxuICAgIHwgYywgXyB3aGVuIGMgPiAwIC0+IGBBbGxfYmlnZ2VyXG4gICAgfCBfLCBjIHdoZW4gYyA8IDAgLT4gYEFsbF9sb3dlclxuICAgIHwgXyAtPiBhdXggMCAobiAtIDEpXG4gIClcblxubGV0IHJlYyBfZm9yX2FsbDIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID0gMFxuICB8fCAocCBhMS4oaTEpIGEyLihpMikgJiYgX2Zvcl9hbGwyIHAgYTEgYTIgKGkxICsgMSkgKGkyICsgMSkgfmxlbjoobGVuIC0gMSkpXG5cbmxldCBmb3JfYWxsMiBwIGEgYiA9XG4gIEFycmF5Lmxlbmd0aCBhID0gQXJyYXkubGVuZ3RoIGIgJiYgX2Zvcl9hbGwyIHAgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0IHJlYyBfZXhpc3RzMiBwIGExIGEyIGkxIGkyIH5sZW4gPVxuICBsZW4gPiAwXG4gICYmIChwIGExLihpMSkgYTIuKGkyKSB8fCBfZXhpc3RzMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZXhpc3RzMiBwIGEgYiA9XG4gIF9leGlzdHMyIHAgYSBiIDAgMCB+bGVuOihTdGRsaWIubWluIChBcnJheS5sZW5ndGggYSkgKEFycmF5Lmxlbmd0aCBiKSlcblxubGV0IF9mb2xkMiBmIGFjYyBhIGIgaSBqIH5sZW4gPVxuICBsZXQgcmVjIGF1eCBhY2MgbyA9XG4gICAgaWYgbyA9IGxlbiB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBhY2MgPSBmIGFjYyAoQXJyYXkuZ2V0IGEgKGkgKyBvKSkgKEFycmF5LmdldCBiIChqICsgbykpIGluXG4gICAgICBhdXggYWNjIChvICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBhY2MgMFxuXG5sZXQgZm9sZDIgZiBhY2MgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlbiBpbnZhbGlkX2FyZyBcImZvbGQyXCI7XG4gIF9mb2xkMiBmIGFjYyBhIGIgMCAwIH5sZW46KEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgKCAtLSApIGkgaiA9XG4gIGlmIGkgPD0gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaiAtIGkgKyAxKSAoZnVuIGsgLT4gaSArIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChpIC0gaiArIDEpIChmdW4gayAtPiBpIC0gaylcblxubGV0ICggLS1eICkgaSBqID1cbiAgaWYgaSA9IGogdGhlblxuICAgIFt8fF1cbiAgZWxzZSBpZiBpID4gaiB0aGVuXG4gICAgQXJyYXkuaW5pdCAoaSAtIGopIChmdW4gayAtPiBpIC0gaylcbiAgZWxzZVxuICAgIEFycmF5LmluaXQgKGogLSBpKSAoZnVuIGsgLT4gaSArIGspXG5cbigqKiBhbGwgdGhlIGVsZW1lbnRzIG9mIGEsIGJ1dCB0aGUgaS10aCwgaW50byBhIGxpc3QgKilcbmxldCBleGNlcHRfaWR4IGEgaSA9XG4gIGZvbGRpXG4gICAgKGZ1biBhY2MgaiBlbHQgLT5cbiAgICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICAgYWNjXG4gICAgICBlbHNlXG4gICAgICAgIGVsdCA6OiBhY2MpXG4gICAgW10gYVxuXG5sZXQgZXF1YWwgZXEgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHRydWVcbiAgICBlbHNlXG4gICAgICBlcSBhLihpKSBiLihpKSAmJiBhdXggKGkgKyAxKVxuICBpblxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIGF1eCAwXG5cbmxldCBjb21wYXJlIGNtcCBhIGIgPVxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgICAgMFxuICAgICAgZWxzZVxuICAgICAgICAtMVxuICAgIGVsc2UgaWYgaSA9IEFycmF5Lmxlbmd0aCBiIHRoZW5cbiAgICAgIDFcbiAgICBlbHNlIChcbiAgICAgIGxldCBjID0gY21wIGEuKGkpIGIuKGkpIGluXG4gICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgIGF1eCAoaSArIDEpXG4gICAgICBlbHNlXG4gICAgICAgIGNcbiAgICApXG4gIGluXG4gIGF1eCAwXG5cbigqIHN3YXAgZWxlbWVudHMgb2YgYXJyYXkgKilcbmxldCBzd2FwIGEgaSBqID1cbiAgaWYgaSA8PiBqIHRoZW4gKFxuICAgIGxldCB0bXAgPSBhLihpKSBpblxuICAgIGEuKGkpIDwtIGEuKGopO1xuICAgIGEuKGopIDwtIHRtcFxuICApXG5cbigqIHNodWZmbGUgYVtpIOKApiBqXSB1c2luZyB0aGUgZ2l2ZW4gaW50IHJhbmRvbSBnZW5lcmF0b3JcbiAgIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zpc2hlci1ZYXRlc19zaHVmZmxlICopXG5sZXQgX3NodWZmbGUgX3JhbmRfaW50IGEgaSBqID1cbiAgZm9yIGsgPSBqIC0gMSBkb3dudG8gaSArIDEgZG9cbiAgICBsZXQgbCA9IF9yYW5kX2ludCAoayArIDEpIGluXG4gICAgbGV0IHRtcCA9IGEuKGwpIGluXG4gICAgYS4obCkgPC0gYS4oayk7XG4gICAgYS4oaykgPC0gdG1wXG4gIGRvbmVcblxubGV0IHNodWZmbGUgYSA9IF9zaHVmZmxlIFJhbmRvbS5pbnQgYSAwIChBcnJheS5sZW5ndGggYSlcbmxldCBzaHVmZmxlX3dpdGggc3QgYSA9IF9zaHVmZmxlIChSYW5kb20uU3RhdGUuaW50IHN0KSBhIDAgKEFycmF5Lmxlbmd0aCBhKVxuXG5sZXQgcmFuZG9tX2Nob29zZSBhID1cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkucmFuZG9tX2Nob29zZVwiO1xuICBmdW4gc3QgLT4gYS4oUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgcmFuZG9tX2xlbiBuIGcgc3QgPSBBcnJheS5pbml0IG4gKGZ1biBfIC0+IGcgc3QpXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGxldCBuID0gUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcmFuZG9tX25vbl9lbXB0eSBnIHN0ID1cbiAgbGV0IG4gPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIG4gZyBzdFxuXG5sZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHBwX2kgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICA/KHBwX3NlcCA9IGZ1biBvdXQgKCkgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiLEAgXCIpIHBwX2l0ZW0gb3V0IGEgPVxuICBwcF9zdGFydCBvdXQgKCk7XG4gIGZvciBrID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICBpZiBrID4gMCB0aGVuIHBwX3NlcCBvdXQgKCk7XG4gICAgcHBfaXRlbSBrIG91dCBhLihrKVxuICBkb25lO1xuICBwcF9zdG9wIG91dCAoKVxuXG5sZXQgdG9fc3RyaW5nID8oc2VwID0gXCIsIFwiKSBpdGVtX3RvX3N0cmluZyBhID1cbiAgQXJyYXkudG9fbGlzdCBhIHw+IExpc3QubWFwIGl0ZW1fdG9fc3RyaW5nIHw+IFN0cmluZy5jb25jYXQgc2VwXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPj0gbGVuZ3RoIGEgdGhlblxuICAgICAgU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIFNlcS5Db25zIChhLihpKSwgYXV4IChpICsgMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19pdGVyIGEgayA9IGl0ZXIgayBhXG5cbmxldCB0b19nZW4gYSA9XG4gIGxldCBrID0gcmVmIDAgaW5cbiAgZnVuICgpIC0+XG4gICAgaWYgIWsgPCBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCB4ID0gYS4oIWspIGluXG4gICAgICBpbmNyIGs7XG4gICAgICBTb21lIHhcbiAgICApIGVsc2VcbiAgICAgIE5vbmVcblxuKCoqIHsyIEdlbmVyaWMgRnVuY3Rpb25zfSAqKVxuXG5tb2R1bGUgdHlwZSBNT05PX0FSUkFZID0gc2lnXG4gIHR5cGUgZWx0XG4gIHR5cGUgdFxuXG4gIHZhbCBsZW5ndGggOiB0IC0+IGludFxuICB2YWwgZ2V0IDogdCAtPiBpbnQgLT4gZWx0XG4gIHZhbCBzZXQgOiB0IC0+IGludCAtPiBlbHQgLT4gdW5pdFxuZW5kXG5cbigqIER1YWwgUGl2b3QgUXVpY2tzb3J0IChZYXJvc2xhdnNraXkpXG4gICBmcm9tIFwiYXZlcmFnZSBjYXNlIGFuYWx5c2lzIG9mIEphdmEgNydzIER1YWwgUGl2b3QgUXVpY2tzb3J0XCIgKilcbm1vZHVsZSBTb3J0R2VuZXJpYyAoQSA6IE1PTk9fQVJSQVkpID0gc3RydWN0XG4gIG1vZHVsZSBSYW5kID0gUmFuZG9tLlN0YXRlXG5cbiAgbGV0IHNlZWRfID0gW3wgMTIzNDU2IHxdXG5cbiAgdHlwZSBzdGF0ZSA9IHtcbiAgICBtdXRhYmxlIGw6IGludDsgKCogbGVmdCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBnOiBpbnQ7ICgqIHJpZ2h0IHBvaW50ZXIgKilcbiAgICBtdXRhYmxlIGs6IGludDtcbiAgfVxuXG4gIGxldCByYW5kX2lkeF8gcmFuZCBpIGogPSBpICsgUmFuZC5pbnQgcmFuZCAoaiAtIGkpXG5cbiAgbGV0IHN3YXBfIGEgaSBqID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICAoKVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHRtcCA9IEEuZ2V0IGEgaSBpblxuICAgICAgQS5zZXQgYSBpIChBLmdldCBhIGopO1xuICAgICAgQS5zZXQgYSBqIHRtcFxuICAgIClcblxuICBsZXQgc29ydCB+Y21wIGEgPVxuICAgIGxldCByZWMgaW5zZXJ0XyBhIGkgayA9XG4gICAgICBpZiBrIDwgaSB0aGVuXG4gICAgICAgICgpXG4gICAgICBlbHNlIGlmIGNtcCAoQS5nZXQgYSBrKSAoQS5nZXQgYSAoayArIDEpKSA+IDAgdGhlbiAoXG4gICAgICAgIHN3YXBfIGEgayAoayArIDEpO1xuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiByZWN1cnNpdmUgcGFydCBvZiBpbnNlcnRpb24gc29ydCAqKVxuICAgIGxldCByZWMgc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIGsgPVxuICAgICAgaWYgayA8IGogdGhlbiAoXG4gICAgICAgIGluc2VydF8gYSBpIChrIC0gMSk7XG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiAoayArIDEpXG4gICAgICApXG4gICAgaW5cbiAgICAoKiBpbnNlcnRpb24gc29ydCwgZm9yIHNtYWxsIHNsaWNlcyAqKVxuICAgIGxldCBzb3J0X2luc2VydGlvbiBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEgdGhlbiBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGkgKyAxKVxuICAgIGluXG4gICAgbGV0IHJhbmQgPSBSYW5kLm1ha2Ugc2VlZF8gaW5cbiAgICAoKiBzb3J0IHNsaWNlLlxuICAgICAgIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIHR3byBwaXZvdHMgYXJlIGVxdWFsLCBidXQgaXQncyB1bmxpa2VseS4gKilcbiAgICBsZXQgcmVjIHNvcnRfc2xpY2VfIH5zdCBhIGkgaiA9XG4gICAgICBpZiBqIC0gaSA+IDEwIHRoZW4gKFxuICAgICAgICBzdC5sIDwtIGk7XG4gICAgICAgIHN0LmcgPC0gaiAtIDE7XG4gICAgICAgIHN0LmsgPC0gaTtcbiAgICAgICAgKCogY2hvb3NlIHBpdm90cyAqKVxuICAgICAgICBsZXQgcCA9IEEuZ2V0IGEgKHJhbmRfaWR4XyByYW5kIGkgaikgaW5cbiAgICAgICAgbGV0IHEgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgICgqIGludmFyaWFudDogc3QucCA8PSBzdC5xLCBzd2FwIHRoZW0gb3RoZXJ3aXNlICopXG4gICAgICAgIGxldCBwLCBxID1cbiAgICAgICAgICBpZiBjbXAgcCBxID4gMCB0aGVuXG4gICAgICAgICAgICBxLCBwXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcCwgcVxuICAgICAgICBpblxuICAgICAgICB3aGlsZSBzdC5rIDw9IHN0LmcgZG9cbiAgICAgICAgICBsZXQgY3VyID0gQS5nZXQgYSBzdC5rIGluXG4gICAgICAgICAgaWYgY21wIGN1ciBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiBsZWZ0bW9zdCBiYW5kICopXG4gICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICApIGVsc2UgaWYgY21wIGN1ciBxID4gMCB0aGVuIChcbiAgICAgICAgICAgICgqIGluc2VydCBpbiByaWdodG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgd2hpbGUgc3QuayA8IHN0LmcgJiYgY21wIChBLmdldCBhIHN0LmcpIHEgPiAwIGRvXG4gICAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDFcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBzd2FwXyBhIHN0Lmsgc3QuZztcbiAgICAgICAgICAgIHN0LmcgPC0gc3QuZyAtIDE7XG4gICAgICAgICAgICAoKiB0aGUgZWxlbWVudCBzd2FwcGVkIGZyb20gdGhlIHJpZ2h0IG1pZ2h0IGJlIGluIHRoZSBmaXJzdCBzaXR1YXRpb24uXG4gICAgICAgICAgICAgICB0aGF0IGlzLCA8IHAgICh3ZSBrbm93IGl0J3MgPD0gcSBhbHJlYWR5KSAqKVxuICAgICAgICAgICAgaWYgY21wIChBLmdldCBhIHN0LmspIHAgPCAwIHRoZW4gKFxuICAgICAgICAgICAgICBpZiBzdC5rIDw+IHN0LmwgdGhlbiBzd2FwXyBhIHN0Lmsgc3QubDtcbiAgICAgICAgICAgICAgc3QubCA8LSBzdC5sICsgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgc3QuayA8LSBzdC5rICsgMVxuICAgICAgICBkb25lO1xuICAgICAgICAoKiBzYXZlIHZhbHVlcyBiZWZvcmUgcmVjdXJzaW5nICopXG4gICAgICAgIGxldCBsID0gc3QubCBhbmQgZyA9IHN0LmcgYW5kIHNvcnRfbWlkZGxlID0gY21wIHAgcSA8IDAgaW5cbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgaSBsO1xuICAgICAgICBpZiBzb3J0X21pZGRsZSB0aGVuIHNvcnRfc2xpY2VfIH5zdCBhIGwgKGcgKyAxKTtcbiAgICAgICAgc29ydF9zbGljZV8gfnN0IGEgKGcgKyAxKSBqXG4gICAgICApIGVsc2VcbiAgICAgICAgc29ydF9pbnNlcnRpb24gYSBpIGpcbiAgICBpblxuICAgIGlmIEEubGVuZ3RoIGEgPiAwIHRoZW4gKFxuICAgICAgbGV0IHN0ID0geyBsID0gMDsgZyA9IEEubGVuZ3RoIGE7IGsgPSAwIH0gaW5cbiAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIDAgKEEubGVuZ3RoIGEpXG4gICAgKVxuZW5kXG5cbmxldCBzb3J0X2dlbmVyaWMgKHR5cGUgYXJyIGVsdClcbiAgICAobW9kdWxlIEEgOiBNT05PX0FSUkFZIHdpdGggdHlwZSB0ID0gYXJyIGFuZCB0eXBlIGVsdCA9IGVsdCkgfmNtcCBhID1cbiAgbGV0IG1vZHVsZSBTID0gU29ydEdlbmVyaWMgKEEpIGluXG4gIFMuc29ydCB+Y21wIGFcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID4+PSApIGEgZiA9IGZsYXRfbWFwIGYgYVxuICBsZXQgKCA+PnwgKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoID58PSApIGEgZiA9IG1hcCBmIGFcbiAgbGV0ICggLS0gKSA9ICggLS0gKVxuICBsZXQgKCAtLV4gKSA9ICggLS1eIClcblxuICB0eXBlICdhIHQgPSAnYSBhcnJheVxuXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgYTEgYTIgPSBtb25vaWRfcHJvZHVjdCAoZnVuIHggeSAtPiB4LCB5KSBhMSBhMlxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cblxuXG50eXBlIHQgPSBmbG9hdFxuXG50eXBlIGZwY2xhc3MgPSBTdGRsaWIuZnBjbGFzcyA9XG4gIHwgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID0gKVxuICBsZXQgKCA8PiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PiApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbiAgbGV0ICggPj0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPj0gKVxuICBsZXQgKCB+LSApIDogdCAtPiB0ID0gU3RkbGliLiggfi0uIClcbiAgbGV0ICggKyApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCArLiApXG4gIGxldCAoIC0gKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggLS4gKVxuICBsZXQgKCAqICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oICouIClcbiAgbGV0ICggLyApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAvLiApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgbmFuID0gU3RkbGliLm5hblxubGV0IGluZmluaXR5ID0gU3RkbGliLmluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gU3RkbGliLm5lZ19pbmZpbml0eVxubGV0IG1heF92YWx1ZSA9IGluZmluaXR5XG5sZXQgbWluX3ZhbHVlID0gbmVnX2luZmluaXR5XG5sZXQgbWF4X2Zpbml0ZV92YWx1ZSA9IFN0ZGxpYi5tYXhfZmxvYXRcbmxldCBlcHNpbG9uID0gU3RkbGliLmVwc2lsb25fZmxvYXRcbmxldCBwaSA9IDB4MS45MjFmYjU0NDQyZDE4cCsxXG5sZXQgaXNfbmFuIHggPSBTdGRsaWIuKGNsYXNzaWZ5X2Zsb2F0IHggPSBTdGRsaWIuRlBfbmFuKVxubGV0IGFkZCA9ICggKy4gKVxubGV0IHN1YiA9ICggLS4gKVxubGV0IG11bCA9ICggKi4gKVxubGV0IGRpdiA9ICggLy4gKVxubGV0IG5lZyA9ICggfi0uIClcbmxldCBhYnMgPSBTdGRsaWIuYWJzX2Zsb2F0XG5sZXQgc2NhbGUgPSAoICouIClcblxubGV0IG1pbiAoeCA6IHQpIHkgPVxuICBtYXRjaCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeCwgU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHkgd2l0aFxuICB8IEZQX25hbiwgXyAtPiB5XG4gIHwgXywgRlBfbmFuIC0+IHhcbiAgfCBfIC0+XG4gICAgaWYgeCA8IHkgdGhlblxuICAgICAgeFxuICAgIGVsc2VcbiAgICAgIHlcblxubGV0IG1heCAoeCA6IHQpIHkgPVxuICBtYXRjaCBTdGRsaWIuY2xhc3NpZnlfZmxvYXQgeCwgU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHkgd2l0aFxuICB8IEZQX25hbiwgXyAtPiB5XG4gIHwgXywgRlBfbmFuIC0+IHhcbiAgfCBfIC0+XG4gICAgaWYgeCA+IHkgdGhlblxuICAgICAgeFxuICAgIGVsc2VcbiAgICAgIHlcblxubGV0IGVxdWFsIChhIDogZmxvYXQpIGIgPSBhID0gYlxubGV0IGhhc2ggOiB0IC0+IGludCA9IEhhc2h0YmwuaGFzaFxubGV0IGNvbXBhcmUgKGEgOiBmbG9hdCkgYiA9IFN0ZGxpYi5jb21wYXJlIGEgYlxuXG5bQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCBwcCA9IEZvcm1hdC5wcF9wcmludF9mbG9hdFxuXG5sZXQgZnNpZ24gYSA9XG4gIGlmIGlzX25hbiBhIHRoZW5cbiAgICBuYW5cbiAgZWxzZSBpZiBhID0gMC4gdGhlblxuICAgIGFcbiAgZWxzZVxuICAgIFN0ZGxpYi5jb3B5c2lnbiAxLiBhXG5cbmV4Y2VwdGlvbiBUcmFwTmFOIG9mIHN0cmluZ1xuXG5sZXQgc2lnbl9leG4gKGEgOiBmbG9hdCkgPVxuICBpZiBpc19uYW4gYSB0aGVuXG4gICAgcmFpc2UgKFRyYXBOYU4gXCJzaWduX2V4blwiKVxuICBlbHNlXG4gICAgY29tcGFyZSBhIDAuXG5cbmxldCByb3VuZCB4ID1cbiAgbGV0IGxvdyA9IGZsb29yIHggaW5cbiAgbGV0IGhpZ2ggPSBjZWlsIHggaW5cbiAgaWYgeCAtLiBsb3cgPiBoaWdoIC0uIHggdGhlblxuICAgIGhpZ2hcbiAgZWxzZVxuICAgIGxvd1xuXG5sZXQgdG9faW50IChhIDogZmxvYXQpID0gU3RkbGliLmludF9vZl9mbG9hdCBhXG5sZXQgb2ZfaW50IChhIDogaW50KSA9IFN0ZGxpYi5mbG9hdF9vZl9pbnQgYVxubGV0IHRvX3N0cmluZyAoYSA6IGZsb2F0KSA9IFN0ZGxpYi5zdHJpbmdfb2ZfZmxvYXQgYVxubGV0IG9mX3N0cmluZ19leG4gKGEgOiBzdHJpbmcpID0gU3RkbGliLmZsb2F0X29mX3N0cmluZyBhXG5cbmxldCBvZl9zdHJpbmdfb3B0IChhIDogc3RyaW5nKSA9XG4gIHRyeSBTb21lIChTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nIGEpIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IHJhbmRvbSBuIHN0ID0gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IG5cbmxldCByYW5kb21fc21hbGwgPSByYW5kb20gMTAwLjBcbmxldCByYW5kb21fcmFuZ2UgaSBqIHN0ID0gaSArLiByYW5kb20gKGogLS4gaSkgc3RcbmxldCBlcXVhbF9wcmVjaXNpb24gfmVwc2lsb24gYSBiID0gYWJzX2Zsb2F0IChhIC0uIGIpIDwgZXBzaWxvblxubGV0IGNsYXNzaWZ5ID0gU3RkbGliLmNsYXNzaWZ5X2Zsb2F0XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRXh0ZW5zaW9uIHRvIHRoZSBzdGFuZGFyZCBIYXNodGJsfSAgKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZXEgPSAnYSAtPiAnYSAtPiBib29sXG50eXBlICdhIGhhc2ggPSAnYSAtPiBpbnRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgUG9seW1vcnBoaWMgdGFibGVzfSAqKVxuXG5tb2R1bGUgUG9seSA9IHN0cnVjdFxuICBsZXQgZ2V0IHRibCB4ID0gdHJ5IFNvbWUgKEhhc2h0YmwuZmluZCB0YmwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgZ2V0X29yIHRibCB4IH5kZWZhdWx0ID0gdHJ5IEhhc2h0YmwuZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBkZWZhdWx0XG4gIGxldCBrZXlzIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4ga2V5IF8gLT4gayBrZXkpIHRibFxuICBsZXQgdmFsdWVzIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4gXyB2IC0+IGsgdikgdGJsXG4gIGxldCBrZXlzX2xpc3QgdGJsID0gSGFzaHRibC5mb2xkIChmdW4gayBfIGEgLT4gayA6OiBhKSB0YmwgW11cbiAgbGV0IHZhbHVlc19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIF8gdiBhIC0+IHYgOjogYSkgdGJsIFtdXG5cbiAgbGV0IGFkZF9saXN0IHRibCBrIHYgPVxuICAgIGxldCBsID0gdHJ5IEhhc2h0YmwuZmluZCB0YmwgayB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgayAodiA6OiBsKVxuXG4gIGxldCBpbmNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgbGV0IG4gPSBnZXRfb3IgdGJsIHggfmRlZmF1bHQ6MCBpblxuICAgIGlmIG4gKyBieSA8PSAwIHRoZW5cbiAgICAgIEhhc2h0YmwucmVtb3ZlIHRibCB4XG4gICAgZWxzZVxuICAgICAgSGFzaHRibC5yZXBsYWNlIHRibCB4IChuICsgYnkpXG5cbiAgbGV0IGRlY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICB0cnlcbiAgICAgIGxldCBuID0gSGFzaHRibC5maW5kIHRibCB4IGluXG4gICAgICBpZiBuIC0gYnkgPD0gMCB0aGVuXG4gICAgICAgIEhhc2h0YmwucmVtb3ZlIHRibCB4XG4gICAgICBlbHNlXG4gICAgICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgeCAobiAtIGJ5KVxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IG1hcF9saXN0IGYgaCA9IEhhc2h0YmwuZm9sZCAoZnVuIHggeSBhY2MgLT4gZiB4IHkgOjogYWNjKSBoIFtdXG4gIGxldCB0b19pdGVyIHRibCBrID0gSGFzaHRibC5pdGVyIChmdW4ga2V5IHYgLT4gayAoa2V5LCB2KSkgdGJsXG4gIGxldCBhZGRfaXRlciB0YmwgaSA9IGkgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdilcblxuICBsZXQgYWRkX2l0ZXJfd2l0aCB+ZiB0YmwgaSA9XG4gICAgaSAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuXG4gIGxldCBhZGRfc2VxIHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIChrLCB2KSAtPiBIYXNodGJsLmFkZCB0YmwgayB2KSBzZXFcblxuICBsZXQgYWRkX3NlcV93aXRoIH5mIHRibCBzZXEgPVxuICAgIFNlcS5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gSGFzaHRibC5hZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgc2VxXG5cbiAgKCogaGVscGVyIGZvciBidWlsZGluZyBoYXNodGFibGVzIGJ5IGJ1bGsgbXV0YXRpb24gKilcbiAgbGV0W0BpbmxpbmVdIG1rX3RibF8gZiB4ID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBmIHRibCB4O1xuICAgIHRibFxuXG4gIGxldCBvZl9pdGVyIGkgPSBta190YmxfIGFkZF9pdGVyIGlcbiAgbGV0IG9mX3NlcSBpID0gbWtfdGJsXyBhZGRfc2VxIGlcbiAgbGV0IG9mX2l0ZXJfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX2l0ZXJfd2l0aCB+ZikgaVxuICBsZXQgb2Zfc2VxX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9zZXFfd2l0aCB+ZikgaVxuICBsZXQgYWRkX2l0ZXJfY291bnQgdGJsIGkgPSBpIChmdW4gayAtPiBpbmNyIHRibCBrKVxuICBsZXQgYWRkX3NlcV9jb3VudCB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biBrIC0+IGluY3IgdGJsIGspIHNlcVxuICBsZXQgb2ZfaXRlcl9jb3VudCBpID0gbWtfdGJsXyBhZGRfaXRlcl9jb3VudCBpXG4gIGxldCBvZl9zZXFfY291bnQgaSA9IG1rX3RibF8gYWRkX3NlcV9jb3VudCBpXG4gIGxldCB0b19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxuICBsZXQgb2ZfbGlzdCBsID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXIgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdikgbDtcbiAgICB0YmxcblxuICBsZXQgb2ZfbGlzdF93aXRoIH5mIGwgPVxuICAgIGxldCB0YmwgPSBIYXNodGJsLmNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIGw7XG4gICAgdGJsXG5cbiAgbGV0IHVwZGF0ZSB0YmwgfmYgfmsgPVxuICAgIGxldCB2ID0gZ2V0IHRibCBrIGluXG4gICAgbWF0Y2ggdiwgZiBrIHYgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAoKVxuICAgIHwgTm9uZSwgU29tZSB2JyAtPiBIYXNodGJsLmFkZCB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBTb21lIHYnIC0+IEhhc2h0YmwucmVwbGFjZSB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBOb25lIC0+IEhhc2h0YmwucmVtb3ZlIHRibCBrXG5cbiAgbGV0IGdldF9vcl9hZGQgdGJsIH5mIH5rID1cbiAgICB0cnkgSGFzaHRibC5maW5kIHRibCBrXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCB2ID0gZiBrIGluXG4gICAgICBIYXNodGJsLmFkZCB0YmwgayB2O1xuICAgICAgdlxuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKVxuICAgICAgPyhwcF9hcnJvdyA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQCAtPiBcIikgcHBfayBwcF92IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBIYXNodGJsLml0ZXJcbiAgICAgIChmdW4gayB2IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX2sgZm10IGs7XG4gICAgICAgIHBwX2Fycm93IGZtdCAoKTtcbiAgICAgICAgcHBfdiBmbXQgdilcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuXG5pbmNsdWRlIFBvbHlcblxuKCoqIHsyIEZ1bmN0b3J9ICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNcblxuICB2YWwgZ2V0IDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZ2V0IHRibCBrXSBmaW5kcyBhIGJpbmRpbmcgZm9yIHRoZSBrZXkgW2tdIGlmIHByZXNlbnQsXG4gICAgICBvciByZXR1cm5zIFtOb25lXSBpZiBubyB2YWx1ZSBpcyBmb3VuZC5cbiAgICAgIFNhZmUgdmVyc2lvbiBvZiB7IUhhc2h0YmwuZmluZH0uICopXG5cbiAgdmFsIGdldF9vciA6ICdhIHQgLT4ga2V5IC0+IGRlZmF1bHQ6J2EgLT4gJ2FcbiAgKCoqIFtnZXRfb3IgdGJsIGsgfmRlZmF1bHRdIHJldHVybnMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgdG8gW2tdIGlmIHByZXNlbnQsXG4gICAgICBhbmQgcmV0dXJucyBbZGVmYXVsdF0gb3RoZXJ3aXNlIChpZiBba10gZG9lc24ndCBiZWxvbmcgaW4gW3RibF0pLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgYWRkX2xpc3QgOiAnYSBsaXN0IHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgKCoqIFthZGRfbGlzdCB0YmwgeCB5XSBhZGRzIFt5XSB0byB0aGUgbGlzdCBbeF0gaXMgYm91bmQgdG8uIElmIFt4XSBpc1xuICAgICAgbm90IGJvdW5kLCBpdCBiZWNvbWVzIGJvdW5kIHRvIFt5XS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGluY3IgOiA/Ynk6aW50IC0+IGludCB0IC0+IGtleSAtPiB1bml0XG4gICgqKiBbaW5jciA/YnkgdGJsIHhdIGluY3JlbWVudHMgb3IgaW5pdGlhbGl6ZXMgdGhlIGNvdW50ZXIgYXNzb2NpYXRlZCB3aXRoIFt4XS5cbiAgICAgIElmIFtnZXQgdGJsIHggPSBOb25lXSwgdGhlbiBhZnRlciB1cGRhdGUsIFtnZXQgdGJsIHggPSBTb21lIDFdO1xuICAgICAgb3RoZXJ3aXNlLCBpZiBbZ2V0IHRibCB4ID0gU29tZSBuXSwgbm93IFtnZXQgdGJsIHggPSBTb21lIChuKzEpXS5cbiAgICAgIEBwYXJhbSBieSBpZiBzcGVjaWZpZWQsIHRoZSBpbnQgdmFsdWUgaXMgaW5jcmVtZW50ZWQgYnkgW2J5XSByYXRoZXIgdGhhbiAxLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwgZGVjciA6ID9ieTppbnQgLT4gaW50IHQgLT4ga2V5IC0+IHVuaXRcbiAgKCoqIFtkZWNyID9ieSB0YmwgeF0gaXMgbGlrZSB7IWluY3J9IGJ1dCBzdWJ0cmFjdCAxIChvciB0aGUgdmFsdWUgb2YgW2J5XSkuXG4gICAgICBJZiB0aGUgdmFsdWUgcmVhY2hlcyAwLCB0aGUga2V5IGlzIHJlbW92ZWQgZnJvbSB0aGUgdGFibGUuXG4gICAgICBUaGlzIGRvZXMgbm90aGluZyBpZiB0aGUga2V5IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQgaW4gdGhlIHRhYmxlLlxuICAgICAgQHNpbmNlIDAuMTYgKilcblxuICB2YWwga2V5cyA6ICdhIHQgLT4ga2V5IGl0ZXJcbiAgKCoqICBba2V5cyB0YmwgZl0gaXRlcmF0ZXMgb24ga2V5cyAoc2ltaWxhciBvcmRlciBhcyB7IUhhc2h0YmwuaXRlcn0pLiAqKVxuXG4gIHZhbCB2YWx1ZXMgOiAnYSB0IC0+ICdhIGl0ZXJcbiAgKCoqICBbdmFsdWVzIHRibCBmXSBpdGVyYXRlcyBvbiB2YWx1ZXMgaW4gdGhlIHRhYmxlLiAqKVxuXG4gIHZhbCBrZXlzX2xpc3QgOiBfIHQgLT4ga2V5IGxpc3RcbiAgKCoqIFtrZXlzX2xpc3QgdGJsXSBpcyB0aGUgbGlzdCBvZiBrZXlzIGluIFt0YmxdLlxuICAgICAgSWYgdGhlIGtleSBpcyBpbiB0aGUgSGFzaHRhYmxlIG11bHRpcGxlIHRpbWVzLCBhbGwgb2NjdXJyZW5jZXMgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgIEBzaW5jZSAwLjggKilcblxuICB2YWwgdmFsdWVzX2xpc3QgOiAnYSB0IC0+ICdhIGxpc3RcbiAgKCoqIFt2YWx1ZXNfbGlzdCB0XSBpcyB0aGUgbGlzdCBvZiB2YWx1ZXMgaW4gW3RdLlxuICAgICAgQHNpbmNlIDAuOCAqKVxuXG4gIHZhbCBtYXBfbGlzdCA6IChrZXkgLT4gJ2EgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgbGlzdFxuICAoKiogTWFwIG9uIGEgaGFzaHRhYmxlJ3MgaXRlbXMsIGNvbGxlY3QgaW50byBhIGxpc3QuICopXG5cbiAgdmFsIHRvX2l0ZXIgOiAnYSB0IC0+IChrZXkgKiAnYSkgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBpbiB0aGUgdGFibGUuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9pdGVyIDogJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9pdGVyX3dpdGggOlxuICAgIGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXIgLT4gdW5pdFxuICAoKiogQWRkIHRoZSBjb3JyZXNwb25kaW5nIHBhaXJzIHRvIHRoZSB0YWJsZSwgdXNpbmcgeyFIYXNodGJsLmFkZH0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgUmVuYW1lZCBmcm9tIFthZGRfc3RkX3NlcV0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBhZGRfc2VxX3dpdGggOlxuICAgIGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgb2ZfaXRlciA6IChrZXkgKiAnYSkgaXRlciAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX2l0ZXJfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBpdGVyIC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxXSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIG9mX3NlcV93aXRoIDogZjooa2V5IC0+ICdhIC0+ICdhIC0+ICdhKSAtPiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIGFkZF9pdGVyX2NvdW50IDogaW50IHQgLT4ga2V5IGl0ZXIgLT4gdW5pdFxuICAoKiogW2FkZF9pdGVyX2NvdW50IHRibCBpXSBpbmNyZW1lbnRzIHRoZSBjb3VudCBvZiBlYWNoIGVsZW1lbnQgb2YgW2ldXG4gICAgICBieSBjYWxsaW5nIHshaW5jcn0uIFRoaXMgaXMgdXNlZnVsIGZvciBjb3VudGluZyBob3cgbWFueSB0aW1lcyBlYWNoXG4gICAgICBlbGVtZW50IG9mIFtpXSBvY2N1cnMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9zZXFfY291bnQgOiBpbnQgdCAtPiBrZXkgU2VxLnQgLT4gdW5pdFxuICAoKiogW2FkZF9zZXFfY291bnQgdGJsIHNlcV0gaW5jcmVtZW50cyB0aGUgY291bnQgb2YgZWFjaCBlbGVtZW50IG9mIFtzZXFdXG4gICAgICBieSBjYWxsaW5nIHshaW5jcn0uIFRoaXMgaXMgdXNlZnVsIGZvciBjb3VudGluZyBob3cgbWFueSB0aW1lcyBlYWNoXG4gICAgICBlbGVtZW50IG9mIFtzZXFdIG9jY3Vycy5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV9jb3VudF0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBvZl9pdGVyX2NvdW50IDoga2V5IGl0ZXIgLT4gaW50IHRcbiAgKCoqIExpa2UgeyFhZGRfc2VxX2NvdW50fSwgYnV0IGFsbG9jYXRlcyBhIG5ldyB0YWJsZSBhbmQgcmV0dXJucyBpdC5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2Zfc2VxX2NvdW50IDoga2V5IFNlcS50IC0+IGludCB0XG4gICgqKiBMaWtlIHshYWRkX3NlcV9jb3VudH0sIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgdGFibGUgYW5kIHJldHVybnMgaXQuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFfY291bnRdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgdG9fbGlzdCA6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICgqKiBbdG9fbGlzdCB0YmxdIHJldHVybnMgdGhlIGxpc3Qgb2YgKGtleSx2YWx1ZSkgYmluZGluZ3MgKG9yZGVyIHVuc3BlY2lmaWVkKS4gKilcblxuICB2YWwgb2ZfbGlzdCA6IChrZXkgKiAnYSkgbGlzdCAtPiAnYSB0XG4gICgqKiBbb2ZfbGlzdCBsXSBidWlsZHMgYSB0YWJsZSBmcm9tIHRoZSBnaXZlbiBsaXN0IFtsXSBvZiBiaW5kaW5ncyBba19pIC0+IHZfaV0sXG4gICAgICBhZGRlZCBpbiBvcmRlciB1c2luZyB7IWFkZH0uIElmIGEga2V5IG9jY3VycyBzZXZlcmFsIHRpbWVzLFxuICAgICAgaXQgd2lsbCBiZSBhZGRlZCBzZXZlcmFsIHRpbWVzLCBhbmQgdGhlIHZpc2libGUgYmluZGluZ1xuICAgICAgd2lsbCBiZSB0aGUgbGFzdCBvbmUuICopXG5cbiAgdmFsIG9mX2xpc3Rfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBsaXN0IC0+ICdhIHRcbiAgKCoqIFtvZl9saXN0IGxdIGJ1aWxkcyBhIHRhYmxlIGZyb20gdGhlIGdpdmVuIGxpc3QgW2xdIG9mIGJpbmRpbmdzIFtrX2kgLT4gdl9pXS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIHVwZGF0ZSA6ICdhIHQgLT4gZjooa2V5IC0+ICdhIG9wdGlvbiAtPiAnYSBvcHRpb24pIC0+IGs6a2V5IC0+IHVuaXRcbiAgKCoqIFt1cGRhdGUgdGJsIH5mIH5rXSB1cGRhdGVzIGtleSBba10gYnkgY2FsbGluZyBbZiBrIChTb21lIHYpXSBpZlxuICAgICAgW2tdIHdhcyBtYXBwZWQgdG8gW3ZdLCBvciBbZiBrIE5vbmVdIG90aGVyd2lzZTsgaWYgdGhlIGNhbGxcbiAgICAgIHJldHVybnMgW05vbmVdIHRoZW4gW2tdIGlzIHJlbW92ZWQvc3RheXMgcmVtb3ZlZCwgaWYgdGhlIGNhbGxcbiAgICAgIHJldHVybnMgW1NvbWUgdiddIHRoZW4gdGhlIGJpbmRpbmcgW2sgLT4gdiddIGlzIGluc2VydGVkXG4gICAgICB1c2luZyB7IUhhc2h0YmwucmVwbGFjZX0uXG4gICAgICBAc2luY2UgMC4xNCAqKVxuXG4gIHZhbCBnZXRfb3JfYWRkIDogJ2EgdCAtPiBmOihrZXkgLT4gJ2EpIC0+IGs6a2V5IC0+ICdhXG4gICgqKiBbZ2V0X29yX2FkZCB0YmwgfmsgfmZdIGZpbmRzIGFuZCByZXR1cm5zIHRoZSBiaW5kaW5nIG9mIFtrXVxuICAgICAgaW4gW3RibF0sIGlmIGl0IGV4aXN0cy4gSWYgaXQgZG9lcyBub3QgZXhpc3QsIHRoZW4gW2Yga11cbiAgICAgIGlzIGNhbGxlZCB0byBvYnRhaW4gYSBuZXcgYmluZGluZyBbdl07IFtrIC0+IHZdIGlzIGFkZGVkXG4gICAgICB0byBbdGJsXSBhbmQgW3ZdIGlzIHJldHVybmVkLlxuICAgICAgQHNpbmNlIDEuMCAqKVxuXG4gIHZhbCBwcCA6XG4gICAgP3BwX3N0YXJ0OnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zdG9wOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9zZXA6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX2Fycm93OnVuaXQgcHJpbnRlciAtPlxuICAgIGtleSBwcmludGVyIC0+XG4gICAgJ2EgcHJpbnRlciAtPlxuICAgICdhIHQgcHJpbnRlclxuICAoKiogW3BwIH5wcF9zdGFydCB+cHBfc3RvcCB+cHBfc2VwIH5wcCBhcnJvdyBwcF9rIHBwX3ZdIHJldHVybnMgYSB0YWJsZSBwcmludGVyXG4gICAgICBnaXZlbiBhIFtwcF9rXSBwcmludGVyXG4gICAgICBmb3IgaW5kaXZpZHVhbCBrZXkgYW5kIGEgW3BwX3ZdIHByaW50ZXIgZm9yIGluZGl2aWR1YWwgdmFsdWUuXG4gICAgICBbcHBfc3RhcnRdIGFuZCBbcHBfc3RvcF0gY29udHJvbCB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBkZWxpbWl0ZXJzLFxuICAgICAgYnkgZGVmYXVsdCBwcmludCBub3RoaW5nLiBbcHBfc2VwXSBjb250cm9sIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBiaW5kaW5nLlxuICAgICAgW3BwX2Fycm93XSBjb250cm9sIHRoZSBhcnJvdyBiZXR3ZWVuIHRoZSBrZXkgYW5kIHZhbHVlLlxuICAgICAgUmVuYW1lZCBmcm9tIFtwcmludF0gc2luY2UgMi4wLlxuICAgICAgQHNpbmNlIDAuMTMgKilcbmVuZFxuXG5tb2R1bGUgTWFrZSAoWCA6IEhhc2h0YmwuSGFzaGVkVHlwZSkgOlxuICBTIHdpdGggdHlwZSBrZXkgPSBYLnQgYW5kIHR5cGUgJ2EgdCA9ICdhIEhhc2h0YmwuTWFrZShYKS50ID0gc3RydWN0XG4gIGluY2x1ZGUgSGFzaHRibC5NYWtlIChYKVxuXG4gIGxldCBnZXQgdGJsIHggPSB0cnkgU29tZSAoZmluZCB0YmwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgZ2V0X29yIHRibCB4IH5kZWZhdWx0ID0gdHJ5IGZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gZGVmYXVsdFxuXG4gIGxldCBpbmNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgbGV0IG4gPSBnZXRfb3IgdGJsIHggfmRlZmF1bHQ6MCBpblxuICAgIGlmIG4gKyBieSA8PSAwIHRoZW5cbiAgICAgIHJlbW92ZSB0YmwgeFxuICAgIGVsc2VcbiAgICAgIHJlcGxhY2UgdGJsIHggKG4gKyBieSlcblxuICBsZXQgYWRkX2xpc3QgdGJsIGsgdiA9XG4gICAgbGV0IGwgPSB0cnkgZmluZCB0YmwgayB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgIHJlcGxhY2UgdGJsIGsgKHYgOjogbClcblxuICBsZXQgZGVjciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIHRyeVxuICAgICAgbGV0IG4gPSBmaW5kIHRibCB4IGluXG4gICAgICBpZiBuIC0gYnkgPD0gMCB0aGVuXG4gICAgICAgIHJlbW92ZSB0YmwgeFxuICAgICAgZWxzZVxuICAgICAgICByZXBsYWNlIHRibCB4IChuIC0gYnkpXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQga2V5cyB0YmwgayA9IGl0ZXIgKGZ1biBrZXkgXyAtPiBrIGtleSkgdGJsXG4gIGxldCB2YWx1ZXMgdGJsIGsgPSBpdGVyIChmdW4gXyB2IC0+IGsgdikgdGJsXG4gIGxldCBrZXlzX2xpc3QgdGJsID0gZm9sZCAoZnVuIGsgXyBhIC0+IGsgOjogYSkgdGJsIFtdXG4gIGxldCB2YWx1ZXNfbGlzdCB0YmwgPSBmb2xkIChmdW4gXyB2IGEgLT4gdiA6OiBhKSB0YmwgW11cbiAgbGV0IG1hcF9saXN0IGYgaCA9IGZvbGQgKGZ1biB4IHkgYWNjIC0+IGYgeCB5IDo6IGFjYykgaCBbXVxuXG4gIGxldCB1cGRhdGUgdGJsIH5mIH5rID1cbiAgICBsZXQgdiA9IGdldCB0YmwgayBpblxuICAgIG1hdGNoIHYsIGYgayB2IHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gKClcbiAgICB8IE5vbmUsIFNvbWUgdicgLT4gYWRkIHRibCBrIHYnXG4gICAgfCBTb21lIF8sIFNvbWUgdicgLT4gcmVwbGFjZSB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBOb25lIC0+IHJlbW92ZSB0Ymwga1xuXG4gIGxldCBnZXRfb3JfYWRkIHRibCB+ZiB+ayA9XG4gICAgdHJ5IGZpbmQgdGJsIGtcbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgbGV0IHYgPSBmIGsgaW5cbiAgICAgIGFkZCB0YmwgayB2O1xuICAgICAgdlxuXG4gIGxldCB0b19pdGVyIHRibCBrID0gaXRlciAoZnVuIGtleSB2IC0+IGsgKGtleSwgdikpIHRibFxuICBsZXQgYWRkX2l0ZXIgdGJsIGkgPSBpIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KVxuXG4gIGxldCBhZGRfaXRlcl93aXRoIH5mIHRibCBpID1cbiAgICBpIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG5cbiAgbGV0IGFkZF9zZXEgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KSBzZXFcblxuICBsZXQgYWRkX3NlcV93aXRoIH5mIHRibCBzZXEgPVxuICAgIFNlcS5pdGVyXG4gICAgICAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuICAgICAgc2VxXG5cbiAgKCogaGVscGVyIGZvciBidWlsZGluZyBoYXNodGFibGVzIGJ5IGJ1bGsgbXV0YXRpb24gKilcbiAgbGV0W0BpbmxpbmVdIG1rX3RibF8gZiB4ID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgZiB0YmwgeDtcbiAgICB0YmxcblxuICBsZXQgb2ZfaXRlciBpID0gbWtfdGJsXyBhZGRfaXRlciBpXG4gIGxldCBvZl9zZXEgaSA9IG1rX3RibF8gYWRkX3NlcSBpXG4gIGxldCBvZl9pdGVyX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9pdGVyX3dpdGggfmYpIGlcbiAgbGV0IG9mX3NlcV93aXRoIH5mIGkgPSBta190YmxfIChhZGRfc2VxX3dpdGggfmYpIGlcbiAgbGV0IGFkZF9pdGVyX2NvdW50IHRibCBpID0gaSAoZnVuIGsgLT4gaW5jciB0YmwgaylcbiAgbGV0IGFkZF9zZXFfY291bnQgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gayAtPiBpbmNyIHRibCBrKSBzZXFcblxuICBsZXQgb2ZfaXRlcl9jb3VudCBzZXEgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBhZGRfaXRlcl9jb3VudCB0Ymwgc2VxO1xuICAgIHRibFxuXG4gIGxldCBvZl9zZXFfY291bnQgaSA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGFkZF9zZXFfY291bnQgdGJsIGk7XG4gICAgdGJsXG5cbiAgbGV0IHRvX2xpc3QgdGJsID0gZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxuICBsZXQgb2ZfbGlzdCBsID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IGFkZCB0YmwgayB2KSBsO1xuICAgIHRibFxuXG4gIGxldCBvZl9saXN0X3dpdGggfmYgbCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIGw7XG4gICAgdGJsXG5cbiAgbGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgICA/KHBwX3NlcCA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiLEAgXCIpXG4gICAgICA/KHBwX2Fycm93ID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAIC0+IFwiKSBwcF9rIHBwX3YgZm10IG0gPVxuICAgIHBwX3N0YXJ0IGZtdCAoKTtcbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gayB2IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX2sgZm10IGs7XG4gICAgICAgIHBwX2Fycm93IGZtdCAoKTtcbiAgICAgICAgcHBfdiBmbXQgdilcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuIiwiKCogYmFja3BvcnQgbmV3IGZ1bmN0aW9ucyBmcm9tIHN0ZGxpYiBoZXJlICopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIDo6IF8gLT4gLTFcbiAgfCBfIDo6IF8sIFtdIC0+IDFcbiAgfCBfIDo6IHRhaWwxLCBfIDo6IHRhaWwyIC0+IGNvbXBhcmVfbGVuZ3RocyB0YWlsMSB0YWlsMlxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCwgbiB3aXRoXG4gIHwgXyB3aGVuIG4gPCAwIC0+IDFcbiAgfCBbXSwgMCAtPiAwXG4gIHwgW10sIF8gLT4gLTFcbiAgfCBfIDo6IHRhaWwsIF8gLT4gY29tcGFyZV9sZW5ndGhfd2l0aCB0YWlsIChuIC0gMSlcblxubGV0IHJlYyBhc3NvY19vcHQgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8ICh5LCB2KSA6OiBfIHdoZW4gU3RkbGliLiggPSApIHggeSAtPiBTb21lIHZcbiAgfCBfIDo6IHRhaWwgLT4gYXNzb2Nfb3B0IHggdGFpbFxuXG5sZXQgcmVjIGFzc3Ffb3B0IHggPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCAoeSwgdikgOjogXyB3aGVuIFN0ZGxpYi4oID09ICkgeCB5IC0+IFNvbWUgdlxuICB8IF8gOjogdGFpbCAtPiBhc3NxX29wdCB4IHRhaWxcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxuKCogZW5kIG9mIGJhY2twb3J0ICopXG5cbmluY2x1ZGUgTGlzdFxuXG5sZXQgZW1wdHkgPSBbXVxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFtdIC0+IHRydWVcbiAgfCBfIDo6IF8gLT4gZmFsc2VcblxubGV0IG1ndWFyZCBjID1cbiAgaWYgYyB0aGVuXG4gICAgWyAoKSBdXG4gIGVsc2VcbiAgICBbXVxuXG4oKiogbWF4IGRlcHRoIGZvciBkaXJlY3QgcmVjdXJzaW9uICopXG5sZXQgZGlyZWN0X2RlcHRoX2RlZmF1bHRfID0gMTAwMFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFpbF9tYXAgZiBsID1cbiAgKCogVW53aW5kIHRoZSBsaXN0IG9mIHR1cGxlcywgcmVjb25zdHJ1Y3RpbmcgdGhlIGZ1bGwgbGlzdCBmcm9udC10by1iYWNrLlxuICAgICBAcGFyYW0gdGFpbF9hY2MgYSBzdWZmaXggb2YgdGhlIGZpbmFsIGxpc3Q7IHdlIGFwcGVuZCB0dXBsZXMnIGNvbnRlbnRcbiAgICAgYXQgdGhlIGZyb250IG9mIGl0ICopXG4gIGxldCByZWMgcmVidWlsZCB0YWlsX2FjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiB0YWlsX2FjY1xuICAgIHwgKHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIHk2LCB5NywgeTgpIDo6IGJzIC0+XG4gICAgICByZWJ1aWxkXG4gICAgICAgICh5MCA6OiB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiB5NSA6OiB5NiA6OiB5NyA6OiB5OCA6OiB0YWlsX2FjYylcbiAgICAgICAgYnNcbiAgaW5cbiAgKCogQ3JlYXRlIGEgY29tcHJlc3NlZCByZXZlcnNlLWxpc3QgcmVwcmVzZW50YXRpb24gdXNpbmcgdHVwbGVzXG4gICAgIEBwYXJhbSB0dXBsZV9hY2MgYSByZXZlcnNlIGxpc3Qgb2YgY2h1bmtzIG1hcHBlZCB3aXRoIFtmXSAqKVxuICBsZXQgcmVjIGRpdmUgdHVwbGVfYWNjID0gZnVuY3Rpb25cbiAgICB8IHgwIDo6IHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IHg1IDo6IHg2IDo6IHg3IDo6IHg4IDo6IHhzIC0+XG4gICAgICBsZXQgeTAgPSBmIHgwIGluXG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBsZXQgeTMgPSBmIHgzIGluXG4gICAgICBsZXQgeTQgPSBmIHg0IGluXG4gICAgICBsZXQgeTUgPSBmIHg1IGluXG4gICAgICBsZXQgeTYgPSBmIHg2IGluXG4gICAgICBsZXQgeTcgPSBmIHg3IGluXG4gICAgICBsZXQgeTggPSBmIHg4IGluXG4gICAgICBkaXZlICgoeTAsIHkxLCB5MiwgeTMsIHk0LCB5NSwgeTYsIHk3LCB5OCkgOjogdHVwbGVfYWNjKSB4c1xuICAgIHwgeHMgLT5cbiAgICAgICgqIFJldmVyc2UgZGlyZWN0aW9uLCBmaW5pc2hpbmcgb2ZmIHdpdGggYSBkaXJlY3QgbWFwICopXG4gICAgICBsZXQgdGFpbCA9IExpc3QubWFwIGYgeHMgaW5cbiAgICAgIHJlYnVpbGQgdGFpbCB0dXBsZV9hY2NcbiAgaW5cbiAgZGl2ZSBbXSBsXG5cbmxldCBtYXAgZiBsID1cbiAgbGV0IHJlYyBkaXJlY3QgZiBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgeCBdIC0+IFsgZiB4IF1cbiAgICB8IFsgeDE7IHgyIF0gLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIFsgeTE7IGYgeDIgXVxuICAgIHwgWyB4MTsgeDI7IHgzIF0gLT5cbiAgICAgIGxldCB5MSA9IGYgeDEgaW5cbiAgICAgIGxldCB5MiA9IGYgeDIgaW5cbiAgICAgIFsgeTE7IHkyOyBmIHgzIF1cbiAgICB8IF8gd2hlbiBpID0gMCAtPiB0YWlsX21hcCBmIGxcbiAgICB8IHgxIDo6IHgyIDo6IHgzIDo6IHg0IDo6IGwnIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBsZXQgeTMgPSBmIHgzIGluXG4gICAgICBsZXQgeTQgPSBmIHg0IGluXG4gICAgICB5MSA6OiB5MiA6OiB5MyA6OiB5NCA6OiBkaXJlY3QgZiAoaSAtIDEpIGwnXG4gIGluXG4gIGRpcmVjdCBmIGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbmxldCBhcHBlbmQgbDEgbDIgPVxuICBsZXRbQGlubGluZV0gc2FmZSBsMSBsMiA9IExpc3QucmV2X2FwcGVuZCAoTGlzdC5yZXYgbDEpIGwyIGluXG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IGwyXG4gICAgfCBbIHggXSAtPiB4IDo6IGwyXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBsMSBsMlxuICAgIHwgeCA6OiB5IDo6IHRsMSAtPiB4IDo6IHkgOjogZGlyZWN0IChpIC0gMSkgdGwxIGwyXG4gIGluXG4gIGRpcmVjdCAxMDAwIGwxIGwyXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBtYXAgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IHRsIC0+XG4gICAgbGV0IHggPSBmIHggaW5cbiAgICB4IDo6IG1hcCBmIHRsXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGFwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgfCBbXSAtPiBsMlxuICB8IHggOjogdGwxIC0+IHggOjogYXBwZW5kIHRsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbigqIFRSTUMgZnVuY3Rpb25zIG9uID49IDUuMSwgbm8gbmVlZCB0byBicmluZyBvdXIgb3duICopXG5cbltAQEBlbmRpZl1cblxuKCogV3JhcHBlciBhcm91bmQgW2FwcGVuZF0gdG8gb3B0aW1pemUgZm9yIHRoZSBjYXNlIG9mIHNob3J0IFtsMV0sXG4gICBhbmQgZm9yIHRoZSBjYXNlIG9mIFtsMiA9IFtdXSAoc2F2ZXMgdGhlIHdob2xlIGNvcHkgb2YgW2wxXSEpICopXG5sZXRbQGlubGluZV0gYXBwZW5kIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgXyAtPiBsMlxuICB8IF8sIFtdIC0+IGwxXG4gIHwgWyB4IF0sIF8gLT4geCA6OiBsMlxuICB8IHggOjogeSA6OiB0bDEsIF8gLT4geCA6OiB5IDo6IGFwcGVuZCB0bDEgbDJcblxubGV0ICggQCApID0gYXBwZW5kXG5sZXRbQGlubGluZV0gY29ucycgbCB4ID0geCA6OiBsXG5cbmxldCBjb25zX21heWJlIG8gbCA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IFNvbWUgeCAtPiB4IDo6IGxcbiAgfCBOb25lIC0+IGxcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGRpcmVjdF9kZXB0aF9maWx0ZXJfID0gMTBfMDAwXG5cbmxldCBmaWx0ZXIgcCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBwIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgbCBbXVxuICAgIHwgeCA6OiBsJyB3aGVuIG5vdCAocCB4KSAtPiBkaXJlY3QgaSBwIGwnXG4gICAgfCB4IDo6IGwnIC0+IHggOjogZGlyZWN0IChpIC0gMSkgcCBsJ1xuICBhbmQgc2FmZSBwIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyB3aGVuIG5vdCAocCB4KSAtPiBzYWZlIHAgbCcgYWNjXG4gICAgfCB4IDo6IGwnIC0+IHNhZmUgcCBsJyAoeCA6OiBhY2MpXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZmlsdGVyXyBwIGxcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGZpbHRlciBmIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogdGwgLT5cbiAgICBsZXQga2VlcCA9IGYgeCBpblxuICAgIGlmIGtlZXAgdGhlblxuICAgICAgeCA6OiBmaWx0ZXIgZiB0bFxuICAgIGVsc2VcbiAgICAgIGZpbHRlciBmIHRsXG5cbltAQEBlbHNlX11cbigqIHN0ZGxpYidzIGZpbHRlciB1c2VzIFRSTUMgYWZ0ZXIgNS4xICopXG5cbltAQEBlbmRpZl1cblxubGV0IGZvbGRfcmlnaHQgZiBsIGFjYyA9XG4gIGxldCByZWMgZGlyZWN0IGkgZiBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGYgKExpc3QucmV2IGwpIGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGRpcmVjdCAoaSAtIDEpIGYgbCcgYWNjIGluXG4gICAgICBmIHggYWNjXG4gIGFuZCBzYWZlIGYgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZiB4IGFjYyBpblxuICAgICAgc2FmZSBmIGwnIGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGYgbCBhY2NcblxubGV0IHJlYyBmb2xkX3doaWxlIGYgYWNjID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2NcbiAgfCBlIDo6IGwgLT5cbiAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgZSBpblxuICAgIChtYXRjaCBjb250IHdpdGhcbiAgICB8IGBTdG9wIC0+IGFjY1xuICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGUgZiBhY2MgbClcblxubGV0IGZvbGRfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjICh5IDo6IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpICh5IDo6IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxubGV0IGZvbGRfb25fbWFwIH5mIH5yZWR1Y2UgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSByZWR1Y2UgYWNjIChmIHgpIGluXG4gICAgICBhdXggYWNjIGwnXG4gIGluXG4gIGF1eCBhY2MgbFxuXG5sZXQgc2Nhbl9sZWZ0IGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBsX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGxfYWNjXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICBsZXQgbF9hY2MgPSBhY2MgOjogbF9hY2MgaW5cbiAgICAgIGF1eCBmIGFjYyBsX2FjYyB0YWlsXG4gIGluXG4gIGF1eCBmIGFjYyBbIGFjYyBdIGxcblxubGV0IHJlZHVjZSBmID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IFNvbWUgKGZvbGRfbGVmdCBmIHggbClcblxubGV0IHJlZHVjZV9leG4gZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJDQ0xpc3QucmVkdWNlX2V4blwiKVxuICB8IHggOjogbCAtPiBmb2xkX2xlZnQgZiB4IGxcblxubGV0IGZvbGRfbWFwMiBmIGFjYyBsMSBsMiA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiZm9sZF9tYXAyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeDEgeDIgaW5cbiAgICAgIGF1eCBmIGFjYyAoeSA6OiBtYXBfYWNjKSBsMScgbDInXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsMSBsMlxuXG5sZXQgZm9sZF9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgeCBpblxuICAgICAgYXV4IGYgYWNjIChjb25zX21heWJlIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfZmlsdGVyX21hcF9pIGYgYWNjIGwgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBpIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyBpIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoaSArIDEpIChjb25zX21heWJlIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5sZXQgZm9sZF9mbGF0X21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoTGlzdC5yZXZfYXBwZW5kIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIFtdIGxcblxubGV0IGZvbGRfZmxhdF9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoTGlzdC5yZXZfYXBwZW5kIHkgbWFwX2FjYykgbCdcbiAgaW5cbiAgYXV4IGYgYWNjIDAgW10gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG4oKiBrZWVwIHRoaXMgYmVjYXVzZSBpdCdzIHRhaWxyZWMgZm9yIDwgNS4xICopXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGxldCByZWMgaW5kaXJlY3RfIGkgYWNjID1cbiAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIGluZGlyZWN0XyAoaSArIDEpICh4IDo6IGFjYylcbiAgICApXG4gIGluXG4gIGxldCByZWMgZGlyZWN0XyBpID1cbiAgICBpZiBpID0gbGVuIHRoZW5cbiAgICAgIFtdXG4gICAgZWxzZSBpZiBpIDwgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHRoZW4gKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIHggOjogZGlyZWN0XyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBpbmRpcmVjdF8gaSBbXVxuICBpblxuICBpZiBsZW4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcImluaXRcIlxuICBlbHNlIGlmIGxlbiA9IDAgdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICBkaXJlY3RfIDBcblxubGV0IHJlYyB1bmZvbGRfa29udCBmIHNlZWQgayA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBrIFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT5cbiAgICBsZXQgaycgdGwgPSBrICh2IDo6IHRsKSBpblxuICAgIHVuZm9sZF9rb250IGYgbmV4dCBrJ1xuXG5sZXRbQGlubGluZV0gdW5mb2xkIGYgc2VlZCA9XG4gIGxldCByZWMgZGlyZWN0IGkgZiBzZWVkID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICB1bmZvbGRfa29udCBmIHNlZWQgKGZ1biB4IC0+IHgpXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBmIHNlZWQgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogZGlyZWN0IChpIC0gMSkgZiBuZXh0XG4gICAgKVxuICBpblxuICBkaXJlY3QgMTAwIGYgc2VlZFxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0IGluaXQgbiBmID1cbiAgbGV0W0B0YWlsX21vZF9jb25zXSByZWMgaW5pdF8gaSBuIGYgPVxuICAgIGlmIGkgPSBuIHRoZW5cbiAgICAgIFtdXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCA9IGYgaSBpblxuICAgICAgeCA6OiBpbml0XyAoaSArIDEpIG4gZlxuICAgIClcbiAgaW5cbiAgaW5pdF8gMCBuIGZcblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdW5mb2xkIGYgc2VlZCA9XG4gIG1hdGNoIGYgc2VlZCB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+IHYgOjogdW5mb2xkIGYgbmV4dFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHVuZm9sZCBmIHNlZWQgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IHVuZm9sZCBmIG5leHRcblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGNvbXBhcmUgZiBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBfLCBbXSAtPiAxXG4gIHwgW10sIF8gLT4gLTFcbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgIGxldCBjID0gZiB4MSB4MiBpblxuICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICBjXG4gICAgZWxzZVxuICAgICAgY29tcGFyZSBmIGwxJyBsMidcblxubGV0IHJlYyBlcXVhbCBmIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gdHJ1ZVxuICB8IFtdLCBfIHwgXywgW10gLT4gZmFsc2VcbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiBmIHgxIHgyICYmIGVxdWFsIGYgbDEnIGwyJ1xuXG5bQEBAaWZsdCA1LjFdXG5cbmxldCByZWMgZmxhdF9tYXBfa29udCBmIGwga29udCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IGtvbnQgW11cbiAgfCBbIHggXSAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAga29udCB4XG4gIHwgeCA6OiBsJyAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAgbGV0IGtvbnQnIHRhaWwgPSBrb250IChhcHBlbmQgeCB0YWlsKSBpblxuICAgIGZsYXRfbWFwX2tvbnQgZiBsJyBrb250J1xuXG5sZXRbQGlubGluZV0gZmxhdF9tYXAgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCBbIHggXSAtPiBmIHhcbiAgfCBfIDo6IF8gLT4gZmxhdF9tYXBfa29udCBmIGwgRnVuLmlkXG5cbltAQEBlbHNlX11cblxubGV0IGZsYXRfbWFwID0gY29uY2F0X21hcFxuXG5bQEBAZW5kaWZdXG5cbmxldCBmbGF0X21hcF9pIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgaSBsIGtvbnQgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4ga29udCBbXVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IHkgPSBmIGkgeCBpblxuICAgICAgbGV0IGtvbnQnIHRhaWwgPVxuICAgICAgICBtYXRjaCB5IHdpdGhcbiAgICAgICAgfCBbXSAtPiBrb250IHRhaWxcbiAgICAgICAgfCBbIHggXSAtPiBrb250ICh4IDo6IHRhaWwpXG4gICAgICAgIHwgWyB4OyB5IF0gLT4ga29udCAoeCA6OiB5IDo6IHRhaWwpXG4gICAgICAgIHwgbCAtPiBrb250IChhcHBlbmQgbCB0YWlsKVxuICAgICAgaW5cbiAgICAgIGF1eCBmIChpICsgMSkgbCcga29udCdcbiAgaW5cbiAgYXV4IGYgMCBsIChmdW4gbCAtPiBsKVxuXG5sZXQgZmxhdHRlbiBsID0gZm9sZF9yaWdodCBhcHBlbmQgbCBbXVxuXG5sZXQgY291bnQgZiBsID1cbiAgZm9sZF9sZWZ0XG4gICAgKGZ1biBuIHggLT5cbiAgICAgIGlmIGYgeCB0aGVuXG4gICAgICAgIHN1Y2MgblxuICAgICAgZWxzZVxuICAgICAgICBuKVxuICAgIDAgbFxuXG5sZXQgY291bnRfdHJ1ZV9mYWxzZSBwIGwgPVxuICBmb2xkX2xlZnRcbiAgICAoZnVuIChvaywga28pIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIG9rICsgMSwga29cbiAgICAgIGVsc2VcbiAgICAgICAgb2ssIGtvICsgMSlcbiAgICAoMCwgMCkgbFxuXG5sZXRbQGlubGluZV0gcHJvZHVjdCBmIGwxIGwyID0gZmxhdF9tYXAgKGZ1biB4IC0+IG1hcCAoZnVuIHkgLT4gZiB4IHkpIGwyKSBsMVxuXG5sZXQgZm9sZF9wcm9kdWN0IGYgYWNjIGwxIGwyID1cbiAgTGlzdC5mb2xkX2xlZnRcbiAgICAoZnVuIGFjYyB4MSAtPiBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4MiAtPiBmIGFjYyB4MSB4MikgYWNjIGwyKVxuICAgIGFjYyBsMVxuXG5sZXQgZGlhZ29uYWwgbCA9XG4gIGxldCByZWMgZ2VuIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHkgLT4gKHgsIHkpIDo6IGFjYykgYWNjIGwnIGluXG4gICAgICBnZW4gYWNjIGwnXG4gIGluXG4gIGdlbiBbXSBsXG5cbmxldCBwYXJ0aXRpb25fbWFwX2VpdGhlciBmIGwgPVxuICBsZXQgcmVjIGl0ZXIgZiBsMSBsMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGwxLCBMaXN0LnJldiBsMlxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IENDRWl0aGVyLkxlZnQgeSAtPiBpdGVyIGYgKHkgOjogbDEpIGwyIHRsXG4gICAgICB8IENDRWl0aGVyLlJpZ2h0IHkgLT4gaXRlciBmIGwxICh5IDo6IGwyKSB0bClcbiAgaW5cbiAgaXRlciBmIFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9maWx0ZXJfbWFwIGYgbCA9XG4gIGxldCByZWMgaXRlciBmIGwxIGwyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbDEsIExpc3QucmV2IGwyXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgYExlZnQgeSAtPiBpdGVyIGYgKHkgOjogbDEpIGwyIHRsXG4gICAgICB8IGBSaWdodCB5IC0+IGl0ZXIgZiBsMSAoeSA6OiBsMikgdGxcbiAgICAgIHwgYERyb3AgLT4gaXRlciBmIGwxIGwyIHRsKVxuICBpblxuICBpdGVyIGYgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCA9IHBhcnRpdGlvbl9maWx0ZXJfbWFwXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBjb21iaW5lIGwxIGwyID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDIgW11cbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGRpcmVjdCAoaSAtIDEpIGwxJyBsMidcbiAgICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG4gIGFuZCBzYWZlIGwxIGwyIGFjYyA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+IHNhZmUgbDEnIGwyJyBAQCAoKHgxLCB4MikgOjogYWNjKVxuICAgIHwgXywgXyAtPiBpbnZhbGlkX2FyZyBcIkNDTGlzdC5jb21iaW5lXCJcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsMSBsMlxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiBbXVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGNvbWJpbmUgbDEnIGwyJ1xuICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG5cbltAQEBlbmRpZl1cblxubGV0IGNvbWJpbmVfZ2VuIGwxIGwyID1cbiAgbGV0IGwxID0gcmVmIGwxIGluXG4gIGxldCBsMiA9IHJlZiBsMiBpblxuICBmdW4gKCkgLT5cbiAgICBtYXRjaCAhbDEsICFsMiB3aXRoXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IE5vbmVcbiAgICB8IHgxIDo6IHRhaWwxLCB4MiA6OiB0YWlsMiAtPlxuICAgICAgbDEgOj0gdGFpbDE7XG4gICAgICBsMiA6PSB0YWlsMjtcbiAgICAgIFNvbWUgKHgxLCB4MilcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IGNvbWJpbmVfc2hvcnRlc3QgbDEgbDIgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgXywgW10gfCBbXSwgXyAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDIgW11cbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGRpcmVjdCAoaSAtIDEpIGwxJyBsMidcbiAgYW5kIHNhZmUgbDEgbDIgYWNjID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYWNjID0gKHgxLCB4MikgOjogYWNjIGluXG4gICAgICBzYWZlIGwxJyBsMicgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbDEgbDJcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBjb21iaW5lX3Nob3J0ZXN0IGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBfLCBbXSB8IFtdLCBfIC0+IFtdXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gKHgxLCB4MikgOjogY29tYmluZV9zaG9ydGVzdCBsMScgbDInXG5cbltAQEBlbmRpZl1cblxubGV0IHNwbGl0IGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW10sIFtdXG4gICAgfCBbICh4MSwgeTEpIF0gLT4gWyB4MSBdLCBbIHkxIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpIF0gLT4gWyB4MTsgeDIgXSwgWyB5MTsgeTIgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5Mik7ICh4MywgeTMpIF0gLT4gWyB4MTsgeDI7IHgzIF0sIFsgeTE7IHkyOyB5MyBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKTsgKHgzLCB5Myk7ICh4NCwgeTQpIF0gLT5cbiAgICAgIFsgeDE7IHgyOyB4MzsgeDQgXSwgWyB5MTsgeTI7IHkzOyB5NCBdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc3BsaXRfc2xvdyBbXSBbXSBsXG4gICAgfCAoeDEsIHkxKSA6OiAoeDIsIHkyKSA6OiAoeDMsIHkzKSA6OiAoeDQsIHk0KSA6OiAoeDUsIHk1KSA6OiBsJyAtPlxuICAgICAgbGV0IHJ4LCByeSA9IGRpcmVjdCAoaSAtIDEpIGwnIGluXG4gICAgICB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiB4NSA6OiByeCwgeTEgOjogeTIgOjogeTMgOjogeTQgOjogeTUgOjogcnlcbiAgYW5kIHNwbGl0X3Nsb3cgYWNjMSBhY2MyIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjMSwgTGlzdC5yZXYgYWNjMlxuICAgIHwgKHgxLCB4MikgOjogdGFpbCAtPlxuICAgICAgbGV0IGFjYzEgPSB4MSA6OiBhY2MxIGFuZCBhY2MyID0geDIgOjogYWNjMiBpblxuICAgICAgc3BsaXRfc2xvdyBhY2MxIGFjYzIgdGFpbFxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxubGV0IHJldHVybiB4ID0gWyB4IF1cbmxldCBwdXJlID0gcmV0dXJuXG5sZXQgKCA8Kj4gKSBmdW5zIGwgPSBwcm9kdWN0IChmdW4gZiB4IC0+IGYgeCkgZnVucyBsXG5cbmxldCBjYXJ0ZXNpYW5fcHJvZHVjdCBsID1cbiAgKCogW2xlZnRdOiBlbGVtZW50cyBwaWNrZWQgc28gZmFyXG4gICAgIFtyaWdodF06IHNldHMgdG8gcGljayBlbGVtZW50cyBmcm9tXG4gICAgIFthY2NdOiBhY2N1bXVsYXRvciBmb3IgdGhlIHJlc3VsdCwgdG8gcGFzcyB0byBjb250aW51YXRpb25cbiAgICAgW2tdOiBjb250aW51YXRpb24gKilcbiAgbGV0IHJlYyBwcm9kX3JlYyBsZWZ0IHJpZ2h0IGsgYWNjID1cbiAgICBtYXRjaCByaWdodCB3aXRoXG4gICAgfCBbXSAtPiBrIGFjYyAoTGlzdC5yZXYgbGVmdClcbiAgICB8IGwxIDo6IHRhaWwgLT5cbiAgICAgIExpc3QuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4gcHJvZF9yZWMgKHggOjogbGVmdCkgdGFpbCBrIGFjYykgYWNjIGwxXG4gIGluXG4gIHByb2RfcmVjIFtdIGwgKGZ1biBhY2MgbCcgLT4gbCcgOjogYWNjKSBbXVxuXG4oKiBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiBsaXN0cyBvZiBsaXN0cyAqKVxubGV0IG1hcF9wcm9kdWN0X2wgZiBsID1cbiAgbGV0IGwgPSBMaXN0Lm1hcCBmIGwgaW5cbiAgY2FydGVzaWFuX3Byb2R1Y3QgbFxuXG5sZXQgcmVjIHNvcnRlZF9tZW0gfmNtcCB4IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBmYWxzZVxuICB8IHkgOjogdGFpbCAtPlxuICAgIChtYXRjaCBjbXAgeCB5IHdpdGhcbiAgICB8IDAgLT4gdHJ1ZVxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IGZhbHNlXG4gICAgfCBfIC0+IChzb3J0ZWRfbWVtIFtAdGFpbGNhbGxdKSB+Y21wIHggdGFpbClcblxubGV0IHNvcnRlZF9tZXJnZSB+Y21wIGwxIGwyID1cbiAgbGV0IHJlYyByZWN1cnNlIGNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwyXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwxXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgxIDo6IGFjYykgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSBjbXAgKHgyIDo6IGFjYykgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiB4MiA6OiBhY2MpIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSBjbXAgW10gbDEgbDJcblxubGV0IHNvcnRlZF9kaWZmIH5jbXAgbDEgbDIgPVxuICBsZXQgcmVjIHJlY3Vyc2UgY21wIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXywgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiBhY2MpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wIGFjYyBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSBjbXAgYWNjIGwxJyBsMidcbiAgaW5cbiAgcmVjdXJzZSBjbXAgW10gbDEgbDJcblxubGV0IHNvcnRfdW5pcSB+Y21wIGwgPSBMaXN0LnNvcnRfdW5pcSBjbXAgbFxuXG5sZXQgaXNfc29ydGVkIH5jbXAgbCA9XG4gIGxldCByZWMgYXV4IGNtcCA9IGZ1bmN0aW9uXG4gICAgfCBbXSB8IFsgXyBdIC0+IHRydWVcbiAgICB8IHggOjogKHkgOjogXyBhcyB0YWlsKSAtPiBjbXAgeCB5IDw9IDAgJiYgYXV4IGNtcCB0YWlsXG4gIGluXG4gIGF1eCBjbXAgbFxuXG5sZXQgc29ydGVkX2luc2VydCB+Y21wID8odW5pcSA9IGZhbHNlKSB4IGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgdW5pcSB4IGxlZnQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCBbIHggXVxuICAgIHwgeSA6OiB0YWlsIC0+XG4gICAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgICB8IDAgLT5cbiAgICAgICAgbGV0IGwnID1cbiAgICAgICAgICBpZiB1bmlxIHRoZW5cbiAgICAgICAgICAgIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB4IDo6IGxcbiAgICAgICAgaW5cbiAgICAgICAgTGlzdC5yZXZfYXBwZW5kIGxlZnQgbCdcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0ICh4IDo6IGwpXG4gICAgICB8IF8gLT4gYXV4IGNtcCB1bmlxIHggKHkgOjogbGVmdCkgdGFpbClcbiAgaW5cbiAgYXV4IGNtcCB1bmlxIHggW10gbFxuXG5sZXQgc29ydGVkX3JlbW92ZSB+Y21wID8oYWxsID0gZmFsc2UpIHggbCA9XG4gIGxldCByZWMgYXV4IGNtcCBhbGwgeCBsZWZ0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgbGVmdFxuICAgIHwgeSA6OiB0YWlsIC0+XG4gICAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgICB8IDAgLT5cbiAgICAgICAgaWYgYWxsIHRoZW5cbiAgICAgICAgICBhdXggY21wIGFsbCB4IGxlZnQgdGFpbFxuICAgICAgICBlbHNlXG4gICAgICAgICAgTGlzdC5yZXZfYXBwZW5kIGxlZnQgdGFpbFxuICAgICAgfCBuIHdoZW4gbiA8IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgbFxuICAgICAgfCBfIC0+IGF1eCBjbXAgYWxsIHggKHkgOjogbGVmdCkgdGFpbClcbiAgaW5cbiAgYXV4IGNtcCBhbGwgeCBbXSBsXG5cbmxldCB1bmlxX3N1Y2MgfmVxIGwgPVxuICBsZXQgcmVjIGYgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbIHggXSAtPiBMaXN0LnJldiAoeCA6OiBhY2MpXG4gICAgfCB4IDo6ICh5IDo6IF8gYXMgdGFpbCkgd2hlbiBlcSB4IHkgLT4gZiBhY2MgdGFpbFxuICAgIHwgeCA6OiB0YWlsIC0+IGYgKHggOjogYWNjKSB0YWlsXG4gIGluXG4gIGYgW10gbFxuXG5sZXQgZ3JvdXBfc3VjYyB+ZXEgbCA9XG4gIGxldCByZWMgZiB+ZXEgYWNjIGN1ciBsID1cbiAgICBtYXRjaCBjdXIsIGwgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXyA6OiBfLCBbXSAtPiBMaXN0LnJldiAoTGlzdC5yZXYgY3VyIDo6IGFjYylcbiAgICB8IFtdLCB4IDo6IHRsIC0+IGYgfmVxIGFjYyBbIHggXSB0bFxuICAgIHwgeSA6OiBfLCB4IDo6IHRsIHdoZW4gZXEgeCB5IC0+IGYgfmVxIGFjYyAoeCA6OiBjdXIpIHRsXG4gICAgfCBfLCB4IDo6IHRsIC0+IGYgfmVxIChMaXN0LnJldiBjdXIgOjogYWNjKSBbIHggXSB0bFxuICBpblxuICBmIH5lcSBbXSBbXSBsXG5cbmxldCBzb3J0ZWRfbWVyZ2VfdW5pcSB+Y21wIGwxIGwyID1cbiAgbGV0IHB1c2ggfmNtcCBhY2MgeCA9XG4gICAgbWF0Y2ggYWNjIHdpdGhcbiAgICB8IFtdIC0+IFsgeCBdXG4gICAgfCB5IDo6IF8gd2hlbiBjbXAgeCB5ID4gMCAtPiB4IDo6IGFjY1xuICAgIHwgXyAtPiBhY2NcbiAgICAoKiBkdXBsaWNhdGUsIGRvIG5vdCB5aWVsZCAqKVxuICBpblxuICBsZXQgcmVjIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgbCB8IGwsIFtdIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKHB1c2ggfmNtcCkgYWNjIGwgaW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MSkgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIChwdXNoIH5jbXAgYWNjIHgyKSBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMidcbiAgICAoKiBkcm9wIG9uZSBvZiB0aGUgW3hdICopXG4gIGluXG4gIHJlY3Vyc2UgfmNtcCBbXSBsMSBsMlxuXG5sZXQgc29ydGVkX2RpZmZfdW5pcSB+Y21wIGwxIGwyID1cbiAgbGV0IHB1c2ggfmNtcCBhY2MgeCA9XG4gICAgbWF0Y2ggYWNjIHdpdGhcbiAgICB8IFtdIC0+IFsgeCBdXG4gICAgfCB5IDo6IF8gd2hlbiBjbXAgeCB5ID4gMCAtPiB4IDo6IGFjY1xuICAgIHwgXyAtPiBhY2NcbiAgICAoKiBkdXBsaWNhdGUsIGRvIG5vdCB5aWVsZCAqKVxuICBpblxuICBsZXQgcmVjIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiBhY2NcbiAgICB8IGwsIFtdIC0+XG4gICAgICBsZXQgYWNjID0gTGlzdC5mb2xkX2xlZnQgKHB1c2ggfmNtcCkgYWNjIGwgaW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MSkgbDEnIGwyXG4gICAgICBlbHNlIGlmIGMgPiAwIHRoZW5cbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMSBsMidcbiAgICAgIGVsc2VcbiAgICAgICAgcmVjdXJzZSB+Y21wIGFjYyBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgfmNtcCBbXSBsMSBsMlxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFrZSBuIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIG4gbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbiBbXSBsXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBuID4gMCB0aGVuXG4gICAgICAgIHggOjogZGlyZWN0IChpIC0gMSkgKG4gLSAxKSBsJ1xuICAgICAgZWxzZVxuICAgICAgICBbXVxuICBhbmQgc2FmZSBuIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgXyB3aGVuIG4gPSAwIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPiBzYWZlIChuIC0gMSkgKHggOjogYWNjKSBsJ1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIG4gbFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHRha2UgbiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgbiA+IDAgdGhlblxuICAgICAgeCA6OiB0YWtlIChuIC0gMSkgbCdcbiAgICBlbHNlXG4gICAgICBbXVxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgZHJvcCBuIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IF8gd2hlbiBuID0gMCAtPiBsXG4gIHwgXyA6OiBsJyAtPiBkcm9wIChuIC0gMSkgbCdcblxubGV0IGhkX3RsID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWlsd2l0aCBcImhkX3RsXCJcbiAgfCB4IDo6IGwgLT4geCwgbFxuXG5sZXQgdGFrZV9kcm9wIG4gbCA9IHRha2UgbiBsLCBkcm9wIG4gbFxuXG5sZXQgc3VibGlzdHNfb2ZfbGVuID8obGFzdCA9IGZ1biBfIC0+IE5vbmUpID9vZmZzZXQgbiBsID1cbiAgaWYgbiA8IDEgdGhlbiBpbnZhbGlkX2FyZyBcInN1Ymxpc3RzX29mX2xlbjogbiBtdXN0IGJlID4gMFwiO1xuICBsZXQgb2Zmc2V0ID1cbiAgICBtYXRjaCBvZmZzZXQgd2l0aFxuICAgIHwgTm9uZSAtPiBuXG4gICAgfCBTb21lIG8gd2hlbiBvIDwgMSAtPiBpbnZhbGlkX2FyZyBcInN1Ymxpc3RzX29mX2xlbjogb2Zmc2V0IG11c3QgYmUgPiAwXCJcbiAgICB8IFNvbWUgbyAtPiBvXG4gIGluXG4gICgqIGFkZCBzdWItbGlzdHMgb2YgW2xdIHRvIFthY2NdICopXG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBsZXQgZ3JvdXAgPSB0YWtlIG4gbCBpblxuICAgIGlmIGlzX2VtcHR5IGdyb3VwIHRoZW5cbiAgICAgIGFjY1xuICAgICgqIHRoaXMgd2FzIHRoZSBsYXN0IGdyb3VwLCB3ZSBhcmUgZG9uZSAqKVxuICAgIGVsc2UgaWYgTGlzdC5sZW5ndGggZ3JvdXAgPCBuICgqIGxhc3QgZ3JvdXAsIHdpdGggbWlzc2luZyBlbGVtZW50cyAqKSB0aGVuIChcbiAgICAgIG1hdGNoIGxhc3QgZ3JvdXAgd2l0aFxuICAgICAgfCBOb25lIC0+IGFjY1xuICAgICAgfCBTb21lIGdyb3VwJyAtPiBncm91cCcgOjogYWNjXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBsJyA9IGRyb3Agb2Zmc2V0IGwgaW5cbiAgICAgIGF1eCAoZ3JvdXAgOjogYWNjKSBsJyAoKiBjb250aW51ZSAqKVxuICAgIClcbiAgaW5cbiAgTGlzdC5yZXYgKGF1eCBbXSBsKVxuXG5sZXQgY2h1bmtzIG4gbCA9IHN1Ymxpc3RzX29mX2xlbiB+bGFzdDooZnVuIHggLT4gU29tZSB4KSBuIGxcblxubGV0IGludGVyc3BlcnNlIHggbCA9XG4gIGxldCByZWMgYXV4X2RpcmVjdCBpIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgWyBfIF0gLT4gbFxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IGF1eF90YWlscmVjIFtdIHggbFxuICAgIHwgeSA6OiB0YWlsIC0+IHkgOjogeCA6OiBhdXhfZGlyZWN0IChpIC0gMSkgeCB0YWlsXG4gIGFuZCBhdXhfdGFpbHJlYyBhY2MgeCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgWyB5IF0gLT4gTGlzdC5yZXYgKHkgOjogYWNjKVxuICAgIHwgeSA6OiB0YWlsIC0+IGF1eF90YWlscmVjICh4IDo6IHkgOjogYWNjKSB4IHRhaWxcbiAgaW5cbiAgYXV4X2RpcmVjdCAxXzAwMCB4IGxcblxubGV0IGludGVybGVhdmUgbDEgbDIgOiBfIGxpc3QgPVxuICBsZXQgcmVjIGF1eCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiAoTGlzdC5yZXZfYXBwZW5kIGwyIGFjYylcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2IChMaXN0LnJldl9hcHBlbmQgbDEgYWNjKVxuICAgIHwgeDEgOjogdGwxLCB4MiA6OiB0bDIgLT4gYXV4ICh4MiA6OiB4MSA6OiBhY2MpIHRsMSB0bDJcbiAgaW5cbiAgYXV4IFtdIGwxIGwyXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCB0YWtlX3doaWxlIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIFtdIGxcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHggOjogZGlyZWN0IChpIC0gMSkgcCBsJ1xuICAgICAgZWxzZVxuICAgICAgICBbXVxuICBhbmQgc2FmZSBwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgc2FmZSBwICh4IDo6IGFjYykgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gcCBsXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgdGFrZV93aGlsZSBwIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBwIHggdGhlblxuICAgICAgeCA6OiB0YWtlX3doaWxlIHAgbCdcbiAgICBlbHNlXG4gICAgICBbXVxuXG5bQEBAZW5kaWZdXG5cbmxldCByZWMgZHJvcF93aGlsZSBwIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBbXVxuICB8IHggOjogbCcgLT5cbiAgICBpZiBwIHggdGhlblxuICAgICAgZHJvcF93aGlsZSBwIGwnXG4gICAgZWxzZVxuICAgICAgbFxuXG5sZXQgdGFrZV9kcm9wX3doaWxlIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdLCBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBbXSBsXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGlmIHAgeCB0aGVuIChcbiAgICAgICAgbGV0IGwxLCBsMiA9IGRpcmVjdCAoaSAtIDEpIHAgdGFpbCBpblxuICAgICAgICB4IDo6IGwxLCBsMlxuICAgICAgKSBlbHNlXG4gICAgICAgIFtdLCBsXG4gIGFuZCBzYWZlIHAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjLCBbXVxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBzYWZlIHAgKHggOjogYWNjKSB0YWlsXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjYywgbFxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHAgbFxuXG5sZXQgbGFzdCBuIGwgPVxuICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICBpZiBsZW4gPCBuIHRoZW5cbiAgICBsXG4gIGVsc2VcbiAgICBkcm9wIChsZW4gLSBuKSBsXG5cbmxldCBoZWFkX29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogXyAtPiBTb21lIHhcblxubGV0IHRhaWxfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgXyA6OiB0YWlsIC0+IFNvbWUgdGFpbFxuXG5sZXQgcmVjIGxhc3Rfb3B0ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgWyB4IF0gLT4gU29tZSB4XG4gIHwgXyA6OiB0YWlsIC0+IGxhc3Rfb3B0IHRhaWxcblxubGV0IGZpbmRfcHJlZCA9IGZpbmRfb3B0XG5cbmxldCBmaW5kX3ByZWRfZXhuIHAgbCA9XG4gIG1hdGNoIGZpbmRfcHJlZCBwIGwgd2l0aFxuICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgU29tZSB4IC0+IHhcblxubGV0IGZpbmRfbWFwaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgKG1hdGNoIGYgaSB4IHdpdGhcbiAgICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgICAgIHwgTm9uZSAtPiBhdXggZiAoaSArIDEpIGwnKVxuICBpblxuICBhdXggZiAwIGxcblxubGV0IGZpbmRfbWFwIGYgbCA9IGZpbmRfbWFwaSAoZnVuIF8gLT4gZikgbFxuXG5sZXQgZmluZF9pZHggcCBsID1cbiAgZmluZF9tYXBpXG4gICAgKGZ1biBpIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgKGksIHgpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmUpXG4gICAgbFxuXG5sZXQgcmVtb3ZlIH5lcSB4IGwgPVxuICBsZXQgcmVjIHJlbW92ZScgZXEgeCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHkgOjogdGFpbCB3aGVuIGVxIHggeSAtPiByZW1vdmUnIGVxIHggYWNjIHRhaWxcbiAgICB8IHkgOjogdGFpbCAtPiByZW1vdmUnIGVxIHggKHkgOjogYWNjKSB0YWlsXG4gIGluXG4gIHJlbW92ZScgZXEgeCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgbCA9XG4gIGxldCByZWMgcmVjdXJzZSBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MnID1cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGFjY1xuICAgICAgICB8IFNvbWUgeSAtPiB5IDo6IGFjY1xuICAgICAgaW5cbiAgICAgIHJlY3Vyc2UgYWNjJyBsJ1xuICBpblxuICByZWN1cnNlIFtdIGxcblxubGV0IGtlZXBfc29tZSBsID0gZmlsdGVyX21hcCAoZnVuIHggLT4geCkgbFxuXG5sZXQga2VlcF9vayBsID1cbiAgZmlsdGVyX21hcFxuICAgIChmdW5jdGlvblxuICAgICAgfCBPayB4IC0+IFNvbWUgeFxuICAgICAgfCBFcnJvciBfIC0+IE5vbmUpXG4gICAgbFxuXG5sZXQgYWxsX3NvbWUgbCA9XG4gIHRyeVxuICAgIFNvbWVcbiAgICAgIChtYXBcbiAgICAgICAgIChmdW5jdGlvblxuICAgICAgICAgICB8IFNvbWUgeCAtPiB4XG4gICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBFeGl0KVxuICAgICAgICAgbClcbiAgd2l0aCBFeGl0IC0+IE5vbmVcblxubGV0IGFsbF9vayBsID1cbiAgbGV0IGVyciA9IHJlZiBOb25lIGluXG4gIHRyeVxuICAgIE9rXG4gICAgICAobWFwXG4gICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICAgfCBPayB4IC0+IHhcbiAgICAgICAgICAgfCBFcnJvciBlIC0+XG4gICAgICAgICAgICAgZXJyIDo9IFNvbWUgZTtcbiAgICAgICAgICAgICByYWlzZSBFeGl0KVxuICAgICAgICAgbClcbiAgd2l0aCBFeGl0IC0+XG4gICAgKG1hdGNoICFlcnIgd2l0aFxuICAgIHwgTm9uZSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFNvbWUgZSAtPiBFcnJvciBlKVxuXG5sZXQgZ3JvdXBfYnkgKHR5cGUgaykgPyhoYXNoID0gSGFzaHRibC5oYXNoKSA/KGVxID0gU3RkbGliLiggPSApKSBsID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGtcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgKCogY29tcHV0ZSBncm91cCB0YWJsZSAqKVxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBsID0gdHJ5IFRibC5maW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IFtdIGluXG4gICAgICBUYmwucmVwbGFjZSB0YmwgeCAoeCA6OiBsKSlcbiAgICBsO1xuICBUYmwuZm9sZCAoZnVuIF8geCBhY2MgLT4geCA6OiBhY2MpIHRibCBbXVxuXG5sZXQgam9pbiB+am9pbl9yb3cgczEgczIgOiBfIHQgPVxuICBmbGF0X21hcCAoZnVuIGEgLT4gZmlsdGVyX21hcCAoam9pbl9yb3cgYSkgczIpIHMxXG5cbmxldCBqb2luX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZjEgZjIgfm1lcmdlIGMxXG4gICAgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBrZXkgPSBmMSB4IGluXG4gICAgICBUYmwuYWRkIHRibCBrZXkgeClcbiAgICBjMTtcbiAgbGV0IHJlcyA9IHJlZiBbXSBpblxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgIGxldCBrZXkgPSBmMiB5IGluXG4gICAgICBsZXQgeHMgPSBUYmwuZmluZF9hbGwgdGJsIGtleSBpblxuICAgICAgTGlzdC5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIG1lcmdlIGtleSB4IHkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSB6IC0+IHJlcyA6PSB6IDo6ICFyZXMpXG4gICAgICAgIHhzKVxuICAgIGMyO1xuICAhcmVzXG5cbnR5cGUgKCdhLCAnYikgam9pbl9hbGxfY2VsbCA9IHtcbiAgbXV0YWJsZSBqYV9sZWZ0OiAnYSBsaXN0O1xuICBtdXRhYmxlIGphX3JpZ2h0OiAnYiBsaXN0O1xufVxuXG5sZXQgam9pbl9hbGxfYnkgKHR5cGUgYSkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgPyhoYXNoID0gSGFzaHRibC5oYXNoKSBmMSBmMlxuICAgIH5tZXJnZSBjMSBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gICgqIGJ1aWxkIHRoZSBtYXAgW2tleSAtPiBjZWxsXSAqKVxuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGxldCBrZXkgPSBmMSB4IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGMgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIGMuamFfbGVmdCA8LSB4IDo6IGMuamFfbGVmdFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gVGJsLmFkZCB0Ymwga2V5IHsgamFfbGVmdCA9IFsgeCBdOyBqYV9yaWdodCA9IFtdIH0pXG4gICAgYzE7XG4gIExpc3QuaXRlclxuICAgIChmdW4geSAtPlxuICAgICAgbGV0IGtleSA9IGYyIHkgaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgYyA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgYy5qYV9yaWdodCA8LSB5IDo6IGMuamFfcmlnaHRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFRibC5hZGQgdGJsIGtleSB7IGphX2xlZnQgPSBbXTsgamFfcmlnaHQgPSBbIHkgXSB9KVxuICAgIGMyO1xuICBUYmwuZm9sZFxuICAgIChmdW4ga2V5IGNlbGwgcmVzIC0+XG4gICAgICBtYXRjaCBtZXJnZSBrZXkgY2VsbC5qYV9sZWZ0IGNlbGwuamFfcmlnaHQgd2l0aFxuICAgICAgfCBOb25lIC0+IHJlc1xuICAgICAgfCBTb21lIHogLT4geiA6OiByZXMpXG4gICAgdGJsIFtdXG5cbmxldCBncm91cF9qb2luX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZiBjMSBjMiA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBhXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gIGxldCB0YmwgPSBUYmwuY3JlYXRlIDMyIGluXG4gIExpc3QuaXRlciAoZnVuIHggLT4gVGJsLnJlcGxhY2UgdGJsIHggW10pIGMxO1xuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgICgqIHByb2plY3QgW3ldIGludG8gc29tZSBlbGVtZW50IG9mIFtjMV0gKilcbiAgICAgIGxldCBrZXkgPSBmIHkgaW5cbiAgICAgIHRyeVxuICAgICAgICBsZXQgbCA9IFRibC5maW5kIHRibCBrZXkgaW5cbiAgICAgICAgVGJsLnJlcGxhY2UgdGJsIGtleSAoeSA6OiBsKVxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gKCkpXG4gICAgYzI7XG4gIFRibC5mb2xkIChmdW4gayB2IGwgLT4gKGssIHYpIDo6IGwpIHRibCBbXVxuXG5sZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIHggbCA9XG4gIGxldCByZWMgc2VhcmNoIGVxIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWxzZVxuICAgIHwgeSA6OiBsJyAtPiBlcSB4IHkgfHwgc2VhcmNoIGVxIHggbCdcbiAgaW5cbiAgc2VhcmNoIGVxIHggbFxuXG5sZXQgYWRkX25vZHVwIH5lcSB4IGwgPVxuICBpZiBtZW0gfmVxIHggbCB0aGVuXG4gICAgbFxuICBlbHNlXG4gICAgeCA6OiBsXG5cbmxldCByZW1vdmVfb25lIH5lcSB4IGwgPVxuICBsZXQgcmVjIHJlbW92ZV9vbmUgfmVxIHggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCB5IDo6IHRsIHdoZW4gZXEgeCB5IC0+IExpc3QucmV2X2FwcGVuZCBhY2MgdGxcbiAgICB8IHkgOjogdGwgLT4gcmVtb3ZlX29uZSB+ZXEgeCAoeSA6OiBhY2MpIHRsXG4gIGluXG4gIGlmIG1lbSB+ZXEgeCBsIHRoZW5cbiAgICByZW1vdmVfb25lIH5lcSB4IFtdIGxcbiAgZWxzZVxuICAgIGxcblxubGV0IHN1YnNldCB+ZXEgbDEgbDIgPSBMaXN0LmZvcl9hbGwgKGZ1biB0IC0+IG1lbSB+ZXEgdCBsMikgbDFcblxubGV0IHVuaXEgfmVxIGwgPVxuICBsZXQgcmVjIHVuaXEgZXEgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IHhzIHdoZW4gTGlzdC5leGlzdHMgKGVxIHgpIHhzIC0+IHVuaXEgZXEgYWNjIHhzXG4gICAgfCB4IDo6IHhzIC0+IHVuaXEgZXEgKHggOjogYWNjKSB4c1xuICBpblxuICB1bmlxIGVxIFtdIGxcblxubGV0IHVuaW9uIH5lcSBsMSBsMiA9XG4gIGxldCByZWMgdW5pb24gZXEgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwyXG4gICAgfCB4IDo6IHhzIHdoZW4gbWVtIH5lcSB4IGwyIC0+IHVuaW9uIGVxIGFjYyB4cyBsMlxuICAgIHwgeCA6OiB4cyAtPiB1bmlvbiBlcSAoeCA6OiBhY2MpIHhzIGwyXG4gIGluXG4gIHVuaW9uIGVxIFtdIGwxIGwyXG5cbmxldCBpbnRlciB+ZXEgbDEgbDIgPVxuICBsZXQgcmVjIGludGVyIGVxIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IHhzIHdoZW4gbWVtIH5lcSB4IGwyIC0+IGludGVyIGVxICh4IDo6IGFjYykgeHMgbDJcbiAgICB8IF8gOjogeHMgLT4gaW50ZXIgZXEgYWNjIHhzIGwyXG4gIGluXG4gIGludGVyIGVxIFtdIGwxIGwyXG5cbmxldCBtYXBpIGYgbCA9XG4gIGxldCByID0gcmVmIDAgaW5cbiAgbWFwXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQgeSA9IGYgIXIgeCBpblxuICAgICAgaW5jciByO1xuICAgICAgeSlcbiAgICBsXG5cbmxldCBpdGVyaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiAoKVxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgZiBpIHg7XG4gICAgICBhdXggZiAoaSArIDEpIGwnXG4gIGluXG4gIGF1eCBmIDAgbFxuXG5sZXQgaXRlcmkyIGYgbDEgbDIgPVxuICBsZXQgcmVjIGF1eCBmIGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gKClcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJpdGVyaTJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGYgaSB4MSB4MjtcbiAgICAgIGF1eCBmIChpICsgMSkgbDEnIGwyJ1xuICBpblxuICBhdXggZiAwIGwxIGwyXG5cbmxldCBmb2xkaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBmb2xkaSBmIGFjYyBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgaSB4IGluXG4gICAgICBmb2xkaSBmIGFjYyAoaSArIDEpIGwnXG4gIGluXG4gIGZvbGRpIGYgYWNjIDAgbFxuXG5sZXQgZm9sZGkyIGYgYWNjIGwxIGwyID1cbiAgbGV0IHJlYyBmb2xkaSBmIGFjYyBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IGFjY1xuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcImZvbGRpMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIGkgeDEgeDIgaW5cbiAgICAgIGZvbGRpIGYgYWNjIChpICsgMSkgbDEnIGwyJ1xuICBpblxuICBmb2xkaSBmIGFjYyAwIGwxIGwyXG5cbmxldCByZWMgZ2V0X2F0X2lkeF9yZWMgaSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgeCA6OiBfIHdoZW4gaSA9IDAgLT4geFxuICB8IF8gOjogbCcgLT4gZ2V0X2F0X2lkeF9yZWMgKGkgLSAxKSBsJ1xuXG5sZXQgZ2V0X2F0X2lkeF9leG4gaSBsID1cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgZ2V0X2F0X2lkeF9yZWMgaSBsXG5cbmxldCBnZXRfYXRfaWR4IGkgbCA9IHRyeSBTb21lIChnZXRfYXRfaWR4X2V4biBpIGwpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxubGV0IHNldF9hdF9pZHggaSB4IGwwID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBsMFxuICAgIHwgXyA6OiBsJyB3aGVuIGkgPSAwIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgKHggOjogbCcpXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsMCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsMCBbXSBpXG5cbmxldCBpbnNlcnRfYXRfaWR4IGkgeCBsID1cbiAgbGV0IHJlYyBhdXggbCBhY2MgaSB4ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgWyB4IF1cbiAgICB8IHkgOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjICh4IDo6IHkgOjogbCcpXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSkgeFxuICBpblxuICBsZXQgaSA9XG4gICAgaWYgaSA8IDAgdGhlblxuICAgICAgbGVuZ3RoIGwgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbCBbXSBpIHhcblxubGV0IHJlbW92ZV9hdF9pZHggaSBsMCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gbDBcbiAgICB8IF8gOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIGwnXG4gICAgfCB5IDo6IGwnIC0+IGF1eCBsJyAoeSA6OiBhY2MpIChpIC0gMSlcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsMCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGF1eCBsMCBbXSBpXG5cbmxldCByYW5nZV9ieSB+c3RlcCBpIGogPVxuICBsZXQgcmVjIHJhbmdlIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgcmFuZ2UgaSAoaiAtIHN0ZXApIChqIDo6IGFjYylcbiAgaW5cbiAgaWYgc3RlcCA9IDAgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NMaXN0LnJhbmdlX2J5XCIpXG4gIGVsc2UgaWZcbiAgICBpZiBzdGVwID4gMCB0aGVuXG4gICAgICBpID4galxuICAgIGVsc2VcbiAgICAgIGkgPCBqXG4gIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoKChqIC0gaSkgLyBzdGVwICogc3RlcCkgKyBpKSBbXVxuXG5sZXQgcmFuZ2UgaSBqID1cbiAgbGV0IHJlYyB1cCBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIHVwIGkgKGogLSAxKSAoaiA6OiBhY2MpXG4gIGFuZCBkb3duIGkgaiBhY2MgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIGkgOjogYWNjXG4gICAgZWxzZVxuICAgICAgZG93biBpIChqICsgMSkgKGogOjogYWNjKVxuICBpblxuICBpZiBpIDw9IGogdGhlblxuICAgIHVwIGkgaiBbXVxuICBlbHNlXG4gICAgZG93biBpIGogW11cblxubGV0IHJhbmdlJyBpIGogPVxuICBpZiBpIDwgaiB0aGVuXG4gICAgcmFuZ2UgaSAoaiAtIDEpXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIFtdXG4gIGVsc2VcbiAgICByYW5nZSBpIChqICsgMSlcblxubGV0ICggLS0gKSA9IHJhbmdlXG5sZXQgKCAtLV4gKSA9IHJhbmdlJ1xuXG5sZXQgcmVwbGljYXRlIGkgeCA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKHggOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGF1eCBbXSBpXG5cbmxldCByZXBlYXQgaSBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSAwIHRoZW5cbiAgICAgIExpc3QucmV2IGFjY1xuICAgIGVsc2VcbiAgICAgIGF1eCAoTGlzdC5yZXZfYXBwZW5kIGwgYWNjKSAoaSAtIDEpXG4gIGluXG4gIGF1eCBbXSBpXG5cbm1vZHVsZSBBc3NvYyA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHQgPSAoJ2EgKiAnYikgbGlzdFxuXG4gIGxldCByZWMgc2VhcmNoX2V4biBlcSBsIHggPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCAoeSwgeikgOjogbCcgLT5cbiAgICAgIGlmIGVxIHggeSB0aGVuXG4gICAgICAgIHpcbiAgICAgIGVsc2VcbiAgICAgICAgc2VhcmNoX2V4biBlcSBsJyB4XG5cbiAgbGV0IGdldF9leG4gfmVxIHggbCA9IHNlYXJjaF9leG4gZXEgbCB4XG4gIGxldCBnZXQgfmVxIHggbCA9IHRyeSBTb21lIChzZWFyY2hfZXhuIGVxIGwgeCkgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gICgqIHNlYXJjaCBmb3IgYSBiaW5kaW5nIGZvciBbeF0gaW4gW2xdLCBhbmQgY2FsbHMgW2YgeCAoU29tZSB2KSByZXN0XVxuICAgICBvciBbZiB4IE5vbmUgcmVzdF0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQgZmluZHMgdGhlIGJpbmRpbmcuXG4gICAgIFtyZXN0XSBpcyB0aGUgbGlzdCBvZiB0aGUgb3RoZXIgYmluZGluZ3MgKilcbiAgbGV0IHJlYyBzZWFyY2hfc2V0IGVxIGFjYyBsIHggfmYgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZiB4IE5vbmUgYWNjXG4gICAgfCAoeCcsIHknKSA6OiBsJyAtPlxuICAgICAgaWYgZXEgeCB4JyB0aGVuXG4gICAgICAgIGYgeCAoU29tZSB5JykgKExpc3QucmV2X2FwcGVuZCBhY2MgbCcpXG4gICAgICBlbHNlXG4gICAgICAgIHNlYXJjaF9zZXQgZXEgKCh4JywgeScpIDo6IGFjYykgbCcgeCB+ZlxuXG4gIGxldCBzZXQgfmVxIHggeSBsID0gc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biB4IF8gbCAtPiAoeCwgeSkgOjogbClcblxuICBsZXQgbWVtID8oZXEgPSBTdGRsaWIuKCA9ICkpIHggbCA9XG4gICAgdHJ5XG4gICAgICBpZ25vcmUgKHNlYXJjaF9leG4gZXEgbCB4KTtcbiAgICAgIHRydWVcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG4gIGxldCB1cGRhdGUgfmVxIGYgeCBsID1cbiAgICBzZWFyY2hfc2V0IGVxIFtdIGwgeCB+ZjooZnVuIHggb3B0X3kgcmVzdCAtPlxuICAgICAgICBtYXRjaCBmIG9wdF95IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IHJlc3QgKCogZHJvcCAqKVxuICAgICAgICB8IFNvbWUgeScgLT4gKHgsIHknKSA6OiByZXN0KVxuXG4gIGxldCByZW1vdmUgfmVxIHggbCA9XG4gICAgc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biBfIG9wdF95IHJlc3QgLT5cbiAgICAgICAgbWF0Y2ggb3B0X3kgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gbCAoKiBrZWVwIGFzIGlzICopXG4gICAgICAgIHwgU29tZSBfIC0+IHJlc3QpXG5cbiAgbGV0IGtleXMgbCA9IG1hcCAoZnVuIChrLCBfKSAtPiBrKSBsXG4gIGxldCB2YWx1ZXMgbCA9IG1hcCAoZnVuIChfLCB2KSAtPiB2KSBsXG4gIGxldCBtYXBfdmFsdWVzIGYgbCA9IG1hcCAoZnVuIChrLCB2KSAtPiBrLCBmIHYpIGxcbmVuZFxuXG5sZXQgYXNzb2MgPSBBc3NvYy5nZXRfZXhuXG5sZXQgYXNzb2Nfb3B0ID0gQXNzb2MuZ2V0XG5sZXQgbWVtX2Fzc29jID0gQXNzb2MubWVtXG5sZXQgcmVtb3ZlX2Fzc29jID0gQXNzb2MucmVtb3ZlXG5cbigqKiB7MiBSZWZlcmVuY2VzIG9uIExpc3RzfSAqKVxuXG5tb2R1bGUgUmVmID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIGxpc3QgcmVmXG5cbiAgbGV0IHB1c2ggbCB4ID0gbCA6PSB4IDo6ICFsXG5cbiAgbGV0IHBvcCBsID1cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGwgOj0gdGFpbDtcbiAgICAgIFNvbWUgeFxuXG4gIGxldCBwb3BfZXhuIGwgPVxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IGZhaWx3aXRoIFwiQ0NMaXN0LlJlZi5wb3BfZXhuXCJcbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgbCA6PSB0YWlsO1xuICAgICAgeFxuXG4gIGxldCBjcmVhdGUgKCkgPSByZWYgW11cbiAgbGV0IGNsZWFyIGwgPSBsIDo9IFtdXG4gIGxldCBsaWZ0IGYgbCA9IGYgIWxcbiAgbGV0IHB1c2hfbGlzdCByIGwgPSByIDo9IExpc3QucmV2X2FwcGVuZCBsICFyXG5lbmRcblxuKCoqIHsyIE1vbmFkaWMgT3BlcmF0aW9uc30gKilcbm1vZHVsZSB0eXBlIE1PTkFEID0gc2lnXG4gIHR5cGUgJ2EgdFxuXG4gIHZhbCByZXR1cm4gOiAnYSAtPiAnYSB0XG4gIHZhbCAoID4+PSApIDogJ2EgdCAtPiAoJ2EgLT4gJ2IgdCkgLT4gJ2IgdFxuZW5kXG5cbm1vZHVsZSBUcmF2ZXJzZSAoTSA6IE1PTkFEKSA9IHN0cnVjdFxuICBvcGVuIE1cblxuICBsZXQgbWFwX20gZiBsID1cbiAgICBsZXQgcmVjIGF1eCBmIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXR1cm4gKExpc3QucmV2IGFjYylcbiAgICAgIHwgeCA6OiB0YWlsIC0+IGYgeCA+Pj0gZnVuIHgnIC0+IGF1eCBmICh4JyA6OiBhY2MpIHRhaWxcbiAgICBpblxuICAgIGF1eCBmIFtdIGxcblxuICBsZXQgcmVjIG1hcF9tX3BhciBmIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTS5yZXR1cm4gW11cbiAgICB8IHggOjogdGwgLT5cbiAgICAgIGxldCB4JyA9IGYgeCBpblxuICAgICAgbGV0IHRsJyA9IG1hcF9tX3BhciBmIHRsIGluXG4gICAgICB4JyA+Pj0gZnVuIHgnIC0+XG4gICAgICB0bCcgPj49IGZ1biB0bCcgLT4gTS5yZXR1cm4gKHgnIDo6IHRsJylcblxuICBsZXQgc2VxdWVuY2VfbSBsID0gbWFwX20gKGZ1biB4IC0+IHgpIGxcblxuICBsZXQgcmVjIGZvbGRfbSBmIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IHJldHVybiBhY2NcbiAgICB8IHggOjogbCcgLT4gZiBhY2MgeCA+Pj0gZnVuIGFjYycgLT4gZm9sZF9tIGYgYWNjJyBsJ1xuZW5kXG5cbigqKiB7MiBDb252ZXJzaW9uc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbV9sZW4gbGVuIGcgc3QgPSBpbml0IGxlbiAoZnVuIF8gLT4gZyBzdClcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgbGV0IGxlbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBsZW4gZyBzdFxuXG5sZXQgcmFuZG9tX25vbl9lbXB0eSBnIHN0ID1cbiAgbGV0IGxlbiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbGVuIGcgc3RcblxubGV0IHJhbmRvbV9jaG9vc2UgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IF8gOjogXyAtPlxuICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgZnVuIHN0IC0+XG4gICAgICBsZXQgaSA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgbGVuIGluXG4gICAgICBMaXN0Lm50aCBsIGlcblxubGV0IHJhbmRvbV9zZXF1ZW5jZSBsIHN0ID0gbWFwIChmdW4gZyAtPiBnIHN0KSBsXG5cbmxldCB0b19zdHJpbmcgPyhzdGFydCA9IFwiXCIpID8oc3RvcCA9IFwiXCIpID8oc2VwID0gXCIsIFwiKSBpdGVtX3RvX3N0cmluZyBsID1cbiAgbGV0IGwgPSBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyBsIGluXG4gIHN0YXJ0IF4gU3RyaW5nLmNvbmNhdCBzZXAgbCBeIHN0b3BcblxubGV0IHRvX2l0ZXIgbCBrID0gTGlzdC5pdGVyIGsgbFxuXG5sZXQgcmVjIHRvX3NlcSBsICgpID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gU2VxLk5pbFxuICB8IHggOjogdGwgLT4gU2VxLkNvbnMgKHgsIHRvX3NlcSB0bClcblxubGV0IG9mX2l0ZXIgaSA9XG4gIGxldCBsID0gcmVmIFtdIGluXG4gIGkgKGZ1biB4IC0+IGwgOj0geCA6OiAhbCk7XG4gIExpc3QucmV2ICFsXG5cbmxldCBvZl9zZXFfcmV2IGwgPVxuICBsZXQgcmVjIGxvb3AgYWNjIHMgPVxuICAgIG1hdGNoIHMgKCkgd2l0aFxuICAgIHwgU2VxLk5pbCAtPiBhY2NcbiAgICB8IFNlcS5Db25zICh4LCB0bCkgLT4gbG9vcCAoeCA6OiBhY2MpIHRsXG4gIGluXG4gIGxvb3AgW10gbFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgb2Zfc2VxIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHNlcSA9XG4gICAgaWYgaSA8PSAwIHRoZW5cbiAgICAgIExpc3QucmV2IChvZl9zZXFfcmV2IHNlcSlcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgICB8IFNlcS5OaWwgLT4gW11cbiAgICAgIHwgU2VxLkNvbnMgKHgsIHRsKSAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIHRsXG4gICAgKVxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGxcblxuW0BAQGVuZGlmXVxuXG5sZXQgdG9fZ2VuIGwgPVxuICBsZXQgbCA9IHJlZiBsIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICFsIHdpdGhcbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGwgOj0gbCc7XG4gICAgICBTb21lIHhcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IG9mX2dlbiBnID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBnID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBzYWZlIFtdIGdcbiAgICBlbHNlIChcbiAgICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUgeCAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIGdcbiAgICApXG4gIGFuZCBzYWZlIGFjYyBnID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBTb21lIHggLT4gc2FmZSAoeCA6OiBhY2MpIGdcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBnXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgb2ZfZ2VuIGcgPVxuICBtYXRjaCBnICgpIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IHggOjogb2ZfZ2VuIGdcblxuW0BAQGVuZGlmXVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0W0BpbmxpbmVdICggPnw9ICkgbCBmID0gbWFwIGYgbFxuICBsZXRbQGlubGluZV0gKCA+Pj0gKSBsIGYgPSBmbGF0X21hcCBmIGxcbiAgbGV0ICggQCApID0gKCBAIClcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgbDEgbDIgPSBwcm9kdWN0IChmdW4geCB5IC0+IHgsIHkpIGwxIGwyXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG4gIGxldCAoIGFuZCYgKSA9IGNvbWJpbmVfc2hvcnRlc3RcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbigqKiB7MiBJT30gKilcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKSBwcF9pdGVtIGZtdCBsID1cbiAgbGV0IHJlYyBwcmludCBmbXQgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCB4IDo6IChfIDo6IF8gYXMgbCkgLT5cbiAgICAgIHBwX2l0ZW0gZm10IHg7XG4gICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgcHJpbnQgZm10IGxcbiAgICB8IFsgeCBdIC0+IHBwX2l0ZW0gZm10IHhcbiAgICB8IFtdIC0+ICgpXG4gIGluXG4gIHBwX3N0YXJ0IGZtdCAoKTtcbiAgcHJpbnQgZm10IGw7XG4gIHBwX3N0b3AgZm10ICgpXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgT3B0aW9uc30gKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uXG5cbmxldFtAaW5saW5lXSBtYXAgZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4IC0+IFNvbWUgKGYgeClcblxubGV0IG1hcF9vciB+ZGVmYXVsdCBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBtYXBfbGF6eSBkZWZhdWx0X2ZuIGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZGVmYXVsdF9mbiAoKVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IGlzX3NvbWUgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIE5vbmUgLT4gMFxuICB8IFNvbWUgXywgTm9uZSAtPiAxXG4gIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gZiB4IHlcblxubGV0IGVxdWFsIGYgbzEgbzIgPVxuICBtYXRjaCBvMSwgbzIgd2l0aFxuICB8IE5vbmUsIE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgXywgTm9uZSB8IE5vbmUsIFNvbWUgXyAtPiBmYWxzZVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IGYgeCB5XG5cbmxldCByZXR1cm4geCA9IFNvbWUgeFxubGV0IHNvbWUgPSByZXR1cm5cbmxldCBub25lID0gTm9uZVxuXG5sZXRbQGlubGluZV0gZmxhdF9tYXAgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXRbQGlubGluZV0gZmxhdF9tYXBfbCBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXRbQGlubGluZV0gYmluZCBvIGYgPSBmbGF0X21hcCBmIG9cbmxldCAoID4+PSApID0gYmluZFxubGV0IHB1cmUgeCA9IFNvbWUgeFxuXG5sZXQgKCA8Kj4gKSBmIHggPVxuICBtYXRjaCBmLCB4IHdpdGhcbiAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gIHwgU29tZSBmLCBTb21lIHggLT4gU29tZSAoZiB4KVxuXG5sZXQgb3JfIH5lbHNlXyBhID1cbiAgbWF0Y2ggYSB3aXRoXG4gIHwgTm9uZSAtPiBlbHNlX1xuICB8IFNvbWUgXyAtPiBhXG5cbmxldCBvcl9sYXp5IH5lbHNlXyBhID1cbiAgbWF0Y2ggYSB3aXRoXG4gIHwgTm9uZSAtPiBlbHNlXyAoKVxuICB8IFNvbWUgXyAtPiBhXG5cbmxldCAoIDwrPiApIGEgYiA9IG9yXyB+ZWxzZV86YiBhXG5sZXQgY2hvaWNlIGwgPSBMaXN0LmZvbGRfbGVmdCAoIDwrPiApIE5vbmUgbFxuXG5sZXQgbWFwMiBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gIHwgU29tZSB4LCBTb21lIHkgLT4gU29tZSAoZiB4IHkpXG5cbmxldCBmaWx0ZXIgcCA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IGFzIG8gd2hlbiBwIHggLT4gb1xuICB8IF8gLT4gTm9uZVxuXG5sZXQgaWZfIHAgeCA9XG4gIGlmIHAgeCB0aGVuXG4gICAgU29tZSB4XG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgeCAtPiBwIHhcblxubGV0IGZvcl9hbGwgcCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiB0cnVlXG4gIHwgU29tZSB4IC0+IHAgeFxuXG5sZXQgaXRlciBmIG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgZm9sZCBmIGFjYyBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBhY2NcbiAgfCBTb21lIHggLT4gZiBhY2MgeFxuXG5sZXQgZ2V0X29yIH5kZWZhdWx0IHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgdmFsdWUgeCB+ZGVmYXVsdCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gZGVmYXVsdFxuICB8IFNvbWUgeSAtPiB5XG5cbmxldCBnZXRfZXhuID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJDQ09wdGlvbi5nZXRfZXhuXCJcblxubGV0IGdldF9leG5fb3IgbXNnID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geFxuICB8IE5vbmUgLT4gaW52YWxpZF9hcmcgbXNnXG5cbmxldCBnZXRfbGF6eSBkZWZhdWx0X2ZuIHggPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRfZm4gKClcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgc2VxdWVuY2VfbCBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gU29tZSAoTGlzdC5yZXYgYWNjKVxuICAgIHwgU29tZSB4IDo6IGwnIC0+IGF1eCAoeCA6OiBhY2MpIGwnXG4gICAgfCBOb25lIDo6IF8gLT4gcmFpc2UgRXhpdFxuICBpblxuICB0cnkgYXV4IFtdIGwgd2l0aCBFeGl0IC0+IE5vbmVcblxubGV0IHdyYXAgPyhoYW5kbGVyID0gZnVuIF8gLT4gdHJ1ZSkgZiB4ID1cbiAgdHJ5IFNvbWUgKGYgeClcbiAgd2l0aCBlIC0+XG4gICAgaWYgaGFuZGxlciBlIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICByYWlzZSBlXG5cbmxldCB3cmFwMiA/KGhhbmRsZXIgPSBmdW4gXyAtPiB0cnVlKSBmIHggeSA9XG4gIHRyeSBTb21lIChmIHggeSlcbiAgd2l0aCBlIC0+XG4gICAgaWYgaGFuZGxlciBlIHRoZW5cbiAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICByYWlzZSBlXG5cbmxldCB0b19saXN0IG8gPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSB4IC0+IFsgeCBdXG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgfCB4IDo6IF8gLT4gU29tZSB4XG4gIHwgW10gLT4gTm9uZVxuXG5sZXQgdG9fcmVzdWx0IGVyciA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciBlcnJcbiAgfCBTb21lIHggLT4gT2sgeFxuXG5sZXQgdG9fcmVzdWx0X2xhenkgZXJyX2ZuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEVycm9yIChlcnJfZm4gKCkpXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IG9mX3Jlc3VsdCA9IGZ1bmN0aW9uXG4gIHwgRXJyb3IgXyAtPiBOb25lXG4gIHwgT2sgeCAtPiBTb21lIHhcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID58PSApIHggZiA9IG1hcCBmIHhcbiAgbGV0ICggPj49ICkgPSAoID4+PSApXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCA8Kz4gKSA9ICggPCs+IClcbiAgbGV0ICggbGV0KyApID0gKCA+fD0gKVxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG5cbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIG8xIG8yID1cbiAgICBtYXRjaCBvMSwgbzIgd2l0aFxuICAgIHwgU29tZSB4LCBTb21lIHkgLT4gU29tZSAoeCwgeSlcbiAgICB8IF8gLT4gTm9uZVxuXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBnZW4gPSB1bml0IC0+ICdhIG9wdGlvblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBpZiBSYW5kb20uU3RhdGUuYm9vbCBzdCB0aGVuXG4gICAgU29tZSAoZyBzdClcbiAgZWxzZVxuICAgIE5vbmVcblxuZXhjZXB0aW9uIEV4aXRDaG9pY2VcblxubGV0IGNob2ljZV9pdGVyIHMgPVxuICBsZXQgciA9IHJlZiBOb25lIGluXG4gICh0cnlcbiAgICAgcyAoZnVuY3Rpb25cbiAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICB8IFNvbWUgXyBhcyBvIC0+XG4gICAgICAgICByIDo9IG87XG4gICAgICAgICByYWlzZSBFeGl0Q2hvaWNlKVxuICAgd2l0aCBFeGl0Q2hvaWNlIC0+ICgpKTtcbiAgIXJcblxubGV0IHJlYyBjaG9pY2Vfc2VxIHMgPVxuICBtYXRjaCBzICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+IE5vbmVcbiAgfCBTZXEuQ29ucyAoU29tZSB4LCBfKSAtPiBTb21lIHhcbiAgfCBTZXEuQ29ucyAoTm9uZSwgdGwpIC0+IGNob2ljZV9zZXEgdGxcblxubGV0IHRvX2dlbiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBmdW4gKCkgLT4gTm9uZVxuICB8IFNvbWUgXyAtPlxuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgZnVuICgpIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlO1xuICAgICAgICBvXG4gICAgICApIGVsc2VcbiAgICAgICAgTm9uZVxuXG5sZXQgdG9faXRlciBvIGsgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IGsgeFxuXG5sZXQgdG9fc2VxIG8gKCkgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBOb25lIC0+IFNlcS5OaWxcbiAgfCBTb21lIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcblxubGV0IHBwIHBweCBvdXQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJOb25lXCJcbiAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiQFtTb21lICVhQF1cIiBwcHggeFxuXG5sZXQgZmxhdHRlbiA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IE5vbmVcblxubGV0IHJldHVybl9pZiBiIHggPVxuICBpZiBiIHRoZW5cbiAgICBTb21lIHhcbiAgZWxzZVxuICAgIE5vbmVcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBSYW5kb20gR2VuZXJhdG9yc30gKilcblxuaW5jbHVkZSBSYW5kb21cblxudHlwZSBzdGF0ZSA9IFJhbmRvbS5TdGF0ZS50XG50eXBlICdhIHQgPSBzdGF0ZSAtPiAnYVxudHlwZSAnYSByYW5kb21fZ2VuID0gJ2EgdFxuXG5sZXQgcmV0dXJuIHggX3N0ID0geFxubGV0IGZsYXRfbWFwIGYgZyBzdCA9IGYgKGcgc3QpIHN0XG5sZXQgKCA+Pj0gKSBnIGYgc3QgPSBmbGF0X21hcCBmIGcgc3RcbmxldCBtYXAgZiBnIHN0ID0gZiAoZyBzdClcbmxldCAoID58PSApIGcgZiBzdCA9IG1hcCBmIGcgc3RcbmxldCBkZWxheSBmIHN0ID0gZiAoKSBzdFxuXG5sZXQgX2Nob29zZV9hcnJheSBhIHN0ID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1JhbmRvbS5jaG9vc2VfYXJyYXlcIjtcbiAgYS4oUmFuZG9tLlN0YXRlLmludCBzdCAoQXJyYXkubGVuZ3RoIGEpKVxuXG5sZXQgY2hvb3NlX2FycmF5IGEgc3QgPVxuICB0cnkgU29tZSAoX2Nob29zZV9hcnJheSBhIHN0IHN0KSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5cbmxldCBjaG9vc2UgbCA9XG4gIGxldCBhID0gQXJyYXkub2ZfbGlzdCBsIGluXG4gIGNob29zZV9hcnJheSBhXG5cbmxldCBjaG9vc2VfZXhuIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBmdW4gc3QgLT4gX2Nob29zZV9hcnJheSBhIHN0IHN0XG5cbmxldCBjaG9vc2VfcmV0dXJuIGwgPSBfY2hvb3NlX2FycmF5IChBcnJheS5vZl9saXN0IGwpXG5cbmV4Y2VwdGlvbiBQaWNrX2Zyb21fZW1wdHlcblxubGV0IHBpY2tfbGlzdCBsID1cbiAgbGV0IG4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gIGlmIG4gPSAwIHRoZW4gcmFpc2UgUGlja19mcm9tX2VtcHR5O1xuICBmdW4gc3QgLT4gTGlzdC5udGggbCAoUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgcGlja19hcnJheSBhID1cbiAgbGV0IG4gPSBBcnJheS5sZW5ndGggYSBpblxuICBpZiBuID0gMCB0aGVuIHJhaXNlIFBpY2tfZnJvbV9lbXB0eTtcbiAgZnVuIHN0IC0+IEFycmF5LmdldCBhIChSYW5kb20uU3RhdGUuaW50IHN0IG4pXG5cbmxldCBpbnQgaSBzdCA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgaVxubGV0IHNtYWxsX2ludCA9IGludCAxMDBcbmxldCBpbnRfcmFuZ2UgaSBqIHN0ID0gaSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgKGogLSBpICsgMSlcbmxldCBmbG9hdCBmIHN0ID0gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IGZcbmxldCBzbWFsbF9mbG9hdCA9IGZsb2F0IDEwMC4wXG5sZXQgZmxvYXRfcmFuZ2UgaSBqIHN0ID0gaSArLiBSYW5kb20uU3RhdGUuZmxvYXQgc3QgKGogLS4gaSlcblxuKCogVE9ETzogc2FtcGxlIGZ1bmN0aW9ucyAqKVxuXG5sZXQgcmVwbGljYXRlIG4gZyBzdCA9XG4gIGxldCByZWMgYXV4IGFjYyBuID1cbiAgICBpZiBuID0gMCB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGcgc3QgOjogYWNjKSAobiAtIDEpXG4gIGluXG4gIGF1eCBbXSBuXG5cbigqIFNhbXBsZSB3aXRob3V0IHJlcGxhY2VtZW50IHVzaW5nIHJlamVjdGlvbiBzYW1wbGluZy4gKilcbmxldCBzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzICh0eXBlIGVsdCkgfmNtcCBrIChybmcgOiBlbHQgdCkgc3QgPVxuICBsZXQgbW9kdWxlIFMgPSBTZXQuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gZWx0XG5cbiAgICBsZXQgY29tcGFyZSA9IGNtcFxuICBlbmQpIGluXG4gIGxldCByZWMgYXV4IHMgayA9XG4gICAgaWYgayA8PSAwIHRoZW5cbiAgICAgIFMuZWxlbWVudHMgc1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBybmcgc3QgaW5cbiAgICAgIGlmIFMubWVtIHggcyB0aGVuXG4gICAgICAgIGF1eCBzIGtcbiAgICAgIGVsc2VcbiAgICAgICAgYXV4IChTLmFkZCB4IHMpIChrIC0gMSlcbiAgICApXG4gIGluXG4gIGlmIGsgPD0gMCB0aGVuIGludmFsaWRfYXJnIFwic2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlc1wiO1xuICBhdXggUy5lbXB0eSBrXG5cbmxldCBsaXN0X3NlcSBsIHN0ID0gTGlzdC5tYXAgKGZ1biBmIC0+IGYgc3QpIGxcblxubGV0IHNwbGl0IGkgc3QgPVxuICBpZiBpIDwgMiB0aGVuXG4gICAgTm9uZVxuICBlbHNlIChcbiAgICBsZXQgaiA9IDEgKyBSYW5kb20uU3RhdGUuaW50IHN0IChpIC0gMSkgaW5cbiAgICBTb21lIChqLCBpIC0gailcbiAgKVxuXG5sZXQgX2RpZmZfbGlzdCB+bGFzdCBsID1cbiAgbGV0IHJlYyBkaWZmX2xpc3QgYWNjID0gZnVuY3Rpb25cbiAgICB8IFsgYSBdIC0+IFNvbWUgKChsYXN0IC0gYSkgOjogYWNjKVxuICAgIHwgYSA6OiAoYiA6OiBfIGFzIHIpIC0+IGRpZmZfbGlzdCAoKGIgLSBhKSA6OiBhY2MpIHJcbiAgICB8IFtdIC0+IE5vbmVcbiAgaW5cbiAgZGlmZl9saXN0IFtdIGxcblxuKCogUGFydGl0aW9uIG9mIGFuIGludCBpbnRvIFtsZW5dIGludGVnZXJzIHVuaWZvcm1seS5cbiAgIFdlIGZpcnN0IHNhbXBsZSAobGVuLTEpIHBvaW50cyBmcm9tIHRoZSBzZXQgezEsLi5pLTF9IHdpdGhvdXQgcmVwbGFjZW1lbnQuXG4gICBXZSBzb3J0IHRoZXNlIHBvaW50cyBhbmQgYWRkIGJhY2sgMCBhbmQgaSwgd2UgaGF2ZSB0aHVzXG4gICB4XzAgPSAwIDwgeF8xIDwgeF8yIDwg4oCmIDwgeF97bGVuLTF9IDwgaSA9IHhfe2xlbn0uXG4gICBJZiB3ZSBkZWZpbmUsIHlfayA9IHhfe2srMX0gLSB4X3trfSBmb3IgayBpbiAwIOKApiAobGVuLTEpLCB0aGVuIGJ5IGNvbnN0cnVjdGlvblxuICAg4oiRX2sgeV9rID0g4oiRX2sgKHhfe2srMX0gLSB4X2sgKSA9IHhfe2xlbn0gLSB4XzAgPSBpLiAqKVxubGV0IHNwbGl0X2xpc3QgaSB+bGVuIHN0ID1cbiAgaWYgbGVuIDw9IDEgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5zcGxpdF9saXN0XCI7XG4gIGlmIGkgPj0gbGVuIHRoZW4gKFxuICAgIGxldCB4cyA9XG4gICAgICBzYW1wbGVfd2l0aG91dF9kdXBsaWNhdGVzIH5jbXA6Y29tcGFyZSAobGVuIC0gMSkgKGludF9yYW5nZSAxIChpIC0gMSkpIHN0XG4gICAgaW5cbiAgICBfZGlmZl9saXN0IH5sYXN0OmkgKDAgOjogeHMpXG4gICkgZWxzZVxuICAgIE5vbmVcblxubGV0IHJldHJ5ID8obWF4ID0gMTApIGcgc3QgPVxuICBsZXQgcmVjIGF1eCBuID1cbiAgICBtYXRjaCBnIHN0IHdpdGhcbiAgICB8IE5vbmUgd2hlbiBuID0gMCAtPiBOb25lXG4gICAgfCBOb25lIC0+IGF1eCAobiAtIDEpICgqIHJldHJ5ICopXG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlc1xuICBpblxuICBhdXggbWF4XG5cbmxldCByZWMgdHJ5X3N1Y2Nlc3NpdmVseSBsIHN0ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gTm9uZVxuICB8IGcgOjogbCcgLT5cbiAgICAobWF0Y2ggZyBzdCB3aXRoXG4gICAgfCBOb25lIC0+IHRyeV9zdWNjZXNzaXZlbHkgbCcgc3RcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzKVxuXG5sZXQgKCA8Pz4gKSBhIGIgPSB0cnlfc3VjY2Vzc2l2ZWx5IFsgYTsgYiBdXG5cbmV4Y2VwdGlvbiBCYWNrdHJhY2tcblxubGV0IF9jaG9vc2VfYXJyYXlfY2FsbCBhIGYgc3QgPVxuICB0cnkgZiAoX2Nob29zZV9hcnJheSBhIHN0KSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiByYWlzZSBCYWNrdHJhY2tcblxubGV0IGZpeCA/KHN1YjEgPSBbXSkgPyhzdWIyID0gW10pID8oc3VibiA9IFtdKSB+YmFzZSBmdWVsIHN0ID1cbiAgbGV0IHN1YjEgPSBBcnJheS5vZl9saXN0IHN1YjFcbiAgYW5kIHN1YjIgPSBBcnJheS5vZl9saXN0IHN1YjJcbiAgYW5kIHN1Ym4gPSBBcnJheS5vZl9saXN0IHN1Ym4gaW5cbiAgKCogcmVjdXJzaXZlIGZ1bmN0aW9uIHdpdGggZnVlbCAqKVxuICBsZXQgcmVjIG1ha2UgZnVlbCBzdCA9XG4gICAgaWYgZnVlbCA9IDAgdGhlblxuICAgICAgcmFpc2UgQmFja3RyYWNrXG4gICAgZWxzZSBpZiBmdWVsID0gMSB0aGVuXG4gICAgICBiYXNlIHN0XG4gICAgZWxzZVxuICAgICAgX3RyeV9vdGhlcndpc2UgMFxuICAgICAgICBbfFxuICAgICAgICAgIF9jaG9vc2VfYXJyYXlfY2FsbCBzdWIxIChmdW4gZiAtPiBmIChtYWtlIChmdWVsIC0gMSkpIHN0KTtcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3ViMiAoZnVuIGYgLT5cbiAgICAgICAgICAgICAgbWF0Y2ggc3BsaXQgZnVlbCBzdCB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSBCYWNrdHJhY2tcbiAgICAgICAgICAgICAgfCBTb21lIChpLCBqKSAtPiBmIChtYWtlIGkpIChtYWtlIGopIHN0KTtcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3VibiAoZnVuIChsZW4sIGYpIC0+XG4gICAgICAgICAgICAgIGxldCBsZW4gPSBsZW4gc3QgaW5cbiAgICAgICAgICAgICAgbWF0Y2ggc3BsaXRfbGlzdCBmdWVsIH5sZW4gc3Qgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgQmFja3RyYWNrXG4gICAgICAgICAgICAgIHwgU29tZSBsJyAtPiBmIChmdW4gc3QgLT4gTGlzdC5tYXAgKGZ1biB4IC0+IG1ha2UgeCBzdCkgbCcpIHN0KTtcbiAgICAgICAgICBiYXNlICgqIGJhc2UgY2FzZSB0aGVuICopO1xuICAgICAgICB8XVxuICBhbmQgX3RyeV9vdGhlcndpc2UgaSBhID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgICAgcmFpc2UgQmFja3RyYWNrXG4gICAgZWxzZSAoXG4gICAgICB0cnkgYS4oaSkgc3Qgd2l0aCBCYWNrdHJhY2sgLT4gX3RyeV9vdGhlcndpc2UgKGkgKyAxKSBhXG4gICAgKVxuICBpblxuICBtYWtlIChmdWVsIHN0KSBzdFxuXG5sZXQgcHVyZSB4IF9zdCA9IHhcbmxldCAoIDwqPiApIGYgZyBzdCA9IGYgc3QgKGcgc3QpXG5sZXQgKCBsZXQrICkgPSAoID58PSApXG5sZXQgKCBsZXQqICkgPSAoID4+PSApXG5sZXRbQGlubGluZV0gKCBhbmQrICkgYTEgYTIgc3QgPSBhMSBzdCwgYTIgc3RcbmxldCAoIGFuZCogKSA9ICggYW5kKyApXG5sZXQgX19kZWZhdWx0X3N0YXRlID0gUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0ICgpXG5sZXQgcnVuID8oc3QgPSBfX2RlZmF1bHRfc3RhdGUpIGcgPSBnIHN0XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRXJyb3IgTW9uYWR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQmFzaWNzfSAqKVxuXG50eXBlIG5vbnJlYyAoKydnb29kLCArJ2JhZCkgcmVzdWx0ID0gKCdnb29kLCAnYmFkKSByZXN1bHQgPVxuICB8IE9rIG9mICdnb29kXG4gIHwgRXJyb3Igb2YgJ2JhZFxuXG50eXBlICgrJ2dvb2QsICsnYmFkKSB0ID0gKCdnb29kLCAnYmFkKSByZXN1bHQgPSBPayBvZiAnZ29vZCB8IEVycm9yIG9mICdiYWRcblxubGV0IHJldHVybiB4ID0gT2sgeFxubGV0IGZhaWwgcyA9IEVycm9yIHNcblxubGV0IGZhaWxfcHJpbnRmIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIFByaW50Zi5rYnByaW50ZiAoZnVuIGJ1ZiAtPiBmYWlsIChCdWZmZXIuY29udGVudHMgYnVmKSkgYnVmIGZvcm1hdFxuXG5sZXQgZmFpbF9mcHJpbnRmIGZvcm1hdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmYWlsIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm9ybWF0XG5cbmxldCBhZGRfY3R4IG1zZyB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgRXJyb3IgZSAtPiBFcnJvciAoZSBeIFwiXFxuY29udGV4dDpcIiBeIG1zZylcbiAgfCBPayB4IC0+IE9rIHhcblxubGV0IGFkZF9jdHhmIG1zZyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBvdXQgZSAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIG91dCAoKTtcbiAgICAgIGFkZF9jdHggKEJ1ZmZlci5jb250ZW50cyBidWYpIGUpXG4gICAgb3V0IG1zZ1xuXG5sZXQgb2ZfZXhuIGUgPVxuICBsZXQgbXNnID0gUHJpbnRleGMudG9fc3RyaW5nIGUgaW5cbiAgRXJyb3IgbXNnXG5cbmxldCBvZl9leG5fdHJhY2UgZSA9XG4gIGxldCByZXMgPVxuICAgIFByaW50Zi5zcHJpbnRmIFwiJXNcXG4lc1wiIChQcmludGV4Yy50b19zdHJpbmcgZSkgKFByaW50ZXhjLmdldF9iYWNrdHJhY2UgKCkpXG4gIGluXG4gIEVycm9yIHJlc1xuXG5sZXQgb3B0X21hcCBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBOb25lIC0+IE9rIE5vbmVcbiAgfCBTb21lIHggLT5cbiAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICB8IE9rIHggLT4gT2sgKFNvbWUgeClcbiAgICB8IEVycm9yIGUgLT4gRXJyb3IgZSlcblxubGV0IG1hcCBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IE9rIChmIHgpXG4gIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbmxldCBtYXBfZXJyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIF8gYXMgcmVzIC0+IHJlc1xuICB8IEVycm9yIHkgLT4gRXJyb3IgKGYgeSlcblxubGV0IG1hcDIgZiBnIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IE9rIChmIHgpXG4gIHwgRXJyb3IgcyAtPiBFcnJvciAoZyBzKVxuXG5sZXQgaXRlciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIF8gLT4gKClcblxubGV0IGl0ZXJfZXJyIGYgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIF8gLT4gKClcbiAgfCBFcnJvciBlcnIgLT4gZiBlcnJcblxuZXhjZXB0aW9uIEdldF9lcnJvclxuXG5sZXQgZ2V0X2V4biA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgXyAtPiByYWlzZSBHZXRfZXJyb3JcblxubGV0IGdldF9vciBlIH5kZWZhdWx0ID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5cbmxldCBnZXRfbGF6eSBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBlIC0+IGYgZVxuXG5sZXQgZ2V0X29yX2ZhaWx3aXRoID0gZnVuY3Rpb25cbiAgfCBPayB4IC0+IHhcbiAgfCBFcnJvciBtc2cgLT4gZmFpbHdpdGggbXNnXG5cbmxldCBtYXBfb3IgZiBlIH5kZWZhdWx0ID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBfIC0+IGRlZmF1bHRcblxubGV0IGNhdGNoIGUgfm9rIH5lcnIgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IG9rIHhcbiAgfCBFcnJvciB5IC0+IGVyciB5XG5cbmxldCBmbGF0X21hcCBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGYgeFxuICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG5sZXQgZXF1YWwgfmVyciBlcSBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBPayB4LCBPayB5IC0+IGVxIHggeVxuICB8IEVycm9yIHMsIEVycm9yIHMnIC0+IGVyciBzIHMnXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+ZXJyIGNtcCBhIGIgPVxuICBtYXRjaCBhLCBiIHdpdGhcbiAgfCBPayB4LCBPayB5IC0+IGNtcCB4IHlcbiAgfCBPayBfLCBfIC0+IDFcbiAgfCBfLCBPayBfIC0+IC0xXG4gIHwgRXJyb3IgcywgRXJyb3IgcycgLT4gZXJyIHMgcydcblxubGV0IGZvbGQgfm9rIH5lcnJvciB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgT2sgeCAtPiBvayB4XG4gIHwgRXJyb3IgcyAtPiBlcnJvciBzXG5cbmxldCBmb2xkX29rIGYgYWNjIHIgPVxuICBtYXRjaCByIHdpdGhcbiAgfCBPayB4IC0+IGYgYWNjIHhcbiAgfCBFcnJvciBfIC0+IGFjY1xuXG5sZXQgaXNfb2sgPSBmdW5jdGlvblxuICB8IE9rIF8gLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb25cbiAgfCBPayBfIC0+IGZhbHNlXG4gIHwgRXJyb3IgXyAtPiB0cnVlXG5cbigqKiB7MiBXcmFwcGVyc30gKilcblxubGV0IGd1YXJkIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgZ3VhcmRfc3RyIGYgPSB0cnkgT2sgKGYgKCkpIHdpdGggZSAtPiBvZl9leG4gZVxubGV0IGd1YXJkX3N0cl90cmFjZSBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gb2ZfZXhuX3RyYWNlIGVcbmxldCB3cmFwMSBmIHggPSB0cnkgcmV0dXJuIChmIHgpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgd3JhcDIgZiB4IHkgPSB0cnkgcmV0dXJuIChmIHggeSkgd2l0aCBlIC0+IEVycm9yIGVcbmxldCB3cmFwMyBmIHggeSB6ID0gdHJ5IHJldHVybiAoZiB4IHkgeikgd2l0aCBlIC0+IEVycm9yIGVcblxuKCoqIHsyIEFwcGxpY2F0aXZlfSAqKVxuXG5sZXQgcHVyZSA9IHJldHVyblxuXG5sZXQgKCA8Kj4gKSBmIHggPVxuICBtYXRjaCBmIHdpdGhcbiAgfCBFcnJvciBzIC0+IGZhaWwgc1xuICB8IE9rIGYgLT4gbWFwIGYgeFxuXG5sZXQgam9pbiB0ID1cbiAgbWF0Y2ggdCB3aXRoXG4gIHwgT2sgKE9rIG8pIC0+IE9rIG9cbiAgfCBPayAoRXJyb3IgZSkgLT4gRXJyb3IgZVxuICB8IEVycm9yIF8gYXMgZSAtPiBlXG5cbmxldCBib3RoIHggeSA9XG4gIG1hdGNoIHgsIHkgd2l0aFxuICB8IE9rIG8sIE9rIG8nIC0+IE9rIChvLCBvJylcbiAgfCBPayBfLCBFcnJvciBlIC0+IEVycm9yIGVcbiAgfCBFcnJvciBlLCBfIC0+IEVycm9yIGVcblxuKCoqIHsyIENvbGxlY3Rpb25zfSAqKVxuXG5sZXQgbWFwX2wgZiBsID1cbiAgbGV0IHJlYyBtYXAgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gT2sgKExpc3QucmV2IGFjYylcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBFcnJvciBzIC0+IEVycm9yIHNcbiAgICAgIHwgT2sgeSAtPiBtYXAgKHkgOjogYWNjKSBsJylcbiAgaW5cbiAgbWFwIFtdIGxcblxubGV0IGZsYXR0ZW5fbCBsID1cbiAgbGV0IHJlYyBsb29wIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE9rIChMaXN0LnJldiBhY2MpXG4gICAgfCBPayB4IDo6IGwnIC0+IGxvb3AgKHggOjogYWNjKSBsJ1xuICAgIHwgRXJyb3IgZSA6OiBfIC0+IEVycm9yIGVcbiAgaW5cbiAgbG9vcCBbXSBsXG5cbmV4Y2VwdGlvbiBMb2NhbEV4aXRcblxubGV0IGZvbGRfaXRlciBmIGFjYyBzZXEgPVxuICBsZXQgZXJyID0gcmVmIE5vbmUgaW5cbiAgdHJ5XG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBzZXEgKGZ1biB4IC0+XG4gICAgICAgIG1hdGNoIGYgIWFjYyB4IHdpdGhcbiAgICAgICAgfCBFcnJvciBzIC0+XG4gICAgICAgICAgZXJyIDo9IFNvbWUgcztcbiAgICAgICAgICByYWlzZSBMb2NhbEV4aXRcbiAgICAgICAgfCBPayB5IC0+IGFjYyA6PSB5KTtcbiAgICBPayAhYWNjXG4gIHdpdGggTG9jYWxFeGl0IC0+XG4gICAgKG1hdGNoICFlcnIgd2l0aFxuICAgIHwgTm9uZSAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFNvbWUgcyAtPiBFcnJvciBzKVxuXG5sZXQgZm9sZF9sIGYgYWNjIGwgPSBmb2xkX2l0ZXIgZiBhY2MgKGZ1biBrIC0+IExpc3QuaXRlciBrIGwpXG5cbigqKiB7MiBNaXNjfSAqKVxuXG5sZXQgY2hvb3NlIGwgPVxuICBsZXQgcmVjIGZpbmRfID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgKE9rIF8gYXMgcmVzKSA6OiBfIC0+IHJlc1xuICAgIHwgRXJyb3IgXyA6OiBsJyAtPiBmaW5kXyBsJ1xuICBpblxuICB0cnkgZmluZF8gbFxuICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIGxldCBsJyA9XG4gICAgICBMaXN0Lm1hcFxuICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICB8IEVycm9yIHMgLT4gc1xuICAgICAgICAgIHwgT2sgXyAtPiBhc3NlcnQgZmFsc2UpXG4gICAgICAgIGxcbiAgICBpblxuICAgIEVycm9yIGwnXG5cbmxldCByZXRyeSBuIGYgPVxuICBsZXQgcmVjIHJldHJ5IG4gYWNjID1cbiAgICBtYXRjaCBuIHdpdGhcbiAgICB8IDAgLT4gZmFpbCAoTGlzdC5yZXYgYWNjKVxuICAgIHwgXyAtPlxuICAgICAgKG1hdGNoIGYgKCkgd2l0aFxuICAgICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICAgIHwgRXJyb3IgZSAtPiByZXRyeSAobiAtIDEpIChlIDo6IGFjYykpXG4gIGluXG4gIHJldHJ5IG4gW11cblxuKCoqIHsyIEluZml4fSAqKVxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggPnw9ICkgZSBmID0gbWFwIGYgZVxuICBsZXQgKCA+Pj0gKSBlIGYgPSBmbGF0X21hcCBmIGVcbiAgbGV0ICggPCo+ICkgPSAoIDwqPiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSB4MSB4MiA9XG4gICAgbWF0Y2ggeDEsIHgyIHdpdGhcbiAgICB8IE9rIHgsIE9rIHkgLT4gT2sgKHgsIHkpXG4gICAgfCBFcnJvciBlLCBfIC0+IEVycm9yIGVcbiAgICB8IF8sIEVycm9yIGUgLT4gRXJyb3IgZVxuXG4gIGxldCAoIGFuZCogKSA9ICggYW5kKyApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG4oKiogezIgTW9uYWRpYyBPcGVyYXRpb25zfSAqKVxuXG5tb2R1bGUgdHlwZSBNT05BRCA9IHNpZ1xuICB0eXBlICdhIHRcblxuICB2YWwgcmV0dXJuIDogJ2EgLT4gJ2EgdFxuICB2YWwgKCA+Pj0gKSA6ICdhIHQgLT4gKCdhIC0+ICdiIHQpIC0+ICdiIHRcbmVuZFxuXG5tb2R1bGUgVHJhdmVyc2UgKE0gOiBNT05BRCkgPSBzdHJ1Y3RcbiAgbGV0ICggPj49ICkgPSBNLiggPj49IClcblxuICBsZXQgbWFwX20gZiBlID1cbiAgICBtYXRjaCBlIHdpdGhcbiAgICB8IEVycm9yIHMgLT4gTS5yZXR1cm4gKEVycm9yIHMpXG4gICAgfCBPayB4IC0+IGYgeCA+Pj0gZnVuIHkgLT4gTS5yZXR1cm4gKE9rIHkpXG5cbiAgbGV0IHNlcXVlbmNlX20gbSA9IG1hcF9tIChmdW4geCAtPiB4KSBtXG5cbiAgbGV0IGZvbGRfbSBmIGFjYyBlID1cbiAgICBtYXRjaCBlIHdpdGhcbiAgICB8IEVycm9yIF8gLT4gTS5yZXR1cm4gYWNjXG4gICAgfCBPayB4IC0+IGYgYWNjIHggPj49IGZ1biB5IC0+IE0ucmV0dXJuIHlcblxuICBsZXQgcmV0cnlfbSBuIGYgPVxuICAgIGxldCByZWMgcmV0cnkgbiBhY2MgPVxuICAgICAgbWF0Y2ggbiB3aXRoXG4gICAgICB8IDAgLT4gTS5yZXR1cm4gKGZhaWwgKExpc3QucmV2IGFjYykpXG4gICAgICB8IF8gLT5cbiAgICAgICAgZiAoKSA+Pj0gKCBmdW5jdGlvblxuICAgICAgICB8IE9rIHggLT4gTS5yZXR1cm4gKE9rIHgpXG4gICAgICAgIHwgRXJyb3IgZSAtPiByZXRyeSAobiAtIDEpIChlIDo6IGFjYykgKVxuICAgIGluXG4gICAgcmV0cnkgbiBbXVxuZW5kXG5cbigqKiB7MiBDb252ZXJzaW9uc30gKilcblxubGV0IHRvX29wdCA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiBTb21lIHhcbiAgfCBFcnJvciBfIC0+IE5vbmVcblxubGV0IG9mX29wdCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciBcIm9mX29wdFwiXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IHRvX3NlcSBlICgpID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBTZXEuQ29ucyAoeCwgU2VxLmVtcHR5KVxuICB8IEVycm9yIF8gLT4gU2VxLk5pbFxuXG5sZXQgdG9faXRlciBlIGsgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IGsgeFxuICB8IEVycm9yIF8gLT4gKClcblxudHlwZSAoJ2EsICdiKSBlcnJvciA9IFsgYE9rIG9mICdhIHwgYEVycm9yIG9mICdiIF1cblxubGV0IG9mX2VyciA9IGZ1bmN0aW9uXG4gIHwgYE9rIHggLT4gT2sgeFxuICB8IGBFcnJvciB5IC0+IEVycm9yIHlcblxubGV0IHRvX2VyciA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiBgT2sgeFxuICB8IEVycm9yIHkgLT4gYEVycm9yIHlcblxuKCoqIHsyIElPfSAqKVxuXG5sZXQgcHAgcHBfeCBmbXQgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtvayhALCVhKUBdXCIgcHBfeCB4XG4gIHwgRXJyb3IgcyAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW2Vycm9yKEAsJXMpQF1cIiBzXG5cbmxldCBwcCcgcHBfeCBwcF9lIGZtdCBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW29rKEAsJWEpQF1cIiBwcF94IHhcbiAgfCBFcnJvciBzIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbZXJyb3IoQCwlYSlAXVwiIHBwX2Ugc1xuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFdyYXBwZXIgYXJvdW5kIFNldH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9IFNldC5PcmRlcmVkVHlwZVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIGluY2x1ZGUgU2V0LlNcblxuICB2YWwgbWluX2VsdF9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IW1pbl9lbHR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBtYXhfZWx0X29wdCA6IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshbWF4X2VsdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGNob29zZV9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWNob29zZX0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfb3B0IDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3QgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICgqKiBGaW5kIG1pbmltdW0gZWxlbWVudCBzYXRpc2Z5aW5nIHByZWRpY2F0ZS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9maXJzdF9vcHQgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAoKiogU2FmZSB2ZXJzaW9uIG9mIHshZmluZF9maXJzdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3RfbWFwIDogKGVsdCAtPiAnYSBvcHRpb24pIC0+IHQgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZmluZF9maXJzdF9tYXAgZiBzXSBmaW5kIHRoZSBtaW5pbXVtIGVsZW1lbnQgW3hdIG9mIFtzXSBzdWNoIHRoYXQgW2YgeCA9IFNvbWUgeV1cbiAgICAgIGFuZCByZXR1cm4gW1NvbWUgeV0uIE90aGVyd2lzZSByZXR1cm5zIFtOb25lXS5cbiAgICAgIEBzaW5jZSAzLjEyICopXG5cbiAgdmFsIGZpbmRfbGFzdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgKCoqIEZpbmQgbWF4aW11bSBlbGVtZW50IHNhdGlzZnlpbmcgcHJlZGljYXRlLlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2xhc3Rfb3B0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmRfbGFzdH0uXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfbGFzdF9tYXAgOiAoZWx0IC0+ICdhIG9wdGlvbikgLT4gdCAtPiAnYSBvcHRpb25cbiAgKCoqIFtmaW5kX2xhc3RfbWFwIGYgc10gZmluZCB0aGUgbWF4aW11bSBlbGVtZW50IFt4XSBvZiBbc10gc3VjaCB0aGF0IFtmIHggPSBTb21lIHldXG4gICAgICBhbmQgcmV0dXJuIFtTb21lIHldLiBPdGhlcndpc2UgcmV0dXJucyBbTm9uZV0uXG4gICAgICBAc2luY2UgMy4xMiAqKVxuXG4gIHZhbCBvZl9pdGVyIDogZWx0IGl0ZXIgLT4gdFxuICAoKiogQnVpbGQgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gW2l0ZXJdIG9mIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9zZXEgOiBlbHQgU2VxLnQgLT4gdFxuICAoKiogQnVpbGQgYSBzZXQgZnJvbSB0aGUgZ2l2ZW4gW3NlcV0gb2YgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIGFkZF9pdGVyIDogdCAtPiBlbHQgaXRlciAtPiB0XG4gICgqKiBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9zZXEgOiBlbHQgU2VxLnQgLT4gdCAtPiB0XG4gICgqKiBAc2luY2UgMy4wICopXG5cbiAgdmFsIHRvX2l0ZXIgOiB0IC0+IGVsdCBpdGVyXG4gICgqKiBbdG9faXRlciB0XSBjb252ZXJ0cyB0aGUgc2V0IFt0XSB0byBhIFtpdGVyXSBvZiB0aGUgZWxlbWVudHMuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIGFkZF9saXN0IDogdCAtPiBlbHQgbGlzdCAtPiB0XG4gICgqKiBAc2luY2UgMC4xNCAqKVxuXG4gIHZhbCB0b19saXN0IDogdCAtPiBlbHQgbGlzdFxuICAoKiogW3RvX2xpc3QgdF0gY29udmVydHMgdGhlIHNldCBbdF0gdG8gYSBsaXN0IG9mIHRoZSBlbGVtZW50cy4gKilcblxuICB2YWwgdG9fc3RyaW5nIDpcbiAgICA/c3RhcnQ6c3RyaW5nIC0+XG4gICAgP3N0b3A6c3RyaW5nIC0+XG4gICAgP3NlcDpzdHJpbmcgLT5cbiAgICAoZWx0IC0+IHN0cmluZykgLT5cbiAgICB0IC0+XG4gICAgc3RyaW5nXG4gICgqKiAgUHJpbnQgdGhlIHNldCBpbiBhIHN0cmluZ1xuICAgICAgIEBzaW5jZSAyLjcgKilcblxuICB2YWwgcHAgOlxuICAgID9wcF9zdGFydDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc3RvcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc2VwOnVuaXQgcHJpbnRlciAtPlxuICAgIGVsdCBwcmludGVyIC0+XG4gICAgdCBwcmludGVyXG4gICgqKiBQcmludCB0aGUgc2V0LiAqKVxuZW5kXG5cbm1vZHVsZSBNYWtlIChPIDogTWFwLk9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICBtb2R1bGUgUyA9IFNldC5NYWtlIChPKVxuXG4gICgqIGJhY2twb3J0IGZ1bmN0aW9ucyBmcm9tIHJlY2VudCBzdGRsaWIuXG4gICAgIHRoZXkgd2lsbCBiZSBzaGFkb3dlZCBieSBpbmNsdXNpb24gb2YgW1NdIGlmIHByZXNlbnQuICopXG5cbiAgW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxuICBsZXQgZmluZF9vcHQgeCBzID0gdHJ5IFNvbWUgKFMuZmluZCB4IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGNob29zZV9vcHQgcyA9IHRyeSBTb21lIChTLmNob29zZSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBtaW5fZWx0X29wdCBzID0gdHJ5IFNvbWUgKFMubWluX2VsdCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBtYXhfZWx0X29wdCBzID0gdHJ5IFNvbWUgKFMubWF4X2VsdCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgZXhjZXB0aW9uIEZpbmRfYmluZGluZ19leGl0XG5cbiAgbGV0IGZpbmRfZmlyc3Rfb3B0IGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgdHJ5XG4gICAgICBTLml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgaWYgZiB4IHRoZW4gKFxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeDtcbiAgICAgICAgICAgIHJhaXNlIEZpbmRfYmluZGluZ19leGl0XG4gICAgICAgICAgKSlcbiAgICAgICAgbTtcbiAgICAgIE5vbmVcbiAgICB3aXRoIEZpbmRfYmluZGluZ19leGl0IC0+ICFyZXNcblxuICBsZXQgZmluZF9maXJzdCBmIG0gPVxuICAgIG1hdGNoIGZpbmRfZmlyc3Rfb3B0IGYgbSB3aXRoXG4gICAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgU29tZSB4IC0+IHhcblxuICBsZXQgZmluZF9maXJzdF9tYXAgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICB0cnlcbiAgICAgIFMuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSB5IC0+XG4gICAgICAgICAgICByZXMgOj0gU29tZSB5O1xuICAgICAgICAgICAgcmFpc2UgRmluZF9iaW5kaW5nX2V4aXQpXG4gICAgICAgIG07XG4gICAgICBOb25lXG4gICAgd2l0aCBGaW5kX2JpbmRpbmdfZXhpdCAtPiAhcmVzXG5cbiAgKCogbGluZWFyIHRpbWUsIG11c3QgdHJhdmVyc2UgdGhlIHdob2xlIHNldOKApiAqKVxuICBsZXQgZmluZF9sYXN0X29wdCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIFMuaXRlciAoZnVuIHggLT4gaWYgZiB4IHRoZW4gcmVzIDo9IFNvbWUgeCkgbTtcbiAgICAhcmVzXG5cbiAgbGV0IGZpbmRfbGFzdCBmIG0gPVxuICAgIG1hdGNoIGZpbmRfbGFzdF9vcHQgZiBtIHdpdGhcbiAgICB8IE5vbmUgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgfCBTb21lIHggLT4geFxuXG4gIFtAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbiAgaW5jbHVkZSBTXG5cbiAgKCogVXNlIGZpbmRfbGFzdCB3aGljaCBpcyBsaW5lYXIgdGltZSBvbiBPQ2FtbCA8IDQuMDUgKilcbiAgbGV0IGZpbmRfbGFzdF9tYXAgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICBsZXQgXyA9XG4gICAgICBmaW5kX2xhc3Rfb3B0XG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IGZhbHNlXG4gICAgICAgICAgfCBTb21lIHkgLT5cbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHk7XG4gICAgICAgICAgICB0cnVlKVxuICAgICAgICBtXG4gICAgaW5cbiAgICAhcmVzXG5cbiAgbGV0IGFkZF9zZXEgc2VxIHNldCA9XG4gICAgbGV0IHNldCA9IHJlZiBzZXQgaW5cbiAgICBTZXEuaXRlciAoZnVuIHggLT4gc2V0IDo9IGFkZCB4ICFzZXQpIHNlcTtcbiAgICAhc2V0XG5cbiAgbGV0IG9mX3NlcSBzID0gYWRkX3NlcSBzIGVtcHR5XG5cbiAgbGV0IGFkZF9pdGVyIHNldCBpID1cbiAgICBsZXQgc2V0ID0gcmVmIHNldCBpblxuICAgIGkgKGZ1biB4IC0+IHNldCA6PSBhZGQgeCAhc2V0KTtcbiAgICAhc2V0XG5cbiAgbGV0IG9mX2l0ZXIgcyA9IGFkZF9pdGVyIGVtcHR5IHNcbiAgbGV0IHRvX2l0ZXIgcyB5aWVsZCA9IGl0ZXIgeWllbGQgc1xuICBsZXQgYWRkX2xpc3QgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIHNldCB4IC0+IGFkZCB4IHNldClcbiAgbGV0IHRvX2xpc3QgPSBlbGVtZW50c1xuXG4gIGxldCB0b19zdHJpbmcgPyhzdGFydCA9IFwiXCIpID8oc3RvcCA9IFwiXCIpID8oc2VwID0gXCIsXCIpIGVsdF90b19zdHJpbmcgaCA9XG4gICAgdG9fbGlzdCBoIHw+IENDTGlzdC50b19zdHJpbmcgfnN0YXJ0IH5zdG9wIH5zZXAgZWx0X3RvX3N0cmluZ1xuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKSBwcF94IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBpdGVyXG4gICAgICAoZnVuIHggLT5cbiAgICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgICAgcHBfeCBmbXQgeClcbiAgICAgIG07XG4gICAgcHBfc3RvcCBmbXQgKClcbmVuZFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEJhc2ljIFN0cmluZyBVdGlsc30gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cblxuKCogc3RhbmRhcmQgaW1wbGVtZW50YXRpb25zICopXG5cbmluY2x1ZGUgU3RyaW5nXG5cbmxldCBjb21wYXJlX2ludCAoYSA6IGludCkgYiA9IFN0ZGxpYi5jb21wYXJlIGEgYlxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGhhc2ggcyA9IEhhc2h0YmwuaGFzaCBzXG5sZXQgbGVuZ3RoID0gU3RyaW5nLmxlbmd0aFxubGV0IGlzX2VtcHR5IHMgPSBlcXVhbCBzIFwiXCJcblxubGV0IHJldiBzID1cbiAgbGV0IG4gPSBsZW5ndGggcyBpblxuICBpbml0IG4gKGZ1biBpIC0+IHMuW24gLSBpIC0gMV0pXG5cbmxldCByZWMgX3RvX2xpc3QgcyBhY2MgaSBsZW4gPVxuICBpZiBsZW4gPSAwIHRoZW5cbiAgICBMaXN0LnJldiBhY2NcbiAgZWxzZVxuICAgIF90b19saXN0IHMgKHMuW2ldIDo6IGFjYykgKGkgKyAxKSAobGVuIC0gMSlcblxubGV0IF9pc19zdWIgfnN1YiBpIHMgaiB+bGVuID1cbiAgbGV0IHJlYyBjaGVjayBrID1cbiAgICBpZiBrID0gbGVuIHRoZW5cbiAgICAgIHRydWVcbiAgICBlbHNlXG4gICAgICBDQ0NoYXIuZXF1YWwgc3ViLltpICsga10gcy5baiArIGtdICYmIGNoZWNrIChrICsgMSlcbiAgaW5cbiAgaiArIGxlbiA8PSBTdHJpbmcubGVuZ3RoIHMgJiYgY2hlY2sgMFxuXG5sZXQgaXNfc3ViIH5zdWIgaSBzIGogfmxlbiA9XG4gIGlmIGkgKyBsZW4gPiBTdHJpbmcubGVuZ3RoIHN1YiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuaXNfc3ViXCI7XG4gIF9pc19zdWIgfnN1YiBpIHMgaiB+bGVuXG5cbnR5cGUgXyBkaXJlY3Rpb24gPVxuICB8IERpcmVjdCA6IFsgYERpcmVjdCBdIGRpcmVjdGlvblxuICB8IFJldmVyc2UgOiBbIGBSZXZlcnNlIF0gZGlyZWN0aW9uXG5cbigqIHdlIGZvbGxvdyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9LbnV0aOKAk01vcnJpc+KAk1ByYXR0X2FsZ29yaXRobSAqKVxubW9kdWxlIEZpbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSBrbXBfcGF0dGVybiA9IHsgZmFpbHVyZTogaW50IGFycmF5OyBzdHI6IHN0cmluZyB9XG4gICgqIGludmFyaWFudDogW2xlbmd0aCBmYWlsdXJlID0gbGVuZ3RoIHN0cl0uXG4gICAgIFdlIHVzZSBhIHBoYW50b20gdHlwZSB0byBhdm9pZCBtaXhpbmcgdGhlIGRpcmVjdGlvbnMuICopXG5cbiAgbGV0IGttcF9wYXR0ZXJuX2xlbmd0aCBwID0gU3RyaW5nLmxlbmd0aCBwLnN0clxuXG4gICgqIGFjY2VzcyB0aGUgW2ldLXRoIGVsZW1lbnQgb2YgW3NdIGFjY29yZGluZyB0byBkaXJlY3Rpb24gW2Rpcl0gKilcbiAgbGV0IGdldF8gOiB0eXBlIGEuIGRpcjphIGRpcmVjdGlvbiAtPiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPVxuICAgZnVuIH5kaXIgLT5cbiAgICBtYXRjaCBkaXIgd2l0aFxuICAgIHwgRGlyZWN0IC0+IFN0cmluZy5nZXRcbiAgICB8IFJldmVyc2UgLT4gZnVuIHMgaSAtPiBzLltTdHJpbmcubGVuZ3RoIHMgLSBpIC0gMV1cblxuICBsZXQga21wX2NvbXBpbGVfIDogdHlwZSBhLiBkaXI6YSBkaXJlY3Rpb24gLT4gc3RyaW5nIC0+IGEga21wX3BhdHRlcm4gPVxuICAgZnVuIH5kaXIgc3RyIC0+XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzdHIgaW5cbiAgICBsZXQgZ2V0ID0gZ2V0XyB+ZGlyIGluXG4gICAgKCogaG93IHRvIHJlYWQgZWxlbWVudHMgb2YgdGhlIHN0cmluZyAqKVxuICAgIG1hdGNoIGxlbiB3aXRoXG4gICAgfCAwIC0+IHsgZmFpbHVyZSA9IFt8fF07IHN0ciB9XG4gICAgfCAxIC0+IHsgZmFpbHVyZSA9IFt8IC0xIHxdOyBzdHIgfVxuICAgIHwgXyAtPlxuICAgICAgKCogYXQgbGVhc3QgMiBlbGVtZW50cywgdGhlIGFsZ29yaXRobSBjYW4gd29yayAqKVxuICAgICAgbGV0IGZhaWx1cmUgPSBBcnJheS5tYWtlIGxlbiAwIGluXG4gICAgICBmYWlsdXJlLigwKSA8LSAtMTtcbiAgICAgICgqIGk6IGN1cnJlbnQgaW5kZXggaW4gc3RyICopXG4gICAgICBsZXQgaSA9IHJlZiAyIGluXG4gICAgICAoKiBqOiBpbmRleCBvZiBjYW5kaWRhdGUgc3Vic3RyaW5nICopXG4gICAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgICB3aGlsZSAhaSA8IGxlbiBkb1xuICAgICAgICBtYXRjaCAhaiB3aXRoXG4gICAgICAgIHwgXyB3aGVuIENDQ2hhci5lcXVhbCAoZ2V0IHN0ciAoIWkgLSAxKSkgKGdldCBzdHIgIWopIC0+XG4gICAgICAgICAgKCogc3Vic3RyaW5nIHN0YXJ0aW5nIGF0ICFqIGNvbnRpbnVlcyBtYXRjaGluZyBjdXJyZW50IGNoYXIgKilcbiAgICAgICAgICBpbmNyIGo7XG4gICAgICAgICAgZmFpbHVyZS4oIWkpIDwtICFqO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICB8IDAgLT5cbiAgICAgICAgICAoKiBiYWNrIHRvIHRoZSBiZWdpbm5pbmcgKilcbiAgICAgICAgICBmYWlsdXJlLighaSkgPC0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgKCogZmFsbGJhY2sgZm9yIHRoZSBwcmVmaXggc3RyaW5nICopXG4gICAgICAgICAgYXNzZXJ0ICghaiA+IDApO1xuICAgICAgICAgIGogOj0gZmFpbHVyZS4oIWopXG4gICAgICBkb25lO1xuICAgICAgKCogRm9ybWF0LnByaW50ZiBcIntAW2ZhaWx1cmU6JWEsIHN0cjolc0BdfUAuXCIgQ0NGb3JtYXQuKGFycmF5IGludCkgZmFpbHVyZSBzdHI7ICopXG4gICAgICB7IGZhaWx1cmU7IHN0ciB9XG5cbiAgbGV0IGttcF9jb21waWxlIHMgPSBrbXBfY29tcGlsZV8gfmRpcjpEaXJlY3Qgc1xuICBsZXQga21wX3Jjb21waWxlIHMgPSBrbXBfY29tcGlsZV8gfmRpcjpSZXZlcnNlIHNcblxuICAoKiBwcm9wZXIgc2VhcmNoIGZ1bmN0aW9uLlxuICAgICBbaV0gaW5kZXggaW4gW3NdXG4gICAgIFtqXSBpbmRleCBpbiBbcGF0dGVybl1cbiAgICAgW2xlbl0gbGVuZ3RoIG9mIFtzXSAqKVxuICBsZXQga21wX2ZpbmQgfnBhdHRlcm4gcyBpZHggPVxuICAgIGxldCBsZW4gPSBsZW5ndGggcyBpblxuICAgIGxldCBpID0gcmVmIGlkeCBpblxuICAgIGxldCBqID0gcmVmIDAgaW5cbiAgICBsZXQgcGF0X2xlbiA9IGttcF9wYXR0ZXJuX2xlbmd0aCBwYXR0ZXJuIGluXG4gICAgd2hpbGUgIWogPCBwYXRfbGVuICYmICFpICsgIWogPCBsZW4gZG9cbiAgICAgIGxldCBjID0gU3RyaW5nLmdldCBzICghaSArICFqKSBpblxuICAgICAgbGV0IGV4cGVjdGVkID0gU3RyaW5nLmdldCBwYXR0ZXJuLnN0ciAhaiBpblxuICAgICAgaWYgQ0NDaGFyLmVxdWFsIGMgZXhwZWN0ZWQgdGhlblxuICAgICAgICAoKiBjaGFyIG1hdGNoZXMgKilcbiAgICAgICAgaW5jciBqXG4gICAgICBlbHNlIChcbiAgICAgICAgbGV0IGZhaWxfb2Zmc2V0ID0gcGF0dGVybi5mYWlsdXJlLighaikgaW5cbiAgICAgICAgaWYgZmFpbF9vZmZzZXQgPj0gMCB0aGVuIChcbiAgICAgICAgICBhc3NlcnQgKGZhaWxfb2Zmc2V0IDwgIWopO1xuICAgICAgICAgICgqIGZvbGxvdyB0aGUgZmFpbHVyZSBsaW5rICopXG4gICAgICAgICAgaSA6PSAhaSArICFqIC0gZmFpbF9vZmZzZXQ7XG4gICAgICAgICAgaiA6PSBmYWlsX29mZnNldFxuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIGJlZ2lubmluZyBvZiBwYXR0ZXJuICopXG4gICAgICAgICAgaiA6PSAwO1xuICAgICAgICAgIGluY3IgaVxuICAgICAgICApXG4gICAgICApXG4gICAgZG9uZTtcbiAgICBpZiAhaiA9IHBhdF9sZW4gdGhlblxuICAgICAgIWlcbiAgICBlbHNlXG4gICAgICAtMVxuXG4gICgqIHByb3BlciBzZWFyY2ggZnVuY3Rpb24sIGZyb20gdGhlIHJpZ2h0LlxuICAgICBbaV0gaW5kZXggaW4gW3NdXG4gICAgIFtqXSBpbmRleCBpbiBbcGF0dGVybl1cbiAgICAgW2xlbl0gbGVuZ3RoIG9mIFtzXSAqKVxuICBsZXQga21wX3JmaW5kIH5wYXR0ZXJuIHMgaWR4ID1cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgICBsZXQgaSA9IHJlZiAobGVuIC0gaWR4IC0gMSkgaW5cbiAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgbGV0IHBhdF9sZW4gPSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVybiBpblxuICAgIHdoaWxlICFqIDwgcGF0X2xlbiAmJiAhaSArICFqIDwgbGVuIGRvXG4gICAgICBsZXQgYyA9IFN0cmluZy5nZXQgcyAobGVuIC0gIWkgLSAhaiAtIDEpIGluXG4gICAgICBsZXQgZXhwZWN0ZWQgPVxuICAgICAgICBTdHJpbmcuZ2V0IHBhdHRlcm4uc3RyIChTdHJpbmcubGVuZ3RoIHBhdHRlcm4uc3RyIC0gIWogLSAxKVxuICAgICAgaW5cbiAgICAgIGlmIENDQ2hhci5lcXVhbCBjIGV4cGVjdGVkIHRoZW5cbiAgICAgICAgKCogY2hhciBtYXRjaGVzICopXG4gICAgICAgIGluY3IgalxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBmYWlsX29mZnNldCA9IHBhdHRlcm4uZmFpbHVyZS4oIWopIGluXG4gICAgICAgIGlmIGZhaWxfb2Zmc2V0ID49IDAgdGhlbiAoXG4gICAgICAgICAgYXNzZXJ0IChmYWlsX29mZnNldCA8ICFqKTtcbiAgICAgICAgICAoKiBmb2xsb3cgdGhlIGZhaWx1cmUgbGluayAqKVxuICAgICAgICAgIGkgOj0gIWkgKyAhaiAtIGZhaWxfb2Zmc2V0O1xuICAgICAgICAgIGogOj0gZmFpbF9vZmZzZXRcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgcGF0dGVybiAqKVxuICAgICAgICAgIGogOj0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgKCogYWRqdXN0IHJlc3VsdDogZmlyc3QsIFtyZXMgPSBzdHJpbmcubGVuZ3RoIHMgLSByZXMgLTFdIHRvIGNvbnZlcnRcbiAgICAgICBiYWNrIHRvIHJlYWwgaW5kaWNlczsgdGhlbiwgd2hhdCB3ZSBnb3QgaXMgYWN0dWFsbHkgdGhlIHBvc2l0aW9uXG4gICAgICAgb2YgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgc28gd2Ugc3VidHJhY3QgdGhlIFtsZW5ndGggb2YgdGhlIHBhdHRlcm4gLTFdXG4gICAgICAgdG8gb2J0YWluIHRoZSByZWFsIHJlc3VsdC4gKilcbiAgICBpZiAhaiA9IHBhdF9sZW4gdGhlblxuICAgICAgbGVuIC0gIWkgLSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVyblxuICAgIGVsc2VcbiAgICAgIC0xXG5cbiAgdHlwZSAnYSBwYXR0ZXJuID0gUF9jaGFyIG9mIGNoYXIgfCBQX0tNUCBvZiAnYSBrbXBfcGF0dGVyblxuXG4gIGxldCBwYXR0ZXJuX2xlbmd0aCA9IGZ1bmN0aW9uXG4gICAgfCBQX2NoYXIgXyAtPiAxXG4gICAgfCBQX0tNUCBwIC0+IGttcF9wYXR0ZXJuX2xlbmd0aCBwXG5cbiAgbGV0IGNvbXBpbGUgc3ViIDogWyBgRGlyZWN0IF0gcGF0dGVybiA9XG4gICAgaWYgbGVuZ3RoIHN1YiA9IDEgdGhlblxuICAgICAgUF9jaGFyIHN1Yi5bMF1cbiAgICBlbHNlXG4gICAgICBQX0tNUCAoa21wX2NvbXBpbGUgc3ViKVxuXG4gIGxldCByY29tcGlsZSBzdWIgOiBbIGBSZXZlcnNlIF0gcGF0dGVybiA9XG4gICAgaWYgbGVuZ3RoIHN1YiA9IDEgdGhlblxuICAgICAgUF9jaGFyIHN1Yi5bMF1cbiAgICBlbHNlXG4gICAgICBQX0tNUCAoa21wX3Jjb21waWxlIHN1YilcblxuICBsZXQgZmluZCA/KHN0YXJ0ID0gMCkgfihwYXR0ZXJuIDogWyBgRGlyZWN0IF0gcGF0dGVybikgcyA9XG4gICAgbWF0Y2ggcGF0dGVybiB3aXRoXG4gICAgfCBQX2NoYXIgYyAtPiAodHJ5IFN0cmluZy5pbmRleF9mcm9tIHMgc3RhcnQgYyB3aXRoIE5vdF9mb3VuZCAtPiAtMSlcbiAgICB8IFBfS01QIHBhdHRlcm4gLT4ga21wX2ZpbmQgfnBhdHRlcm4gcyBzdGFydFxuXG4gIGxldCByZmluZCA/c3RhcnQgfihwYXR0ZXJuIDogWyBgUmV2ZXJzZSBdIHBhdHRlcm4pIHMgPVxuICAgIGxldCBzdGFydCA9XG4gICAgICBtYXRjaCBzdGFydCB3aXRoXG4gICAgICB8IFNvbWUgbiAtPiBuXG4gICAgICB8IE5vbmUgLT4gU3RyaW5nLmxlbmd0aCBzIC0gMVxuICAgIGluXG4gICAgbWF0Y2ggcGF0dGVybiB3aXRoXG4gICAgfCBQX2NoYXIgYyAtPiAodHJ5IFN0cmluZy5yaW5kZXhfZnJvbSBzIHN0YXJ0IGMgd2l0aCBOb3RfZm91bmQgLT4gLTEpXG4gICAgfCBQX0tNUCBwYXR0ZXJuIC0+IGttcF9yZmluZCB+cGF0dGVybiBzIHN0YXJ0XG5lbmRcblxubGV0IGZpbmQgPyhzdGFydCA9IDApIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT4gRmluZC5maW5kIH5zdGFydCB+cGF0dGVybiBzXG5cbmxldCBmaW5kX2FsbCA/KHN0YXJ0ID0gMCkgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICBmdW4gcyAtPlxuICAgIGxldCBpID0gcmVmIHN0YXJ0IGluXG4gICAgZnVuICgpIC0+XG4gICAgICBsZXQgcmVzID0gRmluZC5maW5kIH5zdGFydDohaSB+cGF0dGVybiBzIGluXG4gICAgICBpZiByZXMgPSB+LTEgdGhlblxuICAgICAgICBOb25lXG4gICAgICBlbHNlIChcbiAgICAgICAgaSA6PSByZXMgKyAxO1xuICAgICAgICAoKiBwb3NzaWJsZSBvdmVybGFwICopXG4gICAgICAgIFNvbWUgcmVzXG4gICAgICApXG5cbmxldCBmaW5kX2FsbF9sID9zdGFydCB+c3ViIHMgPVxuICBsZXQgcmVjIGF1eCBhY2MgZyA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgIHwgU29tZSBpIC0+IGF1eCAoaSA6OiBhY2MpIGdcbiAgaW5cbiAgYXV4IFtdIChmaW5kX2FsbCA/c3RhcnQgfnN1YiBzKVxuXG5sZXQgbWVtID9zdGFydCB+c3ViIHMgPSBmaW5kID9zdGFydCB+c3ViIHMgPj0gMFxuXG5sZXQgcmZpbmQgfnN1YiA9XG4gIGxldCBwYXR0ZXJuID0gRmluZC5yY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT4gRmluZC5yZmluZCB+c3RhcnQ6KFN0cmluZy5sZW5ndGggcyAtIDEpIH5wYXR0ZXJuIHNcblxuKCogUmVwbGFjZSBzdWJzdHJpbmcgW3MuW3Bvc10g4oCmIHMuW3BvcytsZW4tMV1dIGJ5IFtieV0gaW4gW3NdICopXG5sZXQgcmVwbGFjZV9hdF8gfnBvcyB+bGVuIH5ieSBzID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsZW5ndGggcyArIGxlbmd0aCBieSAtIGxlbikgaW5cbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzIDAgcG9zO1xuICBCdWZmZXIuYWRkX3N0cmluZyBiIGJ5O1xuICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgKHBvcyArIGxlbikgKFN0cmluZy5sZW5ndGggcyAtIHBvcyAtIGxlbik7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByZXBsYWNlID8od2hpY2ggPSBgQWxsKSB+c3ViIH5ieSBzID1cbiAgaWYgaXNfZW1wdHkgc3ViIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5yZXBsYWNlXCI7XG4gIG1hdGNoIHdoaWNoIHdpdGhcbiAgfCBgTGVmdCAtPlxuICAgIGxldCBpID0gZmluZCB+c3RhcnQ6MCB+c3ViIHMgaW5cbiAgICBpZiBpID49IDAgdGhlblxuICAgICAgcmVwbGFjZV9hdF8gfnBvczppIH5sZW46KFN0cmluZy5sZW5ndGggc3ViKSB+Ynkgc1xuICAgIGVsc2VcbiAgICAgIHNcbiAgfCBgUmlnaHQgLT5cbiAgICBsZXQgaSA9IHJmaW5kIH5zdWIgcyBpblxuICAgIGlmIGkgPj0gMCB0aGVuXG4gICAgICByZXBsYWNlX2F0XyB+cG9zOmkgfmxlbjooU3RyaW5nLmxlbmd0aCBzdWIpIH5ieSBzXG4gICAgZWxzZVxuICAgICAgc1xuICB8IGBBbGwgLT5cbiAgICAoKiBjb21waWxlIHNlYXJjaCBwYXR0ZXJuIG9ubHkgb25jZSAqKVxuICAgIGxldCBwYXR0ZXJuID0gRmluZC5jb21waWxlIHN1YiBpblxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgIGxldCBzdGFydCA9IHJlZiAwIGluXG4gICAgd2hpbGUgIXN0YXJ0IDwgU3RyaW5nLmxlbmd0aCBzIGRvXG4gICAgICBsZXQgaSA9IEZpbmQuZmluZCB+c3RhcnQ6IXN0YXJ0IH5wYXR0ZXJuIHMgaW5cbiAgICAgIGlmIGkgPj0gMCB0aGVuIChcbiAgICAgICAgKCogYmV0d2VlbiBsYXN0IGFuZCBjdXIgb2NjdXJyZW5jZXMgKilcbiAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzICFzdGFydCAoaSAtICFzdGFydCk7XG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgYnk7XG4gICAgICAgIHN0YXJ0IDo9IGkgKyBTdHJpbmcubGVuZ3RoIHN1YlxuICAgICAgKSBlbHNlIChcbiAgICAgICAgKCogYWRkIHJlbWFpbmRlciAqKVxuICAgICAgICBCdWZmZXIuYWRkX3N1YnN0cmluZyBiIHMgIXN0YXJ0IChTdHJpbmcubGVuZ3RoIHMgLSAhc3RhcnQpO1xuICAgICAgICBzdGFydCA6PSBTdHJpbmcubGVuZ3RoIHMgKCogc3RvcCAqKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxubW9kdWxlIFNwbGl0ID0gc3RydWN0XG4gIHR5cGUgZHJvcF9pZl9lbXB0eSA9IHsgZmlyc3Q6IGJvb2w7IGxhc3Q6IGJvb2wgfVxuXG4gIGxldCBub19kcm9wID0geyBmaXJzdCA9IGZhbHNlOyBsYXN0ID0gZmFsc2UgfVxuICBsZXQgZGVmYXVsdF9kcm9wID0gbm9fZHJvcFxuXG4gIHR5cGUgc3BsaXRfc3RhdGUgPSBTcGxpdFN0b3AgfCBTcGxpdEF0IG9mIGludCAoKiBwcmV2aW91cyAqKVxuXG4gIGxldCByZWMgX3NwbGl0IH5ieSBzIHN0YXRlID1cbiAgICBtYXRjaCBzdGF0ZSB3aXRoXG4gICAgfCBTcGxpdFN0b3AgLT4gTm9uZVxuICAgIHwgU3BsaXRBdCBwcmV2IC0+IF9zcGxpdF9zZWFyY2ggfmJ5IHMgcHJldlxuXG4gIGFuZCBfc3BsaXRfc2VhcmNoIH5ieSBzIHByZXYgPVxuICAgIGxldCBqID0gRmluZC5maW5kIH5zdGFydDpwcmV2IH5wYXR0ZXJuOmJ5IHMgaW5cbiAgICBpZiBqIDwgMCB0aGVuXG4gICAgICBTb21lIChTcGxpdFN0b3AsIHByZXYsIFN0cmluZy5sZW5ndGggcyAtIHByZXYpXG4gICAgZWxzZVxuICAgICAgU29tZSAoU3BsaXRBdCAoaiArIEZpbmQucGF0dGVybl9sZW5ndGggYnkpLCBwcmV2LCBqIC0gcHJldilcblxuICBsZXQgX3R1cGxlMyB4IHkgeiA9IHgsIHksIHpcblxuICBsZXQgX21rZ2VuIH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBzdGF0ZSA9IHJlZiAoU3BsaXRBdCAwKSBpblxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgbmV4dCAoKSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgIXN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+XG4gICAgICAgIHN0YXRlIDo9IHN0YXRlJztcbiAgICAgICAgbmV4dCAoKVxuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gTm9uZVxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT5cbiAgICAgICAgc3RhdGUgOj0gc3RhdGUnO1xuICAgICAgICBTb21lIChrIHMgaSBsZW4pXG4gICAgaW5cbiAgICBuZXh0XG5cbiAgbGV0IGdlbiA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rZ2VuIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGdlbl9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2dlbiB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IF9ta2xpc3QgfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBidWlsZCBhY2Mgc3RhdGUgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzIHN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICAgIHwgU29tZSAoc3RhdGUnLCAwLCAwKSB3aGVuIGRyb3AuZmlyc3QgLT4gYnVpbGQgYWNjIHN0YXRlJ1xuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gTGlzdC5yZXYgYWNjXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPiBidWlsZCAoayBzIGkgbGVuIDo6IGFjYykgc3RhdGUnXG4gICAgaW5cbiAgICBidWlsZCBbXSAoU3BsaXRBdCAwKVxuXG4gIGxldCBsaXN0XyA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rbGlzdCB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBsaXN0X2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rbGlzdCB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IF9ta3NlcSB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIG1ha2Ugc3RhdGUgKCkgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzIHN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBTZXEuTmlsXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+IG1ha2Ugc3RhdGUnICgpXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiBTZXEuTmlsXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPiBTZXEuQ29ucyAoayBzIGkgbGVuLCBtYWtlIHN0YXRlJylcbiAgICBpblxuICAgIG1ha2UgKFNwbGl0QXQgMClcblxuICBsZXQgc2VxID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtzZXEgfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgc2VxX2NweSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rc2VxIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgX21rX2l0ZXIgfmRyb3AgfmJ5IHMgZiBrID1cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIGF1eCBzdGF0ZSA9XG4gICAgICBtYXRjaCBfc3BsaXQgfmJ5IHMgc3RhdGUgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+IGF1eCBzdGF0ZSdcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+ICgpXG4gICAgICB8IFNvbWUgKHN0YXRlJywgaSwgbGVuKSAtPlxuICAgICAgICBrIChmIHMgaSBsZW4pO1xuICAgICAgICBhdXggc3RhdGUnXG4gICAgaW5cbiAgICBhdXggKFNwbGl0QXQgMClcblxuICBsZXQgaXRlciA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rX2l0ZXIgfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgaXRlcl9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta19pdGVyIH5kcm9wIH5ieSBzIFN0cmluZy5zdWJcblxuICBsZXQgbGVmdF9leG4gfmJ5IHMgPVxuICAgIGxldCBpID0gZmluZCB+c3ViOmJ5IHMgaW5cbiAgICBpZiBpID0gfi0xIHRoZW5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIGVsc2UgKFxuICAgICAgbGV0IHJpZ2h0ID0gaSArIFN0cmluZy5sZW5ndGggYnkgaW5cbiAgICAgIFN0cmluZy5zdWIgcyAwIGksIFN0cmluZy5zdWIgcyByaWdodCAoU3RyaW5nLmxlbmd0aCBzIC0gcmlnaHQpXG4gICAgKVxuXG4gIGxldCBsZWZ0IH5ieSBzID0gdHJ5IFNvbWUgKGxlZnRfZXhuIH5ieSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbiAgbGV0IHJpZ2h0X2V4biB+YnkgcyA9XG4gICAgbGV0IGkgPSByZmluZCB+c3ViOmJ5IHMgaW5cbiAgICBpZiBpID0gfi0xIHRoZW5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIGVsc2UgKFxuICAgICAgbGV0IHJpZ2h0ID0gaSArIFN0cmluZy5sZW5ndGggYnkgaW5cbiAgICAgIFN0cmluZy5zdWIgcyAwIGksIFN0cmluZy5zdWIgcyByaWdodCAoU3RyaW5nLmxlbmd0aCBzIC0gcmlnaHQpXG4gICAgKVxuXG4gIGxldCByaWdodCB+YnkgcyA9IHRyeSBTb21lIChyaWdodF9leG4gfmJ5IHMpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbmVuZFxuXG5sZXQgc3BsaXQgfmJ5IHMgPSBTcGxpdC5saXN0X2NweSB+Ynkgc1xuXG5sZXQgY29tcGFyZV92ZXJzaW9ucyBhIGIgPVxuICBsZXQgb2ZfaW50IHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lIGluXG4gIGxldCByZWMgY21wX3JlYyBhIGIgPVxuICAgIG1hdGNoIGEgKCksIGIgKCkgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAwXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgKG1hdGNoIG9mX2ludCB4LCBvZl9pbnQgeSB3aXRoXG4gICAgICB8IE5vbmUsIE5vbmUgLT5cbiAgICAgICAgbGV0IGMgPSBTdHJpbmcuY29tcGFyZSB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYlxuICAgICAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICAgICAgfCBOb25lLCBTb21lIF8gLT4gLTFcbiAgICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgICAgbGV0IGMgPSBjb21wYXJlX2ludCB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYilcbiAgaW5cbiAgY21wX3JlYyAoU3BsaXQuZ2VuX2NweSB+Ynk6XCIuXCIgYSkgKFNwbGl0Lmdlbl9jcHkgfmJ5OlwiLlwiIGIpXG5cbnR5cGUgbmF0X2NodW5rID0gTkNfY2hhciBvZiBjaGFyIHwgTkNfaW50IG9mIGludFxuXG5sZXQgY29tcGFyZV9uYXR1cmFsIGEgYiA9XG4gICgqIHN0cmVhbSBvZiBjaHVua3MgKilcbiAgbGV0IGNodW5rcyBzIDogdW5pdCAtPiBuYXRfY2h1bmsgb3B0aW9uID1cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IHJlYyBuZXh0ICgpID1cbiAgICAgIGlmICFpID0gbGVuZ3RoIHMgdGhlblxuICAgICAgICBOb25lXG4gICAgICBlbHNlIChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmdldCBzICFpIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgcmVhZF9pbnQgKENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJylcbiAgICAgICAgfCBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIFNvbWUgKE5DX2NoYXIgYylcbiAgICAgIClcbiAgICBhbmQgcmVhZF9pbnQgbiA9XG4gICAgICBpZiAhaSA9IGxlbmd0aCBzIHRoZW5cbiAgICAgICAgU29tZSAoTkNfaW50IG4pXG4gICAgICBlbHNlIChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmdldCBzICFpIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgcmVhZF9pbnQgKCgxMCAqIG4pICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnKVxuICAgICAgICB8IF8gLT4gU29tZSAoTkNfaW50IG4pXG4gICAgICApXG4gICAgaW5cbiAgICBuZXh0XG4gIGluXG4gIGxldCByZWMgY21wX3JlYyBhIGIgPVxuICAgIG1hdGNoIGEgKCksIGIgKCkgd2l0aFxuICAgIHwgTm9uZSwgTm9uZSAtPiAwXG4gICAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgfCBTb21lIHgsIFNvbWUgeSAtPlxuICAgICAgKG1hdGNoIHgsIHkgd2l0aFxuICAgICAgfCBOQ19jaGFyIHgsIE5DX2NoYXIgeSAtPlxuICAgICAgICBsZXQgYyA9IENoYXIuY29tcGFyZSB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYlxuICAgICAgfCBOQ19pbnQgXywgTkNfY2hhciBfIC0+IDFcbiAgICAgIHwgTkNfY2hhciBfLCBOQ19pbnQgXyAtPiAtMVxuICAgICAgfCBOQ19pbnQgeCwgTkNfaW50IHkgLT5cbiAgICAgICAgbGV0IGMgPSBjb21wYXJlX2ludCB4IHkgaW5cbiAgICAgICAgaWYgYyA8PiAwIHRoZW5cbiAgICAgICAgICBjXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBjbXBfcmVjIGEgYilcbiAgaW5cbiAgY21wX3JlYyAoY2h1bmtzIGEpIChjaHVua3MgYilcblxubGV0IGVkaXRfZGlzdGFuY2UgPyhjdXRvZmYgPSBtYXhfaW50KSBzMSBzMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBzMSBpblxuICBsZXQgbjIgPSBsZW5ndGggczIgaW5cbiAgaWYgbjEgPSAwIHRoZW5cbiAgICBtaW4gY3V0b2ZmIG4yXG4gIGVsc2UgaWYgbjIgPSAwIHRoZW5cbiAgICBtaW4gY3V0b2ZmIG4xXG4gIGVsc2UgaWYgZXF1YWwgczEgczIgdGhlblxuICAgIDBcbiAgZWxzZSBpZiBuMSAtIG4yID49IGN1dG9mZiB8fCBuMiAtIG4xID49IGN1dG9mZiB0aGVuXG4gICAgY3V0b2ZmXG4gICgqIGF0IGxlYXN0IGN1dG9mZiBpbnNlcnRzICopXG4gIGVsc2UgKFxuICAgIHRyeVxuICAgICAgKCogZGlzdGFuY2UgdmVjdG9ycyAodjA9cHJldmlvdXMsIHYxPWN1cnJlbnQpICopXG4gICAgICBsZXQgdjAgPSBBcnJheS5tYWtlIChsZW5ndGggczIgKyAxKSAwIGluXG4gICAgICBsZXQgdjEgPSBBcnJheS5tYWtlIChsZW5ndGggczIgKyAxKSAwIGluXG4gICAgICAoKiBpbml0aWFsaXplIHYwOiB2MChpKSA9IEEoMCkoaSkgPSBkZWxldGUgaSBjaGFycyBmcm9tIHQgKilcbiAgICAgIGxldCBsb3dlcl9ib3VuZCA9IHJlZiBtYXhfaW50IGluXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMyIGRvXG4gICAgICAgIHYwLihpKSA8LSBpXG4gICAgICBkb25lO1xuICAgICAgKCogbWFpbiBsb29wIGZvciB0aGUgYm90dG9tIHVwIGR5bmFtaWMgYWxnb3JpdGhtICopXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMxIC0gMSBkb1xuICAgICAgICAoKiBmaXJzdCBlZGl0IGRpc3RhbmNlIGlzIHRoZSBkZWxldGlvbiBvZiBpKzEgZWxlbWVudHMgZnJvbSBzICopXG4gICAgICAgIHYxLigwKSA8LSBpICsgMTtcblxuICAgICAgICAoKiB0cnkgYWRkL2RlbGV0ZS9yZXBsYWNlIG9wZXJhdGlvbnMgKilcbiAgICAgICAgZm9yIGogPSAwIHRvIGxlbmd0aCBzMiAtIDEgZG9cbiAgICAgICAgICBsZXQgY29zdCA9XG4gICAgICAgICAgICBpZiBDaGFyLmVxdWFsIChTdHJpbmcuZ2V0IHMxIGkpIChTdHJpbmcuZ2V0IHMyIGopIHRoZW5cbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgaW5cbiAgICAgICAgICB2MS4oaiArIDEpIDwtIG1pbiAodjEuKGopICsgMSkgKG1pbiAodjAuKGogKyAxKSArIDEpICh2MC4oaikgKyBjb3N0KSlcbiAgICAgICAgZG9uZTtcblxuICAgICAgICBpZlxuICAgICAgICAgIGN1dG9mZiA8IEFycmF5Lmxlbmd0aCB2MVxuICAgICAgICAgICYmIGkgPD0gMiAqIGN1dG9mZlxuICAgICAgICAgICYmICgyICogY3V0b2ZmKSAtIGkgPCBTdHJpbmcubGVuZ3RoIHMyXG4gICAgICAgIHRoZW5cbiAgICAgICAgICBsb3dlcl9ib3VuZCA6PSBtaW4gIWxvd2VyX2JvdW5kIHYxLigoMiAqIGN1dG9mZikgLSBpKTtcbiAgICAgICAgKCogZGlkIHdlIGNvbXB1dGUgdXAgdG8gdGhlIGRpYWdvbmFsIDIqY3V0b2ZmKzE/ICopXG4gICAgICAgIGlmIGN1dG9mZiA8IEFycmF5Lmxlbmd0aCB2MSAmJiBpID0gY3V0b2ZmICogMiAmJiAhbG93ZXJfYm91bmQgPj0gY3V0b2ZmXG4gICAgICAgIHRoZW5cbiAgICAgICAgICByYWlzZV9ub3RyYWNlIEV4aXQ7XG5cbiAgICAgICAgKCogY29weSB2MSBpbnRvIHYwIGZvciBuZXh0IGl0ZXJhdGlvbiAqKVxuICAgICAgICBBcnJheS5ibGl0IHYxIDAgdjAgMCAobGVuZ3RoIHMyICsgMSlcbiAgICAgIGRvbmU7XG4gICAgICB2MS4obGVuZ3RoIHMyKVxuICAgIHdpdGggRXhpdCAtPiBjdXRvZmZcbiAgKVxuXG5sZXQgcmVwZWF0IHMgbiA9XG4gIGFzc2VydCAobiA+PSAwKTtcbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBhc3NlcnQgKGxlbiA+IDApO1xuICBpbml0IChsZW4gKiBuKSAoZnVuIGkgLT4gcy5baSBtb2QgbGVuXSlcblxubGV0IHByZWZpeCB+cHJlIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBwcmUgaW5cbiAgaWYgbGVuID4gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBmYWxzZVxuICBlbHNlIChcbiAgICBsZXQgcmVjIGNoZWNrIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICAgIHRydWVcbiAgICAgIGVsc2UgaWYgU3RkbGliLiggPD4gKSAoU3RyaW5nLnVuc2FmZV9nZXQgcyBpKSAoU3RyaW5nLnVuc2FmZV9nZXQgcHJlIGkpXG4gICAgICB0aGVuXG4gICAgICAgIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGNoZWNrIChpICsgMSlcbiAgICBpblxuICAgIGNoZWNrIDBcbiAgKVxuXG5sZXQgc3VmZml4IH5zdWYgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN1ZiBpblxuICBpZiBsZW4gPiBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIGZhbHNlXG4gIGVsc2UgKFxuICAgIGxldCBvZmYgPSBTdHJpbmcubGVuZ3RoIHMgLSBsZW4gaW5cbiAgICBsZXQgcmVjIGNoZWNrIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICAgIHRydWVcbiAgICAgIGVsc2UgaWZcbiAgICAgICAgU3RkbGliLiggPD4gKSAoU3RyaW5nLnVuc2FmZV9nZXQgcyAob2ZmICsgaSkpIChTdHJpbmcudW5zYWZlX2dldCBzdWYgaSlcbiAgICAgIHRoZW5cbiAgICAgICAgZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgY2hlY2sgKGkgKyAxKVxuICAgIGluXG4gICAgY2hlY2sgMFxuICApXG5cbmxldCB0YWtlIG4gcyA9XG4gIGlmIG4gPCBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIFN0cmluZy5zdWIgcyAwIG5cbiAgZWxzZVxuICAgIHNcblxubGV0IGRyb3AgbiBzID1cbiAgaWYgbiA8IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIG4gKFN0cmluZy5sZW5ndGggcyAtIG4pXG4gIGVsc2VcbiAgICBcIlwiXG5cbmxldCB0YWtlX2Ryb3AgbiBzID0gdGFrZSBuIHMsIGRyb3AgbiBzXG5cbmxldCBjaG9wX3N1ZmZpeCB+c3VmIHMgPVxuICBpZiBzdWZmaXggfnN1ZiBzIHRoZW5cbiAgICBTb21lIChTdHJpbmcuc3ViIHMgMCAoU3RyaW5nLmxlbmd0aCBzIC0gU3RyaW5nLmxlbmd0aCBzdWYpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgY2hvcF9wcmVmaXggfnByZSBzID1cbiAgaWYgcHJlZml4IH5wcmUgcyB0aGVuXG4gICAgU29tZVxuICAgICAgKFN0cmluZy5zdWIgcyAoU3RyaW5nLmxlbmd0aCBwcmUpIChTdHJpbmcubGVuZ3RoIHMgLSBTdHJpbmcubGVuZ3RoIHByZSkpXG4gIGVsc2VcbiAgICBOb25lXG5cbmxldCBibGl0ID0gU3RyaW5nLmJsaXRcblxubGV0IGZvbGQgZiBhY2MgcyA9XG4gIGxldCByZWMgZm9sZF9yZWMgZiBhY2MgcyBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGRfcmVjIGYgKGYgYWNjIHMuW2ldKSBzIChpICsgMSlcbiAgaW5cbiAgZm9sZF9yZWMgZiBhY2MgcyAwXG5cbmxldCBmb2xkaSBmIGFjYyBzID1cbiAgbGV0IHJlYyBmb2xkX3JlYyBmIGFjYyBzIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgZm9sZF9yZWMgZiAoZiBhY2MgaSBzLltpXSkgcyAoaSArIDEpXG4gIGluXG4gIGZvbGRfcmVjIGYgYWNjIHMgMFxuXG5sZXQgcGFkID8oc2lkZSA9IGBMZWZ0KSA/KGMgPSAnICcpIG4gcyA9XG4gIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggcyBpblxuICBpZiBsZW5fcyA+PSBuIHRoZW5cbiAgICBzXG4gIGVsc2UgKFxuICAgIGxldCBwYWRfbGVuID0gbiAtIGxlbl9zIGluXG4gICAgbWF0Y2ggc2lkZSB3aXRoXG4gICAgfCBgTGVmdCAtPlxuICAgICAgaW5pdCBuIChmdW4gaSAtPlxuICAgICAgICAgIGlmIGkgPCBwYWRfbGVuIHRoZW5cbiAgICAgICAgICAgIGNcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBzLltpIC0gcGFkX2xlbl0pXG4gICAgfCBgUmlnaHQgLT5cbiAgICAgIGluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICBpZiBpIDwgbGVuX3MgdGhlblxuICAgICAgICAgICAgcy5baV1cbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBjKVxuICApXG5cbmxldCBfdG9fZ2VuIHMgaTAgbGVuID1cbiAgbGV0IGkgPSByZWYgaTAgaW5cbiAgZnVuICgpIC0+XG4gICAgaWYgIWkgPSBpMCArIGxlbiB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IFN0cmluZy51bnNhZmVfZ2V0IHMgIWkgaW5cbiAgICAgIGluY3IgaTtcbiAgICAgIFNvbWUgY1xuICAgIClcblxubGV0IHRvX2dlbiBzID0gX3RvX2dlbiBzIDAgKFN0cmluZy5sZW5ndGggcylcbmxldCBvZl9jaGFyIGMgPSBTdHJpbmcubWFrZSAxIGNcblxubGV0IG9mX2dlbiBnID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGxldCByZWMgYXV4ICgpID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gQnVmZmVyLmNvbnRlbnRzIGJcbiAgICB8IFNvbWUgYyAtPlxuICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYztcbiAgICAgIGF1eCAoKVxuICBpblxuICBhdXggKClcblxubGV0IHRvX2l0ZXIgcyBrID0gU3RyaW5nLml0ZXIgayBzXG5cbmxldCByZWMgX3RvX3NlcSBzIGkgbGVuICgpID1cbiAgaWYgbGVuID0gMCB0aGVuXG4gICAgU2VxLk5pbFxuICBlbHNlXG4gICAgU2VxLkNvbnMgKHMuW2ldLCBfdG9fc2VxIHMgKGkgKyAxKSAobGVuIC0gMSkpXG5cbmxldCB0b19zZXEgcyA9IF90b19zZXEgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBvZl9pdGVyIGkgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgaSAoQnVmZmVyLmFkZF9jaGFyIGIpO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgb2Zfc2VxIHNlcSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBTZXEuaXRlciAoQnVmZmVyLmFkZF9jaGFyIGIpIHNlcTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IHRvX2xpc3QgcyA9IF90b19saXN0IHMgW10gMCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKExpc3QubGVuZ3RoIGwpIGluXG4gIExpc3QuaXRlciAoQnVmZmVyLmFkZF9jaGFyIGJ1ZikgbDtcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgb2ZfYXJyYXkgYSA9IGluaXQgKEFycmF5Lmxlbmd0aCBhKSAoZnVuIGkgLT4gYS4oaSkpXG5sZXQgdG9fYXJyYXkgcyA9IEFycmF5LmluaXQgKFN0cmluZy5sZW5ndGggcykgKGZ1biBpIC0+IHMuW2ldKVxuXG5sZXQgbGluZXNfZ2VuIHMgPVxuICBTcGxpdC5nZW5fY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lc19pdGVyIHMgPVxuICBTcGxpdC5pdGVyX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXNfc2VxIHMgPVxuICBTcGxpdC5zZXFfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBsaW5lcyBzID1cbiAgU3BsaXQubGlzdF9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGNvbmNhdF9nZW5fYnVmIH5zZXAgZyA6IEJ1ZmZlci50ID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgcmVjIGF1eCB+Zmlyc3QgKCkgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBiXG4gICAgfCBTb21lIHMgLT5cbiAgICAgIGlmIG5vdCBmaXJzdCB0aGVuIEJ1ZmZlci5hZGRfc3RyaW5nIGIgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICAgICAgYXV4IH5maXJzdDpmYWxzZSAoKVxuICBpblxuICBhdXggfmZpcnN0OnRydWUgKClcblxubGV0IGNvbmNhdF9nZW4gfnNlcCBnID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9nZW5fYnVmIH5zZXAgZyBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBjb25jYXRfaXRlcl9idWYgfnNlcCBpIDogQnVmZmVyLnQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgaSAoZnVuIHMgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcyk7XG4gIGJ1ZlxuXG5sZXQgY29uY2F0X2l0ZXIgfnNlcCBpID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9pdGVyX2J1ZiB+c2VwIGkgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY29uY2F0X3NlcV9idWYgfnNlcCBzZXEgOiBCdWZmZXIudCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICBTZXEuaXRlclxuICAgIChmdW4gcyAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW5cbiAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgIGVsc2VcbiAgICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzKVxuICAgIHNlcTtcbiAgYnVmXG5cbmxldCBjb25jYXRfc2VxIH5zZXAgc2VxID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9zZXFfYnVmIH5zZXAgc2VxIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXMgbCA9XG4gIGxldCBsZW4gPSBMaXN0LmZvbGRfbGVmdCAoZnVuIG4gcyAtPiBuICsgMSArIFN0cmluZy5sZW5ndGggcykgMCBsIGluXG4gIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gIGxldCByZWMgYXV4X2JsaXQgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+XG4gICAgICBhc3NlcnQgKGkgPSBsZW4pO1xuICAgICAgQnl0ZXMudG9fc3RyaW5nIGJ1ZlxuICAgIHwgcyA6OiB0YWlsIC0+XG4gICAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICAgIEJ5dGVzLmJsaXRfc3RyaW5nIHMgMCBidWYgaSBsZW5fcztcbiAgICAgIEJ5dGVzLnNldCBidWYgKGkgKyBsZW5fcykgJ1xcbic7XG4gICAgICBhdXhfYmxpdCAoaSArIGxlbl9zICsgMSkgdGFpbFxuICBpblxuICBhdXhfYmxpdCAwIGxcblxubGV0IHVubGluZXNfZ2VuIGcgPVxuICBsZXQgYnVmID0gY29uY2F0X2dlbl9idWYgfnNlcDpcIlxcblwiIGcgaW5cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5saW5lc19pdGVyIGkgPVxuICBsZXQgYnVmID0gY29uY2F0X2l0ZXJfYnVmIH5zZXA6XCJcXG5cIiBpIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXNfc2VxIHNlcSA9XG4gIGxldCBidWYgPSBjb25jYXRfc2VxX2J1ZiB+c2VwOlwiXFxuXCIgc2VxIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHNldCBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gU3RyaW5nLmxlbmd0aCBzIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5zZXRcIjtcbiAgaW5pdCAoU3RyaW5nLmxlbmd0aCBzKSAoZnVuIGogLT5cbiAgICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgICAgY1xuICAgICAgZWxzZVxuICAgICAgICBzLltqXSlcblxubGV0IGl0ZXIgPSBTdHJpbmcuaXRlclxuXG5sZXQgZmlsdGVyX21hcCBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyXG4gICAgKGZ1biBjIC0+XG4gICAgICBtYXRjaCBmIGMgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgYycgLT4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjJylcbiAgICBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBmaWx0ZXIgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlciAoZnVuIGMgLT4gaWYgZiBjIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjKSBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmlxIGVxIHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPSAwIHRoZW5cbiAgICBzXG4gIGVsc2UgKFxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBzLlswXTtcbiAgICBsZXQgXyA9XG4gICAgICBmb2xkXG4gICAgICAgIChmdW4gcHJldmlvdXNfYyBjIC0+XG4gICAgICAgICAgaWYgbm90IChlcSBwcmV2aW91c19jIGMpIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjO1xuICAgICAgICAgIGMpXG4gICAgICAgIHMuWzBdIHNcbiAgICBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgKVxuXG5sZXQgZmxhdF9tYXAgP3NlcCBmIHMgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICBpdGVyaVxuICAgIChmdW4gaSBjIC0+XG4gICAgICAobWF0Y2ggc2VwIHdpdGhcbiAgICAgIHwgU29tZSBfIHdoZW4gaSA9IDAgLT4gKClcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHNlcCAtPiBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwKTtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiAoZiBjKSlcbiAgICBzO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmV4Y2VwdGlvbiBNeUV4aXRcblxubGV0IGZvcl9hbGwgcCBzID1cbiAgdHJ5XG4gICAgaXRlciAoZnVuIGMgLT4gaWYgbm90IChwIGMpIHRoZW4gcmFpc2UgTXlFeGl0KSBzO1xuICAgIHRydWVcbiAgd2l0aCBNeUV4aXQgLT4gZmFsc2VcblxubGV0IGV4aXN0cyBwIHMgPVxuICB0cnlcbiAgICBpdGVyIChmdW4gYyAtPiBpZiBwIGMgdGhlbiByYWlzZSBNeUV4aXQpIHM7XG4gICAgZmFsc2VcbiAgd2l0aCBNeUV4aXQgLT4gdHJ1ZVxuXG5sZXQgZHJvcF93aGlsZSBmIHMgPVxuICBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuZ3RoIHMgJiYgZiAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBpZiAhaSA+IDAgdGhlblxuICAgIHN1YiBzICFpIChsZW5ndGggcyAtICFpKVxuICBlbHNlXG4gICAgc1xuXG5sZXQgcmRyb3Bfd2hpbGUgZiBzID1cbiAgbGV0IGkgPSByZWYgKGxlbmd0aCBzIC0gMSkgaW5cbiAgd2hpbGUgIWkgPj0gMCAmJiBmICh1bnNhZmVfZ2V0IHMgIWkpIGRvXG4gICAgZGVjciBpXG4gIGRvbmU7XG4gIGlmICFpIDwgbGVuZ3RoIHMgLSAxIHRoZW5cbiAgICBzdWIgcyAwICghaSArIDEpXG4gIGVsc2VcbiAgICBzXG5cbigqIG5vdGlvbiBvZiB3aGl0ZXNwYWNlIGZvciB0cmltICopXG5sZXQgaXNfc3BhY2VfID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCBsdHJpbSBzID0gZHJvcF93aGlsZSBpc19zcGFjZV8gc1xubGV0IHJ0cmltIHMgPSByZHJvcF93aGlsZSBpc19zcGFjZV8gc1xuXG5sZXQgbWFwMiBmIHMxIHMyID1cbiAgaWYgbGVuZ3RoIHMxIDw+IGxlbmd0aCBzMiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcubWFwMlwiO1xuICBpbml0IChTdHJpbmcubGVuZ3RoIHMxKSAoZnVuIGkgLT4gZiBzMS5baV0gczIuW2ldKVxuXG5sZXQgaXRlcjIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLml0ZXIyXCI7XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHMxIC0gMSBkb1xuICAgIGYgczEuW2ldIHMyLltpXVxuICBkb25lXG5cbmxldCBpdGVyaTIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLml0ZXJpMlwiO1xuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzMSAtIDEgZG9cbiAgICBmIGkgczEuW2ldIHMyLltpXVxuICBkb25lXG5cbmxldCBmb2xkMiBmIGFjYyBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLmZvbGQyXCI7XG4gIGxldCByZWMgZm9sZCcgYWNjIHMxIHMyIGkgPVxuICAgIGlmIGkgPSBTdHJpbmcubGVuZ3RoIHMxIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGQnIChmIGFjYyBzMS5baV0gczIuW2ldKSBzMSBzMiAoaSArIDEpXG4gIGluXG4gIGZvbGQnIGFjYyBzMSBzMiAwXG5cbmxldCBmb3JfYWxsMiBwIHMxIHMyID1cbiAgdHJ5XG4gICAgaXRlcjIgKGZ1biBjMSBjMiAtPiBpZiBub3QgKHAgYzEgYzIpIHRoZW4gcmFpc2UgTXlFeGl0KSBzMSBzMjtcbiAgICB0cnVlXG4gIHdpdGggTXlFeGl0IC0+IGZhbHNlXG5cbmxldCBleGlzdHMyIHAgczEgczIgPVxuICB0cnlcbiAgICBpdGVyMiAoZnVuIGMxIGMyIC0+IGlmIHAgYzEgYzIgdGhlbiByYWlzZSBNeUV4aXQpIHMxIHMyO1xuICAgIGZhbHNlXG4gIHdpdGggTXlFeGl0IC0+IHRydWVcblxuKCoqIHsyIEFzY2lpIGZ1bmN0aW9uc30gKilcblxubGV0IGVxdWFsX2Nhc2VsZXNzIHMxIHMyIDogYm9vbCA9XG4gIFN0cmluZy5sZW5ndGggczEgPSBTdHJpbmcubGVuZ3RoIHMyXG4gICYmIGZvcl9hbGwyXG4gICAgICAgKGZ1biBjMSBjMiAtPlxuICAgICAgICAgQ0NDaGFyLmVxdWFsIChDQ0NoYXIubG93ZXJjYXNlX2FzY2lpIGMxKSAoQ0NDaGFyLmxvd2VyY2FzZV9hc2NpaSBjMikpXG4gICAgICAgczEgczJcblxubGV0IHRvX2hleCAocyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgaV90b19oZXggKGkgOiBpbnQpID1cbiAgICBpZiBpIDwgMTAgdGhlblxuICAgICAgQ2hhci5jaHIgKGkgKyBDaGFyLmNvZGUgJzAnKVxuICAgIGVsc2VcbiAgICAgIENoYXIuY2hyIChpIC0gMTAgKyBDaGFyLmNvZGUgJ2EnKVxuICBpblxuXG4gIGxldCByZXMgPSBCeXRlcy5jcmVhdGUgKDIgKiBsZW5ndGggcykgaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzIC0gMSBkb1xuICAgIGxldCBuID0gQ2hhci5jb2RlIChnZXQgcyBpKSBpblxuICAgIEJ5dGVzLnNldCByZXMgKDIgKiBpKSAoaV90b19oZXggKChuIGxhbmQgMHhmMCkgbHNyIDQpKTtcbiAgICBCeXRlcy5zZXQgcmVzICgoMiAqIGkpICsgMSkgKGlfdG9faGV4IChuIGxhbmQgMHgwZikpXG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbmxldCBvZl9oZXhfZXhuIChzIDogc3RyaW5nKSA6IHN0cmluZyA9XG4gIGxldCBuX29mX2MgPSBmdW5jdGlvblxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ2EnIC4uICdmJyBhcyBjIC0+IDEwICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnXG4gICAgfCAnQScgLi4gJ0YnIGFzIGMgLT4gMTAgKyBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQSdcbiAgICB8IF8gLT4gaW52YWxpZF9hcmcgXCJzdHJpbmc6IGludmFsaWQgaGV4XCJcbiAgaW5cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIG1vZCAyIDw+IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwic3RyaW5nOiBoZXggc2VxdWVuY2UgbXVzdCBiZSBvZiBldmVuIGxlbmd0aFwiO1xuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAoU3RyaW5nLmxlbmd0aCBzIC8gMikgJ1xceDAwJyBpblxuICBmb3IgaSA9IDAgdG8gKFN0cmluZy5sZW5ndGggcyAvIDIpIC0gMSBkb1xuICAgIGxldCBuMSA9IG5fb2ZfYyAoU3RyaW5nLmdldCBzICgyICogaSkpIGluXG4gICAgbGV0IG4yID0gbl9vZl9jIChTdHJpbmcuZ2V0IHMgKCgyICogaSkgKyAxKSkgaW5cbiAgICBsZXQgbiA9IChuMSBsc2wgNCkgbG9yIG4yIGluXG4gICAgQnl0ZXMuc2V0IHJlcyBpIChDaGFyLmNociBuKVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG5sZXQgb2ZfaGV4IHMgPSB0cnkgU29tZSAob2ZfaGV4X2V4biBzKSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5cbmxldCBwcF9idWYgYnVmIHMgPVxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIic7XG4gIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzO1xuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcIidcblxubGV0IHBwIGZtdCBzID0gRm9ybWF0LmZwcmludGYgZm10IFwiXFxcIiVzXFxcIlwiIHNcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA9IGVxdWFsXG4gIGxldCAoIDw+ICkgYSBiID0gbm90IChlcXVhbCBhIGIpXG4gIGxldCAoID4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPiApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBNdWx0aW1hcH0gKilcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICB0eXBlIHZhbHVlXG4gIHR5cGUgdFxuXG4gIHZhbCBlbXB0eSA6IHRcbiAgKCoqIEVtcHR5IG11bHRpbWFwICopXG5cbiAgdmFsIGlzX2VtcHR5IDogdCAtPiBib29sXG4gICgqKiBFbXB0eSBtdWx0aW1hcD8gKilcblxuICB2YWwgYWRkIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogQWRkIGEga2V5L3ZhbHVlIGJpbmRpbmcgKilcblxuICB2YWwgcmVtb3ZlIDogdCAtPiBrZXkgLT4gdmFsdWUgLT4gdFxuICAoKiogUmVtb3ZlIHRoZSBiaW5kaW5nICopXG5cbiAgdmFsIHJlbW92ZV9hbGwgOiB0IC0+IGtleSAtPiB0XG4gICgqKiBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBtYXAgKilcblxuICB2YWwgbWVtIDogdCAtPiBrZXkgLT4gYm9vbFxuICAoKiogSXMgdGhlcmUgYSBiaW5kaW5nIGZvciB0aGlzIGtleT8gKilcblxuICB2YWwgZmluZCA6IHQgLT4ga2V5IC0+IHZhbHVlIGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBmaW5kX2l0ZXIgOiB0IC0+IGtleSAtPiB2YWx1ZSBpdGVyXG4gICgqKiBJdGVyYXRlIG9uIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBjb3VudCA6IHQgLT4ga2V5IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGJpbmRpbmdzIGZvciB0aGlzIGtleSAqKVxuXG4gIHZhbCBpdGVyIDogdCAtPiAoa2V5IC0+IHZhbHVlIC0+IHVuaXQpIC0+IHVuaXRcbiAgKCoqIEl0ZXJhdGUgb24gYWxsIGtleS92YWx1ZSAqKVxuXG4gIHZhbCBmb2xkIDogdCAtPiAnYSAtPiAoJ2EgLT4ga2V5IC0+IHZhbHVlIC0+ICdhKSAtPiAnYVxuICAoKiogRm9sZCBvbiBhbGwga2V5L3ZhbHVlICopXG5cbiAgdmFsIHNpemUgOiB0IC0+IGludFxuICAoKiogTnVtYmVyIG9mIGtleXMgKilcblxuICB2YWwgdW5pb24gOiB0IC0+IHQgLT4gdFxuICAoKiogVW5pb24gb2YgbXVsdGltYXBzICopXG5cbiAgdmFsIGludGVyIDogdCAtPiB0IC0+IHRcbiAgKCoqIEludGVyc2VjdGlvbiBvZiBtdWx0aW1hcHMgKilcblxuICB2YWwgZGlmZiA6IHQgLT4gdCAtPiB0XG4gICgqKiBEaWZmZXJlbmNlIG9mIG1hcHMsIGllIGJpbmRpbmdzIG9mIHRoZSBmaXJzdCB0aGF0IGFyZSBub3RcbiAgICAgIGluIHRoZSBzZWNvbmQgKilcblxuICB2YWwgZXF1YWwgOiB0IC0+IHQgLT4gYm9vbFxuICAoKiogU2FtZSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBjb21wYXJlIDogdCAtPiB0IC0+IGludFxuICAoKiogVG90YWwgb3JkZXIgb24gbXVsdGltYXBzICopXG5cbiAgdmFsIHN1Ym1hcCA6IHQgLT4gdCAtPiBib29sXG4gICgqKiBbc3VibWFwIG0xIG0yXSBpcyB0cnVlIGlmZiBhbGwgYmluZGluZ3Mgb2YgW20xXSBhcmUgYWxzbyBpbiBbbTJdICopXG5cbiAgdmFsIHRvX2l0ZXIgOiB0IC0+IChrZXkgKiB2YWx1ZSkgaXRlclxuICB2YWwgb2ZfaXRlciA6ID9pbml0OnQgLT4gKGtleSAqIHZhbHVlKSBpdGVyIC0+IHRcbiAgdmFsIGtleXMgOiB0IC0+IGtleSBpdGVyXG5cbiAgdmFsIHZhbHVlcyA6IHQgLT4gdmFsdWUgaXRlclxuICAoKiogU29tZSB2YWx1ZXMgbWF5IG9jY3VyIHNldmVyYWwgdGltZXMgKilcbmVuZFxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoSyA6IE9yZGVyZWRUeXBlKSAoViA6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICB0eXBlIGtleSA9IEsudFxuICB0eXBlIHZhbHVlID0gVi50XG5cbiAgbW9kdWxlIE0gPSBNYXAuTWFrZSAoSylcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoVilcblxuICB0eXBlIHQgPSBTLnQgTS50XG4gICgqKiBNYXAgb2Ygc2V0cyAqKVxuXG4gIGxldCBlbXB0eSA9IE0uZW1wdHlcbiAgbGV0IGlzX2VtcHR5ID0gTS5pc19lbXB0eVxuXG4gIGxldCBhZGQgbSBrIHYgPVxuICAgIGxldCBzZXQgPSB0cnkgTS5maW5kIGsgbSB3aXRoIE5vdF9mb3VuZCAtPiBTLmVtcHR5IGluXG4gICAgTS5hZGQgayAoUy5hZGQgdiBzZXQpIG1cblxuICBsZXQgcmVtb3ZlIG0gayB2ID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBsZXQgc2V0JyA9IFMucmVtb3ZlIHYgc2V0IGluXG4gICAgICBpZiBTLmlzX2VtcHR5IHNldCcgdGhlblxuICAgICAgICBNLnJlbW92ZSBrIG1cbiAgICAgIGVsc2VcbiAgICAgICAgTS5hZGQgayBzZXQnIG1cbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBtXG5cbiAgbGV0IHJlbW92ZV9hbGwgbSBrID0gTS5yZW1vdmUgayBtXG4gIGxldCBtZW0gbSBrID0gTS5tZW0gayBtXG5cbiAgbGV0IGZpbmQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmVsZW1lbnRzIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IFtdXG5cbiAgbGV0IGZpbmRfaXRlciBtIGsgZiA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5pdGVyIGYgc2V0XG4gICAgd2l0aCBOb3RfZm91bmQgLT4gKClcblxuICBsZXQgY291bnQgbSBrID1cbiAgICB0cnlcbiAgICAgIGxldCBzZXQgPSBNLmZpbmQgayBtIGluXG4gICAgICBTLmNhcmRpbmFsIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+IDBcblxuICBsZXQgaXRlciBtIGYgPSBNLml0ZXIgKGZ1biBrIHNldCAtPiBTLml0ZXIgKGZ1biB2IC0+IGYgayB2KSBzZXQpIG1cblxuICBsZXQgZm9sZCBtIGFjYyBmID1cbiAgICBNLmZvbGQgKGZ1biBrIHNldCBhY2MgLT4gUy5mb2xkIChmdW4gdiBhY2MgLT4gZiBhY2MgayB2KSBzZXQgYWNjKSBtIGFjY1xuXG4gIGxldCBzaXplIG0gPSBNLmNhcmRpbmFsIG1cblxuICBsZXQgdW5pb24gbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPiBTb21lIChTLnVuaW9uIHNldDEgc2V0MilcbiAgICAgICAgfCBTb21lIHNldCwgTm9uZSB8IE5vbmUsIFNvbWUgc2V0IC0+IFNvbWUgc2V0KVxuICAgICAgbTEgbTJcblxuICBsZXQgaW50ZXIgbTEgbTIgPVxuICAgIE0ubWVyZ2VcbiAgICAgIChmdW4gX2sgdjEgdjIgLT5cbiAgICAgICAgbWF0Y2ggdjEsIHYyIHdpdGhcbiAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT5cbiAgICAgICAgICBsZXQgc2V0ID0gUy5pbnRlciBzZXQxIHNldDIgaW5cbiAgICAgICAgICBpZiBTLmlzX2VtcHR5IHNldCB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQpXG4gICAgICBtMSBtMlxuXG4gIGxldCBkaWZmIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQsIE5vbmUgLT4gU29tZSBzZXRcbiAgICAgICAgfCBTb21lIHNldDEsIFNvbWUgc2V0MiAtPlxuICAgICAgICAgIGxldCBzZXQnID0gUy5kaWZmIHNldDEgc2V0MiBpblxuICAgICAgICAgIGlmIFMuaXNfZW1wdHkgc2V0JyB0aGVuXG4gICAgICAgICAgICBOb25lXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgU29tZSBzZXQnKVxuICAgICAgbTEgbTJcblxuICBsZXQgZXF1YWwgbTEgbTIgPSBNLmVxdWFsIFMuZXF1YWwgbTEgbTJcbiAgbGV0IGNvbXBhcmUgbTEgbTIgPSBNLmNvbXBhcmUgUy5jb21wYXJlIG0xIG0yXG5cbiAgbGV0IHN1Ym1hcCBtMSBtMiA9XG4gICAgTS5mb3JfYWxsXG4gICAgICAoZnVuIGsgc2V0MSAtPlxuICAgICAgICB0cnlcbiAgICAgICAgICBsZXQgc2V0MiA9IE0uZmluZCBrIG0yIGluXG4gICAgICAgICAgUy5zdWJzZXQgc2V0MSBzZXQyXG4gICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IGZhbHNlKVxuICAgICAgbTFcblxuICBsZXQgdG9faXRlciBtIGsgPSBpdGVyIG0gKGZ1biB4IHkgLT4gayAoeCwgeSkpXG5cbiAgbGV0IG9mX2l0ZXIgPyhpbml0ID0gZW1wdHkpIHNlcSA9XG4gICAgbGV0IG0gPSByZWYgaW5pdCBpblxuICAgIHNlcSAoZnVuIChrLCB2KSAtPiBtIDo9IGFkZCAhbSBrIHYpO1xuICAgICFtXG5cbiAgbGV0IGtleXMgbSBrID0gTS5pdGVyIChmdW4geCBfIC0+IGsgeCkgbVxuICBsZXQgdmFsdWVzIG0gayA9IGl0ZXIgbSAoZnVuIF8gdiAtPiBrIHYpXG5lbmRcblxubW9kdWxlIHR5cGUgQklESVIgPSBzaWdcbiAgdHlwZSB0XG4gIHR5cGUgbGVmdFxuICB0eXBlIHJpZ2h0XG5cbiAgdmFsIGVtcHR5IDogdFxuICB2YWwgaXNfZW1wdHkgOiB0IC0+IGJvb2xcblxuICB2YWwgYWRkIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IC0+IHRcbiAgKCoqIEFkZCBhIGJpbmRpbmcgKGxlZnQscmlnaHQpICopXG5cbiAgdmFsIHJlbW92ZSA6IHQgLT4gbGVmdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYSBzcGVjaWZpYyBiaW5kaW5nICopXG5cbiAgdmFsIGNhcmRpbmFsX2xlZnQgOiB0IC0+IGludFxuICAoKiogbnVtYmVyIG9mIGRpc3RpbmN0IGxlZnQga2V5cyAqKVxuXG4gIHZhbCBjYXJkaW5hbF9yaWdodCA6IHQgLT4gaW50XG4gICgqKiBudW1iZXIgb2YgZGlzdGluY3QgcmlnaHQga2V5cyAqKVxuXG4gIHZhbCByZW1vdmVfbGVmdCA6IHQgLT4gbGVmdCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgbGVmdCBrZXkgKilcblxuICB2YWwgcmVtb3ZlX3JpZ2h0IDogdCAtPiByaWdodCAtPiB0XG4gICgqKiBSZW1vdmUgYWxsIGJpbmRpbmdzIGZvciB0aGUgcmlnaHQga2V5ICopXG5cbiAgdmFsIG1lbV9sZWZ0IDogdCAtPiBsZWZ0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSBsZWZ0IGtleSBwcmVzZW50IGluIGF0IGxlYXN0IG9uZSBwYWlyPyAqKVxuXG4gIHZhbCBtZW1fcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGJvb2xcbiAgKCoqIElzIHRoZSByaWdodCBrZXkgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgcGFpcj8gKilcblxuICB2YWwgZmluZF9sZWZ0IDogdCAtPiBsZWZ0IC0+IHJpZ2h0IGxpc3RcbiAgKCoqIExpc3Qgb2YgdmFsdWVzIGZvciB0aGlzIGdpdmVuIGxlZnQta2V5LlxuICAgICAgVGhpcyB1c2VkIHRvIHJldHVybiBhbiBpdGVyLCBidXQgcmV0dXJucyBhIGxpc3Qgc2luY2UgMy4xMy4gKilcblxuICB2YWwgZmluZF9sZWZ0X2l0ZXIgOiB0IC0+IGxlZnQgLT4gcmlnaHQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZF9yaWdodCA6IHQgLT4gcmlnaHQgLT4gbGVmdCBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBnaXZlbiByaWdodC1rZXkuXG4gICAgICBUaGlzIHVzZWQgdG8gcmV0dXJuIGFuIGl0ZXIsIGJ1dCByZXR1cm5zIGEgbGlzdCBzaW5jZSAzLjEzLiAqKVxuXG4gIHZhbCBmaW5kX3JpZ2h0X2l0ZXIgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleVxuICAgICAgQHNpbmNlIDMuMTMgKilcblxuICB2YWwgZmluZDFfbGVmdCA6IHQgLT4gbGVmdCAtPiByaWdodCBvcHRpb25cbiAgKCoqIGxpa2UgeyFmaW5kX2xlZnR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZpbmQxX3JpZ2h0IDogdCAtPiByaWdodCAtPiBsZWZ0IG9wdGlvblxuICAoKiogbGlrZSB7IWZpbmRfcmlnaHR9IGJ1dCByZXR1cm5zIGF0IG1vc3Qgb25lIHZhbHVlICopXG5cbiAgdmFsIGZvbGQgOiAoJ2EgLT4gbGVmdCAtPiByaWdodCAtPiAnYSkgLT4gJ2EgLT4gdCAtPiAnYVxuICAoKiogRm9sZCBvbiBwYWlycyAqKVxuXG4gIHZhbCBwYWlycyA6IHQgLT4gKGxlZnQgKiByaWdodCkgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBwYWlycyAqKVxuXG4gIHZhbCBhZGRfcGFpcnMgOiB0IC0+IChsZWZ0ICogcmlnaHQpIGl0ZXIgLT4gdFxuICAoKiogQWRkIHBhaXJzICopXG5cbiAgdmFsIGl0ZXJfbGVmdCA6IHQgLT4gbGVmdCBpdGVyXG4gIHZhbCBpdGVyX3JpZ2h0IDogdCAtPiByaWdodCBpdGVyXG5lbmRcblxubGV0IF9mb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgc2VxIChmdW4geCAtPiBhY2MgOj0gZiAhYWNjIHgpO1xuICAhYWNjXG5cbmxldCBfaGVhZF9pdGVyIHNlcSA9XG4gIGxldCByID0gcmVmIE5vbmUgaW5cbiAgKHRyeVxuICAgICBzZXEgKGZ1biB4IC0+XG4gICAgICAgICByIDo9IFNvbWUgeDtcbiAgICAgICAgIHJhaXNlIEV4aXQpXG4gICB3aXRoIEV4aXQgLT4gKCkpO1xuICAhclxuXG5tb2R1bGUgTWFrZUJpZGlyIChMIDogT3JkZXJlZFR5cGUpIChSIDogT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIHR5cGUgbGVmdCA9IEwudFxuICB0eXBlIHJpZ2h0ID0gUi50XG5cbiAgbW9kdWxlIE1hcEwgPSBNYWtlIChMKSAoUilcbiAgbW9kdWxlIE1hcFIgPSBNYWtlIChSKSAoTClcblxuICB0eXBlIHQgPSB7IGxlZnQ6IE1hcEwudDsgcmlnaHQ6IE1hcFIudCB9XG5cbiAgbGV0IGVtcHR5ID0geyBsZWZ0ID0gTWFwTC5lbXB0eTsgcmlnaHQgPSBNYXBSLmVtcHR5IH1cbiAgbGV0IGlzX2VtcHR5IG0gPSBNYXBMLmlzX2VtcHR5IG0ubGVmdFxuICBsZXQgYWRkIG0gYSBiID0geyBsZWZ0ID0gTWFwTC5hZGQgbS5sZWZ0IGEgYjsgcmlnaHQgPSBNYXBSLmFkZCBtLnJpZ2h0IGIgYSB9XG5cbiAgbGV0IHJlbW92ZSBtIGEgYiA9XG4gICAgeyBsZWZ0ID0gTWFwTC5yZW1vdmUgbS5sZWZ0IGEgYjsgcmlnaHQgPSBNYXBSLnJlbW92ZSBtLnJpZ2h0IGIgYSB9XG5cbiAgbGV0IGNhcmRpbmFsX2xlZnQgbSA9IE1hcEwuc2l6ZSBtLmxlZnRcbiAgbGV0IGNhcmRpbmFsX3JpZ2h0IG0gPSBNYXBSLnNpemUgbS5yaWdodFxuICBsZXQgZmluZF9sZWZ0IG0gYSA9IE1hcEwuZmluZCBtLmxlZnQgYVxuICBsZXQgZmluZF9sZWZ0X2l0ZXIgbSBhID0gTWFwTC5maW5kX2l0ZXIgbS5sZWZ0IGFcbiAgbGV0IGZpbmRfcmlnaHQgbSBiID0gTWFwUi5maW5kIG0ucmlnaHQgYlxuICBsZXQgZmluZF9yaWdodF9pdGVyIG0gYiA9IE1hcFIuZmluZF9pdGVyIG0ucmlnaHQgYlxuXG4gIGxldCByZW1vdmVfbGVmdCBtIGEgPVxuICAgIF9mb2xkX2l0ZXIgKGZ1biBtIGIgLT4gcmVtb3ZlIG0gYSBiKSBtIChmaW5kX2xlZnRfaXRlciBtIGEpXG5cbiAgbGV0IHJlbW92ZV9yaWdodCBtIGIgPVxuICAgIF9mb2xkX2l0ZXIgKGZ1biBtIGEgLT4gcmVtb3ZlIG0gYSBiKSBtIChmaW5kX3JpZ2h0X2l0ZXIgbSBiKVxuXG4gIGxldCBtZW1fbGVmdCBtIGEgPSBNYXBMLm1lbSBtLmxlZnQgYVxuICBsZXQgbWVtX3JpZ2h0IG0gYiA9IE1hcFIubWVtIG0ucmlnaHQgYlxuICBsZXQgZmluZDFfbGVmdCBtIGEgPSBfaGVhZF9pdGVyIChmaW5kX2xlZnRfaXRlciBtIGEpXG4gIGxldCBmaW5kMV9yaWdodCBtIGIgPSBfaGVhZF9pdGVyIChmaW5kX3JpZ2h0X2l0ZXIgbSBiKVxuICBsZXQgZm9sZCBmIGFjYyBtID0gTWFwTC5mb2xkIG0ubGVmdCBhY2MgZlxuICBsZXQgcGFpcnMgbSA9IE1hcEwudG9faXRlciBtLmxlZnRcbiAgbGV0IGFkZF9wYWlycyBtIHNlcSA9IF9mb2xkX2l0ZXIgKGZ1biBtIChhLCBiKSAtPiBhZGQgbSBhIGIpIG0gc2VxXG4gIGxldCBpdGVyX2xlZnQgbSA9IE1hcEwua2V5cyBtLmxlZnRcbiAgbGV0IGl0ZXJfcmlnaHQgbSA9IE1hcFIua2V5cyBtLnJpZ2h0XG5lbmRcbiIsIm9wZW4gTGV4aW5nXG5cbmV4Y2VwdGlvbiBMZXhfZXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBsZXhfZXJyb3IgZXJyID0gcmFpc2UgKExleF9lcnJvciBlcnIpXG5cbmxldCBlcnJvcl9wb3MgbGV4YnVmID0gXG4gIGxldCBzdGFydCA9IGxleGJ1Zi5sZXhfc3RhcnRfcCBpblxuICBsZXQgY251bSA9IGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzdGFydC5wb3NfYm9sIGluXG4gIGxldCBlbnVtID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHN0YXJ0LnBvc19ib2wgaW5cbiAgKHN0YXJ0LnBvc19sbnVtLCBjbnVtLCBlbnVtKVxuXG5sZXQgZXJyb3JfcG9zX21zZyAobGV4YnVmIDogTGV4aW5nLmxleGJ1ZikgPVxuICBsZXQgKGxpbmUsIGNudW0sIGVudW0pID0gZXJyb3JfcG9zIGxleGJ1ZiBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwibGluZSAlZCBjaGFycyAlZC0lZFwiIGxpbmUgY251bSBlbnVtXG5cbmxldCBzdHJpbmcybnVtIHMgPVxuICB0cnkgKFRva2Vucy5JTlQgKGludF9vZl9zdHJpbmcgcykpIHdpdGhcbiAgfCBGYWlsdXJlIF8gLT4gVG9rZW5zLkxBUkdFSU5UIHNcblxubGV0IHVwZGF0ZV9wb3MgbGV4YnVmID1cbiAgbGV0IHBvcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcCBpblxuICBsZXhidWYubGV4X3N0YXJ0X3AgPC1cbiAgICB7IHBvcyB3aXRoIHBvc19ib2wgPSBsZXhidWYubGV4X3N0YXJ0X3BvcztcbiAgICAgICAgICAgICAgIHBvc19sbnVtID0gcG9zLnBvc19sbnVtICsgMVxuICAgIH1cblxubGV0IGludF9vZl9oZXhjaGFyIGMgPVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcuLic5JyAtPiBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnXG4gIHwgJ2EnLi4nZicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyArIDEwXG4gIHwgJ0EnLi4nRicgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyArIDEwXG4gIHwgYyAtPiBsZXhfZXJyb3IgKFwiaW52YWxpZCBoZXggY2hhciBpbiB1bmljb2RlIGVzY2FwZTogJ1wiIF4gKFN0cmluZy5tYWtlIDEgYykgXiBcIidcIilcblxuXG5sZXQgdXRmOF9vZl9jb2RlIGJ1ZiBpZHggdSA9XG4gIGxldCBpID0gcmVmIGlkeCBpblxuXG4gIGxldCBhZGRfY2hhciBiIGMgPSBCeXRlcy51bnNhZmVfc2V0IGIgIWkgYzsgaSA6PSAhaSArIDEgaW5cblxuICBsZXQgbWF4X3VzZWRfYml0cyBuIHUgPSAodSBsc3IgbikgPSAwIGluXG5cbiAgaWYgbWF4X3VzZWRfYml0cyA3IHUgdGhlblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgdSlcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDExIHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTEwMDAwMDAgbG9yICgodSBsc3IgNikgbGFuZCAwYjAwMDExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpXG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMTYgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTEwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMDAxMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSlcbiAgZW5kXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAyMSB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTEwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAwMDAxMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMjYgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMTAwMCBsb3IgKCh1IGxzciAyNCkgbGFuZCAwYjAwMDAwMDExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kXG4gIGVsc2UgYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMTExMTAwIGxvciAoKHUgbHNyIDMwKSBsYW5kIDBiMDAwMDAwMDEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAyNCkgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTgpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDEyKSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAgNikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICh1ICAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgZW5kO1xuICAhaVxuXG5sZXQgdXRmOF9vZl9zdXJyb2dhdGVfcGFpciBidWYgaWR4IGhpZ2ggbG93ID1cbiAgbGV0IGhpZ2ggPSBoaWdoIC0gMHhEODAwIGluXG4gIGxldCBsb3cgPSBsb3cgLSAweERDMDAgaW5cbiAgbGV0IGNvZGUgPSAweDEwMDAwICsgKChoaWdoIGxzbCAxMCkgbG9yIGxvdykgaW5cbiAgICB1dGY4X29mX2NvZGUgYnVmIGlkeCBjb2RlXG5cbmxldCBlc2NhcGluZ19lcnJvciBtc2cgcyBjIG9mZiA9XG4gIGxldCBvZmZzID0gc3RyaW5nX29mX2ludCBvZmYgaW5cbiAgbGV0IGNzID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IFNvbWUgYyAtPiBcIiAnXCIgXiAoU3RyaW5nLm1ha2UgMSBjKSBeIFwiJyBcIlxuICAgIHwgTm9uZSAtPiBcIlwiXG4gIGluXG4gICAgbGV4X2Vycm9yIChtc2cgXiBcIiBhdCBvZmZzZXQgXCIgXiBvZmZzIF4gY3MgXiBcIjogXCIgXiBzKVxuXG5sZXQgdW5lc2NhcGVfc3RyaW5nIHMgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgcycgPSBCeXRlcy5jcmVhdGUgbCBpblxuICBsZXQgaiA9IHJlZiAwIGluXG4gIGxldCB1MSA9IHJlZiAwIGluXG4gIGxldCB1MiA9IHJlZiAwIGluXG4gIGxldCBzdGF0ZSA9IHJlZiBgQ2hhciBpblxuXG4gIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgIG1hdGNoICFzdGF0ZSB3aXRoXG4gICAgfCBgQ2hhciAtPiBiZWdpblxuICAgICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICAgfCAnXFxcXCcgLT4gc3RhdGUgOj0gYEVzY2FwZVxuICAgICAgICAgfCBjIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogYzsgaiA6PSAhaiArIDFcbiAgICAgICBlbmQ7XG4gICAgfCBgRXNjYXBlIC0+IGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICAgfCAnXCInICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcIic7ICAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ1xcXFwnIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcXFwnOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJy8nICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICcvJzsgICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnYicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcYic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnZicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcMDEyJzsgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAnbicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcbic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAncicgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xccic7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAndCcgIC0+IEJ5dGVzLnVuc2FmZV9zZXQgcycgIWogJ1xcdCc7ICAgc3RhdGUgOj0gYENoYXI7IGogOj0gIWogKyAxXG4gICAgICAgfCAndScgIC0+IHN0YXRlIDo9IGBVMV9oMVxuICAgICAgIHwgXyAgICAtPiBlc2NhcGluZ19lcnJvciBcImludmFsaWQgZXNjYXBlIGluIHN0cmluZ1wiIHMgKFNvbWUgcy5baV0pIGlcbiAgICAgIGVuZDtcbiAgICB8IGBVMV9oMSAtPiB1MSA6PSBpbnRfb2ZfaGV4Y2hhciBzLltpXTsgIHN0YXRlIDo9IGBVMV9oMlxuICAgIHwgYFUxX2gyIC0+IHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUxX2gzXG4gICAgfCBgVTFfaDMgLT4gdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTFfaDRcbiAgICB8IGBVMV9oNCAtPlxuICAgICAgdTEgOj0gKCF1MSBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7XG4gICAgICBpZiAhdTEgPj0gMHhEODAwICYmICF1MSA8PSAweERCRkYgdGhlblxuICAgICAgICBzdGF0ZSA6PSBgVTJfYnNcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgaiA6PSB1dGY4X29mX2NvZGUgcycgIWogIXUxO1xuICAgICAgICBzdGF0ZSA6PSBgQ2hhclxuICAgICAgZW5kXG4gICAgfCBgVTJfYnMgLT5cbiAgICAgIGlmIHMuW2ldIDw+ICdcXFxcJyB0aGVuXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiZXhwZWN0ZWQgbG93IHN1cnJvZ2F0ZSBlc2NhcGUgY2hhciAoXFxcXClcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlIDo9IGBVMl91XG4gICAgfCBgVTJfdSAtPlxuICAgICAgaWYgcy5baV0gPD4gJ3UnIHRoZW5cbiAgICAgICAgZXNjYXBpbmdfZXJyb3IgXCJleHBlY3RlZCBsb3cgc3Vycm9nYXRlIGVzY2FwZSBzZXF1ZW5jZSAodSlcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlIDo9IGBVMl9oMVxuICAgIHwgYFUyX2gxIC0+IHUyIDo9IGludF9vZl9oZXhjaGFyIHMuW2ldOyAgc3RhdGUgOj0gYFUyX2gyXG4gICAgfCBgVTJfaDIgLT4gdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTJfaDNcbiAgICB8IGBVMl9oMyAtPiB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMl9oNFxuICAgIHwgYFUyX2g0IC0+XG4gICAgICBzdGF0ZSA6PSBgQ2hhcjtcbiAgICAgIHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pO1xuICAgICAgaWYgIXUyID49IDB4REMwMCAmJiAhdTIgPD0gMHhERkZGIHRoZW5cbiAgICAgICAgaiA6PSB1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIHMnICFqICF1MSAhdTIgXG4gICAgICBlbHNlXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiaW52YWxpZCBsb3cgc3Vycm9nYXRlIGZvciBjb2RlIHBvaW50IGJleW9uZCBVK0ZGRkYnXCIgcyBOb25lIGlcbiAgZG9uZTtcbiAgYmVnaW5cbiAgICBtYXRjaCAhc3RhdGUgd2l0aFxuICAgIHwgYENoYXIgLT4gKClcbiAgICB8IF8gLT4gZXNjYXBpbmdfZXJyb3IgXCJlbmQgb2Ygc3RyaW5nIGluIGVzY2FwZSBzZXF1ZW5jZVwiIHMgTm9uZSBsXG4gIGVuZDtcbiAgaWYgIWogPD4gbCB0aGVuIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgKEJ5dGVzLnN1YiBzJyAwICFqKSBlbHNlIHNcblxuIiwiKCogY29udGFpbnMgdGhlIGxpbmUgYW5kIGNoYXJhY3RlciBzcGFuIG9mIHdoZXJlIHRoZSBlcnJvciBvY2N1cmVkICopXG5cbnR5cGUgdCA9IHtcbiAgbGluZSA6IGludFxuOyBzdGFydF9jaGFyIDogaW50XG47IGVuZF9jaGFyIDogaW50XG47IG1zZyA6IHN0cmluZ1xufVxuXG5leGNlcHRpb24gSnNvbl9lcnJvcl9pbmZvIG9mIHRcblxubGV0IGNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZW1zZyA9XG4gIGxldCAoZWxpbmUsIHNjaGFyLCBlY2hhcikgPSBMZXh4ZXJfdXRpbHMuZXJyb3JfcG9zIGxleGJ1ZiBpblxuICB7IGxpbmUgPSBlbGluZTsgc3RhcnRfY2hhciA9IHNjaGFyOyBlbmRfY2hhciA9IGVjaGFyOyBtc2cgPSBlbXNnIH1cblxubGV0IHRvX3N0cmluZyBpbmZvID1cbiAgbGV0IGxvYyA9IFByaW50Zi5zcHJpbnRmIFwibGluZSAlZCBjaGFycyAlZC0lZFwiIGluZm8ubGluZSBpbmZvLnN0YXJ0X2NoYXIgaW5mby5lbmRfY2hhciBpblxuICBpbmZvLm1zZyBeIFwiIGF0IFwiIF4gbG9jXG4iLCJleHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbigqIERldGVybWluZSB0aGUgc2l6ZSBvZiBhbiBpbnRlZ2VyLCBoYW5kbGVzIDMwYml0LCA2MmJpdCBhbmQgSnNvbyB1c2luZyAzMmJpdCBpbnRzICopXG5sZXQgbWF4X2pzb25faW50ID1cbiAgbGV0IHJlYyBsb2cyIG4gPSBpZiBuIDw9IDEgdGhlbiAwIGVsc2UgMSArIGxvZzIobiBhc3IgMSkgaW5cbiAgbGV0IGJpdHMgbiA9IGxvZzIgbiArIDEgaW5cbiAgaWYgYml0cyBtYXhfaW50ID4gNTMgdGhlbiAoMSBsc2wgNTMpIC0gMSBlbHNlIG1heF9pbnRcblxubGV0IG1heF9qc29uX2ludF9hc19mbG9hdCA9IGZsb2F0X29mX2ludCBtYXhfanNvbl9pbnRcblxubGV0IHN0cmluZ19vZl9mbG9hdF9qc29uIGYgPVxuICBsZXQgaXNfaW50ID0gKGZsb2F0X29mX2ludCAoaW50X29mX2Zsb2F0IGYpKSA9IGYgaW5cbiAgaWYgaXNfaW50ICYmIGFic19mbG9hdCBmIDw9IG1heF9qc29uX2ludF9hc19mbG9hdCB0aGVuIGJlZ2luICgqIElFRUUgbWF4IGludCBpbiBhIGZsb2F0IHdoZW4gaW4gNjRiaXQgaW50IG1vZGUqKVxuICAgIGxldCBpbnRfdmFsdWUgPSBpbnRfb2ZfZmxvYXQgZiBpbiAoc3RyaW5nX29mX2ludCBpbnRfdmFsdWUpIF4gXCIuMFwiXG4gIGVuZFxuICBlbHNlIGJlZ2luXG4gICAgKCogJS4xN2cgb2Z0ZW4gY3JlYXRlcyBvdmVybHkgbG9uZyBvdXRwdXQsIGF0dGVtcHQgdG8gY29udmVydCBhdCBsb3dlciBwcmVjZXNzaW9uIGZpcnN0ICopXG4gICAgbGV0IHMgPSBmb3JtYXRfZmxvYXQgXCIlLjE2Z1wiIGYgaW5cbiAgICBsZXQgcyA9IGlmIGZsb2F0X29mX3N0cmluZyBzID0gZiB0aGVuIHMgZWxzZSBmb3JtYXRfZmxvYXQgXCIlLjE3Z1wiIGYgaW5cbiAgICBpZiBub3QgKFN0cmluZy5jb250YWlucyBzICcuJyB8fCBTdHJpbmcuY29udGFpbnMgcyAnZScpIHRoZW4gcyBeIFwiLjBcIlxuICAgIGVsc2Ugc1xuICBlbmRcbiIsIlxubGV0IHRva2VuX2Vycm9yIHRvayA9XG4gIGxldCBvcGVuIFRva2VucyBpblxuICBsZXQgZXJyID0gbWF0Y2ggdG9rIHdpdGhcbiAgICB8IFNUUklORyBzIC0+IFwidW5leHBlY3RlZCBzdHJpbmcgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBPUyAtPiBcInVuZXhwZWN0ZWQgJ3snXCJcbiAgICB8IE9FIC0+IFwidW5leHBlY3RlZCAnfSdcIlxuICAgIHwgTlVMTCAtPiBcInVuZXhwZWN0ZWQgbnVsbCB2YWx1ZVwiXG4gICAgfCBORUdJTkZJTklUWSAtPiBcInVuZXhwZWN0ZWQgbmVnYXRpdmUgaW5maW5pdHlcIlxuICAgIHwgTkFOIC0+IFwidW5leHBlY3RlZCBOb3QtYS1OdW1iZXJcIlxuICAgIHwgTEVYX0VSUk9SIHMgLT4gc1xuICAgIHwgTEFSR0VJTlQgcyAtPiBcInVuZXhwZWN0ZWQgbGFyZ2UgaW50ZWdlciAnXCIgXiBzIF4gXCInXCJcbiAgICB8IElOVCBpIC0+IFwidW5leHBlY3RlZCBpbnRlZ2VyICdcIiBeIChzdHJpbmdfb2ZfaW50IGkpIF4gXCInXCJcbiAgICB8IElORklOSVRZIC0+IFwidW5leHBlY3RlZCBpbmZpbml0eVwiXG4gICAgfCBGTE9BVCBmIC0+IFwidW5leHBlY3RlZCBmbG9hdCAnXCIgXiAoc3RyaW5nX29mX2Zsb2F0IGYpIF4gXCInXCJcbiAgICB8IEVPRiAtPiBcInVuZXhwZWN0ZWQgZW5kLW9mLWlucHV0XCJcbiAgICB8IENPTVBMSUFOQ0VfRVJST1IgcyAtPiBcImNvbXBsaWFuY2UgZXJyb3IgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBDT01NQSAtPiBcInVuZXhwZWN0ZWQgJywnXCJcbiAgICB8IENPTE9OIC0+IFwidW5leHBlY3RlZCAnOidcIlxuICAgIHwgQk9PTCBiIC0+IFwidW5leHBlY3RlZCBib29sZWFuICdcIiBeIChpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCIpIF4gXCInXCJcbiAgICB8IEFTIC0+IFwidW5leHBlY3RlZCAnWydcIlxuICAgIHwgQUUgLT4gXCJ1bmV4cGVjdGVkICddJ1wiXG4gICAgfCBUUyAtPiBcInVuZXhwZWN0ZWQgJygnXCJcbiAgICB8IFRFIC0+IFwidW5leHBlY3RlZCAnKSdcIlxuICAgIHwgVlMgLT4gXCJ1bmV4cGVjdGVkICc8J1wiXG4gICAgfCBWRSAtPiBcInVuZXhwZWN0ZWQgJz4nXCJcbiAgaW5cbiAgICBgU3ludGF4X2Vycm9yIGVyclxuIiwibW9kdWxlIHR5cGUgUGFyc2VyID0gc2lnXG4gIG1vZHVsZSBDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TXG5cbiAgdmFsIGRlY29kZVxuICAgIDogIHJlYWRlciA6ICh1bml0IC0+IFRva2Vucy50b2tlbilcbiAgICAtPiAoQ29tcGxpYW5jZS5qc29uIG9wdGlvbiwgc3RyaW5nKSByZXN1bHRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBQYXJzZXJcbiAgd2l0aCBtb2R1bGUgQ29tcGxpYW5jZSA9IENvbXBsaWFuY2Vcbj0gc3RydWN0XG5cbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBDb21wbGlhbmNlXG5cbiAgZXhjZXB0aW9uIFBhcnNlX2Vycm9yIG9mIFtgRW9mIHwgYFN5bnRheF9lcnJvciBvZiBzdHJpbmddXG5cbiAgbGV0IGpzb25fdmFsdWUgfnJlYWRlciA9IFxuICAgIGxldCBvcGVuIFRva2VucyBpblxuICAgIGxldCBvcGVuIFBhcnNlcl90b29scyBpblxuICAgIGxldCByZWMgdG9rZW5fdmFsdWUgdG9rID0gYmVnaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IElOVCBpIC0+IENvbXBsaWFuY2UuaW50ZWdlciBpXG4gICAgICB8IFNUUklORyBzIC0+IENvbXBsaWFuY2Uuc3RyaW5nIHNcbiAgICAgIHwgQk9PTCBiIC0+IENvbXBsaWFuY2UuYm9vbCBiXG4gICAgICB8IEZMT0FUIGYgLT4gQ29tcGxpYW5jZS5udW1iZXIgKGBGbG9hdCBmKVxuICAgICAgfCBJTkZJTklUWSAtPiBDb21wbGlhbmNlLm51bWJlciBgSW5maW5pdHlcbiAgICAgIHwgTkVHSU5GSU5JVFkgLT4gQ29tcGxpYW5jZS5udW1iZXIgYE5lZ2luZmluaXR5XG4gICAgICB8IE5BTiAtPiBDb21wbGlhbmNlLm51bWJlciBgTmFuXG4gICAgICB8IE5VTEwgLT4gQ29tcGxpYW5jZS5udWxsXG4gICAgICB8IExBUkdFSU5UIHMgLT4gQ29tcGxpYW5jZS5sYXJnZWludCBzXG4gICAgICB8IEVPRiAtPiByYWlzZSAoUGFyc2VfZXJyb3IgYEVvZilcbiAgICAgIHwgQ09NTUEgfCBDT0xPTiB8IEFFIHwgT0UgfCBURSB8IFZFIHwgTEVYX0VSUk9SIF8gfCBDT01QTElBTkNFX0VSUk9SIF8gLT5cbiAgICAgICAgcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgfCBBUyAtPiBhcnJheV92YWx1ZV9zdGFydCAoKVxuICAgICAgfCBPUyAtPiBvYmplY3RfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgVFMgLT4gdHVwbGVfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgVlMgLT4gdmFyaWFudF92YWx1ZV9zdGFydCAoKVxuICAgIGVuZFxuICAgIGFuZCB2YWx1ZSAoKSA9IHRva2VuX3ZhbHVlIChyZWFkZXIgKCkpXG4gICAgYW5kIGFycmF5X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB0b2sgPSByZWFkZXIgKCkgaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCBbXVxuICAgICAgfCBfIC0+IGFycmF5X3ZhbHVlc19zdGFydCB0b2sgW11cbiAgICBlbmRcbiAgICBhbmQgYXJyYXlfdmFsdWVzX3N0YXJ0IHRvayBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB0b2tlbl92YWx1ZSB0b2sgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IGFycmF5X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBhcnJheV92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IEFFIC0+IENvbXBsaWFuY2UubGlzdCAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IGFycmF5X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHRvayA9IHJlYWRlciAoKSBpblxuICAgICAgbWF0Y2ggdG9rIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyBbXVxuICAgICAgfCBfIC0+IG9iamVjdF92YWx1ZXNfc3RhcnQgdG9rIFtdXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZXNfc3RhcnQgdG9rIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IGNvbG9uX3ZhbHVlIHRvayAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgT0UgLT4gQ29tcGxpYW5jZS5hc3NvYyAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IG9iamVjdF92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSBrZXlfY29sb25fdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBvYmplY3RfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGNvbG9uX3ZhbHVlIHYgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgQ09MT04gLT4gKGssIHZhbHVlICgpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCB0b2sgLT4gIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQga2V5X2NvbG9uX3ZhbHVlICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgQ09MT04gLT4gKGssIHZhbHVlICgpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCB0b2sgLT4gIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdHVwbGVfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbGV0IHYxID0gdmFsdWUgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IENPTU1BIC0+IGJlZ2luXG4gICAgICAgIGxldCB2MiA9IHZhbHVlICgpIGluXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgVEUgLT4gQ29tcGxpYW5jZS50dXBsZSBbdjE7IHYyXVxuICAgICAgICB8IENPTU1BIC0+IHR1cGxlX3ZhbHVlcyBbdjI7IHYxXVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCBURSAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgXCJ0dXBsZSBtdXN0IGhhdmUgYXQgbGVhc3QgMiBlbGVtZW50c1wiKSlcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdHVwbGVfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBURSAtPiBDb21wbGlhbmNlLnR1cGxlIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gdHVwbGVfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHZhcmlhbnRfdmFsdWVfc3RhcnQgKCkgPSBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgU1RSSU5HIGsgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBWRSAtPiBDb21wbGlhbmNlLnZhcmlhbnQgayBOb25lXG4gICAgICAgIHwgQ09MT04gLT4gdmFyaWFudF9lbmQgayAoU29tZSAodmFsdWUgKCkpKVxuICAgICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgfCBWRSAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgXCJ2YXJpYW50IG11c3QgaGF2ZSBhdCBsZWFzdCBhIHN0cmluZ1wiKSlcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgdmFyaWFudF9lbmQgayB2ID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFZFIC0+IENvbXBsaWFuY2UudmFyaWFudCBrIHZcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBpblxuICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIGBFb2YpIC0+IE5vbmVcbiAgICB8IGV4Y2VwdGlvbiBleG5fIC0+IHJhaXNlIGV4bl9cbiAgICB8IEVPRiAtPiBOb25lXG4gICAgfCB0b2sgLT4gU29tZSAodG9rZW5fdmFsdWUgdG9rKVxuXG4gIGxldCBkZWNvZGUgfnJlYWRlciA9IFxuICAgIG1hdGNoIGpzb25fdmFsdWUgfnJlYWRlciB3aXRoXG4gICAgfCBleGNlcHRpb24gKFBhcnNlX2Vycm9yIGBFb2YpIC0+IEVycm9yIFwiVW5leHBlY3RlZCBlbmQtb2YtaW5wdXRcIlxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciAoYFN5bnRheF9lcnJvciBlcnIpKSAtPiBFcnJvciBlcnJcbiAgICB8IGV4Y2VwdGlvbiAoTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIpIC0+IEVycm9yIGVyclxuICAgIHwgcmVzIC0+IE9rIHJlc1xuXG5lbmRcbiIsImxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxubGV0IGFkZF9oZXhfYnl0ZSB+YWRkX2NoYXIgaSA9XG4gIGFkZF9jaGFyIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gIGFkZF9jaGFyIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbmxldCBlc2NhcGUgfmFkZF9jaGFyIH5hZGRfc3RyaW5nIHMgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIH5hZGRfY2hhciAoaW50X29mX2NoYXIgYylcbiAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICBkb25lXG4gXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBwcmV0dHlfcHJpbnQgOiBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgcHJldHR5X3ByaW50X3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIGxldCB0b19qc29uX3N0cmluZyBzID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgVXRpbHMuZXNjYXBlIH5hZGRfY2hhciB+YWRkX3N0cmluZyBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgYWRkX3F1b3RlX3N0cmluZyBzO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgcHBfbGlzdCBzZXAgcHB4IG91dCBsID1cbiAgICBsZXQgcHBfc2VwIG91dCAoKSA9IEZvcm1hdC5mcHJpbnRmIG91dCBcIiVzQCBcIiBzZXAgaW5cbiAgICBGb3JtYXQucHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBweCBvdXQgbFxuXG4gIGxldCByZWMgZm9ybWF0IChvdXQ6Rm9ybWF0LmZvcm1hdHRlcikganNvbiA6IHVuaXQgPVxuICAgIG1hdGNoIGpzb24gd2l0aFxuICAgICAgfCBgTnVsbCAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IEZvcm1hdC5wcF9wcmludF9ib29sIG91dCBiXG4gICAgICB8IGBJbnQgaSAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAoc3RyaW5nX29mX2ludCBpKVxuICAgICAgfCBgRmxvYXQgZiAtPlxuICAgICAgICBsZXQgcyA9IENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmIGluXG4gICAgICAgIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0ICh0b19qc29uX3N0cmluZyBzKVxuICAgICAgfCBgSW50bGl0IHNcbiAgICAgIHwgYEZsb2F0bGl0IHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IHNcbiAgICAgIHwgYExpc3QgW10gLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJbXVwiXG4gICAgICB8IGBMaXN0IGwgLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiW0A7PDEgMD5AWzxob3Y+JWFAXUA7PDEgLTI+XVwiIChwcF9saXN0IFwiLFwiIGZvcm1hdCkgbFxuICAgICAgfCBgQXNzb2MgW10gLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJ7fVwiXG4gICAgICB8IGBBc3NvYyBsIC0+XG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIntAOzwxIDA+JWFAOzwxIC0yPn1cIiAocHBfbGlzdCBcIixcIiBmb3JtYXRfZmllbGQpIGxcbiAgICAgIHwgYFR1cGxlIGwgLT5cbiAgICAgICAgaWYgbCA9IFtdIHRoZW4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCIoKVwiXG4gICAgICAgIGVsc2UgRm9ybWF0LmZwcmludGYgb3V0IFwiKEAsJWFAOzwwIC0yPilcIiAocHBfbGlzdCBcIixcIiBmb3JtYXQpIGxcbiAgICAgIHwgYFZhcmlhbnQgKHMsIE5vbmUpIC0+XG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjwlcz5cIiAodG9fanNvbl9zdHJpbmcgcylcbiAgICAgIHwgYFZhcmlhbnQgKHMsIFNvbWUganNvbikgLT5cbiAgICAgICAgbGV0IHMgPSB0b19qc29uX3N0cmluZyBzIGluXG4gICAgICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIjxAWzxodjI+JXM6ICVhQF0+XCIgcyBmb3JtYXQganNvblxuXG4gIGFuZCBmb3JtYXRfZmllbGQgb3V0IChuYW1lLCBqc29uKSA9XG4gICAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVzOiAlYUBdXCIgKHRvX2pzb25fc3RyaW5nIG5hbWUpIGZvcm1hdCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludCBvdXQganNvbiA9XG4gICAgRm9ybWF0LmZwcmludGYgb3V0IFwiQFs8aHYyPiVhQF1cIiBmb3JtYXQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnRfdG9fc3RyaW5nIGpzb24gPVxuICAgIEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgcHJldHR5X3ByaW50IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50X3RvX2NoYW5uZWwgb2MganNvbiA9XG4gICAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgb2MgaW5cbiAgICBGb3JtYXQuZnByaW50ZiBmbXQgXCIlYUA/XCIgcHJldHR5X3ByaW50IGpzb25cblxuZW5kXG4iLCJsZXQgZXJyb3IgbXNnIF9qc29uID0gcmFpc2UgKEZhaWx1cmUgbXNnKVxuXG5tb2R1bGUgSW50ZXJuYWwgPSBzdHJ1Y3RcbiAgbW9kdWxlIHR5cGUgUyA9IHNpZ1xuICAgIHR5cGUganNvblxuICAgIHZhbCBudWxsIDogdW5pdCAtPiBqc29uXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX3N0cmljdF9pbnRmID0gc2lnXG4gICAgdHlwZSBqc29uXG5cbiAgICB2YWwgbWVtYmVyIDogc3RyaW5nIC0+IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIC0+IGpzb25cbiAgICB2YWwgaW5kZXggOiBpbnQgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvblxuICAgIHZhbCBtYXAgOiAoanNvbiAtPiBqc29uKSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXVxuICAgIHZhbCB0b19hc3NvYyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIC0+IChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgdmFsIHRvX2Jvb2wgOiBbPiBgQm9vbCBvZiBib29sIF0gLT4gYm9vbFxuICAgIHZhbCB0b19mbG9hdCA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX3N0cmluZyA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIF0gLT4gc3RyaW5nXG4gICAgdmFsIHRvX3N0cmluZ19vcHRpb24gOiBbPiBgU3RyaW5nIG9mIHN0cmluZyB8IGBOdWxsIF0gLT4gc3RyaW5nIG9wdGlvblxuICAgIHZhbCB0b19vcHRpb24gOiAoKFs+IGBOdWxsIF0gYXMgJ2EpIC0+IGpzb24pIC0+ICdhIC0+IGpzb24gb3B0aW9uXG4gICAgdmFsIHRvX2xpc3QgOiBbPiBgTGlzdCBvZiBqc29uIGxpc3QgXSAtPiBqc29uIGxpc3RcbiAgICB2YWwgdG9fYm9vbF9vcHRpb24gOiBbPiBgQm9vbCBvZiBib29sIHwgYE51bGwgXSAtPiBib29sIG9wdGlvblxuICAgIHZhbCB0b19mbG9hdF9vcHRpb24gOiBbPiBgRmxvYXQgb2YgZmxvYXQgfCBgTnVsbCBdIC0+IGZsb2F0IG9wdGlvblxuICAgIHZhbCB0b19udW1iZXIgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19udW1iZXJfb3B0aW9uIDogWz4gYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgY29udmVydF9lYWNoIDogKGpzb24gLT4ganNvbikgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvbiBsaXN0XG4gICAgdmFsIHJldl9maWx0ZXJfbWFwIDogKCdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX21hcCA6ICgnYSAtPiAnYSBvcHRpb24pIC0+ICdhIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXZfZmxhdHRlbiA6ICdhIGxpc3QgLT4gWz4gYExpc3Qgb2YgJ2EgbGlzdCBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmbGF0dGVuIDogWz4gYExpc3Qgb2YgJ2EgbGlzdCBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfaW5kZXggOiBpbnQgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gbGlzdCAtPiBqc29uIGxpc3RcbiAgICB2YWwgZmlsdGVyX2xpc3QgOiBbPiBgTGlzdCBvZiAnYSBdIGxpc3QgLT4gJ2EgbGlzdFxuICAgIHZhbCBmaWx0ZXJfYXNzb2MgOiBbPiBgQXNzb2Mgb2YgJ2EgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Jvb2wgOiBbPiBgQm9vbCBvZiBib29sIF0gbGlzdCAtPiBib29sIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Zsb2F0IDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gICAgdmFsIGZpbHRlcl9zdHJpbmcgIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgXSBsaXN0IC0+IHN0cmluZyBsaXN0XG4gICAgdmFsIGZpbHRlcl9tZW1iZXIgOiBzdHJpbmcgLT4gWz4gYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0IF0gbGlzdCAtPiBqc29uIGxpc3RcbiAgICB2YWwgZmlsdGVyX251bWJlciA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICAgIHZhbCBrZXlzIDogWz4gYEFzc29jIG9mIChzdHJpbmcgKiAnYSkgbGlzdCBdIC0+IHN0cmluZyBsaXN0XG4gICAgdmFsIHZhbHVlcyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgXSAtPiAnYSBsaXN0XG4gICAgdmFsIGNvbWJpbmUgOiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdIC0+IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF0gLT4gWz4gYEFzc29jIG9mICdhIGxpc3QgXVxuICAgIHZhbCBzb3J0IDogKFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgfCBgTGlzdCBvZiAnYSBsaXN0IF0gYXMgJ2EpIC0+ICdhXG4gIGVuZFxuXG4gIG1vZHVsZSBTaGFyZWQgPSBzdHJ1Y3RcbiAgICBsZXQgcmVjIHJldl9maWx0ZXJfbWFwIGYgYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGFjY1xuICAgICAgfCBoZDo6dGwgLT5cbiAgICAgICAgbWF0Y2ggZiBoZCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByZXZfZmlsdGVyX21hcCBmIGFjYyB0bFxuICAgICAgICB8IFNvbWUgdiAtPiByZXZfZmlsdGVyX21hcCBmICh2OjphY2MpIHRsXG5cbiAgICBsZXQgZmlsdGVyX21hcCBmIGwgPSBMaXN0LnJldiAocmV2X2ZpbHRlcl9tYXAgZiBbXSBsKVxuXG4gICAgbGV0IHJlYyByZXZfZmxhdHRlbiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYWNjXG4gICAgICB8IGhkOjp0bCAtPlxuICAgICAgICBtYXRjaCBoZCB3aXRoXG4gICAgICAgIHwgYExpc3QgbDIgLT4gcmV2X2ZsYXR0ZW4gKExpc3QucmV2X2FwcGVuZCBsMiBhY2MpIHRsXG4gICAgICAgIHwgXyAtPiByZXZfZmxhdHRlbiBhY2MgdGxcblxuICAgIGxldCBmbGF0dGVuIGwgPSBMaXN0LnJldiAocmV2X2ZsYXR0ZW4gW10gbClcblxuICBlbmRcblxuICBtb2R1bGUgU3RyaWN0KE0gOiBTKSA6IEludGVybmFsX3N0cmljdF9pbnRmXG4gICAgd2l0aCB0eXBlIGpzb24gPSBNLmpzb25cbiAgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBNLmpzb25cblxuICAgIGxldCBhc3NvYyBuYW1lIG9iaiA6IGpzb24gPSB0cnkgTGlzdC5hc3NvYyBuYW1lIG9iaiB3aXRoIE5vdF9mb3VuZCAtPiBNLm51bGwgKClcblxuICAgIGxldCBtZW1iZXIgbmFtZSB2IDoganNvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYEFzc29jIG9iaiAtPiBhc3NvYyBuYW1lIG9ialxuICAgICAgfCBqc29uIC0+IGVycm9yIChcIkV4cGVjdGVkIGBBc3NvYyB0byBmaW5kIG5hbWUgJ1wiIF4gbmFtZSBeIFwiJyBpblwiKSBqc29uXG5cbiAgICBsZXQgaW5kZXggaSB2IDoganNvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICAgIGxldCBsZW4gPSBMaXN0Lmxlbmd0aCBsIGluXG4gICAgICAgICAgbGV0IGknID0gaWYgaSA8IDAgdGhlbiBsZW4gKyBpIGVsc2UgaSBpblxuICAgICAgICAgIGlmIGknIDwgMCB8fCBpJyA+PSBsZW4gdGhlbiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCAoc3RyaW5nX29mX2ludCBpIF4gXCIgb3V0IG9mIGJvdW5kc1wiKSlcbiAgICAgICAgICBlbHNlIExpc3QubnRoIGwgaSdcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkNhbid0IGluZGV4IG5vbmUgYExpc3QgdHlwZSBcIiBqc29uXG5cbiAgICBsZXQgbWFwIGYgdiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgZiBsKVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiQ2FuJ3QgbWFwIG92ZXIgbm9uZSBgTGlzdCB0eXBlIFwiIGpzb25cblxuICAgIGxldCB0b19hc3NvYyA9IGZ1bmN0aW9uIHwgYEFzc29jIG9iaiAtPiBvYmogfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEFzc29jXCIganNvblxuICAgIGxldCB0b19ib29sID0gZnVuY3Rpb24gfCBgQm9vbCBiIC0+IGIgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEJvb2xcIiBqc29uXG4gICAgbGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb24gfCBgRmxvYXQgZiAtPiBmIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgICAgfCBgU3RyaW5nIHMgLT4gc1xuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYFN0cmluZ1wiIGpzb25cblxuICAgIGxldCB0b19zdHJpbmdfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYFN0cmluZyBzIC0+IFNvbWUgc1xuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgU3RyaW5nIG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX29wdGlvbiBmIHYgOiBqc29uIG9wdGlvbiA9XG4gICAgICBtYXRjaCB2IHdpdGhcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCB2IC0+IFNvbWUgKGYgdilcblxuICAgIGxldCB0b19saXN0IHYgOiBqc29uIGxpc3QgPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT4gbFxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYExpc3RcIiBqc29uXG5cbiAgICBsZXQgdG9fZmxvYXRfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19ib29sX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBCb29sIGIgLT4gU29tZSBiXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBCb29sIG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX251bWJlciA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IGZcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXJfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCBjb252ZXJ0X2VhY2ggZiA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IGwgLT4gTGlzdC5tYXAgZiBsXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgTGlzdFwiIGpzb25cblxuICAgIGxldCByZXZfZmlsdGVyX21hcCA9IFNoYXJlZC5yZXZfZmlsdGVyX21hcFxuICAgIGxldCBmaWx0ZXJfbWFwID0gU2hhcmVkLmZpbHRlcl9tYXBcblxuICAgIGxldCByZXZfZmxhdHRlbiA9IFNoYXJlZC5yZXZfZmxhdHRlblxuICAgIGxldCBmbGF0dGVuID0gU2hhcmVkLmZsYXR0ZW5cblxuICAgIGxldCBmaWx0ZXJfaW5kZXggaSBsID1cbiAgICAgIGZpbHRlcl9tYXAgKGZ1bmN0aW9uIHwgYExpc3QgbCAtPiAodHJ5IFNvbWUgKExpc3QubnRoIGwgaSkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX2xpc3QgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBMaXN0IGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9hc3NvYyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gU29tZSBsIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9ib29sIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgQm9vbCBiIC0+IFNvbWUgYiB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfZmxvYXQgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBGbG9hdCBmIC0+IFNvbWUgZiB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfc3RyaW5nIGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgU3RyaW5nIHMgLT4gU29tZSBzIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX21lbWJlciBrIGwgPVxuICAgICAgZmlsdGVyX21hcCAoZnVuY3Rpb24gYEFzc29jIGwgLT4gKHRyeSBTb21lIChMaXN0LmFzc29jIGsgbCkgd2l0aCBfIC0+IE5vbmUpIHwgXyAtPiBOb25lKSBsXG5cbiAgICBsZXQgZmlsdGVyX251bWJlciBsID1cbiAgICAgIGZpbHRlcl9tYXAgKFxuICAgICAgICBmdW5jdGlvblxuICAgICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgKSBsXG5cbiAgICBsZXQga2V5cyBvID0gdG9fYXNzb2MgbyB8PiBMaXN0Lm1hcCAoZnVuIChrZXksIF8pIC0+IGtleSlcblxuICAgIGxldCB2YWx1ZXMgbyA9IHRvX2Fzc29jIG8gfD4gTGlzdC5tYXAgKGZ1biAoXywgdmFsdWUpIC0+IHZhbHVlKVxuXG4gICAgbGV0IGNvbWJpbmUgZmlyc3Qgc2Vjb25kID1cbiAgICAgIG1hdGNoIChmaXJzdCwgc2Vjb25kKSB3aXRoXG4gICAgICB8IChgQXNzb2MgYSwgYEFzc29jIGIpIC0+IGBBc3NvYyAoYSBAIGIpXG4gICAgICB8IChfLCBfKSAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkV4cGVjdGVkIHR3byBvYmplY3RzXCIpXG5cbiAgICBsZXQgcmVjIHNvcnQganNvbiA9XG4gICAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IG8gPSBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCBzb3J0IHYpKSBvKSBpblxuICAgICAgICBgQXNzb2MgKChMaXN0LnN0YWJsZV9zb3J0IChmdW4gKGsxLCBfKSAoazIsIF8pIC0+IFN0cmluZy5jb21wYXJlIGsxIGsyKSkgbylcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICAgICAgfCBlbCAtPiAgZWxcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfYmFzaWNfaW50ZiA9IHNpZ1xuXG4gICAgdmFsIHRvX251bWJlciA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fbnVtYmVyX29wdGlvbiA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgdG9faW50IDogWz4gYEludCBvZiBpbnQgXSAtPiBpbnRcbiAgICB2YWwgdG9faW50X29wdGlvbiA6IFs+IGBJbnQgb2YgaW50IHwgYE51bGwgXSAtPiBpbnQgb3B0aW9uXG4gICAgdmFsIGZpbHRlcl9pbnQgOiBbPiBgSW50IG9mIGludCBdIGxpc3QgLT4gaW50IGxpc3RcbiAgICB2YWwgZmlsdGVyX251bWJlciA6IFs+IGBJbnQgb2YgaW50IHwgYEZsb2F0IG9mIGZsb2F0IF0gbGlzdCAtPiBmbG9hdCBsaXN0XG4gIGVuZFxuXG4gIG1vZHVsZSBCYXNpYyhNIDogUykgOiBJbnRlcm5hbF9iYXNpY19pbnRmID0gc3RydWN0XG5cbiAgICBsZXQgdG9fbnVtYmVyID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IGZsb2F0IGlcbiAgICAgIHwgYEZsb2F0IGYgLT4gZlxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCBvciBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBTb21lIChmbG9hdCBpKVxuICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCwgYEZsb2F0IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IHRvX2ludCA9IGZ1bmN0aW9uIHwgYEludCBpIC0+IGkgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludFwiIGpzb25cblxuICAgIGxldCB0b19pbnRfb3B0aW9uID0gZnVuY3Rpb25cbiAgICAgIHwgYEludCBpIC0+IFNvbWUgaVxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgSW50IG9yIGBOdWxsXCIganNvblxuXG4gICAgbGV0IGZpbHRlcl9pbnQgbCA9IFNoYXJlZC5maWx0ZXJfbWFwIChmdW5jdGlvbiBgSW50IGkgLT4gU29tZSBpIHwgXyAtPiBOb25lKSBsXG4gICAgbGV0IGZpbHRlcl9udW1iZXIgbCA9XG4gICAgICBTaGFyZWQuZmlsdGVyX21hcCAoXG4gICAgICAgIGZ1bmN0aW9uXG4gICAgICAgIHwgYEludCBpIC0+IFNvbWUgKGZsb2F0IGkpXG4gICAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICApIGxcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgSW50ZXJuYWxfZXh0ZW5kZWRfaW50ZiA9IHNpZ1xuICAgIHZhbCBzb3J0IDogKFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgfCBgTGlzdCBvZiAnYSBsaXN0IHxcbiAgICAgICAgICAgICAgICAgICBgVHVwbGUgb2YgJ2EgbGlzdCB8IGBWYXJpYW50IG9mICdiICogJ2Egb3B0aW9uIF0gYXMgJ2EpIC0+ICdhXG4gIGVuZFxuXG4gIG1vZHVsZSBFeHRlbmRlZChNIDogUykgOiBJbnRlcm5hbF9leHRlbmRlZF9pbnRmID0gc3RydWN0XG5cbiAgICBsZXQgcmVjIHNvcnQganNvbiA9XG4gICAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IG8gPSBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIChmdW4gKGssIHYpIC0+IChrLCBzb3J0IHYpKSBvKSBpblxuICAgICAgICBgQXNzb2MgKChMaXN0LnN0YWJsZV9zb3J0IChmdW4gKGsxLCBfKSAoazIsIF8pIC0+IFN0cmluZy5jb21wYXJlIGsxIGsyKSkgbylcbiAgICAgIHwgYFR1cGxlIGxcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCBzb3J0IGwpKVxuICAgICAgfCBgVmFyaWFudCAoaywgU29tZSB2KSBhcyB2MSAtPlxuICAgICAgICBsZXQgdicgPSBzb3J0IHYgaW4gaWYgdicgPT0gdiB0aGVuIHYxIGVsc2UgYFZhcmlhbnQgKGssIFNvbWUgdicpXG4gICAgICB8IGVsIC0+ICBlbFxuICBlbmRcblxuZW5kXG5cbm1vZHVsZSBTdHJpY3QgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLlN0cmljdC5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbmVuZFxuXG5tb2R1bGUgQmFzaWMgPSBzdHJ1Y3RcbiAgbW9kdWxlIE0gPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkJhc2ljLmpzb25cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG5lbmRcblxubW9kdWxlIEV4dGVuZGVkID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5FeHRlbmRlZC5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuICBpbmNsdWRlIEludGVybmFsLkV4dGVuZGVkKE0pXG5lbmRcblxubW9kdWxlIFlvanNvbl9zYWZlID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID1cbiAgICAgIFtcbiAgICAgIHwgYE51bGxcbiAgICAgIHwgYEJvb2wgb2YgYm9vbFxuICAgICAgfCBgSW50IG9mIGludFxuICAgICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgICAgfCBgRmxvYXQgb2YgZmxvYXRcbiAgICAgIHwgYFN0cmluZyBvZiBzdHJpbmdcbiAgICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgICB8IGBMaXN0IG9mIGpzb24gbGlzdFxuICAgICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICAgIF1cblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5FeHRlbmRlZChNKVxuZW5kXG4iLCJsZXQgdG9rZW5fdG9fc3RyaW5nICh0b2s6VG9rZW5zLnRva2VuKSA9XG4gIG1hdGNoIHRvayB3aXRoXG4gIHwgU1RSSU5HIHMgLT4gc1xuICB8IE9TIC0+IFwie1wiXG4gIHwgT0UgLT4gXCJ9XCJcbiAgfCBOVUxMIC0+IFwiTnVsbFwiXG4gIHwgTkVHSU5GSU5JVFkgLT4gXCItSW5maW5pdHlcIlxuICB8IE5BTiAtPiBcIk5BTlwiXG4gIHwgTEVYX0VSUk9SIGVyciAtPiBcImlucHV0IGVycm9yICdcIiBeIGVyciBeIFwiJ1wiXG4gIHwgTEFSR0VJTlQgcyAtPiBzXG4gIHwgSU5UIGkgLT4gc3RyaW5nX29mX2ludCBpXG4gIHwgSU5GSU5JVFkgLT4gXCJJbmZpbml0eVwiXG4gIHwgRkxPQVQgZiAtPiBzdHJpbmdfb2ZfZmxvYXQgZlxuICB8IEVPRiAtPiBcImVuZC1vZi1maWxlXCJcbiAgfCBDT01QTElBTkNFX0VSUk9SIGVyciAtPiBlcnJcbiAgfCBDT01NQSAtPiBcIixcIlxuICB8IENPTE9OIC0+IFwiOlwiXG4gIHwgQk9PTCBiIC0+IGlmIGIgdGhlbiBcInRydWVcIiBlbHNlIFwiZmFsc2VcIlxuICB8IEFTIC0+IFwiW1wiXG4gIHwgQUUgLT4gXCJdXCJcbiAgfCBWUyAtPiBcIjxcIlxuICB8IFZFIC0+IFwiPlwiXG4gIHwgVFMgLT4gXCIoXCJcbiAgfCBURSAtPiBcIilcIlxuIiwibW9kdWxlIHR5cGUgUmVhZGVyX3N0cmluZ19maWxlID0gc2lnXG4gIHR5cGUganNvblxuXG4gIHZhbCBqc29uX29mX3N0cmluZyA6IHN0cmluZyAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2Zfc3RyaW5nX2V4biA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBqc29uX29mX2ZpbGUgOiBzdHJpbmcgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2ZpbGVfZXhuIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX2NoYW5uZWxfZXhuIDogaW5fY2hhbm5lbCAtPiBqc29uXG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9mdW5jdGlvbl9leG4gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvblxuICB2YWwganNvbl9vZl9sZXhidWYgOiBMZXhpbmcubGV4YnVmIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXhuIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uXG4gIHZhbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4ganNvblxuICB2YWwgb2ZfZmlsZSA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBvZl9jaGFubmVsIDogaW5fY2hhbm5lbCAtPiBqc29uXG4gIHZhbCBvZl9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uXG5cbiAgdmFsIGpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIDogaW5fY2hhbm5lbCAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb25fZXJyb3JfaW5mbyA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm8gOiBMZXhpbmcubGV4YnVmIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgOiA/c3RyZWFtOmJvb2wgLT4gTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiBvcHRpb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG5cbiAgdmFsIHN0cmVhbV9mcm9tX3N0cmluZyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9jaGFubmVsIDogP2ZpbjoodW5pdCAtPiB1bml0KSAtPiBpbl9jaGFubmVsIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2ZpbGUgOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fbGV4YnVmIDogTGV4aW5nLmxleGJ1ZiAtPiBqc29uIFN0cmVhbS50XG5cbiAgdmFsIHN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyA6ID9maW46KHVuaXQgLT4gdW5pdCkgLT4gaW5fY2hhbm5lbCAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZnVuY3Rpb25fZXJyb3JfaW5mbyA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyA6IExleGluZy5sZXhidWYgLT4ganNvbiBTdHJlYW0udFxuZW5kXG5cbm1vZHVsZSBNYWtlIChMZXh4ZXIgOiBDb21wbGlhbnRfbGV4eGVyLkxleCApIChQYXJzZXIgOiBQYXJzZXIuUGFyc2VyKSA6IFJlYWRlcl9zdHJpbmdfZmlsZVxuICB3aXRoIHR5cGUganNvbiA9IFBhcnNlci5Db21wbGlhbmNlLmpzb25cbj0gc3RydWN0XG4gIHR5cGUganNvbiA9IFBhcnNlci5Db21wbGlhbmNlLmpzb25cblxuICBsZXQgcmVhZF9qc29uJyB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICB8IE9rIE5vbmUgLT4gRXJyb3IgXCJlbXB0eSBpbnB1dFwiXG4gICAgfCBPayAoU29tZSByZXMpIC0+IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBFT0YgLT4gT2sgcmVzXG4gICAgICB8IGV4Y2VwdGlvbiBMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVyciAtPiBFcnJvciBlcnJcbiAgICAgIHwgdG9rIC0+IEVycm9yIChcImp1bmsgYWZ0ZXIgZW5kIG9mIEpTT04gdmFsdWU6IFwiIF4gKFRva2VuX3V0aWxzLnRva2VuX3RvX3N0cmluZyB0b2spKVxuICAgICAgZW5kXG4gICAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxuICBsZXQgcmVhZF9qc29uIH5sZXhidWYgPVxuICAgIG1hdGNoIHJlYWRfanNvbicgfmxleGJ1ZiB3aXRoXG4gICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBzIGluXG4gICAgICBFcnJvciAoRXJyb3JfaW5mby50b19zdHJpbmcgZXJyX2luZm8pXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nX2V4biBzID1cbiAgICBtYXRjaCBqc29uX29mX3N0cmluZyBzIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQgb2Zfc3RyaW5nIHMgPSBqc29uX29mX3N0cmluZ19leG4gc1xuXG4gIGxldCBqc29uX29mX2ZpbGUgZmlsZW5hbWUgPVxuICAgIHRyeSBiZWdpblxuICAgICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgICAgbGV0IHJlcyA9IHJlYWRfanNvbiB+bGV4YnVmIGluXG4gICAgICAgIGNsb3NlX2luIGluYztcbiAgICAgICAgcmVzXG4gICAgZW5kXG4gICAgd2l0aCBTeXNfZXJyb3IgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX29mX2ZpbGVfZXhuIGZpbGVuYW1lID1cbiAgICBtYXRjaCBqc29uX29mX2ZpbGUgZmlsZW5hbWUgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2NoYW5uZWwgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2NoYW5uZWxfZXhuIGluYyA9XG4gICAgbWF0Y2gganNvbl9vZl9jaGFubmVsIGluYyB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb24gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1ZiBsZXhidWYgPVxuICAgIHJlYWRfanNvbiB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2V4biBsZXhidWYgPVxuICAgIG1hdGNoIGpzb25fb2ZfbGV4YnVmIGxleGJ1ZiB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb25fZXhuIGYgPVxuICAgIG1hdGNoIGpzb25fb2ZfZnVuY3Rpb24gZiB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IG9mX2ZpbGUgPSBqc29uX29mX2ZpbGVfZXhuXG4gIGxldCBvZl9jaGFubmVsID0ganNvbl9vZl9jaGFubmVsX2V4blxuICBsZXQgb2ZfZnVuY3Rpb24gPSBqc29uX29mX2Z1bmN0aW9uX2V4blxuXG4gICgqIEVycm9yX2luZm8udCByZXR1cm5pbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWYgPVxuICAgIG1hdGNoIHJlYWRfanNvbicgfmxleGJ1ZiB3aXRoXG4gICAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgRXJyb3IgZXJyX2luZm9cblxuICBsZXQganNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyBmaWxlbmFtZSA9XG4gICAgdHJ5IGJlZ2luXG4gICAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgICAgbGV0IHJlcyA9IGpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluYyBpblxuICAgICAgICBjbG9zZV9pbiBpbmM7XG4gICAgICAgIHJlc1xuICAgIGVuZFxuICAgIHdpdGggU3lzX2Vycm9yIGVyciAtPiBFcnJvciB7IEVycm9yX2luZm8ubGluZSA9IDA7IHN0YXJ0X2NoYXIgPSAwOyBlbmRfY2hhciA9IDA7IG1zZyA9IGVyciB9XG5cbiAgbGV0IGpzb25fb2ZfZnVuY3Rpb25fZXJyb3JfaW5mbyBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICAoKiBJbnRlcm5hbCBjb21wYXRpYmlsaXR5IGZ1bmN0aW9uIHN1cHBvcnRpbmcgdGhlIHN0cmVhbSBmbGFnICopXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0ID8oc3RyZWFtID0gZmFsc2UpIGxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCByZXMgPSBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgIHwgT2sgTm9uZSAtPiBpZiBzdHJlYW0gdGhlbiBPayBOb25lIGVsc2UgRXJyb3IgXCJlbXB0eSBpbnB1dFwiXG4gICAgfCBPayAoU29tZSByZXMpIC0+IGJlZ2luXG4gICAgICBtYXRjaCBzdHJlYW0gd2l0aFxuICAgICAgfCB0cnVlIC0+IE9rIChTb21lIHJlcylcbiAgICAgIHwgZmFsc2UgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgICAgfCBFT0YgLT4gT2sgKFNvbWUgcmVzKVxuICAgICAgICB8IGV4Y2VwdGlvbiBMZXh4ZXJfdXRpbHMuTGV4X2Vycm9yIGVyciAtPiBFcnJvciBlcnJcbiAgICAgICAgfCB0b2sgLT4gRXJyb3IgKFwianVuayBhZnRlciBlbmQgb2YgSlNPTiB2YWx1ZTogXCIgXiAoVG9rZW5fdXRpbHMudG9rZW5fdG9fc3RyaW5nIHRvaykpXG4gICAgICAgIGVuZFxuICAgICAgZW5kXG4gICAgfCBFcnJvciBzIC0+IEVycm9yIHNcbiAgICBpblxuICAgIG1hdGNoIHJlcyB3aXRoXG4gICAgfCBPayByZXMgLT4gT2sgcmVzXG4gICAgfCBFcnJvciBzIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgcyBpblxuICAgICAgRXJyb3IgZXJyX2luZm9cblxuXG4gICgqIFN0cmVhbS50IHJldHVybmluZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX3N0cmVhbSB+ZmluIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgICAgfCBPayBOb25lIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBPayAoU29tZSByZXMpIC0+IFNvbWUgcmVzXG4gICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBsZXQgKCkgPSBmaW4gKCkgaW5cbiAgICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgICBsZXQgbXNnID0gRXJyb3JfaW5mby50b19zdHJpbmcgZXJyX2luZm8gaW5cbiAgICAgICAgcmFpc2UgKEZhaWx1cmUgbXNnKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9zdHJpbmcgcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbCA/KGZpbiA9IGZ1biAoKSAtPiAoKSkgaW5jID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW4gfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9mdW5jdGlvbiBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGUgZmlsZW5hbWUgPVxuICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgc3RyZWFtX2Zyb21fY2hhbm5lbCB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaW5jKSBpbmNcblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmIGxleGJ1ZiA9XG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICAoKiBTdHJlYW0udCBKc29uX2Vycm9yX2luZm8gcmFpc2luZyBmdW5jdGlvbnMgKilcblxuICBsZXQgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW4gfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgICB8IE9rIE5vbmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IE9rIChTb21lIHJlcykgLT4gU29tZSByZXNcbiAgICAgIHwgRXJyb3IgZXJyIC0+XG4gICAgICAgIGxldCAoKSA9IGZpbiAoKSBpblxuICAgICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgZXJyIGluXG4gICAgICAgIHJhaXNlIChFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW4gfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9mdW5jdGlvbl9lcnJvcl9pbmZvIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgPVxuICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpbmMpIGluY1xuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuZW5kXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBqc29uX3RvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fZmlsZV9leG4gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWwgOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9leG4gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2ZpbGVfaHVtIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2ZpbGVfaHVtX2V4biA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9odW0gOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fY2hhbm5lbF9odW1fZXhuIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2ZpbGVfaHVtIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fY2hhbm5lbCA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2NoYW5uZWxfaHVtIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gdW5pdFxuZW5kXG5cbm1vZHVsZSBNYWtlIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA6IEludGYgPSBzdHJ1Y3RcblxuICBsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbiAgbGV0IGFkZF9oZXhfYnl0ZSBvYyBpID1cbiAgICBvdXRwdXRfY2hhciBvYyAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICAgIG91dHB1dF9jaGFyIG9jIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbiAgbGV0IGVzY2FwZSBvYyBzID1cbiAgICBsZXQgYWRkX2NoYXIgPSBvdXRwdXRfY2hhciBvYyBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gb3V0cHV0X3N0cmluZyBvYyBpblxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgb2MgKGludF9vZl9jaGFyIGMpXG4gICAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICAgIGRvbmVcbiAgIFxuICBsZXQganNvbl90b19jaGFubmVsX2ZtdCBvYyBqc29uIH5lb2wgfmluY3IgfnBzZXAgPSBcbiAgICBsZXQgYWRkX2NoYXIgPSBvdXRwdXRfY2hhciBvYyBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gb3V0cHV0X3N0cmluZyBvYyBpblxuICAgIGxldCBhZGRfcXVvdGVfc3RyaW5nIHMgPSBhZGRfY2hhciAnXCInOyBlc2NhcGUgb2MgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHBzZXAgPSBcIjpcIiBeIHBzZXAgaW5cbiAgICBsZXQgcmVjIGZtdCBvZmYgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAneyc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2Fzc29jIChvZmYgKyBpbmNyKSBvO1xuICAgICAgICBhZGRfc3RyaW5nIGVvbDsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICdbJzsgYWRkX3N0cmluZyBlb2w7IGpzb25fbGlzdCAob2ZmICsgaW5jcikgbDtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+XG4gICAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICAgIGFkZF9jaGFyICcoJzsgYWRkX3N0cmluZyBlb2w7IGpzb25fbGlzdCAob2ZmICsgaW5jcikgdDtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnPCc7IGFkZF9zdHJpbmcgZW9sOyAgdmFyaWFudCAob2ZmICsgaW5jcikgdjtcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBvZmYgbyA9XG4gICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcIiBeIGVvbCBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IHBhaXIgb2ZmIHYgKSBvXG4gICAgYW5kIHBhaXIgb2ZmIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX3N0cmluZyBwc2VwOyBmbXQgb2ZmIHZcbiAgICBhbmQganNvbl9saXN0IG9mZiBsID1cbiAgICAgIGxldCBsZHIgPSBTdHJpbmcubWFrZSBvZmYgJyAnIGluXG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFwiIF4gZW9sIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgZm10IG9mZiB2ICkgbFxuICAgIGFuZCB2YXJpYW50IG9mZiAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfc3RyaW5nIHBzZXA7IGZtdCAob2ZmICsgaW5jcikgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQgMCBqc29uO1xuICAgIGFkZF9zdHJpbmcgZW9sXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbCcgPSBqc29uX3RvX2NoYW5uZWxfZm10IH5lb2w6XCJcIiB+aW5jcjowIH5wc2VwOlwiXCJcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9odW0nID0ganNvbl90b19jaGFubmVsX2ZtdCB+ZW9sOlwiXFxuXCIgfmluY3I6MiB+cHNlcDpcIiBcIlxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWwgb2MganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2NoYW5uZWwnIG9jIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtIG9jIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19jaGFubmVsX2h1bScgb2MganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9leG4gPSBqc29uX3RvX2NoYW5uZWwnXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtX2V4biA9IGpzb25fdG9fY2hhbm5lbF9odW0nXG5cbiAgbGV0IGpzb25fdG9fZmlsZSBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICBsZXQgcmVzID0ganNvbl90b19jaGFubmVsIG9jIGpzb24gaW5cbiAgICBjbG9zZV9vdXQgb2M7XG4gICAgcmVzXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9odW0gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgbGV0IHJlcyA9IGpzb25fdG9fY2hhbm5lbF9odW0gb2MganNvbiBpblxuICAgIGNsb3NlX291dCBvYztcbiAgICByZXNcblxuICBsZXQganNvbl90b19maWxlX2V4biBmaWxlIGpzb24gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGUgaW5cbiAgICB0cnkgKGpzb25fdG9fY2hhbm5lbCcgb2MganNvbjsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQganNvbl90b19maWxlX2h1bV9leG4gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChqc29uX3RvX2NoYW5uZWxfaHVtJyBvYyBqc29uOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCB0b19maWxlID0ganNvbl90b19maWxlX2V4blxuICBsZXQgdG9fZmlsZV9odW0gPSBqc29uX3RvX2ZpbGVfaHVtX2V4blxuICBsZXQgdG9fY2hhbm5lbCA9IGpzb25fdG9fY2hhbm5lbF9leG5cbiAgbGV0IHRvX2NoYW5uZWxfaHVtID0ganNvbl90b19jaGFubmVsX2h1bV9leG5cblxuICBsZXQgc3RyZWFtX3RvX2NoYW5uZWwgb2Mgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4ganNvbl90b19jaGFubmVsX2V4biBvYyBqc29uOyBvdXRwdXRfY2hhciBvYyAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHN0cmVhbV90b19maWxlIGZpbGUgc3RyZWFtID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChzdHJlYW1fdG9fY2hhbm5lbCBvYyBzdHJlYW07IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5lbmRcbiIsIm1vZHVsZSB0eXBlIEludGYgPSBzaWdcbiAgdmFsIGpzb25fdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAoc3RyaW5nLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19zdHJpbmdfZXhuIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHRvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCBqc29uX3RvX3N0cmluZ19odW0gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IChzdHJpbmcsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX3N0cmluZ19odW1fZXhuIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIHRvX3N0cmluZ19odW0gOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwganNvbl90b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19idWZmZXJfZXhuIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2J1ZmZlcl9odW0gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19idWZmZXJfaHVtX2V4biA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19idWZmZXJfaHVtIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fc3RyaW5nIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiBzdHJpbmdcbiAgdmFsIHN0cmVhbV90b19idWZmZXIgOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBJbnRmID0gc3RydWN0XG5cbiAgbGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG4gIGxldCBhZGRfaGV4X2J5dGUgYnVmIGkgPVxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChuaWJibGVfdG9faGV4IChpIGxhbmQgMHgwZikpXG5cbiAgbGV0IGVzY2FwZSBidWYgcyA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgICAgfCAnXFxcXCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXFxcIlxuICAgICAgfCAnXFxiJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcYlwiXG4gICAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICAgIHwgJ1xcbicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXG5cIlxuICAgICAgfCAnXFxyJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcclwiXG4gICAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICAgIHwgJ1xceDAwJy4uJ1xceDFGJ1xuICAgICAgfCAnXFx4N0YnIGFzIGMgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSBidWYgKGludF9vZl9jaGFyIGMpXG4gICAgICB8IF8gICAgICAtPiBhZGRfY2hhciBzLltpXVxuICAgIGRvbmVcbiAgIFxuICBsZXQganNvbl90b19idWZmZXInIGJ1ZiBqc29uID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIGJ1ZiBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcmVjIGZtdCB2YWx1ZSA9XG4gICAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+IGFkZF9jaGFyICd7JzsganNvbl9hc3NvYyBvOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPiBhZGRfY2hhciAnWyc7IGpzb25fbGlzdCBsOyBhZGRfY2hhciAnXSdcbiAgICAgIHwgYE51bGwgLT4gYWRkX3N0cmluZyBcIm51bGxcIlxuICAgICAgfCBgQm9vbCBiIC0+IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9ib29sIGIpXG4gICAgICB8IGBJbnQgaSAtPiBhZGRfaW50IGlcbiAgICAgIHwgYEludGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgRmxvYXQgZiAtPiBhZGRfZmxvYXQgZlxuICAgICAgfCBgRmxvYXRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZyBzIC0+IGFkZF9xdW90ZV9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBUdXBsZSB0IC0+IGFkZF9jaGFyICcoJzsganNvbl9saXN0IHQ7IGFkZF9jaGFyICcpJ1xuICAgICAgfCBgVmFyaWFudCB2IC0+IGFkZF9jaGFyICc8JzsgIHZhcmlhbnQgdjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2MgbyA9XG4gICAgICBsZXQgc2VwID0gcmVmIFwiXCIgaW4gTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBcIixcIjsgcGFpciB2ICkgb1xuICAgIGFuZCBwYWlyIChrLCB2KSA9IGFkZF9xdW90ZV9zdHJpbmcgazsgYWRkX2NoYXIgJzonOyBmbXQgdlxuICAgIGFuZCBqc29uX2xpc3QgbCA9XG4gICAgICBsZXQgc2VwID0gcmVmIFwiXCIgaW4gTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBcIixcIjsgZm10IHYgKSBsXG4gICAgYW5kIHZhcmlhbnQgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX2NoYXIgJzonOyBmbXQgalxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgaW5cbiAgICBmbXQganNvblxuXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW0nIGJ1ZiBqc29uID1cbiAgICBsZXQgYWRkX2NoYXIgPSBCdWZmZXIuYWRkX2NoYXIgYnVmIGluXG4gICAgbGV0IGFkZF9zdHJpbmcgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIGJ1ZiBzOyBhZGRfY2hhciAnXCInIGluXG4gICAgbGV0IGFkZF9pbnQgaSA9IGFkZF9zdHJpbmcgKHN0cmluZ19vZl9pbnQgaSkgaW5cbiAgICBsZXQgYWRkX2Zsb2F0IGYgPSBhZGRfc3RyaW5nIChDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZikgaW5cbiAgICBsZXQgcmVjIGZtdCBsZHIgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwie1xcblwiOyBqc29uX2Fzc29jIChsZHIgXiBcIiAgXCIpIG87XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIltcXG5cIjsganNvbl9saXN0IChsZHIgXiBcIiAgXCIpIGw7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiKFxcblwiOyBqc29uX2xpc3QgKGxkciBeIFwiICBcIikgdDtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiPFwiOyAgdmFyaWFudCAobGRyIF4gXCIgIFwiKSB2O1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIGxkciBvID1cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXFxuXCIgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBwYWlyIGxkciB2ICkgb1xuICAgIGFuZCBwYWlyIGxkciAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9zdHJpbmcgXCI6IFwiOyBmbXQgbGRyIHZcbiAgICBhbmQganNvbl9saXN0IGxkciBsID1cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXFxuXCIgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBmbXQgbGRyICB2ICkgbFxuICAgIGFuZCB2YXJpYW50IGxkciAoaywgaikgPVxuICAgICAgYWRkX3F1b3RlX3N0cmluZyBrO1xuICAgICAgbWF0Y2ggaiB3aXRoXG4gICAgICB8IFNvbWUgaiAtPiBhZGRfc3RyaW5nIFwiOiBcIjsgZm10IChsZHIgXiBcIiAgXCIpIGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IFwiXCIganNvbjtcbiAgICBhZGRfY2hhciAnXFxuJ1xuXG4gIGxldCBqc29uX3RvX3N0cmluZycganNvbiA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAganNvbl90b19idWZmZXInIGJ1ZiBqc29uO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQganNvbl90b19zdHJpbmcganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX3N0cmluZycganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fYnVmZmVyIGJ1ZiBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fYnVmZmVyJyBidWYganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2V4biA9IGpzb25fdG9fc3RyaW5nJ1xuICBsZXQgdG9fc3RyaW5nID0ganNvbl90b19zdHJpbmcnXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9leG4gPSBqc29uX3RvX2J1ZmZlcidcbiAgbGV0IHRvX2J1ZmZlciA9IGpzb25fdG9fYnVmZmVyJ1xuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW0nIGpzb24gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGpzb25fdG9fYnVmZmVyX2h1bScgYnVmIGpzb247XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19odW0ganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX3N0cmluZ19odW0nIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW0gYnVmIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19idWZmZXInIGJ1ZiBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtX2V4biA9IGpzb25fdG9fc3RyaW5nX2h1bSdcbiAgbGV0IHRvX3N0cmluZ19odW0gPSBqc29uX3RvX3N0cmluZ19odW0nXG4gIGxldCBqc29uX3RvX2J1ZmZlcl9odW1fZXhuID0ganNvbl90b19idWZmZXJfaHVtJ1xuICBsZXQgdG9fYnVmZmVyX2h1bSA9IGpzb25fdG9fYnVmZmVyX2h1bSdcblxuICBsZXQgc3RyZWFtX3RvX3N0cmluZyBzdHJlYW0gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCAoKSA9IFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19idWZmZXIgYnVmIGpzb247IEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbicpIHN0cmVhbSBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgc3RyZWFtX3RvX2J1ZmZlciBidWYgc3RyZWFtID1cbiAgICBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fYnVmZmVyIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cblxuZW5kXG4iLCJleGNlcHRpb24gSnNvbl9lcnJvciBvZiBzdHJpbmdcblxubGV0IGpzb25fZXJyb3IgbXNnID0gcmFpc2UgKEpzb25fZXJyb3IgbXNnKVxuXG50eXBlIGxleGVyX3N0YXRlID0ge1xuICBidWYgOiBCdWZmZXIudDtcbiAgbXV0YWJsZSBsbnVtIDogaW50O1xuICBtdXRhYmxlIGJvbCA6IGludDtcbiAgbXV0YWJsZSBmbmFtZSA6IHN0cmluZyBvcHRpb247XG59XG5cbmxldCBpbml0X2xleGVyID9idWY6XyA/Zm5hbWUgPyhsbnVtID0gMSkgKCkgPVxuICB7XG4gICAgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiAgKCogdW51c2VkICopXG4gIDsgbG51bSA9IGxudW1cbiAgOyBib2wgPSAwXG4gIDsgZm5hbWUgPSBmbmFtZVxuICB9XG5cbm1vZHVsZSBDb21tb25fcmVhZGVyIChDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBtb2R1bGUgSW50ZXJuYWxfcmVhZGVyID0gc3RydWN0XG4gICAgbW9kdWxlIExleHhlciA9IENvbXBsaWFudF9sZXh4ZXIuTWFrZShDb21wbGlhbmNlKVxuICAgIG1vZHVsZSBQYXJzZXIgPSBQYXJzZXIuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgUmVhZGVyX3N0cmluZ19maWxlLk1ha2UgKExleHhlcikgKFBhcnNlcilcbiAgZW5kXG5cbiAgdHlwZSBqc29uID0gSW50ZXJuYWxfcmVhZGVyLmpzb25cbiAgdHlwZSB0ID0ganNvblxuICB0eXBlIGpzb25fbGluZSA9IFsgYEpzb24gb2YgdCB8IGBFeG4gb2YgZXhuIF1cblxuICAoKiBIZWxwZXIgZnVuY3Rpb25zICopXG4gIGxldCBlcnJvcl90b19zdHJpbmcgKGVycm9yX2luZm86RXJyb3JfaW5mby50KSBmbmFtZSBsbnVtID1cbiAgICBsZXQgbG51bSA9IG1hdGNoIGxudW0gd2l0aCBTb21lIGxudW0gLT4gbG51bSB8IE5vbmUgLT4gMSBpblxuICAgIGxldCBpbmZvID0geyBlcnJvcl9pbmZvIHdpdGggbGluZSA9IGxudW0gKyBlcnJvcl9pbmZvLmxpbmUgLSAxIH0gaW5cbiAgICBsZXQgZm5hbWUgPSBtYXRjaCBmbmFtZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gXCJMaW5lXCJcbiAgICAgIHwgU29tZSBuYW1lIC0+IFwiRmlsZSBcIiBeIG5hbWUgXiBcIiwgbGluZVwiXG4gICAgaW5cbiAgICBsZXQgbG9jID0gUHJpbnRmLnNwcmludGYgXCIlcyAlZCBjaGFycyAlZC0lZDogXCIgZm5hbWUgaW5mby5saW5lIGluZm8uc3RhcnRfY2hhciBpbmZvLmVuZF9jaGFyIGluXG4gICAgbG9jIF4gaW5mby5tc2dcblxuICBsZXQgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgZiBhIGZuYW1lIGxudW0gPVxuICAgIG1hdGNoIGYgYSB3aXRoXG4gICAgfCBPayBqc29uIC0+IGpzb25cbiAgICB8IEVycm9yIGVycm9yX2luZm8gLT4ganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycm9yX2luZm8gZm5hbWUgbG51bSlcblxuICAoKiBSZWFkZXJzICopXG4gIGxldCBmcm9tX3N0cmluZyA/YnVmOl8gP2ZuYW1lID9sbnVtIHMgPVxuICAgIGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5qc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIHMgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2NoYW5uZWwgP2J1ZjpfID9mbmFtZSA/bG51bSBpbl9jaGFubmVsID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8gaW5fY2hhbm5lbCBmbmFtZSBsbnVtXG5cbiAgbGV0IGZyb21fZmlsZSA/YnVmOl8gP2ZuYW1lID9sbnVtIGZpbGVuYW1lID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2xleGJ1ZiBsZXhzdGF0ZSA/c3RyZWFtIGxleGJ1ZiA9XG4gICAgbGV0IGZuYW1lID0gbGV4c3RhdGUuZm5hbWUgaW5cbiAgICBsZXQgbG51bSA9IFNvbWUgbGV4c3RhdGUubG51bSBpblxuICAgIG1hdGNoIEludGVybmFsX3JlYWRlci5qc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA/c3RyZWFtIGxleGJ1ZiB3aXRoXG4gICAgfCBPayAoU29tZSBqc29uKSAtPiBqc29uXG4gICAgfCBPayBOb25lIC0+IGpzb25fZXJyb3IgXCJCbGFuayBpbnB1dCBkYXRhXCJcbiAgICB8IEVycm9yIGVycm9yX2luZm8gLT4ganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycm9yX2luZm8gZm5hbWUgbG51bSlcblxuICBsZXQgcmVhZF90IGxleHN0YXRlIGxleGJ1ZiA9IGZyb21fbGV4YnVmIGxleHN0YXRlIGxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgc3RyZWFtX2YgYSBmbmFtZSBsbnVtID1cbiAgICBsZXQgc3RyZWFtID0gc3RyZWFtX2YgYSBpblxuICAgIGxldCBmIF9pID1cbiAgICAgIG1hdGNoIFN0cmVhbS5uZXh0IHN0cmVhbSB3aXRoXG4gICAgICB8IHYgLT4gU29tZSB2XG4gICAgICB8IGV4Y2VwdGlvbiBTdHJlYW0uRmFpbHVyZSAtPiBOb25lXG4gICAgICB8IGV4Y2VwdGlvbiBFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbyAtPlxuICAgICAgICBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyX2luZm8gZm5hbWUgbG51bSlcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nID9idWY6XyA/Zm5hbWUgP2xudW0gcyA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyBzIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbCA/YnVmOl8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpID9mbmFtZSA/bG51bSBpbl9jaGFubmVsID1cbiAgICBzdHJlYW1fYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgKEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gfmZpbikgaW5fY2hhbm5lbCBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZSA/bG51bSBmaWxlbmFtZSA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9sZXhidWYgbGV4c3RhdGUgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGxleGJ1ZiA9XG4gICAgbGV0IHN0cmVhbSA9IEludGVybmFsX3JlYWRlci5zdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBTdHJlYW0ubmV4dCBzdHJlYW0gd2l0aFxuICAgICAgfCB2IC0+IFNvbWUgdlxuICAgICAgfCBleGNlcHRpb24gU3RyZWFtLkZhaWx1cmUgLT4gZmluICgpOyBOb25lXG4gICAgICB8IGV4Y2VwdGlvbiBFcnJvcl9pbmZvLkpzb25fZXJyb3JfaW5mbyBlcnJfaW5mbyAtPlxuICAgICAgICBmaW4gKCk7IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJfaW5mbyBsZXhzdGF0ZS5mbmFtZSAoU29tZSBsZXhzdGF0ZS5sbnVtKSlcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuXG4gIGxldCBsaW5lc3RyZWFtX2Zyb21fY2hhbm5lbCA/YnVmOl8gPyhmaW4gPSBmdW4gKCkgLT4gKCkpID9mbmFtZSA/KGxudW0gPSAxKSBpYyA9XG4gICAgbGV0IGYgaSA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGxudW0gPSBsbnVtICsgaSBpblxuICAgICAgICBsZXQgbGluZSA9IGlucHV0X2xpbmUgaWMgaW4gU29tZSAoYEpzb24gKGZyb21fc3RyaW5nID9mbmFtZSB+bG51bSBsaW5lKSlcbiAgICAgIHdpdGhcbiAgICAgICAgfCBFbmRfb2ZfZmlsZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgICAgfCBleG5fIC0+IGZpbiAoKTsgU29tZSAoYEV4biBleG5fKVxuICAgIGluXG4gICAgU3RyZWFtLmZyb20gZlxuXG4gIGxldCBsaW5lc3RyZWFtX2Zyb21fZmlsZSA/YnVmOl8gP2ZuYW1lOl8gP2xudW06XyBmaWxlbmFtZSA9XG4gICAgbGV0IGljID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIGxpbmVzdHJlYW1fZnJvbV9jaGFubmVsIH5maW46KGZ1biAoKSAtPiBjbG9zZV9pbiBpYykgaWNcbmVuZFxuXG5tb2R1bGUgQ29tbW9uX3dyaXRlciAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbW9kdWxlIEludGVybmFsX3dyaXRlciA9IHN0cnVjdFxuICAgIGluY2x1ZGUgV3JpdGVyX3N0cmluZy5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBXcml0ZXJfZmlsZS5NYWtlKENvbXBsaWFuY2UpXG4gICAgaW5jbHVkZSBQcmV0dHkuTWFrZShDb21wbGlhbmNlKVxuICBlbmRcblxuICBsZXQgdG9fc3RhbmRhcmQganNvbiA9XG4gICAgbGV0IHJlYyBtYXAgbm9kZSA9XG4gICAgICBtYXRjaCBub2RlIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gYE51bGxcbiAgICAgIHwgYEJvb2wgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludCBfIGFzIHYgLT4gdiAgKCogaW50IGlzIG9rIG9uIG91dHB1dCAqKVxuICAgICAgfCBgSW50bGl0IHYgLT4gYFN0cmluZyB2XG4gICAgICB8IGBGbG9hdCBfIGFzIHYgLT4gdlxuICAgICAgfCBgRmxvYXRsaXQgdiAtPiBgRmxvYXQgKGZsb2F0X29mX3N0cmluZyB2KVxuICAgICAgfCBgU3RyaW5nIF8gYXMgdiAtPiB2XG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBiZWdpblxuICAgICAgICBtYXRjaCBTdHJpbmcubGVuZ3RoIHMgd2l0aFxuICAgICAgICB8IDAgfCAxIC0+IGBTdHJpbmcgcyAgICAgICAgICgqIG1hbGZvcm1lZCwgc2hvdWxkIGhhdmUgZG91YmxlLXF1b3RlcyBhdCBzdGFydCBhbmQgZW5kICopXG4gICAgICAgIHwgXyAtPiBgU3RyaW5nIChTdHJpbmcuc3ViIHMgMSAoU3RyaW5nLmxlbmd0aCBzIC0gMikpXG4gICAgICAgIGVuZFxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgbClcbiAgICAgIHwgYEFzc29jIGEgLT4gYEFzc29jIChMaXN0Lm1hcCAoZnVuIChpZCwgdikgLT4gKGlkLCBtYXAgdikpIGEpXG4gICAgICB8IGBUdXBsZSB0cGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCB0cGwpXG4gICAgICB8IGBWYXJpYW50IChuYW1lLCBqb3B0KSAtPiBiZWdpblxuICAgICAgICAgbWF0Y2ggam9wdCB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gYFN0cmluZyBuYW1lXG4gICAgICAgICB8IFNvbWUgdiAtPiBgTGlzdCBbIGBTdHJpbmcgbmFtZTsgKG1hcCB2KSBdXG4gICAgICAgIGVuZFxuICAgIGluXG4gICAgbWFwIGpzb25cblxuICAoKiBXcml0ZXJzICopXG5cbiAgbGV0IHRvX3N0cmluZyA/YnVmOl8gP2xlbjpfID8oc3RkID0gZmFsc2UpIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19zdHJpbmcgKHRvX3N0YW5kYXJkIGpzb24pIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX3N0cmluZyBqc29uXG5cbiAgbGV0IHRvX2NoYW5uZWwgP2J1ZjpfID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBvdXRfY2hhbm5lbCBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fY2hhbm5lbCBvdXRfY2hhbm5lbCAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci50b19jaGFubmVsIG91dF9jaGFubmVsIGpzb25cblxuICBsZXQgdG9fZmlsZSA/bGVuOl8gPyhzdGQgPSBmYWxzZSkgZmlsZW5hbWUganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2ZpbGUgZmlsZW5hbWUgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fZmlsZSBmaWxlbmFtZSBqc29uXG5cbiAgbGV0IHRvX291dGJ1ZiA/KHN0ZCA9IGZhbHNlKSBidWYganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2J1ZmZlciBidWYgKHRvX3N0YW5kYXJkIGpzb24pIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2J1ZmZlciBidWYganNvblxuXG4gIGxldCB0b19vdXRwdXQgP2J1ZjpfID9sZW46XyA/c3RkIG91dCBqc29uID1cbiAgICBsZXQgc3RyID0gdG9fc3RyaW5nID9zdGQganNvbiBpblxuICAgIG91dCNvdXRwdXQgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4gIGxldCBzdHJlYW1fdG9fc3RyaW5nID9idWY6XyA/bGVuOl8gP3N0ZCBzdHJlYW0gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGxldCAoKSA9IFN0cmVhbS5pdGVyXG4gICAgICAoZnVuIGpzb24gLT4gdG9fb3V0YnVmID9zdGQgYnVmIGpzb247ICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cbiAgICBpblxuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQgc3RyZWFtX3RvX2NoYW5uZWwgP2J1ZjpfID9sZW46XyA/c3RkIG9jIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2NoYW5uZWwgP3N0ZCBvYyBqc29uOyBvdXRwdXRfY2hhciBvYyAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHN0cmVhbV90b19maWxlID9sZW46XyA/c3RkIGZpbGVuYW1lIHN0cmVhbSA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZW5hbWUgaW5cbiAgICB0cnkgKHN0cmVhbV90b19jaGFubmVsID9zdGQgb2Mgc3RyZWFtOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuXG4gIGxldCBzdHJlYW1fdG9fb3V0YnVmID9zdGQgYnVmIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX291dGJ1ZiA/c3RkIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW1cblxuICBsZXQgd3JpdGVfdCBidWYganNvbiA9IHRvX291dGJ1ZiBidWYganNvblxuXG4gICgqIFByZXR0eSBwcmludGVycyAqKVxuICBsZXQgcHJldHR5X3ByaW50ID8oc3RkID0gZmFsc2UpIG91dCBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50IG91dCAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnQgb3V0IGpzb25cblxuICBsZXQgcHJldHR5X3RvX3N0cmluZyA/KHN0ZCA9IGZhbHNlKSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX3N0cmluZyAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fc3RyaW5nIGpzb25cblxuICBsZXQgcHJldHR5X3RvX2NoYW5uZWwgPyhzdGQgPSBmYWxzZSkgb2MganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19jaGFubmVsIG9jICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19jaGFubmVsIG9jIGpzb25cblxuICAoKiBVdGlsaXRpZXMgKilcbiAgbGV0IHNob3cganNvbiA9IFV0aWxpdGllcy5qc29uX3RvX3N0cmluZ19yZXByIGpzb25cbiAgbGV0IHBwIG91dCBqc29uID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHNob3cganNvbilcbmVuZFxuXG5tb2R1bGUgQmFzaWMgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPSBKc29uLkJhc2ljLmpzb25cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uQmFzaWMuanNvblxuXG4gICAgb3BlbiBUb2tlbnNcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHNcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IF8gPSBDT01QTElBTkNFX0VSUk9SIFwiSW50ZWdlciBvdXQgb2YgYm91bmRzXCJcblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gZmFsc2VcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSBmYWxzZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgRmxvYXQgKGZsb2F0X29mX3N0cmluZyBzKVxuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50IGlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZyBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgX2wgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgbGV0IHZhcmlhbnQgX2wgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdCBmXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0ICgxLjAgLy4gMC4wKVxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdCAoLTEuMCAvLiAwLjApXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0ICgwLjAgLy4gMC4wKVxuICAgIHwgYEZsb2F0bGl0IF8gLT4gIHJhaXNlIChGYWlsdXJlIFwiZmxvYXRsaXQgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuXG4gICAgbW9kdWxlIFN0cmVhbSA9IHN0cnVjdFxuICAgICAgbGV0IG51bWJlciA9IG51bWJlclxuICAgICAgbGV0IGxhcmdlaW50ID0gbGFyZ2VpbnRcbiAgICAgIGxldCBpbnRlZ2VyID0gaW50ZWdlclxuICAgICAgbGV0IG51bGwgPSBudWxsXG4gICAgICBsZXQgc3RyaW5nID0gc3RyaW5nXG4gICAgICBsZXQgYm9vbCA9IGJvb2xcblxuICAgICAgbGV0IGFycmF5X3N0YXJ0ICgpID0gYEFzXG4gICAgICBsZXQgYXJyYXlfZW5kICgpID0gYEFlXG4gICAgICBsZXQgb2JqZWN0X3N0YXJ0ICgpID0gYE9zXG4gICAgICBsZXQgb2JqZWN0X2VuZCAoKSA9IGBPZVxuICAgICAgbGV0IHR1cGxlX3N0YXJ0ICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInZhcmlhbnRzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkJhc2ljLnNvcnRcblxuICBtb2R1bGUgVXRpbCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgUHJvY2Vzcy5CYXNpY1xuICBlbmRcbmVuZFxuXG5tb2R1bGUgU2FmZSA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9XG4gICAgICBbXG4gICAgICB8IGBOdWxsXG4gICAgICB8IGBCb29sIG9mIGJvb2xcbiAgICAgIHwgYEludCBvZiBpbnRcbiAgICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICAgIHwgYEZsb2F0IG9mIGZsb2F0XG4gICAgICB8IGBTdHJpbmcgb2Ygc3RyaW5nXG4gICAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgICBdXG5cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uRXh0ZW5kZWQuanNvbiAgKCogeW9qc29uIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyAqKVxuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IExleHhlcl91dGlscy51bmVzY2FwZV9zdHJpbmcgc1xuICAgIGxldCBsZXhfbnVtYmVyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2ludGVnZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfbGFyZ2VpbnQgdG9rZW4gPSB0b2tlblxuXG4gICAgbGV0IGxleF92YXJpYW50IF8gPSB0cnVlXG4gICAgbGV0IGxleF90dXBsZSBfID0gdHJ1ZVxuXG4gICAgbGV0IGNvbW1lbnRfY2hlY2sgKCkgPSBPayAoKVxuXG4gICAgbGV0IG51bWJlcl90b19zdHJpbmcgZiA9XG4gICAgICBtYXRjaCBjbGFzc2lmeV9mbG9hdCBmIHdpdGhcbiAgICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPlxuICAgICAgICBKc29uX2Zsb2F0LnN0cmluZ19vZl9mbG9hdF9qc29uIGZcbiAgICAgIHwgRlBfaW5maW5pdGUgLT5cbiAgICAgICAgaWYgZiA8IDAuIHRoZW4gXCItSW5maW5pdHlcIiBlbHNlIFwiSW5maW5pdHlcIlxuICAgICAgfCBGUF9uYW4gLT5cbiAgICAgICAgXCJOYU5cIlxuXG4gICAgbGV0IGxhcmdlaW50IHMgPSBgSW50bGl0IHNcbiAgICBsZXQgaW50ZWdlciBpID0gYEludCBpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmcgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIGwgPSBgVHVwbGUgbFxuICAgIGxldCB2YXJpYW50IGsgdiA9IGBWYXJpYW50IChrLCB2KVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0IGZcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXQgKDEuMCAvLiAwLjApXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0ICgtMS4wIC8uIDAuMClcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXQgKDAuMCAvLiAwLjApXG4gICAgfCBgRmxvYXRsaXQgXyAtPiAgcmFpc2UgKEZhaWx1cmUgXCJmbG9hdGxpdCBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBzYWZlIG1vZGVcIilcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IGBUc1xuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IGBUZVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSBgVnNcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IGBWZVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuRXh0ZW5kZWQuc29ydFxuXG4gIGxldCB0b19iYXNpYyBqc29uIDogQmFzaWMuanNvbiA9XG4gICAgbGV0IHJlYyBtYXAgbm9kZSA9XG4gICAgICBtYXRjaCBub2RlIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gYE51bGxcbiAgICAgIHwgYEJvb2wgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludCBfIGFzIHYgLT4gdlxuICAgICAgfCBgSW50bGl0IHYgLT4gYFN0cmluZyB2XG4gICAgICB8IGBGbG9hdCBfIGFzIHYgLT4gdlxuICAgICAgfCBgU3RyaW5nIF8gYXMgdiAtPiB2XG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCBsKVxuICAgICAgfCBgQXNzb2MgYSAtPiBgQXNzb2MgKExpc3QubWFwIChmdW4gKGlkLCB2KSAtPiAoaWQsIG1hcCB2KSkgYSlcbiAgICAgIHwgYFR1cGxlIHRwbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIHRwbClcbiAgICAgIHwgYFZhcmlhbnQgKG5hbWUsIGpvcHQpIC0+XG4gICAgICAgICBtYXRjaCBqb3B0IHdpdGhcbiAgICAgICAgIHwgTm9uZSAtPiBgU3RyaW5nIG5hbWVcbiAgICAgICAgIHwgU29tZSB2IC0+IGBMaXN0IFsgYFN0cmluZyBuYW1lOyAobWFwIHYpIF1cbiAgICBpblxuICAgIG1hcCBqc29uXG5cbiAgbW9kdWxlIFV0aWwgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFByb2Nlc3MuWW9qc29uX3NhZmVcbiAgZW5kXG5lbmRcblxubW9kdWxlIFJhdyA9IHN0cnVjdFxuICBtb2R1bGUgQ29tcGxpYW5jZSA9IHN0cnVjdFxuXG4gIHR5cGUganNvbiA9XG4gICAgW1xuICAgIHwgYE51bGxcbiAgICB8IGBCb29sIG9mIGJvb2xcbiAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgfCBgRmxvYXRsaXQgb2Ygc3RyaW5nXG4gICAgfCBgU3RyaW5nbGl0IG9mIHN0cmluZ1xuICAgIHwgYEFzc29jIG9mIChzdHJpbmcgKiBqc29uKSBsaXN0XG4gICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICB8IGBWYXJpYW50IG9mIChzdHJpbmcgKiBqc29uIG9wdGlvbilcbiAgICBdXG5cbiAgICB0eXBlIGpzb25fc3RyZWFtID0gSnNvbl9zdHJlYW0uRXh0ZW5kZWQuanNvbiAoKiB5b2pzb24gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgc3RyZWFtaW5nICopXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gXCJcXFwiXCIgXiBzIF4gXCJcXFwiXCJcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IHRva2VuID0gdG9rZW5cblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gdHJ1ZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IHRydWVcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEludGxpdCBzXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnRsaXQgKHN0cmluZ19vZl9pbnQgaSlcbiAgICBsZXQgbnVsbCA9IGBOdWxsXG4gICAgbGV0IHN0cmluZyBzID0gYFN0cmluZ2xpdCBzXG4gICAgbGV0IGJvb2wgYiA9IGBCb29sIGJcbiAgICBsZXQgYXNzb2MgYSA9IGBBc3NvYyBhXG4gICAgbGV0IGxpc3QgbCA9IGBMaXN0IGxcbiAgICBsZXQgdHVwbGUgbCA9IGBUdXBsZSBsXG4gICAgbGV0IHZhcmlhbnQgayB2ID0gYFZhcmlhbnQgKGssIHYpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXRsaXQgKHN0cmluZ19vZl9mbG9hdCBmKVxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdGxpdCBcIkluZmluaXR5XCJcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXRsaXQgXCItSW5maW5pdHlcIlxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdGxpdCBcIk5hTlwiXG4gICAgfCBgRmxvYXRsaXQgZiAtPiAgYEZsb2F0bGl0IGZcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IGBUc1xuICAgICAgbGV0IHR1cGxlX2VuZCAoKSA9IGBUZVxuICAgICAgbGV0IHZhcmlhbnRfc3RhcnQgKCkgPSBgVnNcbiAgICAgIGxldCB2YXJpYW50X2VuZCAoKSA9IGBWZVxuICAgICAgbGV0IG5hbWUgcyA9IGBOYW1lIHNcbiAgICBlbmRcbiAgZW5kXG5cbiAgaW5jbHVkZSBDb21tb25fcmVhZGVyKENvbXBsaWFuY2UpXG4gIGluY2x1ZGUgQ29tbW9uX3dyaXRlcihDb21wbGlhbmNlKVxuXG4gIGxldCBwcmV0dGlmeSA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gcHJldHR5X3RvX3N0cmluZyA/c3RkXG4gIGxldCBjb21wYWN0ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiB0b19zdHJpbmcgP3N0ZFxuXG4gIGxldCBlcXVhbCA9IFV0aWxpdGllcy5lcXVhbFxuICBsZXQgc29ydCA9IFByb2Nlc3MuRXh0ZW5kZWQuc29ydFxuZW5kXG4iLCIoKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW5zcGlyZWQgYnkgU2lldmU6XG4gICAtIGh0dHBzOi8vY2FjaGVtb24uZ2l0aHViLmlvL1NJRVZFLXdlYnNpdGUvXG4gICAtIGh0dHBzOi8vanVuY2hlbmd5YW5nLmNvbS9wdWJsaWNhdGlvbi9uc2RpMjQtU0lFVkUucGRmXG5cbiAgIFNpZXZlIHVzZXMgYSBkb3VibHktbGlua2VkIGxpc3QgYW5kIGEgXCJoYWQgcG9pbnRlclwiLlxuICAgV2UgdXNlIGEgRklGTyBhbmQgcmVwbGFjZSB0aGUgaGFuZCBieSBhbm90aGVyIEZJRk8uXG5cbiAgIFRoZSBpZGVhIHdhcyBzdWdnZXN0ZWQgYnkgQGFydC13ICopXG5cbigqIEEgW1JBX3F1ZXVlXSBwYWlycyBhIFtRdWV1ZS50XSB3aXRoIGEgW0hhc2h0YmwudF0gdG8gZW5hYmxlIGVmZmljaWVudCByYW5kb21cbiAgIGFjY2VzcyB0byBlbGVtZW50cyBvZiB0aGUgcXVldWUuICopXG5tb2R1bGUgUkFfcXVldWUgKEtleSA6IE1hcC5PcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFF1ZXVlID0gQ0NGUXVldWVcbiAgbW9kdWxlIE1hcCA9IE1hcC5NYWtlIChLZXkpXG5cbiAgdHlwZSAndiB0ID0geyBxdWV1ZSA6IEtleS50IFF1ZXVlLnQ7IGVsdHMgOiAndiBNYXAudCB9XG5cbiAgbGV0IHNpemUgdCA9IFF1ZXVlLnNpemUgdC5xdWV1ZVxuICBsZXQgY3JlYXRlICgpID0geyBxdWV1ZSA9IFF1ZXVlLmVtcHR5OyBlbHRzID0gTWFwLmVtcHR5IH1cbiAgbGV0IGVtcHR5ID0geyBxdWV1ZSA9IFF1ZXVlLmVtcHR5OyBlbHRzID0gTWFwLmVtcHR5IH1cbiAgbGV0IGFkZCB0IGsgeCA9IHsgcXVldWUgPSBRdWV1ZS5jb25zIGsgdC5xdWV1ZTsgZWx0cyA9IE1hcC5hZGQgayB4IHQuZWx0cyB9XG5cbiAgbGV0IHRha2Vfb3B0IHQgPVxuICAgIG1hdGNoIFF1ZXVlLnRha2VfYmFjayB0LnF1ZXVlIHdpdGhcbiAgICB8IE5vbmUgLT4gKHQsIE5vbmUpXG4gICAgfCBTb21lIChxdWV1ZSwgaykgLT5cbiAgICAgICAgbGV0IHggPSBNYXAuZmluZCBrIHQuZWx0cyBpblxuICAgICAgICAoeyBxdWV1ZTsgZWx0cyA9IE1hcC5yZW1vdmUgayB0LmVsdHMgfSwgU29tZSAoaywgeCkpXG5cbiAgbGV0IGZpbmQgdCBrID0gTWFwLmZpbmRfb3B0IGsgdC5lbHRzXG5lbmRcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICB0eXBlIGtleVxuICAoKiogVGhlIHR5cGUgb2YgdGhlIGNhY2hlIGtleXMuICopXG5cbiAgdHlwZSArISdhIHRcbiAgKCoqIFRoZSB0eXBlIG9mIGNhY2hlcyBmcm9tIHR5cGUgW2tleV0gdG8gdHlwZSBbJ2FdLiAqKVxuXG4gIHZhbCBjcmVhdGUgOiBzaXplOmludCAtPiAnYSB0XG4gICgqKiBDcmVhdGVzIGFuIGVtcHR5IGNhY2hlLiAqKVxuXG4gIHZhbCBpbnNlcnQgOlxuICAgICdhIHQgLT5cbiAgICA/b25faW5zZXJ0OignYSAtPiB1bml0KSAtPlxuICAgID9vbl9ldmljdDooJ2EgLT4gdW5pdCkgLT5cbiAgICBrZXkgLT5cbiAgICAnYSAtPlxuICAgICdhIHQgKiBib29sXG5lbmRcblxubW9kdWxlIE1ha2UgKEtleSA6IE1hcC5PcmRlcmVkVHlwZSkgOiBTIHdpdGggdHlwZSBrZXkgPSBLZXkudCA9IHN0cnVjdFxuICBtb2R1bGUgUkFfcXVldWUgPSBSQV9xdWV1ZSAoS2V5KVxuXG4gIHR5cGUga2V5ID0gS2V5LnRcbiAgdHlwZSAnYSBlbHQgPSB7IGVsdCA6ICdhOyB2aXNpdGVkIDogYm9vbCByZWYgfVxuICB0eXBlICdhIHQgPSB7IHExIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHEyIDogJ2EgZWx0IFJBX3F1ZXVlLnQ7IHNpemUgOiBpbnQgfVxuXG4gIGxldCBjcmVhdGUgfnNpemUgPVxuICAgIGxldCBxMSA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCBxMiA9IFJBX3F1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIHsgcTE7IHEyOyBzaXplIH1cblxuICAoKiogW2V2aWN0X29uZSB0XSBmaXJzdCB0cmllcyB0byBldmljdCB0aGUgbGFzdCBlbGVtZW50IG9mIFt0LnEyXS5cbiAgICBJZiB0aGF0IGxhc3QgZWxlbWVudCBoYXMgYmVlbiB2aXNpdGVkLCBpdCBpcyBtb3ZlZCB0byB0aGUgaGVhZCBvZiBbdC5xMV0uXG4gICAgTG9vcCB1bnRpbCBhbiBlbGVtZW50IGlzIGV2aWN0ZWQgb3IgW3QucTJdIGlzIGVtcHR5LlxuICAgIElmIFt0LnEyXSBpcyBlbXB0eSB3ZSBwZXJmb3JtIHRoZSBzYW1lIHByb2Nlc3MgYnkgaW52ZXJzaW5nIHRoZSByb2xlcyBvZlxuICAgIFt0LnEyXSBhbmQgW3QucTFdLlxuXG4gICAgLyFcXCBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9vcCBpZiBib3RoIHF1ZXVlcyBhcmUgZW1wdHkuICopXG4gIGxldCByZWMgZXZpY3Rfb25lIH5vbl9ldmljdCB0ID0gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTIgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTIgd2l0aFxuICAgIHwgcTIsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHExID0gUkFfcXVldWUuYWRkIHQucTEgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3EyIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTIsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHEyIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTEgfm9uX2V2aWN0IHRcblxuICBhbmQgZXZpY3RfcTEgfm9uX2V2aWN0IHQgPVxuICAgIG1hdGNoIFJBX3F1ZXVlLnRha2Vfb3B0IHQucTEgd2l0aFxuICAgIHwgcTEsIFNvbWUgKGssIHsgZWx0OyB2aXNpdGVkIH0pIHdoZW4gIXZpc2l0ZWQgLT5cbiAgICAgICAgbGV0IHEyID0gUkFfcXVldWUuYWRkIHQucTIgayB7IGVsdDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgIGV2aWN0X3ExIH5vbl9ldmljdCB7IHQgd2l0aCBxMTsgcTIgfVxuICAgIHwgcTEsIFNvbWUgKF9rLCB7IGVsdDsgXyB9KSAtPlxuICAgICAgICBvbl9ldmljdCBlbHQ7XG4gICAgICAgIHsgdCB3aXRoIHExIH1cbiAgICB8IF8sIE5vbmUgLT4gZXZpY3RfcTIgfm9uX2V2aWN0IHRcblxuICBsZXQgcmVjIGV2aWN0IH5vbl9ldmljdCB0ID1cbiAgICBsZXQgc2l6ZSA9IFJBX3F1ZXVlLnNpemUgdC5xMSArIFJBX3F1ZXVlLnNpemUgdC5xMiBpblxuICAgIGlmIHNpemUgPiAwICYmIHNpemUgPiB0LnNpemUgdGhlbiBldmljdCB+b25fZXZpY3QgKGV2aWN0X29uZSB+b25fZXZpY3QgdClcbiAgICBlbHNlIHRcblxuICBsZXQgaW5zZXJ0IHQgPyhvbl9pbnNlcnQgPSBpZ25vcmUpID8ob25fZXZpY3QgPSBpZ25vcmUpIGsgeCA9XG4gICAgbWF0Y2ggUkFfcXVldWUuZmluZCB0LnExIGsgd2l0aFxuICAgIHwgU29tZSB7IGVsdDsgdmlzaXRlZCB9IC0+XG4gICAgICAgICgqIElmIHRoZSBlbHQgaXMgYWxyZWFkeSBpbiBxMSB3ZSBtYXJrIGl0IGFzIHZpc2l0ZWQgKilcbiAgICAgICAgdmlzaXRlZCA6PSB0cnVlO1xuICAgICAgICAodCwgZmFsc2UpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggUkFfcXVldWUuZmluZCB0LnEyIGsgd2l0aFxuICAgICAgICAoKiBJZiB0aGUgZWx0IGlzIGFscmVhZHkgaW4gcTIgd2UgbWFyayBpdCBhcyB2aXNpdGVkICopXG4gICAgICAgIHwgU29tZSB7IGVsdDsgdmlzaXRlZCB9IC0+XG4gICAgICAgICAgICB2aXNpdGVkIDo9IHRydWU7XG4gICAgICAgICAgICAodCwgZmFsc2UpXG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgKCogSWYgdGhlIGVsdCB3YXMgbm90IHlldCBpbiB0aGUgY2FjaGUgd2UgYWRkIGl0IHRvIHExICopXG4gICAgICAgICAgICBsZXQgcTEgPSBSQV9xdWV1ZS5hZGQgdC5xMSBrIHsgZWx0ID0geDsgdmlzaXRlZCA9IHJlZiBmYWxzZSB9IGluXG4gICAgICAgICAgICBvbl9pbnNlcnQgeDtcbiAgICAgICAgICAgIChldmljdCB+b25fZXZpY3QgeyB0IHdpdGggcTEgfSwgdHJ1ZSkpXG5lbmRcbiIsImluY2x1ZGUgQ29udGFpbmVyc0xhYmVsc1xubW9kdWxlIEZGQ2FjaGUgPSBGRkNhY2hlXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIFNldCA9IFNldC5NYWtlIChTdHJpbmcpXG5lbmRcblxubW9kdWxlIFlvanNvbiA9IHN0cnVjdFxuICBpbmNsdWRlIEpzb254dC5Zb2pzb25cbmVuZFxuXG5tb2R1bGUgRW5jb2RpbmdzID0gc3RydWN0XG4gIGxldCB0b19qc3RyIHQgPSBKdi5yZXByIHQgfD4gQnJyLkpzb24uZW5jb2RlXG4gIGxldCB0b19qdiB0ID0gdG9fanN0ciB0IHw+IEp2Lm9mX2pzdHJcblxuICBsZXQgb2ZfanN0ciBqc3RyID1cbiAgICBtYXRjaCBCcnIuSnNvbi5kZWNvZGUganN0ciB3aXRoXG4gICAgfCBPayB2IC0+IE9rIChPYmoubWFnaWMgdilcbiAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBCcnIuQ29uc29sZS5lcnJvciBbIGVyciBdO1xuICAgICAgICBFcnJvciAoYE1zZyBcIkZhaWxlZCB0byB1bm1hcnNoYWwgZGF0YVwiKVxuXG4gIGxldCBvZl9qdiBqdiA9IEp2LnRvX2pzdHIganYgfD4gb2ZfanN0clxuZW5kXG5cbmxldCByYW5kb21fc3RhdGUgPSBSYW5kb20uZ2V0X3N0YXRlICgpXG5sZXQgbmV3X3V1aWRfdjQgKCkgPSBVdWlkbS52NF9nZW4gcmFuZG9tX3N0YXRlICgpXG5cbigqKiBbdGVlIGYgeF0gYXBwbGllcyBbZl0gdG8gW3hdIGFuZCByZXR1cm5zIFt4XSAqKVxubGV0IHRlZSBmIHggPVxuICBsZXQgKCkgPSBmIHggaW5cbiAgeFxuIiwib3BlbiBTdGRcblxubW9kdWxlIENsYXNzZXMgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmcuU2V0XG5cbiAgdHlwZSBub25yZWMgdCA9IHRcbiAgdHlwZSBtb2RpZmllciA9IEFkZCBvZiBzdHJpbmcgbGlzdCB8IFJlcGxhY2Ugb2Ygc3RyaW5nIGxpc3RcblxuICBsZXQgbWFrZSBsID0gb2ZfbGlzdCBsXG4gIGxldCB1cGRhdGUgdCA9IGZ1bmN0aW9uIEFkZCBsIC0+IGFkZF9saXN0IHQgbCB8IFJlcGxhY2UgbCAtPiBvZl9saXN0IGxcblxuICBsZXQgdG9fc3RyaW5nIHQgPVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biBjIC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuIChcbiAgICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgICBQcmludGYuYnByaW50ZiBiIFwiJXNcIiBjKVxuICAgICAgICBlbHNlIFByaW50Zi5icHJpbnRmIGIgXCIgJXNcIiBjKVxuICAgICAgdDtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuXG4gIGxldCBhdF9vZl9zdHJpbmcgYyA9IEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGNcblxuICBtb2R1bGUgUCA9IHN0cnVjdFxuICAgIGxldCB0b19hdCB0ID1cbiAgICAgIExpc3QubWFwICh0b19saXN0IHQpIH5mOihmdW4gYyAtPiBgUCAoQnJyLkF0LmNsYXNzJyBAQCBKc3RyLnYgYykpXG4gIGVuZFxuZW5kXG5cbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxudHlwZSB0ID0geyBjbGFzc2VzIDogQ2xhc3Nlcy50OyBhdHRycyA6IEF0LnQgRWx3ZC5jb2wgfVxuKCoqIENsYXNzZXMgYXR0cmlidXRlcyBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGJ1dCBhcmUgZXZlbnR1YWxseSB0cmFuc2xhdGVkIHRvIEF0LnQgKilcblxubGV0IGVtcHR5ID0geyBjbGFzc2VzID0gQ2xhc3Nlcy5lbXB0eTsgYXR0cnMgPSBbXSB9XG5cbmxldCB0b19hdCA/aWQgdCA9XG4gIGxldCBhdCA9IExpc3QucmV2X2FwcGVuZCB0LmF0dHJzIEBAIENsYXNzZXMuUC50b19hdCB0LmNsYXNzZXMgaW5cbiAgbWF0Y2ggaWQgd2l0aCBOb25lIC0+IGF0IHwgU29tZSBpZCAtPiBgUCAoQXQuaWQgKEpzdHIudiBpZCkpIDo6IGF0XG5cbmxldCBjbGFzc2VzIGwgPSB7IGVtcHR5IHdpdGggY2xhc3NlcyA9IENsYXNzZXMub2ZfbGlzdCBsIH1cblxubGV0IHVuaW9uIHsgY2xhc3NlczsgYXR0cnMgfSB7IGNsYXNzZXMgPSBjOyBhdHRycyA9IGEgfSA9XG4gIHsgY2xhc3NlcyA9IENsYXNzZXMudW5pb24gY2xhc3NlcyBjOyBhdHRycyA9IExpc3QucmV2X2FwcGVuZCBhdHRycyBhIH1cblxubW9kdWxlIEJ1aWxkZXIgPSBzdHJ1Y3RcbiAgdHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQXQgb2YgQXQudFxuXG4gIGxldCAoICsgKSB0ID0gZnVuY3Rpb25cbiAgICB8IEMgY2xhc3NuYW1lIC0+XG4gICAgICAgIGxldCBjbGFzc2VzID0gQ2xhc3Nlcy5hZGQgY2xhc3NuYW1lIHQuY2xhc3NlcyBpblxuICAgICAgICB7IHQgd2l0aCBjbGFzc2VzIH1cbiAgICB8IEF0IGF0IC0+XG4gICAgICAgIGxldCBhdHRycyA9IGBQIGF0IDo6IHQuYXR0cnMgaW5cbiAgICAgICAgeyB0IHdpdGggYXR0cnMgfVxuXG4gIGxldCB3aXRoX2lkIHMgdCA9XG4gICAgbGV0IGF0dHJzID0gYFAgKEF0LmlkIEBAIEpzdHIudiBzKSA6OiB0LmF0dHJzIGluXG4gICAgdG9fYXQgeyB0IHdpdGggYXR0cnMgfVxuZW5kXG5cbigqIG5ldyBBUEkgKilcblxubGV0IGFkZCBhdF9uYW1lIHYgYXQgPVxuICBsZXQgYSA9XG4gICAgbWF0Y2ggdiB3aXRoXG4gICAgfCBgUCB2IC0+IGBQIChBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpXG4gICAgfCBgUiB2IC0+IGBSIChMd2QubWFwIHYgfmY6KGZ1biB2IC0+IEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikpXG4gICAgfCBgUyBfIC0+IGZhaWx3aXRoIFwiVE9ETyBub3QgaW1wbGVtZW50ZWRcIlxuICBpblxuICBhIDo6IGF0XG5cbmxldCBhZGRfYm9vbCBhdF8gdiBhdCA9IG1hdGNoIHYgd2l0aCBmYWxzZSAtPiBhdCB8IHRydWUgLT4gYFAgYXRfIDo6IGF0XG5cbmxldCBhZGRfc3RyIGF0X25hbWUgdiBhdCA9XG4gIG1hdGNoIHYgd2l0aCBcIlwiIC0+IGF0IHwgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KSA6OiBhdFxuXG5sZXQgYWRkX29wdCBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KSA6OiBhdFxuXG50eXBlIGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcbnR5cGUgJ2F0IHQnID0gJ2F0IEVsd2QuY29sXG5cbmxldCBtYXBfY29sIGYgPSBmdW5jdGlvblxuICB8IGBQIHYgLT4gYFAgKGYgdilcbiAgfCBgUiB2IC0+IGBSIChMd2QubWFwIHYgfmYpXG4gIHwgYFMgdiAtPiBgUyAoTHdkX3NlcS5tYXAgZiB2KVxuXG5sZXQgb2ZfYXQgPSBmdW5jdGlvbiBBIGF0IC0+IGF0IHwgQyBuYW1lIC0+IEF0LmNsYXNzJyAoSnN0ci52IG5hbWUpXG5sZXQgY29ucyBhdCB0ID0gbWFwX2NvbCBvZl9hdCBhdCA6OiB0XG5sZXQgY2xhc3NfIG4gPSBjb25zIChtYXBfY29sIChmdW4gbiAtPiBDIG4pIG4pIFtdXG5cbm1vZHVsZSBPID0gc3RydWN0XG4gIHR5cGUgbm9ucmVjIGF0ID0gYXQgPSBDIG9mIHN0cmluZyB8IEEgb2YgQXQudFxuXG4gIGxldCB2IGF0ID0gY29ucyBhdCBbXVxuICBsZXQgKCBAOjogKSBhdCB0ID0gY29ucyBhdCB0XG5lbmRcblxubGV0IHdpdGhfaWQgcyB0ID1cbiAgbGV0IGF0dHJzID0gYFAgKEF0LmlkIEBAIEpzdHIudiBzKSA6OiB0LmF0dHJzIGluXG4gIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlICdhIG9uZV9tYXliZV9yZWFjdGl2ZSA9IFsgYFAgb2YgJ2EgfCBgUiBvZiAnYSBMd2QudCBdXG50eXBlICdhIG1heWJlX3JlYWN0aXZlID0gWyAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgfCBgUyBvZiAnYSBMd2Rfc2VxLnQgTHdkLnQgXVxuXG5sZXQgaXNfcHVyZV9lbGVtZW50ID0gZnVuY3Rpb25cbiAgfCBgUCBfIC0+IHRydWVcbiAgfCBgUiB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuICB8IGBTIHggLT4gT3B0aW9uLmlzX3NvbWUgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBwdXJlIHQgPSBgUCB0XG5sZXQgcmVhY3RpdmUgdCA9IGBSIHRcbmxldCBzZXF1ZW5jZSB0ID0gYFMgdFxuXG5tb2R1bGUgVW5pdCA9IHN0cnVjdFxuICAoKiogQ29udmVyc2lvbiBiZXR3ZWVuIENTUyB1bml0cy4gVmVyeSBlYXJseSBXSVAuICopXG4gIHR5cGUgdCA9IFB4IG9mIGZsb2F0IHwgUmVtIG9mIGZsb2F0IHwgRW0gb2YgZmxvYXRcblxuICBsZXQgb2Zfc3RyaW5nIHMgPVxuICAgICgqIFRPRE86IHByb3BlciBwYXJzaW5nICopXG4gICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJweFwiIHMgd2l0aFxuICAgIHwgU29tZSBpIC0+IChcbiAgICAgICAgbWF0Y2ggSW50Lm9mX3N0cmluZyBpIHdpdGhcbiAgICAgICAgfCBTb21lIGkgLT4gU29tZSAoUHggKGZsb2F0X29mX2ludCBpKSlcbiAgICAgICAgfCBOb25lIC0+IEZsb2F0Lm9mX3N0cmluZ19vcHQgaSB8PiBPcHRpb24ubWFwIChmdW4gaSAtPiBQeCBpKSlcbiAgICB8IE5vbmUgLT4gKFxuICAgICAgICBtYXRjaCBTdHJpbmcuY2hvcF9zdWZmaXggfnN1ZjpcInJlbVwiIHMgd2l0aFxuICAgICAgICB8IFNvbWUgZiAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGYgfD4gT3B0aW9uLm1hcCAoZnVuIGYgLT4gUmVtIGYpXG4gICAgICAgIHwgTm9uZSAtPiAoXG4gICAgICAgICAgICBtYXRjaCBTdHJpbmcuY2hvcF9zdWZmaXggfnN1ZjpcImVtXCIgcyB3aXRoXG4gICAgICAgICAgICB8IFNvbWUgZiAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGYgfD4gT3B0aW9uLm1hcCAoZnVuIGYgLT4gUmVtIGYpXG4gICAgICAgICAgICB8IE5vbmUgLT4gTm9uZSkpXG5cbiAgbGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBQeCBpIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZweFwiIGlcbiAgICB8IFJlbSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZyZW1cIiBmXG4gICAgfCBFbSBmIC0+IFByaW50Zi5zcHJpbnRmIFwiJWZlbVwiIGZcblxuICBsZXQgdG9fcHggPyhwYXJlbnQgPSBHLmRvY3VtZW50IHw+IERvY3VtZW50LnJvb3QpID1cbiAgICBsZXQgZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgPVxuICAgICAgbGV0IGZvbnRfc2l6ZSA9XG4gICAgICAgIEVsLmNvbXB1dGVkX3N0eWxlIChKc3RyLnYgXCJmb250LXNpemVcIikgcGFyZW50IHw+IEpzdHIudG9fc3RyaW5nXG4gICAgICBpblxuICAgICAgbWF0Y2ggb2Zfc3RyaW5nIGZvbnRfc2l6ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gMTYuXG4gICAgICB8IFNvbWUgKFB4IGkpIC0+IGlcbiAgICAgIHwgU29tZSBfIC0+IGZhaWx3aXRoIFwibm90IGltcGxlbWVudGVkXCJcbiAgICBpblxuICAgIGZ1bmN0aW9uXG4gICAgfCBQeCBpIC0+IGlcbiAgICB8IFJlbSBmIC0+XG4gICAgICAgIGxldCBmb250X3NpemUgPSBnZXRfZm9udF9zaXplX2luX3B4IChHLmRvY3VtZW50IHw+IERvY3VtZW50LnJvb3QpIGluXG4gICAgICAgIGYgKi4gZm9udF9zaXplXG4gICAgfCBFbSBmIC0+XG4gICAgICAgIGxldCBmb250X3NpemUgPSBnZXRfZm9udF9zaXplX2luX3B4IHBhcmVudCBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuZW5kXG5cbmxldCBsaXN0ZW4gfmYgdCA9XG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgdCBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT4gZiAoTHdkLnF1aWNrX3NhbXBsZSByb290KSk7XG4gIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcblxubGV0IG1hcDMgfmYgYSBiIGMgPVxuICBMd2QubWFwMiBhIGIgfmY6KGZ1biBhIGIgLT4gKGEsIGIpKSB8PiBMd2QubWFwMiBjIH5mOihmdW4gYyAoYSwgYikgLT4gZiBhIGIgYylcblxubGV0IHRyaXBsZSBhIGIgYyA9IG1hcDMgYSBiIGMgfmY6KGZ1biBhIGIgYyAtPiAoYSwgYiwgYykpXG4iLCJvcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdGFyZ2V0ID0gUG9zIG9mIGludCB8IEVsIG9mIEVsd2QudFxudHlwZSB0ID0geyBlbHQgOiBFbHdkLnQgTHdkLnQ7IHNjcm9sbF9wb3NpdGlvbiA6IHRhcmdldCBvcHRpb24gTHdkLnZhciB9XG5cbigqIFRPRE86IG1ha2UgYSBwcm9wZXIgYmluZGluZyAqKVxubGV0IGpzX3Njcm9sbCBlbHQgdGFyZ2V0ID1cbiAgbWF0Y2ggdGFyZ2V0IHdpdGhcbiAgfCBQb3MgeCAtPlxuICAgICAgbGV0IGVsdCA9IEVsLnRvX2p2IGVsdCBpblxuICAgICAgaWdub3JlIEBAIEp2LmNhbGwgZWx0IFwic2Nyb2xsXCIgW3wgSnYub2ZfaW50IDA7IEp2Lm9mX2ludCB4IHxdXG4gIHwgRWwgZWwgLT4gRWwuc2Nyb2xsX2ludG9fdmlldyBlbFxuXG5sZXQgbWFrZSA/KGF0ID0gW10pIH5zY3JvbGxfdGFyZ2V0IGVsdCA9XG4gIGxldCBhY3RpdmUgPSBMd2QudmFyIHRydWUgaW5cbiAgbGV0IGFjdGl2ZV9jbGFzcyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBhY3RpdmUpIH5mOihmdW5jdGlvblxuICAgICAgfCBmYWxzZSAtPiBBdHRycy5BIEF0LnZvaWRcbiAgICAgIHwgdHJ1ZSAtPiBBdHRycy5BIChBdC5jbGFzcycgKEpzdHIudiBcImxvY2tlZFwiKSkpXG4gIGluXG4gIGxldCBhdCA9XG4gICAgQXR0cnMuTy4oXG4gICAgICBgUCAoQyBcImx3ZHVpLWNvbnRyb2xsZWQtc2Nyb2xsLXdyYXBwZXJcIikgQDo6IGBSIGFjdGl2ZV9jbGFzcyBAOjogYXQpXG4gIGluXG4gIGxldCBjb250cm9scyA9XG4gICAgbGV0IGF0ID0gQXR0cnMuY2xhc3NfIChgUCBcImx3ZHVpLWNvbnRyb2xsZWQtc2Nyb2xsLWNvbnRyb2xzXCIpIGluXG4gICAgbGV0IGV2ID1cbiAgICAgIGxldCBvbl9jbGljayBfID0gTHdkLnNldCBhY3RpdmUgdHJ1ZSBpblxuICAgICAgbGV0IGhhbmRsZXIgPSBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICAgIFsgYFAgaGFuZGxlciBdXG4gICAgaW5cbiAgICBFbHdkLmRpdiB+YXQgfmV2IFsgYFIgKEVsd2QuYnV0dG9uIFsgYFAgKEVsLnR4dCcgXCJTaG93IHBsYXlpbmdcIikgXSkgXVxuICBpblxuICBsZXQgb25fd2hlZWwgPVxuICAgIEVsd2QuaGFuZGxlciBFdi53aGVlbCAoZnVuIF9ldiAtPlxuICAgICAgICBpZiBMd2QucGVlayBhY3RpdmUgdGhlbiBMd2Quc2V0IGFjdGl2ZSBmYWxzZSlcbiAgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IHN0YXRlID0gVXRpbHMudHJpcGxlIGVsdCAoTHdkLmdldCBhY3RpdmUpIHNjcm9sbF90YXJnZXQgaW5cbiAgICBMd2QubWFwIHN0YXRlIH5mOihmdW4gKGVsdCwgYWN0aXZlLCBwb3MpIC0+XG4gICAgICAgIGlmIGFjdGl2ZSB0aGVuIE9wdGlvbi5pdGVyIChqc19zY3JvbGwgZWx0KSBwb3M7XG4gICAgICAgIGVsdClcbiAgaW5cbiAgRWx3ZC5kaXYgfmF0IH5ldjpbIGBQIG9uX3doZWVsIF0gWyBgUiBlbHQ7IGBSIGNvbnRyb2xzIF1cbiIsIm9wZW4gU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbm1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZzsgY29udGVudCA6IEVsd2QudCBFbHdkLmNvbCB9XG4gIHR5cGUgdCA9IGNvbHVtbiBhcnJheVxuXG4gIGxldCB2IG5hbWUgY3NzX3NpemUgY29udGVudCA9IHsgbmFtZTsgY3NzX3NpemU7IGNvbnRlbnQgfVxuXG4gIGxldCB0b19oZWFkZXIgdCA9XG4gICAgbGV0IGNlbGxzID1cbiAgICAgIEFycmF5LmZvbGRfcmlnaHQgdCB+aW5pdDpbXSB+ZjooZnVuIHsgY29udGVudDsgXyB9IGFjYyAtPlxuICAgICAgICAgIGBSIChFbHdkLmRpdiBjb250ZW50KSA6OiBhY2MpXG4gICAgaW5cbiAgICBjZWxsc1xuXG4gIGxldCBzdHlsZSB0ID1cbiAgICBsZXQgdGVtcGxhdGUgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcbiAgICBpblxuICAgIFByaW50Zi5zcHJpbnRmIFwiJXM6ICVzO1wiIFwiZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXCIgdGVtcGxhdGVcbmVuZFxuXG50eXBlIHQgPSB7IGNvbHVtbnMgOiBDb2x1bW5zLnQgfVxudHlwZSBmaXhlZF9yb3dfaGVpZ2h0ID0geyB0YWJsZSA6IHQ7IHJvd19oZWlnaHQgOiBVdGlscy5Vbml0LnQgfVxuXG5sZXQgc3R5bGUgdCA9XG4gIGxldCBzdHlsZSA9IENvbHVtbnMuc3R5bGUgdC50YWJsZS5jb2x1bW5zIGluXG4gIFN0cmluZy5jb25jYXQgfnNlcDpcIiBcIiBbIHN0eWxlIF1cblxubGV0IGhlYWRlciB0ID1cbiAgbGV0IHJvd19oZWlnaHQgPSBVdGlscy5Vbml0LnRvX3N0cmluZyB0LnJvd19oZWlnaHQgaW5cbiAgbGV0IGF0ID1cbiAgICBbIGBQIChBdC5zdHlsZSAoSnN0ci52IEBAIFByaW50Zi5zcHJpbnRmIFwiaGVpZ2h0OiAlc1wiIHJvd19oZWlnaHQpKSBdXG4gIGluXG4gIEVsd2QuZGl2IH5hdCBAQCBDb2x1bW5zLnRvX2hlYWRlciB0LnRhYmxlLmNvbHVtbnNcblxubGV0IF8gPSBVdGlscy5Vbml0LnRvX3B4IChSZW0gNC4pXG4iLCIoKiogQSB2aXJ0dWFsIHRhYmxlIHRoYXQgY2FuIGhhbmRsZSBsYXJnZSBkYXRhc2V0LlxuXG4gICAgVE9ETzogdGhpcyBpcyBjbGVhcmx5IG92ZXItZW5naW5lZXJlZDogdGhlIGxhcmdlIGx3ZCB0YWJsZSB0aGF0IHJlZHVjZXMgdG9cbiAgICByb3dzIGFuZCBwbGFjZWhvbGRlcnMgd2l0aCBhIG1vbm9pZCBpcyBlbGVnYW50IGJ1IGRvZXMgbm90IHNjYWxlIHdlbGwuIEl0XG4gICAgbWlnaHQgYmUgcG9zc2libGUgdG8gb3B0aW1pemUgaXQgKGVzcGVjaWFsbHkgdGhlIFwidW5pcXVldWVcIiBMUlUgdGhpbmd5KSxcbiAgICBidXQgaGF2aW5nIHRvbyBsYXJnZSBhIGx3ZF90YWJsZSBpcyBwcm9iYWJseSBhIGhhcmQgbGltaXQuICopXG5cbm9wZW4gU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgJ2Egcm93X2RhdGEgPSB7XG4gIGluZGV4IDogaW50O1xuICBjb250ZW50IDogJ2Egb3B0aW9uO1xuICByZW5kZXIgOiBpbnQgLT4gJ2EgLT4gRWx3ZC50IEVsd2QuY29sO1xufVxuXG50eXBlICgnZGF0YSwgJ2Vycm9yKSBkYXRhX3NvdXJjZSA9IHtcbiAgdG90YWxfaXRlbXMgOiAoaW50LCAnZXJyb3IpIEZ1dC5yZXN1bHQ7XG4gIGZldGNoIDogaW50IGFycmF5IC0+ICgnZGF0YSBvcHRpb24gYXJyYXksICdlcnJvcikgRnV0LnJlc3VsdDtcbiAgcmVuZGVyIDogaW50IC0+ICdkYXRhIC0+IEVsd2QudCBFbHdkLmNvbDtcbn1cblxuKCogVGhlIHZpcnR1YWwgdGFibGUgaXMgYSBjb21wbGV4IHJlYWN0aXZlIGNvbXBvbmVudC4gUHJpbWFyaWx5LCBpdCByZWFjdHMgdG9cbiAgIGNoYW5nZXMgb2YgdGhlIFtkYXRhX3NvdXJjZV0gc28gdGhhdCBjb250ZW50IGluIHRoZSB0YWJsZSBpcyBwcm9wZXJseVxuICAgcmVmcmVzaGVkIHdoZW4gaXQgZG9lcy4gQWRkaXRpb25uYWx5IGl0IG5lZWRzIHRvIHJlYWN0IHRvIG11bHRpcGxlIGRvbVxuICAgZXZlbnRzLCBub3RhYmx5IHZlcnRpY2FsIHJlc2l6ZSBvZiB0aGUgY29udGFpbmVyIGFuZCBzY3JvbGwgZXZlbnRzLCB0byBlbnN1cmVcbiAgIHRoYXQgdGhlIHZpc2libGUgcGFydCBvZiB0aGUgdGFsYmUgaXMgYWx3YXlzIHBvcHVsYXRlZCB3aXRoIHJvd3MuICopXG5tb2R1bGUgQ2FjaGUgPSBGRkNhY2hlLk1ha2UgKEludClcblxubGV0IG1ha2UgKHR5cGUgZGF0YSkgfih1aV90YWJsZSA6IFNjaGVtYS5maXhlZF9yb3dfaGVpZ2h0KVxuICAgID8ocGxhY2Vob2xkZXIgOiBpbnQgLT4gRWx3ZC50IEVsd2QuY29sID0gZnVuIF8gLT4gW10pXG4gICAgPyhzY3JvbGxfdGFyZ2V0IDogaW50IEx3ZC50IG9wdGlvbilcbiAgICAoZGF0YV9zb3VyY2UgOiAoZGF0YSwgXykgZGF0YV9zb3VyY2UgTHdkLnQpID1cbiAgaWdub3JlIHBsYWNlaG9sZGVyO1xuICBsZXQgcm93X3NpemUgPSB1aV90YWJsZS5yb3dfaGVpZ2h0IHw+IFV0aWxzLlVuaXQudG9fc3RyaW5nIGluXG4gIGxldCBoZWlnaHRfbiBuID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6IGNhbGMoJXMgKiAlaSk7XCIgcm93X3NpemUgbiBpblxuICBsZXQgaGVpZ2h0ID0gUHJpbnRmLnNwcmludGYgXCJoZWlnaHQ6ICVzICFpbXBvcnRhbnQ7XCIgcm93X3NpemUgaW5cbiAgbGV0IHRhYmxlIDogZGF0YSByb3dfZGF0YSBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpIGluXG4gICgqIFRoZSBbcm93X2luZGV4XSB0YWJsZSBpcyB1c2VkIHRvIHByb3ZpZGUgZmFzdCByYW5kb20gYWNjZXNzIHRvIHRoZSB0YWJsZSdzXG4gICAgIHJvd3MgaW4gdGhlIG9ic2VydmVyJ3MgY2FsbGJhY2sgKilcbiAgbGV0IHJvd19pbmRleCA6IChpbnQsIGRhdGEgcm93X2RhdGEgTHdkX3RhYmxlLnJvdykgSGFzaHRibC50ID1cbiAgICBIYXNodGJsLmNyZWF0ZSAyMDQ4XG4gIGluXG4gIGxldCB1bmxvYWQgaSA9XG4gICAgbGV0IG9wZW4gT3B0aW9uLkluZml4IGluXG4gICAgKGxldCogcm93ID0gSGFzaHRibC5nZXQgcm93X2luZGV4IGkgaW5cbiAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gTm9uZSB9KVxuICAgIHw+IGlnbm9yZVxuICBpblxuICBsZXQgbmV3X2NhY2hlICgpID0gQ2FjaGUuY3JlYXRlIH5zaXplOjUwIGluXG4gICgqIFRoZSBjYWNoZSBpcyBzb21lIHNvcnQgb2YgTFJVIHRvIGtlZXAgbGl2ZSB0aGUgY29udGVudCBvZiByZWNlbnRseSBzZWVuXG4gICAgIHJvd3MgKilcbiAgbGV0IGNhY2hlX3JlZiA9IHJlZiAobmV3X2NhY2hlICgpKSBpblxuICBsZXQgYWRkIH5mZXRjaCA/KG1heF9pdGVtcyA9IDIwMCkgaW5kZXhlcyA9XG4gICAgbGV0IGNhY2hlID0gIWNhY2hlX3JlZiBpblxuICAgIGxldCBsb2FkIGluZGV4ZXMgPVxuICAgICAgKGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgbGV0KyAoZGF0YSA6IGRhdGEgb3B0aW9uIGFycmF5KSA9IGZldGNoIGluZGV4ZXMgaW5cbiAgICAgICBBcnJheS5pdGVyMiBpbmRleGVzIGRhdGEgfmY6KGZ1biBpIGRhdGEgLT5cbiAgICAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICAgICAgICAgbGV0KyByb3dfZGF0YSA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgIG1hdGNoIGRhdGEgd2l0aCBTb21lIGRhdGEgLT4gZGF0YSB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgKCogdG9kbzogbGV0IHVzZXJzIHByb3ZpZGUgY29tcGFyaXNvbiAqKVxuICAgICAgICAgICAgaWYgbm90IChFcXVhbC5wb2x5IHJvd19kYXRhLmNvbnRlbnQgQEAgU29tZSBkYXRhKSB0aGVuXG4gICAgICAgICAgICAgIEx3ZF90YWJsZS5zZXQgcm93IHsgcm93X2RhdGEgd2l0aCBjb250ZW50ID0gU29tZSBkYXRhIH0pXG4gICAgICAgICAgIHw+IGlnbm9yZSkpXG4gICAgICB8PiBpZ25vcmVcbiAgICBpblxuICAgIGxldCBjYWNoZSwgdG9fbG9hZCA9XG4gICAgICBMaXN0LmZvbGRfbGVmdCB+aW5pdDooY2FjaGUsIFtdKSBpbmRleGVzIH5mOihmdW4gKGNhY2hlLCBhY2MpIGkgLT5cbiAgICAgICAgICBsZXQgY2FjaGUsIGluc2VydGVkID0gQ2FjaGUuaW5zZXJ0IH5vbl9ldmljdDp1bmxvYWQgY2FjaGUgaSBpIGluXG4gICAgICAgICAgaWYgaW5zZXJ0ZWQgdGhlbiAoY2FjaGUsIGkgOjogYWNjKSBlbHNlIChjYWNoZSwgYWNjKSlcbiAgICBpblxuICAgIGNhY2hlX3JlZiA6PSBjYWNoZTtcbiAgICBsb2FkIChBcnJheS5vZl9saXN0IHRvX2xvYWQpXG4gIGluXG4gIGxldCB0YWJsZV9oZWlnaHQgPSBMd2QudmFyIE5vbmUgaW5cbiAgbGV0IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGRpdiA9XG4gICAgbGV0IGhlaWdodCBlbHQgPVxuICAgICAgbGV0IGp2ID0gRWwudG9fanYgZWx0IGluXG4gICAgICBKdi5nZXQganYgXCJvZmZzZXRIZWlnaHRcIiB8PiBKdi50b19pbnRcbiAgICBpblxuICAgIGxldCBzY3JvbGxfeSA9IEVsLnNjcm9sbF95IGRpdiBpblxuICAgIGxldCBkaXJlY3Rpb24gPSBpZiBzY3JvbGxfeSA+LiAhbGFzdF9zY3JvbGxfeSB0aGVuIGBEb3duIGVsc2UgYFVwIGluXG4gICAgbGV0ICgpID0gbGFzdF9zY3JvbGxfeSA6PSBzY3JvbGxfeSBpblxuICAgIGxldCB2aXNpYmxlX2hlaWdodCA9IGhlaWdodCBkaXYgfD4gZmxvYXRfb2ZfaW50IGluXG4gICAgbGV0IHJvd19oZWlnaHQgPSBVdGlscy5Vbml0LnRvX3B4IH5wYXJlbnQ6ZGl2IHVpX3RhYmxlLnJvd19oZWlnaHQgaW5cbiAgICBsZXQgaGVhZGVyX2hlaWdodCA9IHJvd19oZWlnaHQgaW5cbiAgICBsZXQgbnVtYmVyX29mX3Zpc2libGVfcm93cyA9IHZpc2libGVfaGVpZ2h0IC8uIHJvd19oZWlnaHQgfD4gaW50X29mX2Zsb2F0IGluXG4gICAgbGV0IGJsZWVkaW5nID0gbnVtYmVyX29mX3Zpc2libGVfcm93cyBpblxuICAgIGxldCBzY3JvbGxfeSA9IHNjcm9sbF95IC0uIGhlYWRlcl9oZWlnaHQgaW5cbiAgICBsZXQgZmlyc3RfdmlzaWJsZV9yb3cgPSBpbnRfb2ZfZmxvYXQgKHNjcm9sbF95IC8uIHJvd19oZWlnaHQpICsgMSBpblxuICAgIGxldCBsYXN0X3Zpc2libGVfcm93ID0gZmlyc3RfdmlzaWJsZV9yb3cgKyBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIGluXG4gICAgbGV0IGZpcnN0ID1cbiAgICAgIGxldCBibGVlZGluZyA9XG4gICAgICAgIG1hdGNoIGRpcmVjdGlvbiB3aXRoIGBVcCAtPiBibGVlZGluZyB8IF8gLT4gYmxlZWRpbmcgLyAyXG4gICAgICBpblxuICAgICAgZmlyc3RfdmlzaWJsZV9yb3cgLSBibGVlZGluZyB8PiBtYXggMFxuICAgIGluXG4gICAgbGV0IGxhc3QgPVxuICAgICAgbGV0IGJsZWVkaW5nID1cbiAgICAgICAgbWF0Y2ggZGlyZWN0aW9uIHdpdGggYERvd24gLT4gYmxlZWRpbmcgfCBfIC0+IGJsZWVkaW5nIC8gMlxuICAgICAgaW5cbiAgICAgIGxhc3RfdmlzaWJsZV9yb3cgKyBibGVlZGluZ1xuICAgIGluXG4gICAgTGlzdC5pbml0IChsYXN0IC0gZmlyc3QpIH5mOihmdW4gaSAtPiBmaXJzdCArIGkpXG4gIGluXG4gIGxldCBwcmVwYXJlIH50b3RhbF9pdGVtczp0b3RhbCB+cmVuZGVyID1cbiAgICBsZXQgKCkgPSBjYWNoZV9yZWYgOj0gbmV3X2NhY2hlICgpIGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBjdXJyZW50X3JvdyA9IHJlZiAoTHdkX3RhYmxlLmZpcnN0IHRhYmxlKSBpblxuICAgIHdoaWxlIE9wdGlvbi5pc19zb21lICFjdXJyZW50X3JvdyB8fCAhaSA8IHRvdGFsIC0gMSBkb1xuICAgICAgbWF0Y2ggIWN1cnJlbnRfcm93IHdpdGhcbiAgICAgIHwgU29tZSByb3cgLT5cbiAgICAgICAgICBpZiAhaSA8IHRvdGFsIC0gMSB0aGVuXG4gICAgICAgICAgICBsZXQgKCkgPSBIYXNodGJsLnJlcGxhY2Ugcm93X2luZGV4ICFpIHJvdyBpblxuICAgICAgICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyBpbmRleCA9ICFpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH1cbiAgICAgICAgICBlbHNlIEx3ZF90YWJsZS51bnNldCByb3c7XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIGN1cnJlbnRfcm93IDo9IEx3ZF90YWJsZS5uZXh0IHJvd1xuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaWYgIWkgPCB0b3RhbCAtIDEgdGhlbiAoXG4gICAgICAgICAgICBsZXQgc2V0ID0geyBpbmRleCA9ICFpOyBjb250ZW50ID0gTm9uZTsgcmVuZGVyIH0gaW5cbiAgICAgICAgICAgIGxldCByb3cgPSBMd2RfdGFibGUuYXBwZW5kIH5zZXQgdGFibGUgaW5cbiAgICAgICAgICAgIEhhc2h0YmwuYWRkIHJvd19pbmRleCAhaSByb3c7XG4gICAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgICBjdXJyZW50X3JvdyA6PSBMd2RfdGFibGUubmV4dCByb3cpXG4gICAgZG9uZVxuICBpblxuICBsZXQgcG9wdWxhdGVfb25fc2Nyb2xsID1cbiAgICBMd2QubWFwIGRhdGFfc291cmNlIH5mOihmdW4geyB0b3RhbF9pdGVtczsgZmV0Y2g7IHJlbmRlciB9IC0+XG4gICAgICAgIGxldCBsYXN0X3Njcm9sbF95ID0gcmVmIDAuIGluXG4gICAgICAgIGxldCB1cGRhdGUgZGl2ID1cbiAgICAgICAgICBsZXQgdmlzaWJsZV9yb3dzID0gY29tcHV0ZV92aXNpYmxlX3Jvd3Mgfmxhc3Rfc2Nyb2xsX3kgZGl2IGluXG4gICAgICAgICAgKCogdG9kbzogV2UgZG8gd2F5IHRvbyBtdWNoIHdvcmsgYW5kIHJlYnVpbGQgdGhlIHF1ZXVlIGVhY2hcbiAgICAgICAgICAgICB0aW1lLi4uIGl0J3MgdmVyeSBpbmVmaWNpZW50ICopXG4gICAgICAgICAgYWRkIH5mZXRjaCB+bWF4X2l0ZW1zOig0ICogTGlzdC5sZW5ndGggdmlzaWJsZV9yb3dzKSB2aXNpYmxlX3Jvd3NcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgICBsZXQrIHRvdGFsX2l0ZW1zID0gdG90YWxfaXRlbXMgaW5cbiAgICAgICAgbWF0Y2ggdG90YWxfaXRlbXMgd2l0aFxuICAgICAgICB8IE9rIHRvdGFsX2l0ZW1zIC0+XG4gICAgICAgICAgICBwcmVwYXJlIH50b3RhbF9pdGVtcyB+cmVuZGVyO1xuICAgICAgICAgICAgdXBkYXRlXG4gICAgICAgIHwgXyAtPiBpZ25vcmUpXG4gIGluXG4gIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgTHdkLm1hcCBwb3B1bGF0ZV9vbl9zY3JvbGwgfmY6KGZ1biB1cGRhdGUgLT5cbiAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnNjcm9sbCAoZnVuIGV2IC0+XG4gICAgICAgICAgICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgIEBAXG4gICAgICAgICAgICBsZXQrIHVwZGF0ZSA9IHVwZGF0ZSBpblxuICAgICAgICAgICAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICAgICAgICAgICAgbGV0IGxhc3RfdXBkYXRlID0gcmVmIDAuIGluXG4gICAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcmVmICgtMSkgaW5cbiAgICAgICAgICAgICAgbGV0IHJlc2V0X3RpY2tlciBkaXYgPVxuICAgICAgICAgICAgICAgIGxldCBkZWJvdW5jaW5nX2ludGVydmFsID0gNTAwIGluXG4gICAgICAgICAgICAgICAgKCogV2UgdXNlIFtsYXN0X3VwZGF0ZV0gdG8gaGF2ZSByZWd1bGFyIGRlYm91bmNlZCB1cGRhdGVzIGFuZCB0aGVcbiAgICAgICAgICAgICAgICAgICBbdGltZW91dF0gdG8gZW5zdXJlIHRoYXQgdGhlIGxhc3Qgc2Nyb2xsIGV2ZW50IGlzIGFsd2F5cyB0YWtlbiBpbnRvXG4gICAgICAgICAgICAgICAgICAgYWNjb3VudCBldmVuIGl0IGl0IGhhcHBlbnMgZHVyaW5nIHRoZSBkZWJvdW5jaW5nIGludGVydmFsLiAqKVxuICAgICAgICAgICAgICAgIGxldCBub3cgPSBQZXJmb3JtYW5jZS5ub3dfbXMgRy5wZXJmb3JtYW5jZSBpblxuICAgICAgICAgICAgICAgIGlmICF0aW1lb3V0ID49IDAgdGhlbiBHLnN0b3BfdGltZXIgIXRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgdGltZW91dCA6PVxuICAgICAgICAgICAgICAgICAgRy5zZXRfdGltZW91dCB+bXM6ZGVib3VuY2luZ19pbnRlcnZhbCAoZnVuICgpIC0+IHVwZGF0ZSBkaXYpO1xuICAgICAgICAgICAgICAgIGlmIG5vdyAtLiAhbGFzdF91cGRhdGUgPi4gZmxvYXRfb2ZfaW50IGRlYm91bmNpbmdfaW50ZXJ2YWwgdGhlbiAoXG4gICAgICAgICAgICAgICAgICBsYXN0X3VwZGF0ZSA6PSBub3c7XG4gICAgICAgICAgICAgICAgICB1cGRhdGUgZGl2KVxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBmdW4gZGl2IC0+IHJlc2V0X3RpY2tlciBkaXZcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgZGl2ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiB8PiBFbC5vZl9qdiBpblxuICAgICAgICAgICAgc2Nyb2xsX2hhbmRsZXIgZGl2KSlcbiAgaW5cbiAgbGV0ICgpID1cbiAgICBsZXQgcmVwb3B1bGF0ZV9kZXBzID1cbiAgICAgIEx3ZC5tYXAyIHBvcHVsYXRlX29uX3Njcm9sbCAoTHdkLmdldCB0YWJsZV9oZWlnaHQpIH5mOihmdW4gYSBiIC0+IChhLCBiKSlcbiAgICBpblxuICAgIGxldCByb290ID0gTHdkLm9ic2VydmUgcmVwb3B1bGF0ZV9kZXBzIGluXG4gICAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICAgIG1hdGNoIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB3aXRoXG4gICAgICAgIHwgdXBkYXRlLCBTb21lIChfaCwgZGl2KSAtPiBGdXQuYXdhaXQgdXBkYXRlIChmdW4gdXBkYXRlIC0+IHVwZGF0ZSBkaXYpXG4gICAgICAgIHwgXyAtPiAoKSk7XG4gICAgTHdkLnF1aWNrX3NhbXBsZSByb290IHw+IGlnbm9yZVxuICBpblxuICBsZXQgbWFrZV9zcGFjZXIgbiA9XG4gICAgbGV0IGF0ID0gWyBBdC5jbGFzcycgKEpzdHIudiBcInJvd19zcGFjZXJcIikgXSBpblxuICAgIGxldCBzdHlsZSA9IEF0LnN0eWxlIChKc3RyLnYgQEAgaGVpZ2h0X24gbikgaW5cbiAgICBFbC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgW11cbiAgaW5cbiAgbGV0IHJlbmRlciBfIHsgY29udGVudDsgaW5kZXg7IHJlbmRlciB9ID1cbiAgICBsZXQgYXQgPSBBdHRycy5hZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwicm93XCIpIFtdIGluXG4gICAgbGV0IHN0eWxlID0gYFAgKEF0LnN0eWxlIChKc3RyLnYgaGVpZ2h0KSkgaW5cbiAgICBtYXRjaCBjb250ZW50IHdpdGhcbiAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAoMCwgTHdkX3NlcS5lbGVtZW50IEBAIEVsd2QuZGl2IH5hdDooc3R5bGUgOjogYXQpIChyZW5kZXIgaW5kZXggZGF0YSksIDApXG4gICAgfCBOb25lIC0+ICgxLCBMd2Rfc2VxLmVtcHR5LCAwKVxuICBpblxuICBsZXQgdGFibGVfYm9keSA9XG4gICAgbGV0IHJvd3MgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2UgcmVuZGVyXG4gICAgICAgICggKDAsIEx3ZF9zZXEuZW1wdHksIDApLFxuICAgICAgICAgIGZ1biAobiwgcywgbSkgKHAsIHMnLCBxKSAtPlxuICAgICAgICAgICAgbWF0Y2ggKEx3ZF9zZXEudmlldyBzLCBMd2Rfc2VxLnZpZXcgcycpIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHksIEVtcHR5IC0+XG4gICAgICAgICAgICAgICAgKCogU2luY2UgcyBpcyBlbXB0eSBpdCBkb2VzIG5vdCBtYXR0ZXIgb24gd2hpY2hcbiAgICAgICAgICAgICAgICAgICBcInNpZGVcIiBvZiBpdCB0aGUgc3BhY2VzIGFyZSBhY2N1bXVsYXRlZC4gKilcbiAgICAgICAgICAgICAgICAobiArIG0gKyBwICsgcSwgcywgMClcbiAgICAgICAgICAgIHwgRW1wdHksIF8gLT4gKG4gKyBtICsgcCwgcycsIHEpXG4gICAgICAgICAgICB8IF8sIEVtcHR5IC0+IChuLCBzLCBtICsgcCArIHEpXG4gICAgICAgICAgICB8IF8sIF8gLT5cbiAgICAgICAgICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgICAgICAgICBpZiBtICsgcCA+IDAgdGhlblxuICAgICAgICAgICAgICAgICAgICBsZXQgc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgKG0gKyBwKSBpblxuICAgICAgICAgICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgcyBAQCBjb25jYXQgKGVsZW1lbnQgc3BhY2VyKSBzJylcbiAgICAgICAgICAgICAgICAgIGVsc2UgTHdkX3NlcS5jb25jYXQgcyBzJ1xuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgKG4sIHMsIHEpIClcbiAgICAgICAgdGFibGVcbiAgICBpblxuICAgIEx3ZC5tYXAgcm93cyB+ZjooZnVuIChuLCBzLCBtKSAtPlxuICAgICAgICBsZXQgcmVzdWx0ID1cbiAgICAgICAgICBpZiBuID4gMCB0aGVuXG4gICAgICAgICAgICBsZXQgZmlyc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbiBpblxuICAgICAgICAgICAgTHdkX3NlcS4oY29uY2F0IChlbGVtZW50IGZpcnN0X3NwYWNlcikgcylcbiAgICAgICAgICBlbHNlIHNcbiAgICAgICAgaW5cbiAgICAgICAgaWYgbSA+IDAgdGhlblxuICAgICAgICAgIGxldCBsYXN0X3NwYWNlciA9IEx3ZC5wdXJlIEBAIG1ha2Vfc3BhY2VyIG0gaW5cbiAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgcmVzdWx0IChlbGVtZW50IGxhc3Rfc3BhY2VyKSlcbiAgICAgICAgZWxzZSByZXN1bHQpXG4gIGluXG4gIGxldCB0YWJsZV9oZWFkZXIgPSBTY2hlbWEuaGVhZGVyIHVpX3RhYmxlIGluXG4gIGxldCBvYnNlcnZlciA9XG4gICAgKCogV2Ugb2JzZXJ2ZSB0aGUgc2l6ZSBvZiB0aGUgdGFibGUgdG8gcmUtcG9wdWxhdGUgaWYgbmVjZXNzYXJ5ICopXG4gICAgUmVzaXplX29ic2VydmVyLmNyZWF0ZSB+Y2FsbGJhY2s6KGZ1biBlbnRyaWVzIF8gLT5cbiAgICAgICAgbGV0IGVudHJ5ID0gTGlzdC5oZCBlbnRyaWVzIGluXG4gICAgICAgIGxldCBkaXYgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkudGFyZ2V0IGVudHJ5IGluXG4gICAgICAgIGxldCByZWN0ID0gUmVzaXplX29ic2VydmVyLkVudHJ5LmNvbnRlbnRfcmVjdCBlbnRyeSBpblxuICAgICAgICBsZXQgaGVpZ2h0ID0gRG9tX3JlY3RfcmVhZF9vbmx5LmhlaWdodCByZWN0IGluXG4gICAgICAgIG1hdGNoIEx3ZC5wZWVrIHRhYmxlX2hlaWdodCB3aXRoXG4gICAgICAgIHwgU29tZSAoaCwgXykgd2hlbiBoIDw+IGhlaWdodCAtPlxuICAgICAgICAgICAgTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgKGhlaWdodCwgZGl2KSlcbiAgICAgICAgfCBOb25lIC0+IEx3ZC5zZXQgdGFibGVfaGVpZ2h0IChTb21lIChoZWlnaHQsIGRpdikpXG4gICAgICAgIHwgXyAtPiAoKSlcbiAgaW5cbiAgbGV0IGF0ID0gQXR0cnMudG9fYXQgQEAgQXR0cnMuY2xhc3NlcyBbIFwibHdkdWktbGF6eS10YWJsZVwiIF0gaW5cbiAgbGV0IGdyaWRfc3R5bGUgPSBTY2hlbWEuc3R5bGUgdWlfdGFibGUgaW5cbiAgbGV0IHMgPSBBdC5zdHlsZSAoSnN0ci52IEBAIGdyaWRfc3R5bGUpIGluXG4gIGxldCBhdCA9IGBQIHMgOjogYXQgaW5cbiAgbGV0IHRhYmxlID1cbiAgICBFbHdkLmRpdlxuICAgICAgfmV2OlsgYFIgc2Nyb2xsX2hhbmRsZXIgXVxuICAgICAgfmF0XG4gICAgICBbIGBSIHRhYmxlX2hlYWRlcjsgYFMgKEx3ZF9zZXEubGlmdCB0YWJsZV9ib2R5KSBdXG4gICAgfD4gTHdkLm1hcCB+ZjoodGVlIChSZXNpemVfb2JzZXJ2ZXIub2JzZXJ2ZSBvYnNlcnZlcikpXG4gIGluXG4gIGxldCBhdCA9IEF0dHJzLk8uKHYgKGBQIChDIFwibHdkdWktbGF6eS10YWJsZS13cmFwcGVyXCIpKSkgaW5cbiAgbWF0Y2ggc2Nyb2xsX3RhcmdldCB3aXRoXG4gIHwgU29tZSBzY3JvbGxfdGFyZ2V0IC0+XG4gICAgICBsZXQgc2Nyb2xsX3RhcmdldCA9XG4gICAgICAgIEx3ZC5tYXAyIHRhYmxlIHNjcm9sbF90YXJnZXQgfmY6KGZ1biBwYXJlbnQgaSAtPlxuICAgICAgICAgICAgbGV0IHJvd19oZWlnaHQgPVxuICAgICAgICAgICAgICBJbnQub2ZfZmxvYXQgKFV0aWxzLlVuaXQudG9fcHggfnBhcmVudCB1aV90YWJsZS5yb3dfaGVpZ2h0KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIFNvbWUgKENvbnRyb2xsZWRfc2Nyb2xsLlBvcyAoaSAqIHJvd19oZWlnaHQpKSlcbiAgICAgIGluXG4gICAgICBDb250cm9sbGVkX3Njcm9sbC5tYWtlIH5hdCB+c2Nyb2xsX3RhcmdldCB0YWJsZVxuICB8IE5vbmUgLT4gRWx3ZC5kaXYgfmF0IFsgYFIgdGFibGUgXVxuXG4oKiogIyMjIyMjIyoqIyoqKioqKiMlJSM9PT0rKysqIyMjJSMjIyMjIyMjIyMjKisjIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyoqKiolJSMjPT09PT09PT09PT0rIz09PS09PT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjKiMjIyMjKioqIyUjIz09PT09PS0tLT09KyM9PS0tLT09PT09PSojPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09LS0tLT09LT0jPS0tPT09PT09PT0qIz0qIyMlIysrKysrJSUlKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyUjPT09PS09PT09LS09Iz09PT09PT09PT09KiM9KiMjJSMrKz0rIyoqJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKj0tLS0tLS0tLS0tPSM9PT09PT09PT09PSsjPSsjIyslIyUqKyUrJSUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjKz0tLS0tLS0tLT09LS0tLS0jPT09PS09PS0tLS0rIz0rIyMqKyUjJSUrIyMlJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PS09KyM9KyMjIysrKyMqJSsjKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyM9LS0tLS0tLS0tPSMjIyM9Iz0tLSM9Kys9PT09LS09PT0jPSsjIyMqKysrJSUrKyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyo9PT09PT0tLT09KiojIyMjIyMrPT09PT0rPSsrKysrKyojIz0rIyMjKisrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9LS0tLS09PSsqKyMjIyojIyMjIyM9Iz09LS0tLT09PT09KyM9KyMjIyoqKiorKysrKysrK0lTKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjPT0tPS09KiMrPSMrJSsjPT09Iz09PSM9PS0tPT09PT09PT0jPSsjIyMqKiorKysrKysrKysrKytUSElTKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tIyojKyojIz0jIyMjKisjPSsrPT0jPT09PT09PT09PT0rIz0rIyMjKioqKioqKisrK0ErKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PSMjIz0jIyMjIyMjIyMjIyMrIyorIz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKisrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIz0qKyMqIyMjIyMjIyMjIyMjIyMjPSM9PT09PT09PT09PT0jKysjIyMqKioqKioqKioqKipNT05PSUQrPysrKysrXG4jIyMjIyMjIyMjIyMjIyMjPT0jIyMjIyMjIyMjPT09PSMjKj0jPT09PT09PSMqKj09IysrIyMjKioqKioqKioqKioqKioqKiorKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyM9PSsjIyMjIyMjIyMjIyMjIz09Iz09PT09IyMjPT09PSMrKyMjIyoqKioqKioqKioqKioqKioqKioqKiorKytcbiMjIyMjIyMjIyMjIyMjIyMjIz09IyMjKyMjIyMjIyMjIysjIyMqKz09IyMjPT09PT0jKysjIysrKyoqKioqKioqKioqKioqKioqKioqKiorXG4jIyMjIyMjIyMjIyMjIyslJSUlIyMjIyMjIyMrIyMjIyo9PSsjPT0rIyMjIyMjIyMjIyMjIyMqKysqKioqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMrKysrKz0rJSMlIyojIyMqIyUlJSUrIz0rIyMjIyMjIyMjIyojIyMrIz0jIyojKioqKioqKioqKioqKioqKioqKipcbiMjIyMjIyMjIyMjIyMjKiM9PSs9PT09IyM9PT0jIyMlJSUlJSUlIyMjIyMjIyMjIyMjIz0jKyMjIyMjIyoqKiorKyo9PSsqKioqKioqKioqXG4jIyMjIys9KyMjIyMjIyMjIyMjPSs9PSs9PT09IyMjKisjJSUlJSMjIyMjIyMjIyMjKisrIyMjIyMjIyM9PSorPT09PT09KysqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMjIyMjIyMqPT09PT09PSMjIyMjKyMlJSojIyMjIyMjIyo9PSMrKyMjIyMjIyo9PT09PT09PT09PT09PT09KioqKipcbiMjIyMjIyMjIyMjIysjIyMjIysjIyMjPT09Kz0jIyMjIyMjKyMjIyMjIyMjPT09PT0jKysjIyMrPT09PT09PT09PT09PT09PT09PSsqKiopXG4iLCJtb2R1bGUgdHlwZSBDb25maWcgPSBzaWdcbiAgdHlwZSBsYW5nXG5cbiAgKCogdmFsIGRlZmF1bHQgOiBsYW5nICopXG4gIHZhbCBhY3RpdmUgOiBsYW5nIEx3ZC52YXJcbiAgdmFsIGdldCA6IGxhbmcgLT4gc3RyaW5nIC0+IHN0cmluZ1xuZW5kXG5cbmxldCBtYWtlICh0eXBlIGEpIChtb2R1bGUgQyA6IENvbmZpZyB3aXRoIHR5cGUgbGFuZyA9IGEpID1cbiAgbGV0IGdldCBzdHJpbmcgPVxuICAgIEx3ZC5tYXAgKEx3ZC5nZXQgQy5hY3RpdmUpIH5mOihmdW4gbGFuZyAtPiBKc3RyLnYgQEAgQy5nZXQgbGFuZyBzdHJpbmcpXG4gIGluXG4gIGxldCBzZXQgKGxhbmcgOiBhKSA9IEx3ZC5zZXQgQy5hY3RpdmUgbGFuZyBpblxuICAoc2V0LCBnZXQpXG4iLCJvcGVuISBTdGRcbm1vZHVsZSBCNjQgPSBCYXNlNjRcbm9wZW4hIEJyclxubW9kdWxlIFN0b3JhZ2UgPSBCcnJfaW8uU3RvcmFnZVxuXG5sZXQga2V5cyA9IEhhc2h0YmwuY3JlYXRlIDY0XG5cbmxldCBjaGVja19rZXkga2V5ID1cbiAgaWYgSGFzaHRibC5tZW0ga2V5cyBrZXkgdGhlblxuICAgIGZhaWx3aXRoIEBAIFByaW50Zi5zcHJpbnRmIFwiTXVsdGlwbGUgcGVyc2l0ZW50IHZhciBhcmUgdXNpbmcgdGhlIGtleSAlc1wiIGtleVxuICBlbHNlIEhhc2h0YmwuYWRkIGtleXMga2V5ICgpXG5cbmxldCBsb2NhbF9zdG9yYWdlID0gU3RvcmFnZS5sb2NhbCBHLndpbmRvd1xuXG5sZXQgc3RvcmUgfmtleSB2YWx1ZSA9XG4gIEVuY29kaW5ncy50b19qc3RyIHZhbHVlIHw+IFN0b3JhZ2Uuc2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXlcblxubGV0IGZldGNoIH5rZXkgPVxuICBsZXQgb3BlbiBSZXN1bHQuSW5maXggaW5cbiAgbGV0KiBlbmNvZGVkX3ZhbHVlID1cbiAgICBtYXRjaCBTdG9yYWdlLmdldF9pdGVtIGxvY2FsX3N0b3JhZ2Uga2V5IHdpdGhcbiAgICB8IE5vbmUgLT4gRXJyb3IgYE5vdF9mb3VuZFxuICAgIHwgU29tZSB2IC0+IE9rIHZcbiAgaW5cbiAgRW5jb2RpbmdzLm9mX2pzdHIgZW5jb2RlZF92YWx1ZVxuXG5sZXQgaW5pdGlhbF92YWx1ZSB+a2V5IGYgPVxuICBtYXRjaCBmZXRjaCB+a2V5IHdpdGhcbiAgfCBFcnJvciBgTm90X2ZvdW5kIC0+IGYgKClcbiAgfCBFcnJvciAoYE1zZyBtc2cpIC0+XG4gICAgICBDb25zb2xlLndhcm4gWyBtc2cgXTtcbiAgICAgIGYgKClcbiAgfCBPayB2IC0+IHZcblxubGV0IGluaXRpYWxfdmFsdWVfZnV0IH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gRnV0Lm9rIEBAIHZcblxubGV0IG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZSA9XG4gIGlnbm9yZSBAQCBzdG9yZSB+a2V5IHZhbHVlO1xuICBsZXQgdmFyID0gTHdkLnZhciB2YWx1ZSBpblxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIChMd2QuZ2V0IHZhcikgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+XG4gICAgICBsZXQgbmV3X3ZhbHVlID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gICAgICBpZ25vcmUgQEAgc3RvcmUgfmtleSBuZXdfdmFsdWUpO1xuICBsZXQgXyA9IEx3ZC5xdWlja19zYW1wbGUgcm9vdCBpblxuICB2YXJcblxubGV0IHZhcl9mIH5rZXkgZiA9XG4gIGxldCAoKSA9IGNoZWNrX2tleSBrZXkgaW5cbiAgbGV0IGtleSA9IEpzdHIudiBrZXkgaW5cbiAgbGV0IHZhbHVlID0gaW5pdGlhbF92YWx1ZSB+a2V5IGYgaW5cbiAgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlXG5cbmxldCB2YXIgfmtleSBkZWZhdWx0ID0gdmFyX2YgfmtleSAoZnVuICgpIC0+IGRlZmF1bHQpXG5cbmxldCB2YXJfZnV0ICh0eXBlIGEgYikgfmtleSAoZiA6IHVuaXQgLT4gKGEsIGIpIEZ1dC5yZXN1bHQpIDpcbiAgICAoYSBMd2QudmFyLCBiKSBGdXQucmVzdWx0ID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQrICh2YWx1ZSA6IGEpID0gKGluaXRpYWxfdmFsdWVfZnV0IH5rZXkgZiA6IChhLCBiKSBGdXQucmVzdWx0KSBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcbiIsIm9wZW4gU3RkXG5vcGVuIEJycmVyLkJyclxub3BlbiBCcnJfbHdkXG5tb2R1bGUgRmllbGQgPSBGaWVsZFxuXG50eXBlICgndCwgJ2EpIGZvcm1fc2V0dGVyID0gJ3QgLT4gJ2EgRmllbGQudmFsaWRhdGlvbiAtPiAndFxuXG50eXBlICdyZXMgZm9ybV9maWVsZCA9XG4gIHwgRiA6ICdhIEZpZWxkLnQgKiAoJ2Zvcm0sICdhKSBmb3JtX3NldHRlciAtPiAnZm9ybSBmb3JtX2ZpZWxkXG5cbm1vZHVsZSB0eXBlIEZvcm0gPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIGRlZmF1bHQgOiB0XG4gIHZhbCBmaWVsZHMgOiB0IGZvcm1fZmllbGQgTHdkLnQgTHdkX3NlcS50IEx3ZC50XG5lbmRcblxubGV0IGZpZWxkIGZpZWxkIHNldHRlciA9IEx3ZC5tYXAgZmllbGQgfmY6KGZ1biBmaWVsZCAtPiBGIChmaWVsZCwgc2V0dGVyKSlcblxubGV0IGNyZWF0ZSA/ZCA/YXQgP2V2ICh0eXBlIHQpIChtb2R1bGUgRm9ybSA6IEZvcm0gd2l0aCB0eXBlIHQgPSB0KSBvbl9zdWJtaXQgOlxuICAgIEVsd2QudCBMd2QudCA9XG4gIGxldCBmaWVsZHMgPVxuICAgIEx3ZF9zZXEubGlmdCBGb3JtLmZpZWxkc1xuICAgIHw+IEx3ZF9zZXEuZm9sZF9tb25vaWRcbiAgICAgICAgIChmdW4gKEYgKGZpZWxkLCBtYXBwZXIpKSAtPlxuICAgICAgICAgICAoIEx3ZF9zZXEuZWxlbWVudCBmaWVsZC5lbHQsXG4gICAgICAgICAgICAgbGV0IHZhbHVlICgpID1cbiAgICAgICAgICAgICAgIG1hdGNoIEx3ZC5wZWVrIGZpZWxkLnZhbHVlIHdpdGhcbiAgICAgICAgICAgICAgIHwgTm9uZSAtPiBGaWVsZC5FbXB0eVxuICAgICAgICAgICAgICAgfCBTb21lIHYgLT4gZmllbGQudmFsaWRhdGUgdlxuICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgZnVuIHQgLT4gbWFwcGVyIHQgQEAgdmFsdWUgKCkgKSlcbiAgICAgICAgICggKEx3ZF9zZXEuZW1wdHksIEZ1bi5pZCksXG4gICAgICAgICAgIGZ1biAoZWx0cywgZikgKGVsdHMnLCBmJykgLT5cbiAgICAgICAgICAgICAoTHdkX3NlcS5jb25jYXQgZWx0cyBlbHRzJywgZnVuIHQgLT4gZicgKGYgdCkpIClcbiAgaW5cbiAgbGV0IGhhbmRsZXIgPVxuICAgIEx3ZC5tYXAgZmllbGRzIH5mOihmdW4gKF8sIHZhbHVlKSAtPlxuICAgICAgICBsZXQgb25fc3VibWl0IGUgPVxuICAgICAgICAgIG9uX3N1Ym1pdCBAQCB2YWx1ZSBGb3JtLmRlZmF1bHQ7XG4gICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGVcbiAgICAgICAgaW5cbiAgICAgICAgRWx3ZC5oYW5kbGVyIEV2LnN1Ym1pdCBvbl9zdWJtaXQpXG4gIGluXG4gIGxldCBvbl9zdWJtaXQgPSBgUiBoYW5kbGVyIGluXG4gIGxldCBlbHRzID0gTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoZWx0cywgXykgLT4gZWx0cykgaW5cbiAgbGV0IGV2ID0gT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpbIG9uX3N1Ym1pdCBdIChMaXN0LmNvbnMgb25fc3VibWl0KSBldiBpblxuICBFbHdkLmZvcm0gP2QgP2F0IH5ldiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXVxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgJ2EgcmVhY3RpdmVfZmllbGQgPSB7XG4gIGZpZWxkIDogRWx3ZC50IEx3ZC50O1xuICBsYWJlbCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBMd2QudDtcbn1cblxubGV0IG5hbWUgfmlkIGJhc2VfbmFtZSA9XG4gIGlmIGlkIHRoZW4gUHJpbnRmLnNwcmludGYgXCIlcy0taWRcIiBiYXNlX25hbWVcbiAgZWxzZSBQcmludGYuc3ByaW50ZiBcIiVzXCIgYmFzZV9uYW1lXG5cbmxldCBtYWtlID8oYXQgPSBbXSkgPyhldiA9IFtdKSAoZGVzYyA6IHN0cmluZyBvcHRpb24gRmllbGQuZGVzYykgPVxuICBsZXQgaWQgPSBuYW1lIH5pZDp0cnVlIGRlc2MubmFtZSBpblxuICBsZXQgbmFtZSA9IG5hbWUgfmlkOmZhbHNlIGRlc2MubmFtZSBpblxuICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCBkZXNjLmRlZmF1bHQgaW5cbiAgbGV0IGxhYmVsID0gRWx3ZC5sYWJlbCB+YXQ6WyBgUCAoQXQuZm9yJyAoSnN0ci52IGlkKSkgXSBkZXNjLmxhYmVsIGluXG4gIGxldCBmaWVsZCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIGF0XG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwidGV4dFwiKVxuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIG1hdGNoIEx3ZC5wZWVrIHZhciB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBgUCAoQXQudmFsdWUgQEAgSnN0ci52IHYpIDo6IGF0XG4gICAgICB8IE5vbmUgLT4gYXRcbiAgICBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmtleXVwIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAoU29tZSAoSnYudG9fc3RyaW5nIHZhbHVlKSkpXG4gICAgaW5cbiAgICBsZXQgZXYgPSBgUCBvbl9jaGFuZ2UgOjogZXYgaW5cbiAgICBFbHdkLmlucHV0IH5hdCB+ZXYgKClcbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgJ2EgcmVhY3RpdmVfZmllbGQgPSB7XG4gIGZpZWxkIDogRWx3ZC50IEx3ZC50O1xuICBsYWJlbCA6IEVsd2QudCBMd2QudDtcbiAgdmFsdWUgOiAnYSBMd2QudDtcbn1cblxubGV0IG5hbWUgfmlkIGJhc2VfbmFtZSA9XG4gIGlmIGlkIHRoZW4gUHJpbnRmLnNwcmludGYgXCIlcy0taWRcIiBiYXNlX25hbWUgZWxzZSBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIEZpZWxkLmRlc2MpIG9wdGlvbnMgPVxuICBsZXQgaWQgPSBuYW1lIH5pZDp0cnVlIGRlc2MubmFtZSBpblxuICBsZXQgbmFtZSA9IG5hbWUgfmlkOmZhbHNlIGRlc2MubmFtZSBpblxuICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCBkZXNjLmRlZmF1bHQgaW5cbiAgbGV0IGxhYmVsID0gRWx3ZC5sYWJlbCB+YXQ6WyBgUCAoQXQuZm9yJyAoSnN0ci52IGlkKSkgXSBkZXNjLmxhYmVsIGluXG4gIGxldCBmaWVsZCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIGF0XG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwidGV4dFwiKVxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuY2hhbmdlIChmdW4gZXYgLT5cbiAgICAgICAgICBsZXQgdCA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgaW5cbiAgICAgICAgICBsZXQgdmFsdWUgPSBKdi5nZXQgdCBcInZhbHVlXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAoSnYudG9fc3RyaW5nIHZhbHVlKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIGxldCBvcHRpb25zID1cbiAgICAgIEx3ZF9zZXEubWFwXG4gICAgICAgIChmdW4gKHZhbHVlLCBuYW1lKSAtPlxuICAgICAgICAgIGxldCBvcGVuIEF0dHJzLk8gaW5cbiAgICAgICAgICBsZXQgYXQgPSB2IChgUCAoQSAoQXQudmFsdWUgQEAgSnN0ci52IHZhbHVlKSkpIGluXG4gICAgICAgICAgbGV0IHNlbGVjdGVkID1cbiAgICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgdmFyKSB+ZjooZnVuIHNlbGVjdGVkIC0+XG4gICAgICAgICAgICAgICAgQSAoQXQuaWYnIChFcXVhbC5wb2x5IHNlbGVjdGVkIHZhbHVlKSBBdC5zZWxlY3RlZCkpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgYXQgPSBgUiBzZWxlY3RlZCBAOjogYXQgaW5cbiAgICAgICAgICBFbHdkLm9wdGlvbiB+YXQgWyBgUCAoRWwudHh0JyBuYW1lKSBdKVxuICAgICAgICBvcHRpb25zXG4gICAgaW5cbiAgICBFbHdkLnNlbGVjdCB+YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBvcHRpb25zKSBdXG4gIGluXG4gIHsgZmllbGQ7IGxhYmVsOyB2YWx1ZSA9IEx3ZC5nZXQgdmFyIH1cbiIsIm9wZW4hIFN0ZFxub3BlbiEgQnJyZXJcbm9wZW4hIEJyclxub3BlbiEgQnJyX2x3ZFxuXG50eXBlIGNoZWNrZWQgPSBib29sXG50eXBlIGxhYmVsID0gRWx3ZC50IEVsd2QuY29sXG50eXBlICd2YWx1ZSBkZXNjID0gQ2hlY2sgb2YgJ3ZhbHVlICogbGFiZWwgKiBjaGVja2VkXG4oKiBUT0RPIHwgR3JvdXAgb2YgbGFiZWwgKiAndmFsdWUgZGVzYyBsaXN0ICopXG5cbnR5cGUgJ3ZhbHVlIHQgPSB7IG5hbWUgOiBzdHJpbmc7IGRlc2MgOiAndmFsdWUgZGVzYyBMd2Rfc2VxLnQgTHdkLnQgfVxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHsgZmllbGQgOiBFbHdkLnQgTHdkLnQ7IHZhbHVlIDogJ2EgTHdkLnQgfVxuXG5sZXQgbmFtZSB+ZyB+biB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLSVpLSVpLWlkXCIgYmFzZV9uYW1lIGcgblxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWlcIiBiYXNlX25hbWUgZyBuXG5cbmxldCBtYWtlIHQgPVxuICBsZXQgbWFrZV9jaGVjayB+ZyB+biB2YWx1ZSBsYWJlbCBjaGVja2VkID1cbiAgICBsZXQgaWQgPSBuYW1lIH5nIH5uIH5pZDp0cnVlIHQubmFtZSBpblxuICAgIGxldCBuYW1lID0gbmFtZSB+ZyB+biB+aWQ6ZmFsc2UgdC5uYW1lIGluXG4gICAgbGV0IHJlc3VsdCBjaGVja2VkID0gaWYgY2hlY2tlZCB0aGVuIFNvbWUgdmFsdWUgZWxzZSBOb25lIGluXG4gICAgbGV0IHZhciA9IFBlcnNpc3RlbnQudmFyIH5rZXk6aWQgKHJlc3VsdCBjaGVja2VkKSBpblxuICAgIGxldCBsYmwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGxhYmVsIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIGxldCBvcGVuIEF0dHJzIGluXG4gICAgICBhZGQgQXQuTmFtZS5pZCAoYFAgaWQpIFtdXG4gICAgICB8PiBhZGQgQXQuTmFtZS5uYW1lIChgUCBuYW1lKVxuICAgICAgfD4gYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiY2hlY2tib3hcIilcbiAgICBpblxuICAgIGxldCBjaGVja2VkID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgdmFyKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBTb21lIF8gLT4gQXQuY2hlY2tlZFxuICAgICAgICB8IE5vbmUgLT4gQXQudm9pZClcbiAgICBpblxuICAgIGxldCBhdCA9IGBSIGNoZWNrZWQgOjogYXQgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCBjaGVja2VkID0gSnYuZ2V0IHQgXCJjaGVja2VkXCIgaW5cbiAgICAgICAgICBMd2Quc2V0IHZhciAocmVzdWx0IChKdi50b19ib29sIGNoZWNrZWQpKSlcbiAgICBpblxuICAgIGxldCBldiA9IFsgYFAgb25fY2hhbmdlIF0gaW5cbiAgICAoRWx3ZC4oZGl2IFsgYFIgKGlucHV0IH5hdCB+ZXYgKCkpOyBgUiBsYmwgXSksIEx3ZC5nZXQgdmFyKVxuICBpblxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgKCogPGZpZWxkc2V0PjxsZWdlbmQ+ICopXG4gIGxldCBtYWtlX2FsbCB+ZyBkZXNjID1cbiAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgTHdkX3NlcS5tYXBcbiAgICAgIChmdW5jdGlvblxuICAgICAgICB8IENoZWNrICh2LCBsLCBjKSAtPlxuICAgICAgICAgICAgbGV0IGVsdCwgdmFsdWUgPSBtYWtlX2NoZWNrIH5nIH5uOiFuIHYgbCBjIGluXG4gICAgICAgICAgICBpbmNyIG47XG4gICAgICAgICAgICAoZWx0LCB2YWx1ZSkpXG4gICAgICBkZXNjXG4gIGluXG4gIGxldCBhbGwgPSBtYWtlX2FsbCB+ZzowIHQuZGVzYyBpblxuICBsZXQgZWx0cyA9IEx3ZF9zZXEubWFwIChmdW4gKGVsdCwgXykgLT4gZWx0KSBhbGwgaW5cbiAgbGV0IHZhbHVlID1cbiAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkIChmdW4gKF8sIHYpIC0+IEx3ZF9zZXEuZWxlbWVudCB2KSBMd2Rfc2VxLm1vbm9pZCBhbGxcbiAgICB8PiBMd2Rfc2VxLmxpZnQgfD4gTHdkX3NlcS5maWx0ZXJfbWFwIEZ1bi5pZCB8PiBMd2QubWFwIH5mOkx3ZF9zZXEudG9fbGlzdFxuICBpblxuICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH1cblxuKCogbGV0IHJlYyBtYWtlX2FsbCB+ZyB+biAoYWNjX2VsdCwgYWNjX3ZhbHVlKSBkZXNjID1cbiAgICAgbWF0Y2ggZGVzYyB3aXRoXG4gICAgIHwgQ2hlY2sgKHYsIGwsIGMpIDo6IHRsIC0+XG4gICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm4gdiBsIGMgaW5cbiAgICAgICAgIGxldCBhY2NfZWx0ID0gTHdkX3NlcS5jb25jYXQgYWNjX2VsdCBAQCBMd2Rfc2VxLmVsZW1lbnQgZWx0IGluXG4gICAgICAgICBsZXQgYWNjX3ZhbHVlID1cbiAgICAgICAgICAgTHdkLm1hcDIgYWNjX3ZhbHVlIHZhbHVlIH5mOihmdW4gYWNjIC0+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgfCBOb25lIC0+IGFjYyB8IFNvbWUgdiAtPiB2IDo6IGFjYylcbiAgICAgICAgIGluXG4gICAgICAgICBtYWtlX2FsbCB+ZyB+bjoobiArIDEpIChhY2NfZWx0LCBhY2NfdmFsdWUpIHRsXG4gICAgIHwgXyAtPiAoTHdkLnB1cmUgYWNjX2VsdCwgYWNjX3ZhbHVlKVxuICAgaW5cbiAgIGxldCBlbHRzLCB2YWx1ZSA9IG1ha2VfYWxsIH5nOjAgfm46MCAoTHdkX3NlcS5lbXB0eSwgTHdkLnB1cmUgW10pIHQuZGVzYyBpblxuICAgeyBmaWVsZCA9IEVsd2QuZGl2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdOyB2YWx1ZSB9ICopXG4iLCJvcGVuISBTdGRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxubGV0IHYgP2QgPyhhdCA9IFtdKSA/ZXYgdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIEF0dHJzLmFkZCBBdC5OYW1lLnR5cGUnIChgUCBcImJ1dHRvblwiKSBhdCB8PiBBdHRycy5hZGQgQXQuTmFtZS52YWx1ZSB2YWx1ZVxuICBpblxuICBFbHdkLmlucHV0ID9kIH5hdCA/ZXYgKClcblxudHlwZSAnYSB1cGRhdGUgPSBOb25lIHwgTmV4dCB8IFNldCBvZiAnYVxuXG50eXBlICdzdGF0ZSBoYW5kbGVyX3dpdGhfc3RhdGUgPVxuICB8IEhhbmRsZXJfd2l0aF9zdGF0ZSA6IHtcbiAgICAgIG9wdHMgOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgICB0eXBlJyA6ICdhIEV2LnR5cGUnO1xuICAgICAgZnVuYyA6ICdzdGF0ZSAtPiAnYSBFdi50IC0+ICdzdGF0ZSB1cGRhdGU7XG4gICAgfVxuICAgICAgLT4gJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZVxuXG5sZXQgaGFuZGxlciA/b3B0cyB0eXBlJyBmdW5jID0gSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfVxuXG5tb2R1bGUgdHlwZSBTdGF0ZSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIG5leHQgOiB0IC0+IHRcbmVuZFxuXG5sZXQgYXBwbHlfc3RhdGUgc3RhdGUgZiA9IGYgc3RhdGVcblxubGV0IHdpdGhfc3RhdGUgPyhiYXNlID0gQXR0cnMuZW1wdHkpICh0eXBlIHQpIChtb2R1bGUgUyA6IFN0YXRlIHdpdGggdHlwZSB0ID0gdClcbiAgICA/KHN0YXRlID0gUy5kZWZhdWx0KSA/ZCA/KGF0IDogKFMudCAtPiBBdHRycy50KSBvcHRpb24pXG4gICAgPyhldiA6IHQgaGFuZGxlcl93aXRoX3N0YXRlIEVsd2QuY29sIG9wdGlvbilcbiAgICAoY29udGVudCA6IFMudCAtPiBFbC50IEVsd2QuY29sKSA9XG4gIGxldCB2X3N0YXRlID0gTHdkLnZhciBzdGF0ZSBpblxuICBsZXQgZ2V0X3N0YXRlICgpID0gTHdkLmdldCB2X3N0YXRlIGluXG4gIGxldCBzZXRfc3RhdGUgdCA9IEx3ZC5zZXQgdl9zdGF0ZSB0IGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgIGxldCQqIHN0YXRlID0gZ2V0X3N0YXRlICgpIGluXG4gICAgbGV0IHdpdGhfc3RhdGUgKEhhbmRsZXJfd2l0aF9zdGF0ZSB7IG9wdHM7IHR5cGUnOyBmdW5jIH0pID1cbiAgICAgIGxldCBmdW5jIGV2ID1cbiAgICAgICAgbWF0Y2ggZnVuYyBzdGF0ZSBldiB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICB8IFNldCBzIC0+IHNldF9zdGF0ZSBzXG4gICAgICAgIHwgTmV4dCAtPiBzZXRfc3RhdGUgQEAgUy5uZXh0IHN0YXRlXG4gICAgICBpblxuICAgICAgRWx3ZC5oYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmNcbiAgICBpblxuICAgIGxldCBhdCA9XG4gICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmJhc2VcbiAgICAgICAgKGZ1biBhdCAtPiBBdHRycy51bmlvbiBiYXNlIEBAIGFwcGx5X3N0YXRlIHN0YXRlIGF0KVxuICAgICAgICBhdFxuICAgIGluXG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgYXQgaW5cbiAgICBsZXQgZXYgPVxuICAgICAgT3B0aW9uLm1hcFxuICAgICAgICAoTGlzdC5tYXAgfmY6KGZ1bmN0aW9uXG4gICAgICAgICAgfCBgUCBoIC0+IGBQICh3aXRoX3N0YXRlIGgpXG4gICAgICAgICAgfCBgUiBoIC0+IGBSIChMd2QubWFwIGggfmY6d2l0aF9zdGF0ZSlcbiAgICAgICAgICB8IGBTIGggLT4gYFMgKEx3ZF9zZXEubWFwIHdpdGhfc3RhdGUgaCkpKVxuICAgICAgICBldlxuICAgIGluXG4gICAgRWx3ZC5idXR0b24gP2QgfmF0ID9ldiAoY29udGVudCBzdGF0ZSlcbiAgaW5cbiAgKGVsdCwgZ2V0X3N0YXRlLCBzZXRfc3RhdGUpXG5cbnR5cGUgdHdvX3N0YXRlID0gT24gfCBPZmZcblxubW9kdWxlIFR3b19zdGF0ZSA9IHN0cnVjdFxuICB0eXBlIHQgPSB0d29fc3RhdGVcblxuICBsZXQgZGVmYXVsdCA9IE9uXG4gIGxldCBuZXh0ID0gZnVuY3Rpb24gT24gLT4gT2ZmIHwgT2ZmIC0+IE9uXG5lbmRcblxubGV0IHR3b19zdGF0ZSA/YmFzZSA9IHdpdGhfc3RhdGUgP2Jhc2UgKG1vZHVsZSBUd29fc3RhdGUpXG4iLCJvcGVuIFN0ZExhYmVsc1xub3BlbiBNb3JlTGFiZWxzXG5vcGVuISBZb2pzb25cblxudHlwZSB0ID0gWW9qc29uLlNhZmUudFxuXG5sZXQgeW9qc29uX29mX3VuaXQgKCkgOiB0ID0gYE51bGxcbmxldCB5b2pzb25fb2ZfYm9vbCBiIDogdCA9IGBCb29sIGJcbmxldCB5b2pzb25fb2Zfc3RyaW5nIHN0ciA6IHQgPSBgU3RyaW5nIHN0clxubGV0IHlvanNvbl9vZl9ieXRlcyBieXRlcyA6IHQgPSBgU3RyaW5nIChCeXRlcy50b19zdHJpbmcgYnl0ZXMpXG5sZXQgeW9qc29uX29mX2NoYXIgYyA6IHQgPSBgU3RyaW5nIChTdHJpbmcubWFrZSAxIGMpXG5sZXQgeW9qc29uX29mX2ludCBuIDogdCA9IGBJbnQgblxubGV0IHlvanNvbl9vZl9mbG9hdCBuIDogdCA9IGBGbG9hdCBuXG5sZXQgeW9qc29uX29mX2ludDMyIChuIDogSW50MzIudCkgOiB0ID0gYEludGxpdCAoSW50MzIudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX2ludDY0IChuIDogSW50NjQudCkgOiB0ID0gYEludGxpdCAoSW50NjQudG9fc3RyaW5nIG4pXG5sZXQgeW9qc29uX29mX25hdGl2ZWludCBuIDogdCA9IGBJbnRsaXQgKE5hdGl2ZWludC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfcmVmIHlvanNvbl9vZl9fYSByZiA9IHlvanNvbl9vZl9fYSAhcmZcbmxldCB5b2pzb25fb2ZfbGF6eV90IHlvanNvbl9vZl9fYSBsdiA9IHlvanNvbl9vZl9fYSAoTGF6eS5mb3JjZSBsdilcblxubGV0IHlvanNvbl9vZl9vcHRpb24geW9qc29uX29mX19hID0gZnVuY3Rpb25cbiAgfCBTb21lIHggLT4geW9qc29uX29mX19hIHhcbiAgfCBOb25lIC0+IGBOdWxsXG47O1xuXG5sZXQgeW9qc29uX29mX3BhaXIgeW9qc29uX29mX19hIHlvanNvbl9vZl9fYiAoYSwgYikgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYiBdXG47O1xuXG5sZXQgeW9qc29uX29mX3RyaXBsZSB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIHlvanNvbl9vZl9fYyAoYSwgYiwgYykgPVxuICBgTGlzdCBbIHlvanNvbl9vZl9fYSBhOyB5b2pzb25fb2ZfX2IgYjsgeW9qc29uX29mX19jIGMgXVxuOztcblxuKCogTGlzdC5yZXYgKExpc3QucmV2X21hcCAuLi4pIGlzIHRhaWwgcmVjdXJzaXZlLCB0aGUgT0NhbWwgc3RhbmRhcmRcbiAgIGxpYnJhcnkgTGlzdC5tYXAgaXMgTk9ULiAqKVxubGV0IHlvanNvbl9vZl9saXN0IHlvanNvbl9vZl9fYSBsc3QgPSBgTGlzdCAoTGlzdC5yZXYgKExpc3QucmV2X21hcCB+Zjp5b2pzb25fb2ZfX2EgbHN0KSlcblxubGV0IHlvanNvbl9vZl9hcnJheSB5b2pzb25fb2ZfX2EgYXIgPVxuICBsZXQgbHN0X3JlZiA9IHJlZiBbXSBpblxuICBmb3IgaSA9IEFycmF5Lmxlbmd0aCBhciAtIDEgZG93bnRvIDAgZG9cbiAgICBsc3RfcmVmIDo9IHlvanNvbl9vZl9fYSBhci4oaSkgOjogIWxzdF9yZWZcbiAgZG9uZTtcbiAgYExpc3QgIWxzdF9yZWZcbjs7XG5cbmxldCB5b2pzb25fb2ZfaGFzaHRibCB5b2pzb25fb2Zfa2V5IHlvanNvbl9vZl92YWwgaHRibCA9XG4gIGxldCBjb2xsIH5rZXk6ayB+ZGF0YTp2IGFjYyA9IGBMaXN0IFsgeW9qc29uX29mX2tleSBrOyB5b2pzb25fb2ZfdmFsIHYgXSA6OiBhY2MgaW5cbiAgYExpc3QgKEhhc2h0YmwuZm9sZCBodGJsIH5pbml0OltdIH5mOmNvbGwpXG47O1xuXG5sZXQgeW9qc29uX29mX29wYXF1ZSBfID0gYFN0cmluZyBcIjxvcGFxdWU+XCJcbmxldCB5b2pzb25fb2ZfZnVuIF8gPSBgU3RyaW5nIFwiPGZ1bj5cIlxuXG5leGNlcHRpb24gT2ZfeW9qc29uX2Vycm9yIG9mIGV4biAqIHRcblxubGV0IHJlY29yZF9jaGVja19leHRyYV9maWVsZHMgPSByZWYgdHJ1ZVxubGV0IG9mX3lvanNvbl9lcnJvcl9leG4gZXhjIHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKGV4YywgeW9qc29uKSlcbmxldCBvZl95b2pzb25fZXJyb3Igd2hhdCB5b2pzb24gPSByYWlzZSAoT2ZfeW9qc29uX2Vycm9yIChGYWlsdXJlIHdoYXQsIHlvanNvbikpXG5cbmxldCB1bml0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBOdWxsIC0+ICgpXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ1bml0X29mX3lvanNvbjogYE51bGwgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgYm9vbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgQm9vbCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJvb2xfb2ZfeW9qc29uOiB0cnVlL2ZhbHNlIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHN0cmluZ19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInN0cmluZ19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBieXRlc19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgU3RyaW5nIHN0ciAtPiBCeXRlcy5vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJieXRlc19vZl95b2pzb246IHN0cmluZyBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBjaGFyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+XG4gICAgaWYgU3RyaW5nLmxlbmd0aCBzdHIgPD4gMVxuICAgIHRoZW4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBtdXN0IGNvbnRhaW4gb25lIGNoYXJhY3RlciBvbmx5XCIgeW9qc29uO1xuICAgIHN0ci5bMF1cbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImNoYXJfb2ZfeW9qc29uOiBzdHJpbmcgb2Ygc2l6ZSBvbmUgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnQgdiAtPiB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGZsb2F0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBGbG9hdCB2IC0+IHZcbiAgfCBgSW50IGkgLT4gZmxvYXRfb2ZfaW50IGlcbiAgfCBgSW50bGl0IHN0ciAtPiBmbG9hdF9vZl9zdHJpbmcgc3RyXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJmbG9hdF9vZl95b2pzb246IGZsb2F0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDMyX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDMyLm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50MzIub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDMyX29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnQ2NF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgSW50bGl0IHN0ciAtPiBJbnQ2NC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IEludDY0Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJpbnQ2NF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgbmF0aXZlaW50X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IE5hdGl2ZWludC5vZl9zdHJpbmcgc3RyXG4gIHwgYEludCB2IC0+IE5hdGl2ZWludC5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwibmF0aXZlaW50X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCByZWZfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSByZWYgKGFfX29mX3lvanNvbiB5b2pzb24pXG5sZXQgbGF6eV90X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID0gTGF6eS5mcm9tX3ZhbCAoYV9fb2ZfeW9qc29uIHlvanNvbilcblxubGV0IG9wdGlvbl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gTm9uZVxuICB8IGVsIC0+IFNvbWUgKGFfX29mX3lvanNvbiBlbClcbjs7XG5cbmxldCBwYWlyX29mX3lvanNvbiBhX19vZl95b2pzb24gYl9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBhLCBiXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJwYWlyX29mX3lvanNvbjogaW52YWxpZCBmb3JtYXRcIiB5b2pzb25cbjs7XG5cbmxldCB0cmlwbGVfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24gY19fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgWyBhX3lvanNvbjsgYl95b2pzb247IGNfeW9qc29uIF0gLT5cbiAgICBsZXQgYSA9IGFfX29mX3lvanNvbiBhX3lvanNvbiBpblxuICAgIGxldCBiID0gYl9fb2ZfeW9qc29uIGJfeW9qc29uIGluXG4gICAgbGV0IGMgPSBjX19vZl95b2pzb24gY195b2pzb24gaW5cbiAgICBhLCBiLCBjXG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJ0cmlwbGVfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IGxpc3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBMaXN0IGxzdCAtPlxuICAgIGxldCByZXZfbHN0ID0gTGlzdC5yZXZfbWFwIGxzdCB+ZjphX19vZl95b2pzb24gaW5cbiAgICBMaXN0LnJldiByZXZfbHN0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJsaXN0X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBhcnJheV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgW10gLT4gW3x8XVxuICB8IGBMaXN0IChoIDo6IHQpIC0+XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIHQgKyAxIGluXG4gICAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgbGVuIChhX19vZl95b2pzb24gaCkgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9IGZ1bmN0aW9uXG4gICAgICB8IFtdIC0+IHJlc1xuICAgICAgfCBoIDo6IHQgLT5cbiAgICAgICAgcmVzLihpKSA8LSBhX19vZl95b2pzb24gaDtcbiAgICAgICAgbG9vcCAoaSArIDEpIHRcbiAgICBpblxuICAgIGxvb3AgMSB0XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJhcnJheV9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaGFzaHRibF9vZl95b2pzb24ga2V5X29mX3lvanNvbiB2YWxfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IGh0YmwgPSBIYXNodGJsLmNyZWF0ZSAwIGluXG4gICAgbGV0IGFjdCA9IGZ1bmN0aW9uXG4gICAgICB8IGBMaXN0IFsga195b2pzb247IHZfeW9qc29uIF0gLT5cbiAgICAgICAgSGFzaHRibC5hZGQgaHRibCB+a2V5OihrZXlfb2ZfeW9qc29uIGtfeW9qc29uKSB+ZGF0YToodmFsX29mX3lvanNvbiB2X3lvanNvbilcbiAgICAgIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJoYXNodGJsX29mX3lvanNvbjogdHVwbGUgbGlzdCBuZWVkZWRcIiB5b2pzb25cbiAgICBpblxuICAgIExpc3QuaXRlciBsc3QgfmY6YWN0O1xuICAgIGh0YmxcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IG9wYXF1ZV9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwib3BhcXVlX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgb3BhcXVlIHZhbHVlc1wiIHlvanNvblxuOztcblxubGV0IGZ1bl9vZl95b2pzb24geW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIFwiZnVuX29mX3lvanNvbjogY2Fubm90IGNvbnZlcnQgZnVuY3Rpb24gdmFsdWVzXCIgeW9qc29uXG47O1xuXG5tb2R1bGUgUHJpbWl0aXZlcyA9IHN0cnVjdFxuICBsZXQgeW9qc29uX29mX2FycmF5ID0geW9qc29uX29mX2FycmF5XG4gIGxldCBhcnJheV9vZl95b2pzb24gPSBhcnJheV9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ib29sID0geW9qc29uX29mX2Jvb2xcbiAgbGV0IGJvb2xfb2ZfeW9qc29uID0gYm9vbF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9jaGFyID0geW9qc29uX29mX2NoYXJcbiAgbGV0IGNoYXJfb2ZfeW9qc29uID0gY2hhcl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9mbG9hdCA9IHlvanNvbl9vZl9mbG9hdFxuICBsZXQgZmxvYXRfb2ZfeW9qc29uID0gZmxvYXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50ID0geW9qc29uX29mX2ludFxuICBsZXQgaW50X29mX3lvanNvbiA9IGludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQzMiA9IHlvanNvbl9vZl9pbnQzMlxuICBsZXQgaW50MzJfb2ZfeW9qc29uID0gaW50MzJfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaW50NjQgPSB5b2pzb25fb2ZfaW50NjRcbiAgbGV0IGludDY0X29mX3lvanNvbiA9IGludDY0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xpc3QgPSB5b2pzb25fb2ZfbGlzdFxuICBsZXQgbGlzdF9vZl95b2pzb24gPSBsaXN0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX25hdGl2ZWludCA9IHlvanNvbl9vZl9uYXRpdmVpbnRcbiAgbGV0IG5hdGl2ZWludF9vZl95b2pzb24gPSBuYXRpdmVpbnRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfb3B0aW9uID0geW9qc29uX29mX29wdGlvblxuICBsZXQgb3B0aW9uX29mX3lvanNvbiA9IG9wdGlvbl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9yZWYgPSB5b2pzb25fb2ZfcmVmXG4gIGxldCByZWZfb2ZfeW9qc29uID0gcmVmX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3N0cmluZyA9IHlvanNvbl9vZl9zdHJpbmdcbiAgbGV0IHN0cmluZ19vZl95b2pzb24gPSBzdHJpbmdfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfYnl0ZXMgPSB5b2pzb25fb2ZfYnl0ZXNcbiAgbGV0IGJ5dGVzX29mX3lvanNvbiA9IGJ5dGVzX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3VuaXQgPSB5b2pzb25fb2ZfdW5pdFxuICBsZXQgdW5pdF9vZl95b2pzb24gPSB1bml0X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2xhenlfdCA9IHlvanNvbl9vZl9sYXp5X3RcbiAgbGV0IGxhenlfdF9vZl95b2pzb24gPSBsYXp5X3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfaGFzaHRibCA9IHlvanNvbl9vZl9oYXNodGJsXG4gIGxldCBoYXNodGJsX29mX3lvanNvbiA9IGhhc2h0Ymxfb2ZfeW9qc29uXG5lbmRcbiIsIm1vZHVsZSBZb2pzb25fY29udl9lcnJvciA9IFlvanNvbl9jb252X2Vycm9yXG5tb2R1bGUgWW9qc29uX2NvbnYgPSBZb2pzb25fY29udlxubW9kdWxlIFlvanNvbmFibGUgPSBZb2pzb25hYmxlX2ludGZcbm1vZHVsZSBZb2pzb24gPSBZb2pzb25cblxubW9kdWxlIE9wdGlvbiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBvcHRpb24gPVxuICAgIHwgTm9uZVxuICAgIHwgU29tZSBvZiAnYVxuZW5kXG5cbmV4dGVybmFsIGlnbm9yZSA6IF8gLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5leHRlcm5hbCBwb2x5X2VxdWFsIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcblxubGV0ICggISApIDogJ2EgcmVmIC0+ICdhID0gZnVuIHggLT4gIXhcbiIsIm1vZHVsZSBBcGkgPSBKZWxseWZpbl9hcGlcblxudHlwZSBjcmVkZW50aWFscyA9IHsgYmFzZV91cmwgOiBzdHJpbmc7IHVzZXJuYW1lIDogc3RyaW5nOyBwYXNzd29yZCA6IHN0cmluZyB9XG5cbnR5cGUgY29ubmV4aW9uID0ge1xuICBiYXNlX3VybCA6IHN0cmluZztcbiAgYXV0aF9yZXNwb25zZSA6IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5yZXNwb25zZTtcbn1cblxubGV0IGdldF90b2tlbiB0ID0gdC5hdXRoX3Jlc3BvbnNlLkFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS5hY2Nlc3NfdG9rZW5cblxubGV0IGNvbm5lY3QgY3JlZGVudGlhbHMgPVxuICBsZXQgbW9kdWxlIEF1dGggPSBBcGkuQXV0aGVudGljYXRlX2J5X25hbWUgaW5cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHMgaW5cbiAgbGV0IGF1dGggPSB7IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZS51c2VybmFtZTsgcHcgPSBwYXNzd29yZCB9IGluXG4gIGxldCsgYXV0aF9yZXNwb25zZSA9IEFwaS5yZXF1ZXN0IH5iYXNlX3VybCAobW9kdWxlIEF1dGgpIGF1dGggKCkgaW5cbiAgeyBiYXNlX3VybDsgYXV0aF9yZXNwb25zZSB9XG5cbmxldCBxdWVyeSB0ID1cbiAgbGV0IHRva2VuID0gZ2V0X3Rva2VuIHQgaW5cbiAgbGV0IGJhc2VfdXJsID0gdC5iYXNlX3VybCBpblxuICBKZWxseWZpbl9hcGkucmVxdWVzdCB+YmFzZV91cmwgfnRva2VuXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSB0YWcgPSBCbG9jayBvZiBpbnQgfCBJbnQgb2YgaW50XG5cbmxldCB0YWdfb2YgdiA9XG4gICgqIHdvdyB3b3cgd293LiBpcyB0aGF0IG9rYXl5aXNoID8qKVxuICBsZXQgb2JqID0gT2JqLnJlcHIgdiBpblxuICBpZiBPYmouaXNfYmxvY2sgb2JqIHRoZW4gQmxvY2sgKE9iai50YWcgb2JqKSBlbHNlIEludCAoT2JqLm1hZ2ljIG9iailcblxubW9kdWxlIHR5cGUgUXVlcmllcyA9IHNpZ1xuICB0eXBlICdhIHF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoUSA6IFF1ZXJpZXMpID0gc3RydWN0XG4gIHR5cGUgZXJyb3IgPSBbIGBKdiBvZiBKdi5FcnJvci50IHwgYE1zZyBvZiBzdHJpbmcgXVxuICB0eXBlICdhIHF1ZXJ5ID0gJ2EgUS5xdWVyeVxuICB0eXBlICdhIGV2ZW50ID0gJ2EgUS5ldmVudFxuICB0eXBlICdhIHdpdGhfdXVpZCA9IHsgdXVpZCA6IHN0cmluZzsgZGF0YSA6ICdhIH1cbiAgdHlwZSAnYSBtZXNzYWdlID0gQW5zd2VyIG9mICdhIHdpdGhfdXVpZCB8IEV2ZW50IG9mICgnYSBldmVudCAqICdhKVxuICB0eXBlIGxpc3RlbmVyID0gc3RyaW5nXG5cbiAgKCogdG9kbzpjaGVjayB0aGF0IHRoZSB3b3JrZXIgYW5kIHRoZSBjbGllbnQgc2hhcmUgdGhlIHNhbWUgYXBpPyAqKVxuXG4gIG1vZHVsZSBTdGFydF9jbGllbnQgKFAgOiBzaWdcbiAgICB2YWwgdXJsIDogc3RyaW5nXG4gIGVuZCkgPVxuICBzdHJ1Y3RcbiAgICBsZXQgZnV0dXJlcyA6IChzdHJpbmcsIEp2LnQgLT4gdW5pdCkgSGFzaHRibC50ID0gSGFzaHRibC5jcmVhdGUgNjRcbiAgICBsZXQgbGlzdGVuZXJzIDogKHRhZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCB3b3JrZXIgPSBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuY3JlYXRlIEBAIEpzdHIub2Zfc3RyaW5nIFAudXJsXG5cbiAgICBsZXQgcXVlcnkgKHR5cGUgYSkgKHF1ZXJ5IDogYSBxdWVyeSkgOiAoYSwgZXJyb3IpIEZ1dC5yZXN1bHQgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBmdXQsIHNldCA9IEZ1dC5jcmVhdGUgKCkgaW5cbiAgICAgIGxldCBzZXQganYgPSBzZXQgQEAgRW5jb2RpbmdzLm9mX2p2IGp2IGluXG4gICAgICBsZXQgcXVlcnkgPSB7IHV1aWQ7IGRhdGEgPSBxdWVyeSB9IHw+IEVuY29kaW5ncy50b19qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIucG9zdCB3b3JrZXIgKEp2Lm9mX2pzdHIgcXVlcnkpO1xuICAgICAgSGFzaHRibC5hZGQgZnV0dXJlcyB1dWlkIHNldDtcbiAgICAgIGZ1dFxuXG4gICAgbGV0IGxpc3RlbiAodHlwZSBhKSAoZXZlbnQgOiBhIGV2ZW50KSB+KGYgOiBhIC0+IHVuaXQpIDogbGlzdGVuZXIgPVxuICAgICAgbGV0IHV1aWQgPSBuZXdfdXVpZF92NCAoKSB8PiBVdWlkbS50b19zdHJpbmcgaW5cbiAgICAgIGxldCBzZXQganYgPSBmIChPYmoubWFnaWMganYpIGluXG4gICAgICBIYXNodGJsLmFkZCBsaXN0ZW5lcnMgKHRhZ19vZiBldmVudCkgc2V0O1xuICAgICAgdXVpZFxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgbWVzc2FnZSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbWF0Y2ggbWVzc2FnZSB3aXRoXG4gICAgICB8IEV2ZW50IChlLCB2KSAtPlxuICAgICAgICAgIEhhc2h0YmwuZmluZF9hbGwgbGlzdGVuZXJzICh0YWdfb2YgZSkgfD4gTGlzdC5pdGVyIH5mOihmdW4gZiAtPiBmIHYpXG4gICAgICB8IEFuc3dlciB7IHV1aWQ7IGRhdGEgfSAtPlxuICAgICAgICAgIGxldCBmID0gSGFzaHRibC5maW5kIGZ1dHVyZXMgdXVpZCBpblxuICAgICAgICAgIEhhc2h0YmwucmVtb3ZlIGZ1dHVyZXMgdXVpZDtcbiAgICAgICAgICBmIGRhdGFcblxuICAgIGxldCBfID1cbiAgICAgIEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2VcbiAgICAgIEBAIEJycl93ZWJ3b3JrZXJzLldvcmtlci5hc190YXJnZXQgd29ya2VyXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIFdvcmtlcl9pbXBsID0gZnVuY3RvciAoKSAtPiBzaWdcbiAgICB2YWwgb25fcXVlcnkgOiAnYSBxdWVyeSAtPiAoJ2EsIGVycm9yKSBGdXQucmVzdWx0XG4gIGVuZFxuXG4gIGxldCBkaXNwYXRjaF9ldmVudCAodHlwZSBhKSAoZSA6IGEgZXZlbnQpICh2IDogYSkgPVxuICAgICgqIGxldCBkYXRhID0gRW5jb2RpbmdzLm1hcnNoYWxfdG9fanN0ciB8PiBKdi5vZl9qc3RyIGluICopXG4gICAgQnJyX3dlYndvcmtlcnMuV29ya2VyLkcucG9zdCAoRW5jb2RpbmdzLnRvX2pzdHIgKEV2ZW50IChlLCB2KSkgfD4gSnYub2ZfanN0cilcblxuICAoKiogRXhlY3V0ZSBXJ3MgYm9keSBhbmQgY29uZmlndXJlIG1lc3NhZ2luZyAqKVxuICBtb2R1bGUgTWFrZV93b3JrZXIgKFcgOiBXb3JrZXJfaW1wbCkgPSBzdHJ1Y3RcbiAgICBvcGVuIEJyclxuICAgIG1vZHVsZSBXID0gVyAoKVxuXG4gICAgbGV0IG9uX21lc3NhZ2UgZXYgPVxuICAgICAgbGV0IG1lc3NhZ2UgPSBFdi5hc190eXBlIGV2IGluXG4gICAgICBsZXQgb3BlbiBSZXN1bHQgaW5cbiAgICAgIGlnbm9yZSAoKiBUT0RPOiBoYW5kbGVyIGVycm9ycyAqKVxuICAgICAgQEBcbiAgICAgIGxldCsgKHsgdXVpZDsgZGF0YSB9IDogJ2EgcXVlcnkgd2l0aF91dWlkKSA9XG4gICAgICAgIEJycl9pby5NZXNzYWdlLkV2LmRhdGEgbWVzc2FnZSB8PiBKdi50b19qc3RyIHw+IEVuY29kaW5ncy5vZl9qc3RyXG4gICAgICBpblxuICAgICAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgIGxldCsgcmVzdWx0ID0gVy5vbl9xdWVyeSBkYXRhIGluXG4gICAgICBsZXQgZGF0YSA9IEVuY29kaW5ncy50b19qc3RyIHJlc3VsdCB8PiBKdi5vZl9qc3RyIGluXG4gICAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0XG4gICAgICAgIChFbmNvZGluZ3MudG9fanN0ciAoQW5zd2VyIHsgdXVpZDsgZGF0YSB9KSB8PiBKdi5vZl9qc3RyKVxuXG4gICAgbGV0IF8gPSBFdi5saXN0ZW4gQnJyX2lvLk1lc3NhZ2UuRXYubWVzc2FnZSBvbl9tZXNzYWdlIEcudGFyZ2V0XG4gIGVuZFxuZW5kXG4iLCJvcGVuIFN0ZFxuXG4oKiogU29tZSBzb3J0cyByZXF1aXJlIGEgY3VzdG9tIG9yZGVyaW5nIHdoaWNoIGlzIGRvbmUgdXNpbmcgYSB0YWJsZSBvZiBpbmRleGVzLiBGb3IgZXhhbXBsZSwgdG8gZ2V0IGEgcmFuZG9tIHNvcnQgd2Ugc2ltcGxlIHNodWZmbGUgYW4gYXJyYXkgd2hpY2ggc2l6ZSBpcyB0aGUgb25lIG9mIHRoZSByZXN1bHQuICopXG5tb2R1bGUgT3JkZXIgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSW5pdGlhbCB8IEFzYyB8IERlc2MgfCBDdXN0b20gb2YgaW50IGFycmF5XG5cbiAgbGV0IHJhbmRvbSB+c2l6ZSA9XG4gICAgbGV0IHRibCA9IEFycmF5LmluaXQgc2l6ZSB+ZjpGdW4uaWQgaW5cbiAgICBsZXQgKCkgPSBBcnJheS5zaHVmZmxlIHRibCBpblxuICAgIEN1c3RvbSB0YmxcblxuICBsZXQgb2Zfc3RyaW5nIH5zaXplID0gZnVuY3Rpb25cbiAgICB8IFwicmFuZG9tXCIgLT4gcmFuZG9tIH5zaXplXG4gICAgfCBcImFzY1wiIC0+IEFzY1xuICAgIHwgXCJkZXNjXCIgLT4gRGVzY1xuICAgIHwgXyAtPiBJbml0aWFsXG5cbiAgbGV0IGFwcGx5IHQgfnNpemUgaSA9XG4gICAgbWF0Y2ggdCB3aXRoXG4gICAgfCBJbml0aWFsIHwgQXNjIC0+IGlcbiAgICB8IERlc2MgLT4gc2l6ZSAtIDEgLSBpXG4gICAgfCBDdXN0b20gYSAtPiAoKiB0b2RvIGNoZWNrIGJvdW5kcyAqKSBhLihpKVxuZW5kXG5cbm1vZHVsZSBTb3J0ID0gc3RydWN0XG4gIHR5cGUgdCA9IERhdGVfYWRkZWQgfCBOYW1lXG5cbiAgbGV0IG9mX3N0cmluZyA9IGZ1bmN0aW9uXG4gICAgfCBcImRhdGVfYWRkZWRcIiAtPiBEYXRlX2FkZGVkXG4gICAgfCBcIm5hbWVcIiAtPiBOYW1lXG4gICAgfCBfIC0+IERhdGVfYWRkZWRcbmVuZFxuXG50eXBlICdhIHNlbGVjdGlvbiA9IEFsbCB8IE9ubHkgb2YgJ2EgbGlzdFxudHlwZSBraW5kID0gQXVkaW9cbnR5cGUgZmlsdGVyID0gU2VhcmNoIG9mIHN0cmluZ1xuXG50eXBlIHJlcSA9IHtcbiAga2luZCA6IGtpbmQ7XG4gIHNyY192aWV3cyA6IHN0cmluZyBzZWxlY3Rpb247XG4gIHNvcnQgOiBTb3J0LnQ7XG4gIGZpbHRlcnMgOiBmaWx0ZXIgbGlzdDtcbn1cblxudHlwZSB0ID0geyB1dWlkIDogVXVpZG0udDsgcmVxdWVzdCA6IHJlcTsgc3RhcnRfb2Zmc2V0IDogaW50OyBpdGVtX2NvdW50IDogaW50IH1cbnR5cGUgcmFuZ2VkID0geyB2aWV3IDogdDsgZmlyc3QgOiBpbnQ7IGxhc3QgOiBpbnQ7IG9yZGVyIDogT3JkZXIudCB9XG5cbmxldCBpdGVtX2NvdW50IHQgPSB0Lml0ZW1fY291bnQgLSB0LnN0YXJ0X29mZnNldFxuXG5sZXQgcmVxIGtpbmQgPyhzcmNfdmlld3MgPSBBbGwpID8oc29ydCA9IFNvcnQuRGF0ZV9hZGRlZCkgPyhmaWx0ZXJzID0gW10pICgpID1cbiAgeyBraW5kOyBzcmNfdmlld3M7IHNvcnQ7IGZpbHRlcnMgfVxuXG5sZXQgaGFzaCByZXEgPSBIYXNodGJsLmhhc2ggKHJlcS5zcmNfdmlld3MsIHJlcS5maWx0ZXJzKVxuIiwib3BlbiEgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEFwaSA9IERTLkFwaVxuXG50eXBlIHNlcnZlciA9IHN0cmluZyAqIERTLmNvbm5leGlvblxuXG5tb2R1bGUgUXVlcmllcyA9IHN0cnVjdFxuICB0eXBlICdhIHF1ZXJ5ID1cbiAgICB8IFNldF9zZXNzaW9uX3V1aWQgOiBzdHJpbmcgLT4gdW5pdCBxdWVyeVxuICAgIHwgQWRkX3NlcnZlcnMgOiBzZXJ2ZXIgbGlzdCAtPiB1bml0IHF1ZXJ5XG4gICAgfCBHZXRfYWxsIDogdW5pdCAtPiBBcGkuSXRlbS50IGxpc3QgcXVlcnlcbiAgICB8IEdldF9saWJyYXJpZXMgOiB1bml0IC0+IFN0b3Jlcy5JdGVtcy50IGxpc3QgcXVlcnlcbiAgICB8IEdldF9zZXJ2ZXJfbGlicmFyaWVzIDogc3RyaW5nIC0+IFN0b3Jlcy5JdGVtcy50IGxpc3QgcXVlcnlcbiAgICB8IENyZWF0ZV92aWV3IDogVmlldy5yZXEgLT4gVmlldy50IHF1ZXJ5XG4gICAgfCBHZXQgOlxuICAgICAgICBWaWV3LnQgKiBWaWV3Lk9yZGVyLnQgKiBpbnQgYXJyYXlcbiAgICAgICAgLT4gU3RvcmVzLkl0ZW1zLnQgb3B0aW9uIGFycmF5IHF1ZXJ5XG5cbiAgdHlwZSAnYSBldmVudCA9IFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSA6IChzdHJpbmcgKiBTeW5jLnJlcG9ydCkgZXZlbnRcbmVuZFxuXG5pbmNsdWRlIFdvcmtlcl9hcGkuTWFrZSAoUXVlcmllcylcbiIsImluY2x1ZGUgU3RkXG5tb2R1bGUgRFMgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIEVsd2QgPSBCcnJfbHdkLkVsd2Rcbm1vZHVsZSBVaV91dGlscyA9IEJycl9sd2RfdWkuVXRpbHNcbm1vZHVsZSBWaWV3ID0gRGIuVmlld1xubW9kdWxlIEF0dHJzID0gQnJyX2x3ZF91aS5BdHRyc1xuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBNTWFwID0gQ0NNdWx0aU1hcC5NYWtlIChTdHJpbmcpXG4gIG1vZHVsZSBJdGVtc19NdWx0aU1hcCA9IE1NYXAgKERiLlN0b3Jlcy5JdGVtcylcbmVuZFxuXG5tb2R1bGUgVXRpbHMgPSBzdHJ1Y3RcbiAgbGV0IHdpdGhfdGltaW5nID8obmFtZSA9IFwiXCIpIGYgPVxuICAgIGxldCB0ID0gQnJyLlBlcmZvcm1hbmNlLm5vd19tcyBCcnIuRy5wZXJmb3JtYW5jZSBpblxuICAgIGxldCByZXMgPSBmICgpIGluXG4gICAgQnJyLkNvbnNvbGUubG9nXG4gICAgICBbIG5hbWU7IFwidG9va1wiOyBCcnIuUGVyZm9ybWFuY2Uubm93X21zIEJyci5HLnBlcmZvcm1hbmNlIC0uIHQgXTtcbiAgICByZXNcbmVuZFxuIiwib3BlbiBJbXBvcnRcblxudHlwZSBsYXlvdXQgPSBNYWluIHwgS2lvc2tcblxubGV0IGFjdGl2ZV9sYXlvdXQgPSBMd2QudmFyIE1haW5cbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJycmVyXG5vcGVuIEJycl9sd2RfdWlcblxubW9kdWxlIFR3b19zdGF0ZV9idXR0b24gPSBzdHJ1Y3RcbiAgbGV0IGJhc2UgPSBBdHRycy5jbGFzc2VzIFsgXCJidXR0b25cIiBdXG5cbiAgbGV0IGF0ID0gZnVuY3Rpb25cbiAgICB8IEJ1dHRvbi5PbiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvblwiIF1cbiAgICB8IE9mZiAtPiBBdHRycy5jbGFzc2VzIFsgXCJvZmZcIiBdXG5cbiAgbGV0IG1ha2Ugfm9uX2NsaWNrID1cbiAgICBsZXQgb25fY2xpY2sgPSBCdXR0b24uaGFuZGxlciBCcnIuRXYuY2xpY2sgb25fY2xpY2sgaW5cbiAgICBCdXR0b24udHdvX3N0YXRlIH5iYXNlIH5hdCB+ZXY6WyBgUCBvbl9jbGljayBdXG5lbmRcblxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RcblxubW9kdWxlIERyYWdnYWJsZV90YWJsZSA9IHN0cnVjdFxuICBtb2R1bGUgdHlwZSBSb3cgPSBzaWdcbiAgICB0eXBlIHRcblxuICAgIHZhbCByZW5kZXIgOiB0IC0+IEVsLnQgbGlzdFxuICBlbmRcblxuICAoKiogQ29sdW1ucyBkZWNsYXJhdGlvbiAqKVxuICBtb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICAgIHR5cGUgY29sdW1uID0geyBuYW1lIDogc3RyaW5nOyBjc3Nfc2l6ZSA6IHN0cmluZyB9XG4gICAgdHlwZSB0ID0gY29sdW1uIGFycmF5XG5cbiAgICBsZXQgY29sdW1uIG5hbWUgY3NzX3NpemUgPSB7IG5hbWU7IGNzc19zaXplIH1cblxuICAgIGxldCB0b19zdHlsZSB0ID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG5cbiAgICBsZXQgdG9faGVhZGVyIHQgPVxuICAgICAgbGV0IGNlbGxzID1cbiAgICAgICAgQXJyYXkuZm9sZF9yaWdodCB0IH5pbml0OltdIH5mOihmdW4geyBuYW1lOyBfIH0gYWNjIC0+XG4gICAgICAgICAgICBFbC5kaXYgWyBFbC50eHQnIG5hbWUgXSA6OiBhY2MpXG4gICAgICBpblxuICAgICAgRWwuZGl2IGNlbGxzXG5cbiAgICBsZXQgc2V0IGVsdCB0ID1cbiAgICAgIGxldCB2YWx1ZSA9IEpzdHIudiBAQCB0b19zdHlsZSB0IGluXG4gICAgICBFbC5zZXRfaW5saW5lX3N0eWxlIEVsLlN0eWxlLmdyaWRfdGVtcGxhdGVfY29sdW1ucyB2YWx1ZSBlbHRcbiAgZW5kXG5cbiAgbGV0IGdyaWQgPSBBdHRycy5jbGFzc2VzIFsgXCJkcmFnZ2FibGUtdGFibGVcIiBdXG5cbiAgbGV0IHJlbmRlcl9yb3cgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+c2hhcmVkX2RyYWdfZGF0YVxuICAgICAgfm4gKHRfcm93IDogdCBMd2RfdGFibGUucm93KSByb3cgPVxuICAgIGxldCBhZGRfaGludCB+dG9wIGVsID1cbiAgICAgIGxldCBjID0gaWYgdG9wIHRoZW4gXCJob3Zlci10b3BcIiBlbHNlIFwiaG92ZXItYm90dG9tXCIgaW5cbiAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIHRydWUgZWxcbiAgICBpblxuICAgIGxldCByZW1vdmVfaGludHMgZWwgPVxuICAgICAgTGlzdC5pdGVyIFsgXCJob3Zlci10b3BcIjsgXCJob3Zlci1ib3R0b21cIiBdIH5mOihmdW4gYyAtPlxuICAgICAgICAgIEVsLnNldF9jbGFzcyAoSnN0ci52IGMpIGZhbHNlIGVsKVxuICAgIGluXG4gICAgbGV0IGlzX29uX3RvcCBlID1cbiAgICAgIGxldCBtb3VzZV9ldiA9IEV2LkRyYWcuYXNfbW91c2UgQEAgRXYuYXNfdHlwZSBlIGluXG4gICAgICBsZXQgb2Zmc2V0X3kgPSBFdi5Nb3VzZS5vZmZzZXRfeSBtb3VzZV9ldiBpblxuICAgICAgbGV0IHRhcmdldCA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgICBsZXQgc2l6ZV9oID0gRWwuaW5uZXJfaCB0YXJnZXQgaW5cbiAgICAgIG9mZnNldF95IDwuIHNpemVfaCAvLiAyLlxuICAgIGluXG4gICAgbGV0IGdldF9ldl90YXJnZXQgZSA9IEV2LmN1cnJlbnRfdGFyZ2V0IGUgfD4gRXYudGFyZ2V0X3RvX2p2IHw+IEVsLm9mX2p2IGluXG4gICAgTHdkX3NlcS5lbGVtZW50XG4gICAgQEBcbiAgICBsZXQgY2VsbHMgPSBSb3cucmVuZGVyIHJvdyBpblxuICAgIGFzc2VydCAoTGlzdC5sZW5ndGggY2VsbHMgPSBuKTtcbiAgICBsZXQgb25fZHJhZ19zdGFydCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ3N0YXJ0IChmdW4gXyAtPlxuICAgICAgICAgIERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCB8PiBFbC5zZXRfY2xhc3MgKEpzdHIudiBcImRyYWdnaW5nXCIpIHRydWU7XG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIEBAIFNvbWUgdF9yb3cpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19vdmVyID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnb3ZlciAoZnVuIGUgLT5cbiAgICAgICAgICBsZXQgdGFyZ2V0ID0gZ2V0X2V2X3RhcmdldCBlIGluXG4gICAgICAgICAgcmVtb3ZlX2hpbnRzIHRhcmdldDtcbiAgICAgICAgICBsZXQgdG9wID0gaXNfb25fdG9wIGUgaW5cbiAgICAgICAgICBsZXQgbm9vcCA9XG4gICAgICAgICAgICBsZXQgb3BlbiBPcHRpb24gaW5cbiAgICAgICAgICAgIGxldCsgcm93ID0gTHdkLnBlZWsgc2hhcmVkX2RyYWdfZGF0YSBpblxuICAgICAgICAgICAgbGV0IGVxdWFsX3ByZXYgcm93ID1cbiAgICAgICAgICAgICAgT3B0aW9uLm1hcF9vciB+ZGVmYXVsdDpmYWxzZSAoRXF1YWwucGh5c2ljYWwgcm93KVxuICAgICAgICAgICAgICAgIChMd2RfdGFibGUucHJldiB0X3JvdylcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfbmV4dCByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5uZXh0IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIEVxdWFsLnBoeXNpY2FsIHRfcm93IHJvd1xuICAgICAgICAgICAgfHwgKHRvcCAmJiBlcXVhbF9wcmV2IHJvdylcbiAgICAgICAgICAgIHx8ICgobm90IHRvcCkgJiYgZXF1YWxfbmV4dCByb3cpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBpZiBub3QgKE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpmYWxzZSBub29wKSB0aGVuIChcbiAgICAgICAgICAgIGFkZF9oaW50IH50b3AgdGFyZ2V0O1xuICAgICAgICAgICAgKCogPiBJZiB0aGUgbW91c2UgaXMgcmVsZWFzZWQgb3ZlciBhbiBlbGVtZW50IHRoYXQgaXMgYSB2YWxpZCBkcm9wIHRhcmdldCxcbiAgICAgICAgICAgICAgID4gdGhhdCBpcywgb25lIHRoYXQgY2FuY2VsbGVkIHRoZSBsYXN0IGRyYWdlbnRlciBvciBkcmFnb3ZlciBldmVudCxcbiAgICAgICAgICAgICAgID4gdGhlbiB0aGUgZHJvcCB3aWxsIGJlIHN1Y2Nlc3NmdWwuXG4gICAgICAgICAgICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTF9EcmFnX2FuZF9Ecm9wX0FQSS9EcmFnX29wZXJhdGlvbnMjc3BlY2lmeWluZ19kcm9wX3RhcmdldHMgKilcbiAgICAgICAgICAgIEV2LnByZXZlbnRfZGVmYXVsdCBlKSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2xlYXZlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnbGVhdmUgKGZ1biBlIC0+IHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGUpXG4gICAgaW5cbiAgICBsZXQgb25fZHJhZ19lbmQgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdlbmQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgZmFsc2UpXG4gICAgaW5cbiAgICBsZXQgb25fZHJvcCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJvcCAoZnVuIGUgLT5cbiAgICAgICAgICByZW1vdmVfaGludHMgQEAgZ2V0X2V2X3RhcmdldCBlO1xuICAgICAgICAgIGxldCBfID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KiByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQrIHNldCA9IEx3ZF90YWJsZS5nZXQgcm93IGluXG4gICAgICAgICAgICBpZiBpc19vbl90b3AgZSB0aGVuIGlnbm9yZSBAQCBMd2RfdGFibGUuYmVmb3JlIH5zZXQgdF9yb3dcbiAgICAgICAgICAgIGVsc2UgaWdub3JlIEBAIEx3ZF90YWJsZS5hZnRlciB+c2V0IHRfcm93O1xuICAgICAgICAgICAgTHdkX3RhYmxlLnJlbW92ZSByb3dcbiAgICAgICAgICBpblxuICAgICAgICAgIEx3ZC5zZXQgc2hhcmVkX2RyYWdfZGF0YSBOb25lKVxuICAgIGluXG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5kcmFnZ2FibGUgQEAgSnN0ci52IFwidHJ1ZVwiKSBdXG4gICAgICB+ZXY6XG4gICAgICAgIFtcbiAgICAgICAgICBgUCBvbl9kcmFnX3N0YXJ0O1xuICAgICAgICAgIGBQIG9uX2RyYWdfb3ZlcjtcbiAgICAgICAgICBgUCBvbl9kcmFnX2xlYXZlO1xuICAgICAgICAgIGBQIG9uX2RyYWdfZW5kO1xuICAgICAgICAgIGBQIG9uX2Ryb3A7XG4gICAgICAgIF1cbiAgICAgIChMaXN0Lm1hcCBjZWxscyB+ZjooZnVuIGMgLT4gYFAgYykpXG5cbiAgbGV0IG1ha2UgKHR5cGUgdCkgKG1vZHVsZSBSb3cgOiBSb3cgd2l0aCB0eXBlIHQgPSB0KSB+Y29sdW1uc1xuICAgICAgPyh0YWJsZSA6IHQgTHdkX3RhYmxlLnQgPSBMd2RfdGFibGUubWFrZSAoKSlcbiAgICAgID8oc2hhcmVkX2RyYWdfZGF0YSA6IHQgTHdkX3RhYmxlLnJvdyBvcHRpb24gTHdkLnZhciA9IEx3ZC52YXIgTm9uZSkgKCkgPVxuICAgIGxldCBhdCA9IEF0dHJzLnRvX2F0IGdyaWQgaW5cbiAgICBsZXQgdGFibGVfaGVhZGVyID0gQ29sdW1ucy50b19oZWFkZXIgY29sdW1ucyBpblxuICAgIGxldCB0YWJsZV9ib2R5ID1cbiAgICAgIEx3ZF90YWJsZS5tYXBfcmVkdWNlXG4gICAgICAgIChyZW5kZXJfcm93IChtb2R1bGUgUm93KSB+c2hhcmVkX2RyYWdfZGF0YSB+bjooQXJyYXkubGVuZ3RoIGNvbHVtbnMpKVxuICAgICAgICBMd2Rfc2VxLm1vbm9pZCB0YWJsZVxuICAgIGluXG4gICAgbGV0IGVsdCA9XG4gICAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICAgIGxldCQgZWx0ID1cbiAgICAgICAgRWx3ZC5kaXYgfmF0IFsgYFAgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICAgIGluXG4gICAgICBsZXQgKCkgPSBDb2x1bW5zLnNldCBlbHQgY29sdW1ucyBpblxuICAgICAgZWx0XG4gICAgaW5cbiAgICAoZWx0LCB0YWJsZSlcbmVuZFxuXG5sZXQgcGxheWxpc3RfY29sdW1ucyA9XG4gIERyYWdnYWJsZV90YWJsZS5Db2x1bW5zLlxuICAgIFt8IGNvbHVtbiBcIkZpcnN0Q09sXCIgXCIyNTZweFwiOyBjb2x1bW4gXCJTZWNvbmRcIiBcIjI1NnB4XCIgfF1cblxubW9kdWxlIFBsYXlsaXN0X3JvdyA9IHN0cnVjdFxuICB0eXBlIHQgPSBzdHJpbmcgKiBzdHJpbmdcblxuICBsZXQgcmVuZGVyIChsLCByKSA9IFsgRWwuZGl2IFsgRWwudHh0JyBsIF07IEVsLmRpdiBbIEVsLnR4dCcgciBdIF1cbmVuZFxuXG5sZXQgbWFrZV90YWJsZSByb3dzID1cbiAgbGV0IHRhYmxlID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgTGlzdC5pdGVyIHJvd3MgfmY6KGZ1biBzZXQgLT4gaWdub3JlIEBAIEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSk7XG4gIHRhYmxlXG5cbmxldCBkcmFnZ2FibGVfdGFibGUgP3NoYXJlZF9kcmFnX2RhdGEgKCkgPVxuICBEcmFnZ2FibGVfdGFibGUubWFrZVxuICAgIChtb2R1bGUgUGxheWxpc3Rfcm93KVxuICAgIH5jb2x1bW5zOnBsYXlsaXN0X2NvbHVtbnMgP3NoYXJlZF9kcmFnX2RhdGFcbiAgICB+dGFibGU6XG4gICAgICAobWFrZV90YWJsZVxuICAgICAgICAgW1xuICAgICAgICAgICAoXCJ0b3RvXCIsIFwicjFcIik7XG4gICAgICAgICAgIChcInRhdGFcIiwgXCJyMlwiKTtcbiAgICAgICAgICAgKFwidGl0aVwiLCBcInIzXCIpO1xuICAgICAgICAgICAoXCJ0YVwiLCBcInI0XCIpO1xuICAgICAgICAgICAoXCJ0dVwiLCBcInI1XCIpO1xuICAgICAgICAgXSlcbiAgICAoKVxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyZXIuQnJyXG5vcGVuISBCcnJfbHdkX3VpXG5vcGVuISBCcnJfbHdkXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbigqKiBBcHBsaWNhdGlvbiBwYXJ0ICopXG5cbigqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG5sZXQgY29sdW1ucyAoKSA9XG4gIFRhYmxlLkNvbHVtbnMuXG4gICAgW3xcbiAgICAgIHYgXCJPcmRlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCIjXCIpIF07XG4gICAgICB2IFwiQ292ZXJcIiBcIjVyZW1cIiBAQCBbIGBQIChFbC50eHQnIFwiQ292ZXJcIikgXTtcbiAgICAgIHYgXCJUaXRsZVwiIFwiMWZyXCIgQEAgWyBgUCAoRWwudHh0JyBcIlRpdGxlXCIpIF07XG4gICAgfF1cblxubGV0IG1ha2UgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCA/c2Nyb2xsX3RhcmdldFxuICAgICh2aWV3IDogKERiLlZpZXcucmFuZ2VkLCAnYSkgRnV0LnJlc3VsdCBMd2QudCkgPVxuICBsZXQgaW1nX3VybCBzZXJ2ZXJfaWQgaXRlbV9pZCA9XG4gICAgbGV0IHNlcnZlcnMgPVxuICAgICAgKCogc2hvdWxkIHRoaXMgYmUgcmVhY3RpdmUgPyAqKVxuICAgICAgTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zIHw+IEx3ZF9zZXEudG9fbGlzdFxuICAgIGluXG4gICAgbGV0IHVybCA9XG4gICAgICB0cnlcbiAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICBQcmludGYuc3ByaW50ZiBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwXCIgY29ubmV4aW9uLmJhc2VfdXJsXG4gICAgICAgICAgaXRlbV9pZFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT4gXCJzZXJ2ZXItZXJyb3IucG5nXCJcbiAgICBpblxuICAgIEF0LnNyYyAoSnN0ci52IHVybClcbiAgaW5cbiAgbGV0IHJlbmRlciB2aWV3IHN0YXJ0X2luZGV4XG4gICAgICB7XG4gICAgICAgIERiLlN0b3Jlcy5JdGVtcy5pdGVtID1cbiAgICAgICAgICB7IEFwaS5JdGVtLmlkOyBuYW1lOyBhbGJ1bV9pZDsgc2VydmVyX2lkOyBpbWFnZV9ibHVyX2hhc2hlczsgXyB9O1xuICAgICAgICBfO1xuICAgICAgfSA9XG4gICAgbGV0IHBsYXlfZnJvbSBfID1cbiAgICAgIGlnbm9yZVxuICAgICAgICAobGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICAgIGxldCsgKHZpZXcgOiBEYi5WaWV3LnJhbmdlZCkgPSB2aWV3IGluXG4gICAgICAgICByZXNldF9wbGF5bGlzdFxuICAgICAgICAgICB7XG4gICAgICAgICAgICAgdmlldyB3aXRoXG4gICAgICAgICAgICAgdmlldyA9XG4gICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIHZpZXcudmlldyB3aXRoXG4gICAgICAgICAgICAgICAgIHN0YXJ0X29mZnNldCA9IHZpZXcudmlldy5zdGFydF9vZmZzZXQgKyBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgIH0pXG4gICAgaW5cbiAgICBsZXQgcGxheV9vbl9jbGljayA9IEVsd2QuaGFuZGxlciBFdi5jbGljayBwbGF5X2Zyb20gaW5cbiAgICBsZXQgaW1nX3VybCA9XG4gICAgICBtYXRjaCAoaW1hZ2VfYmx1cl9oYXNoZXMsIGFsYnVtX2lkKSB3aXRoXG4gICAgICB8IHsgcHJpbWFyeSA9IE5vbmUgfSwgXyB8IF8sIE5vbmUgLT5cbiAgICAgICAgICBMd2QucmV0dXJuIChBdC5zcmMgKEpzdHIudiBcInRyYWNrLnBuZ1wiKSlcbiAgICAgIHwgXywgU29tZSBpZCAtPiBMd2QucmV0dXJuIChpbWdfdXJsIHNlcnZlcl9pZCBpZClcbiAgICBpblxuICAgIGxldCBzdGF0dXMgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZCA9IGl0ZW1faWQ7IF8gfTsgXyB9IHdoZW4gU3RyaW5nLmVxdWFsIGl0ZW1faWQgaWQgLT5cbiAgICAgICAgICAgIEVsLmRpdiB+YXQ6WyBBdC5jbGFzcycgKEpzdHIudiBcInBsYXlpbmdcIikgXSBbIEVsLnR4dCcgXCJ8PlwiIF1cbiAgICAgICAgfCBTb21lIF8gfCBOb25lIC0+IEVsLmRpdiBbIEVsLnR4dCcgKHN0cmluZ19vZl9pbnQgKHN0YXJ0X2luZGV4ICsgMSkpIF0pXG4gICAgaW5cbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmV2OlsgYFAgcGxheV9vbl9jbGljayBdXG4gICAgICAgICAgIFsgYFIgKEVsd2QuaW1nIH5hdDpbIGBSIGltZ191cmw7IGBQIChBdC53aWR0aCA1MCkgXSAoKSkgXSk7XG4gICAgICBgUCAoRWwuZGl2IFsgRWwuc3BhbiBbIEVsLnR4dCcgbmFtZSBdIF0pO1xuICAgIF1cbiAgaW5cbiAgbGV0IHBsYWNlaG9sZGVyIF9pID0gW10gaW5cbiAgbGV0IHVpX3RhYmxlID1cbiAgICB7IFRhYmxlLnRhYmxlID0geyBjb2x1bW5zID0gY29sdW1ucyAoKSB9OyByb3dfaGVpZ2h0ID0gRW0gNC4gfVxuICBpblxuICBsZXQgZGF0YV9zb3VyY2UgPVxuICAgIEx3ZC5tYXAgdmlldyB+ZjooZnVuIHZpZXcgLT5cbiAgICAgICAgbGV0IHRvdGFsX2l0ZW1zID1cbiAgICAgICAgICBGdXQubWFwXG4gICAgICAgICAgICAoUmVzdWx0Lm1hcCAoZnVuIHZpZXcgLT4gRGIuVmlldy5pdGVtX2NvdW50IHZpZXcuVmlldy52aWV3KSlcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGZldGNoIGkgPVxuICAgICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgICAgbGV0KiB2aWV3ID0gdmlldyBpblxuICAgICAgICAgIGZldGNoIHZpZXcgaVxuICAgICAgICBpblxuICAgICAgICBsZXQgcmVuZGVyID0gcmVuZGVyIHZpZXcgaW5cbiAgICAgICAgeyBUYWJsZS5WaXJ0dWFsLnRvdGFsX2l0ZW1zOyBmZXRjaDsgcmVuZGVyIH0pXG4gIGluXG4gIFRhYmxlLlZpcnR1YWwubWFrZSB+dWlfdGFibGUgfnBsYWNlaG9sZGVyID9zY3JvbGxfdGFyZ2V0IGRhdGFfc291cmNlXG5cbmxldCBtYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAodmlldyA6IChEYi5WaWV3LnJhbmdlZCwgJ2EpIEZ1dC5yZXN1bHQgTHdkLnQpID1cbiAgbGV0IHNjcm9sbF90YXJnZXQgPSBMd2QuZ2V0IFBsYXllci5wbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICBtYWtlIH5zY3JvbGxfdGFyZ2V0IH5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggdmlld1xuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbigqIFRoZSBzZXNzaW9uIHV1aWQgaXMgc3RvcmVkIHRvIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCB1c2VkIHRvIGlkZW50aWZ5IGEgdXNlclxuICAgc2Vzc2lvbi4gVGhpcyBpcyByZXF1aXJlZCBieSBKZWxseWZpbiBhdXRob3JpemF0aW9uIHNjaGVtZS4gKilcbigqIFRoZSBvZmZpY2lhbCBjbGllbnQgZG9lcyBpdCBsaWtlIHRoaXM6XG5cbiAgIGZ1bmN0aW9uIGdlbmVyYXRlRGV2aWNlSWQoKSB7XG4gICAgICAgY29uc3Qga2V5cyA9IFtdO1xuXG4gICAgICAga2V5cy5wdXNoKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgIGtleXMucHVzaChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgaWYgKHdpbmRvdy5idG9hKSB7XG4gICAgICAgICAgIHJldHVybiBidG9hKGtleXMuam9pbignfCcpKS5yZXBsYWNlQWxsKCc9JywgJzEnKTtcbiAgICAgICB9XG5cbiAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICB9XG4qKVxubGV0IHNlc3Npb25fdXVpZCA9XG4gICgqIFdlIG5ldmVyIHJlYWN0IHRvIHRoaXMgdmFyIHdlIGNvdWxkIHJlcGxhY2UgaXQgKilcbiAgQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhcl9mIH5rZXk6XCJzZXNzaW9uX3V1aWRcIiAoZnVuICgpIC0+XG4gICAgICBTdGQubmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nKVxuXG5sZXQgXyA9XG4gIGxldCB1dWlkID0gTHdkLnBlZWsgc2Vzc2lvbl91dWlkIGluXG4gIERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHV1aWQ7XG4gIFdvcmtlcl9jbGllbnQucXVlcnkgKFNldF9zZXNzaW9uX3V1aWQgKEx3ZC5wZWVrIHNlc3Npb25fdXVpZCkpXG5cbmxldCBmZXRjaCByYW5nZWRfdmlldyBpID1cbiAgV29ya2VyX2NsaWVudC4ocXVlcnkgKEdldCAocmFuZ2VkX3ZpZXcuVmlldy52aWV3LCByYW5nZWRfdmlldy5vcmRlciwgaSkpKVxuXG5tb2R1bGUgUCA9IFBsYXllci5QbGF5YmFja19jb250cm9sbGVyIChzdHJ1Y3RcbiAgbGV0IGZldGNoID0gZmV0Y2hcbmVuZClcblxubGV0IGFwcCA9XG4gIGxldCBwbGF5bGlzdCA9IEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInRvdG8xXCIgMCBpblxuICBsZXQgb25fY2xpY2sgXyBfID1cbiAgICBMd2Quc2V0IHBsYXlsaXN0IChMd2QucGVlayBwbGF5bGlzdCArIDEpO1xuICAgIExhbmcuc2V0IExhbmcuRW47XG4gICAgQnJyX2x3ZF91aS5CdXR0b24uTmV4dFxuICBpblxuICBsZXQgX2J0bl9taXgsIF8sIF8gPVxuICAgIFVpLlR3b19zdGF0ZV9idXR0b24ubWFrZSB+b25fY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgIFtcbiAgICAgICAgICBgUlxuICAgICAgICAgICAgKEx3ZC5tYXAgKEx3ZC5nZXQgcGxheWxpc3QpIH5mOihmdW4gcGwgLT5cbiAgICAgICAgICAgICAgICAgRWwudHh0JyAoXCJjbGlja1wiIF4gc3RyaW5nX29mX2ludCBwbCkpKTtcbiAgICAgICAgXSlcbiAgaW5cbiAgbGV0IHN0YXR1cyA9XG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXVxuICAgICAgWyBgUCAoRWwuaDEgWyBFbC50eHQnIFwiV2VsY29tZSB0byBPQ0FNSVhcIiBdKTsgYFIgKFNlcnZlcnMudWkgKCkpIF1cbiAgaW5cbiAgbGV0IHBsYXllcl91aSA9XG4gICAgbGV0IHBsYXllciA9IFAubWFrZSAoKSBpblxuICAgIEVsd2QuZGl2IH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXSBbIGBSIHBsYXllciBdXG4gIGluXG4gIGxldCBmX3NlYXJjaCA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF90ZXh0aW5wdXQgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwicG91ZXRcIjsgZGVmYXVsdCA9IE5vbmU7IGxhYmVsID0gW10gfVxuICBpblxuICBsZXQgZl9zb3J0ID1cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZpZWxkX3NlbGVjdCBpblxuICAgIGxldCBvcHRpb25zID1cbiAgICAgIEx3ZC5wdXJlXG4gICAgICAgIChMd2Rfc2VxLm9mX2xpc3QgWyAoXCJkYXRlX2FkZGVkXCIsIFwiRGF0ZSBhZGRlZFwiKTsgKFwibmFtZVwiLCBcIk5hbWVcIikgXSlcbiAgICBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJ2aWV3LXNvcnRcIjsgZGVmYXVsdCA9IFwiZGF0ZV9hZGRlZFwiOyBsYWJlbCA9IFtdIH0gb3B0aW9uc1xuICBpblxuICBsZXQgZl9vcmRlciA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF9zZWxlY3QgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2QucHVyZVxuICAgICAgICAoTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgIFsgKFwiYXNjXCIsIFwiQXNjXCIpOyAoXCJkZXNjXCIsIFwiRGVzY1wiKTsgKFwicmFuZG9tXCIsIFwiUmFuZG9tXCIpIF0pXG4gICAgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwidmlldy1vcmRlclwiOyBkZWZhdWx0ID0gXCJkZXNjXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX3NvcnRfb3JkZXIgPSBMd2QucGFpciBmX3NvcnQudmFsdWUgZl9vcmRlci52YWx1ZSBpblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfY2hlY2tib3hlcyBpblxuICAgICAgbGV0IGNob2ljZXMgPVxuICAgICAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkXG4gICAgICAgICAgKGZ1biAoXywgbCkgLT5cbiAgICAgICAgICAgIEx3ZF9zZXEubWFwXG4gICAgICAgICAgICAgIChmdW4gKGwgOiBEYi5TdG9yZXMuSXRlbXMudCkgLT5cbiAgICAgICAgICAgICAgICBDaGVjayAobC5pdGVtLmlkLCBbIGBQIChFbC50eHQnIGwuaXRlbS5uYW1lKSBdLCB0cnVlKSlcbiAgICAgICAgICAgICAgbClcbiAgICAgICAgICAoTHdkLnJldHVybiBMd2Rfc2VxLmVtcHR5LCBMd2QubWFwMiB+ZjpMd2Rfc2VxLmNvbmNhdClcbiAgICAgICAgICBTZXJ2ZXJzLnNlcnZlcnNfbGlicmFyaWVzXG4gICAgICBpblxuICAgICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlc2MgPSBMd2Quam9pbiBjaG9pY2VzIH1cbiAgICBpblxuICAgIGxldCBmaWx0ZXJzID1cbiAgICAgIEVsd2QuZGl2XG4gICAgICAgIFtcbiAgICAgICAgICBgUiBmX3NvcnQuZmllbGQ7XG4gICAgICAgICAgYFIgZl9vcmRlci5maWVsZDtcbiAgICAgICAgICBgUiBmX3NlYXJjaC5maWVsZDtcbiAgICAgICAgICBgUiBmX2xpYnJhcmllcy5maWVsZDtcbiAgICAgICAgXVxuICAgIGluXG4gICAgKGZpbHRlcnMsIGZfbGlicmFyaWVzLnZhbHVlKVxuICBpblxuICBsZXQgbWFpbl92aWV3ID1cbiAgICBVaV91dGlscy5tYXAzIGZfdmFsdWUgZl9zZWFyY2gudmFsdWUgZl9zb3J0X29yZGVyIH5mOihmdW4gbCB0IChzLCBvKSAtPlxuICAgICAgICBsZXQgZmlsdGVycyA9IE9wdGlvbi5tYXAgKGZ1biBzIC0+IFsgRGIuVmlldy5TZWFyY2ggcyBdKSB0IGluXG4gICAgICAgIENvbnNvbGUubG9nXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJVcGRhdGluZyBtYWluIHZpZXc6XCI7XG4gICAgICAgICAgICBKdi5vZl9vcHRpb24gfm5vbmU6KEp2Lm9mX3N0cmluZyBcIlxcXCJcXFwiXCIpIEp2Lm9mX3N0cmluZyB0O1xuICAgICAgICAgICAgSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgbDtcbiAgICAgICAgICAgIEp2Lm9mX3N0cmluZyBzO1xuICAgICAgICAgIF07XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCBzb3J0ID0gRGIuVmlldy5Tb3J0Lm9mX3N0cmluZyBzIGluXG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCsgdmlldyA9XG4gICAgICAgICAgV29ya2VyX2NsaWVudC5xdWVyeVxuICAgICAgICAgICAgKENyZWF0ZV92aWV3XG4gICAgICAgICAgICAgICBEYi5WaWV3LihyZXEgQXVkaW8gfnNyY192aWV3czooT25seSBsKSB+c29ydCA/ZmlsdGVycyAoKSkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBvcmRlciA9IFZpZXcuT3JkZXIub2Zfc3RyaW5nIH5zaXplOnZpZXcuaXRlbV9jb3VudCBvIGluXG4gICAgICAgIHsgVmlldy52aWV3OyBmaXJzdCA9IDA7IGxhc3QgPSB2aWV3Lml0ZW1fY291bnQ7IG9yZGVyIH0pXG4gIGluXG5cbiAgbGV0IG1haW5fbGlzdCA9XG4gICAgVWlfcGxheWxpc3QubWFrZSB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2ggbWFpbl92aWV3XG4gIGluXG4gIGxldCBub3dfcGxheWluZyA9XG4gICAgbGV0IHBsYXlsaXN0ID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLnBsYXlzdGF0ZS5wbGF5bGlzdCkgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgTm9uZSAtPiBFbHdkLnNwYW4gWyBgUCAoRWwudHh0JyBcIk5vdGhpbmcgcGxheWluZ1wiKSBdXG4gICAgICAgIHwgU29tZSBwbGF5bGlzdCAtPlxuICAgICAgICAgICAgVWlfcGxheWxpc3QubWFrZV9ub3dfcGxheWluZyB+cmVzZXRfcGxheWxpc3Q6UC5yZXNldF9wbGF5bGlzdCB+ZmV0Y2hcbiAgICAgICAgICAgICAgKEx3ZC5wdXJlIChGdXQub2sgcGxheWxpc3QpKSlcbiAgICBpblxuICAgICgqdG9kbzogZG8gd2UgbmVlZCB0aGF0IGpvaW4gPyopXG4gICAgTHdkLmpvaW4gcGxheWxpc3RcbiAgaW5cbiAgbGV0IGJpZ19jb3ZlciA9XG4gICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgIGxldCBkaXNwbGF5X25vbmUgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBBcHBfc3RhdGUuYWN0aXZlX2xheW91dCkgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgTWFpbiAtPiBBdC5jbGFzcycgKEpzdHIudiBcImRpc3BsYXktbm9uZVwiKVxuICAgICAgICB8IEtpb3NrIC0+IEF0LnZvaWQpXG4gICAgaW5cbiAgICBsZXQgc3R5bGUgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIubm93X3BsYXlpbmcpIH5mOihmdW4gbnAgLT5cbiAgICAgICAgICBsZXQgc3JjID1cbiAgICAgICAgICAgIG1hdGNoIG5wIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiBcInRyYWNrLnBuZ1wiXG4gICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBpZDsgYWxidW1faWQ7IHNlcnZlcl9pZDsgXyB9OyBfIH0gLT5cbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc2VydmVycyA9IEx3ZF9zZXEudG9fbGlzdCAoTHdkLnBlZWsgU2VydmVycy5jb25uZXhpb25zKSBpblxuICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPSBMaXN0LmFzc3Egc2VydmVyX2lkIHNlcnZlcnMgaW5cbiAgICAgICAgICAgICAgICAoKiB0b2RvOiB0aGlzIGlzIGRvbmUgaW4gbXVsdGlwbGUgcGxhY2VzLCB3ZSBzaG91bGQgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgdGhhdCBvdXQuICopXG4gICAgICAgICAgICAgICAgUHJpbnRmLnNwcmludGYgXCIlcy9JdGVtcy8lcy9JbWFnZXMvUHJpbWFyeT93aWR0aD04MDAmZm9ybWF0PUpwZ1wiXG4gICAgICAgICAgICAgICAgICBjb25uZXhpb24uYmFzZV91cmwgaW1hZ2VfaWRcbiAgICAgICAgICBpblxuICAgICAgICAgIEF0LnN0eWxlIChKc3RyLnYgKFByaW50Zi5zcHJpbnRmIFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCVTKVwiIHNyYykpKVxuICAgIGluXG4gICAgbGV0IGF0ID0gWyBgUiBkaXNwbGF5X25vbmU7IGBQIChBdC5jbGFzcycgKEpzdHIudiBcImJpZy1jb3ZlclwiKSkgXSBpblxuICAgIEVsd2QuZGl2IH5hdCBbIGBSIChFbHdkLmRpdiB+YXQ6WyBgUiBzdHlsZSBdIFtdKSBdXG4gIGluXG4gIEVsd2QuZGl2XG4gICAgfmF0OkJycl9sd2RfdWkuQXR0cnMuKHRvX2F0IH5pZDpcIm1haW4tbGF5b3V0XCIgQEAgY2xhc3NlcyBbXSlcbiAgICBbXG4gICAgICBgUiBzdGF0dXM7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXZcbiAgICAgICAgICAgfmF0OlsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwiaXRlbS1saXN0XCIpKSBdXG4gICAgICAgICAgIFsgYFIgYmlnX2NvdmVyOyBgUiBmaWx0ZXJzOyBgUiBtYWluX2xpc3QgXSk7XG4gICAgICBgUlxuICAgICAgICAoRWx3ZC5kaXYgfmF0OlsgYFAgKEF0LmNsYXNzJyAoSnN0ci52IFwicGxheWxpc3RcIikpIF0gWyBgUiBub3dfcGxheWluZyBdKTtcbiAgICAgIGBSIHBsYXllcl91aTtcbiAgICBdXG5cbmxldCBpc19zdG9yYWdlX3BlcnNpc3RlbnQgPVxuICBCcnJfaW8uU3RvcmFnZS4obWFuYWdlciBHLm5hdmlnYXRvciB8PiBNYW5hZ2VyLnBlcnNpc3QpXG5cbmxldCBfID1cbiAgbGV0IG9uX2xvYWQgXyA9XG4gICAgQ29uc29sZS5sb2cgWyBcIlBlcnNpc3QgP1wiOyBpc19zdG9yYWdlX3BlcnNpc3RlbnQgXTtcbiAgICBsZXQgYXBwID0gTHdkLm9ic2VydmUgQEAgYXBwIGluXG4gICAgbGV0IG9uX2ludmFsaWRhdGUgXyA9XG4gICAgICBpZ25vcmUgQEAgRy5yZXF1ZXN0X2FuaW1hdGlvbl9mcmFtZVxuICAgICAgQEAgZnVuIF8gLT4gaWdub3JlIEBAIEx3ZC5xdWlja19zYW1wbGUgYXBwXG4gICAgaW5cbiAgICBFbC5hcHBlbmRfY2hpbGRyZW4gKERvY3VtZW50LmJvZHkgRy5kb2N1bWVudCkgWyBMd2QucXVpY2tfc2FtcGxlIGFwcCBdO1xuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSBhcHAgb25faW52YWxpZGF0ZVxuICBpblxuICBFdi5saXN0ZW4gRXYuZG9tX2NvbnRlbnRfbG9hZGVkIG9uX2xvYWQgKFdpbmRvdy5hc190YXJnZXQgRy53aW5kb3cpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEVuc3VyZSB0aGF0IFthdF9leGl0XSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHByb2dyYW0gKilcblxubGV0IF8gPSBkb19hdF9leGl0KClcbiJdfQ== +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtYWluLmJjLmpzIiwic291cmNlUm9vdCI6IiIsIm5hbWVzIjpbImNhbWxfYXJyYXlfYmxpdCIsImExIiwiaTEiLCJhMiIsImkyIiwibGVuIiwiaiIsImNhbWxfYXJyYXlfc3ViIiwiYSIsImkiLCJBcnJheSIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImYiLCJTdHJpbmciLCJudWxsIiwicyIsIk1hdGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJVaW50OEFycmF5IiwiYiIsImwiLCJjYW1sX2JsaXRfYnl0ZXMiLCJzMSIsInMyIiwiYzEiLCJjMiIsImNhbWxfc3RyX3JlcGVhdCIsIm4iLCJyIiwiY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJ0IiwiYyIsInYiLCJNbEJ5dGVzIiwidGFnIiwiY29udGVudHMiLCJsZW5ndGgiLCJ0aGlzIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfanNieXRlc19vZl9zdHJpbmciLCJ4IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX2JsaXRfc3RyaW5nIiwiZCIsImUiLCJqc29vX3N5c19nZXRlbnYiLCJwcm9jZXNzIiwiZ2xvYmFsVGhpcyIsInVuZGVmaW5lZCIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnIiwiY2FtbF9nbG9iYWxfZGF0YSIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UiLCJjYW1sX3JhaXNlX3dpdGhfYXJnIiwiYXJnIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX2J5dGVzX2JvdW5kX2Vycm9yIiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9ieXRlc19zZXQiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJncyIsImFyZ3NMZW4iLCJnIiwibmFyZ3MiLCJ5IiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX2NoZWNrX2JvdW5kIiwiYXJyYXkiLCJpbmRleCIsImNhbWxfY2xhc3NpZnlfZmxvYXQiLCJpc0Zpbml0ZSIsImlzTmFOIiwiY2FtbF9pc19jb250aW51YXRpb25fdGFnIiwibG9nMl9vayIsImpzb29fZmxvb3JfbG9nMiIsIkluZmluaXR5IiwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0IiwiZmxvYXQzMmEiLCJGbG9hdDMyQXJyYXkiLCJpbnQzMmEiLCJJbnQzMkFycmF5IiwiY2FtbF9pbnQ2NF9vZmZzZXQiLCJjYW1sX3JhaXNlX2NvbnN0YW50IiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJxIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfYmFfc2VyaWFsaXplIiwid3JpdGVyIiwiYmEiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfb2ZfYnl0ZXMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJyZXMiLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwiYnVmZmVyIiwib2ZzIiwiaW0iLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfZmFpbHdpdGgiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibmFtZSIsIm51bV9kaW1zIiwic2l6ZV9kaW0iLCJzaXplX2RpbV9oaSIsInNpemVfZGltX2xvIiwic2l4dHkiLCJpbnQ2NCIsImNhbWxfYmFfY29tcGFyZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfbWFyc2hhbCIsInNpemVzIiwiY2FtbF9pbnQ2NF9jb21wYXJlIiwiY2FtbF9pbnQ2NF9oYXNoIiwiY2FtbF9jdXN0b21fb3BzIiwiY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tIiwiY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tIiwibnVtIiwiY3VzdG9tIiwic3dhcCIsImNvbXAiLCJjYW1sX2lzX21sX3N0cmluZyIsImNhbWxfaXNfbWxfYnl0ZXMiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfY29tcGFyZSIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX2VxdWFsIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9mbG9hdF9vZl9zdHJpbmciLCJtIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJwIiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJjYW1sX2N1cnJlbnRfZGlyIiwiY2FtbF9tYWtlX3BhdGgiLCJjb21wMCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmciLCJ1bml4X2Vycm9yIiwibWFrZV91bml4X2Vycl9hcmdzIiwiY29kZSIsInN5c2NhbGwiLCJlcnJubyIsInZhcmlhbnQiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfcmFpc2Vfc3lzX2Vycm9yIiwiY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUiLCJjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZUZkIiwiZmlsZSIsImZsYWdzIiwiTWxGYWtlRGV2aWNlIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsImVudHJ5Iiwib2siLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyIsIk1sTm9kZUZkIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsInJlYWQiLCJNbE5vZGVEZXZpY2UiLCJjb25zdHMiLCJrZXkiLCJpc0NoYXJhY3RlckRldmljZSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9jcmVhdGVfZmlsZSIsImpzb29fY3JlYXRlX2ZpbGUiLCJjYW1sX2ZzX2luaXQiLCJ0bXAiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2hhc2hfbWl4X2pzYnl0ZXMiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyIiwiY2FtbF9tbF9ieXRlc19jb250ZW50IiwiY2FtbF9oYXNoX21peF9ieXRlcyIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2hhc2giLCJjb3VudCIsImxpbWl0Iiwic2VlZCIsIm9iaiIsInF1ZXVlIiwicmQiLCJ3ciIsImhoIiwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQiLCJzdHlsZSIsImV4cF9zaWduIiwic2lnbl9zdHIiLCJjc3QiLCJ4X3N0ciIsImlkeCIsImNhbWxfaW50NjRfaXNfemVybyIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwiY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIiwiYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludF9vZl9zdHJpbmciLCJ0aHJlc2hvbGQiLCJjYW1sX2pzX2Zyb21fYXJyYXkiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfanNfbmV3IiwiRiIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9qc190b19hcnJheSIsImNhbWxfY2FsbGJhY2siLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkIiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfbGV4X2FycmF5IiwiY2FtbF9sZXhfZW5naW5lIiwidGJsIiwic3RhcnRfc3RhdGUiLCJsZXhidWYiLCJsZXhfYnVmZmVyIiwibGV4X2J1ZmZlcl9sZW4iLCJsZXhfc3RhcnRfcG9zIiwibGV4X2N1cnJfcG9zIiwibGV4X2xhc3RfcG9zIiwibGV4X2xhc3RfYWN0aW9uIiwibGV4X2VvZl9yZWFjaGVkIiwibGV4X2Jhc2UiLCJsZXhfYmFja3RyayIsImxleF9kZWZhdWx0IiwibGV4X3RyYW5zIiwibGV4X2NoZWNrIiwic3RhdGUiLCJiYWNrdHJrIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9tYWtlX3ZlY3QiLCJpbml0IiwiY2FtbF9NRDVJbml0IiwiQXJyYXlCdWZmZXIiLCJiMzIiLCJVaW50MzJBcnJheSIsImI4IiwiY2FtbF9NRDVUcmFuc2Zvcm0iLCJhZGQiLCJ4eCIsImZmIiwiZ2ciLCJpaSIsImNhbWxfTUQ1VXBkYXRlIiwiY3R4IiwiaW5wdXQiLCJpbnB1dF9sZW4iLCJpbl9idWYiLCJpbnB1dF9wb3MiLCJtaXNzaW5nIiwiY2FtbF9NRDVGaW5hbCIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9tZDVfYnl0ZXMiLCJjYW1sX21kNV9zdHJpbmciLCJjYW1sX3N5c19mZHMiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2hhbm5lbHMiLCJjYW1sX21sX2NoYW5uZWxfZ2V0IiwiaWQiLCJjYW1sX21sX2ZsdXNoIiwiY2hhbmlkIiwiY2hhbiIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJjYW1sX3JlZmlsbCIsInN0ciIsInN0cl9hIiwibnJlYWQiLCJjYW1sX21sX2lucHV0X2Jsb2NrIiwiYXZhaWwiLCJjYW1sX21sX2lucHV0IiwiY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZSIsImZzIiwiZmQyIiwiTWxGYWtlRmRfb3V0IiwiY29uc29sZSIsInNyYyIsImNhbWxfc3lzX29wZW5faW50ZXJuYWwiLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJjaGFubmVsIiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiYnVmZmVyZWQiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9tbF9vdXRwdXRfdGEiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsImNhbWxfbWxfb3V0cHV0IiwiY2FtbF9tbF9vdXRwdXRfY2hhciIsImNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSIsImNhbWxfbW9kIiwiY2FtbF9ub3RlcXVhbCIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfb2JqX3RhZyIsIkZ1bmN0aW9uIiwiY2FtbF9idWlsZF9zeW1ib2xzIiwic3ltYiIsImNhbWxfcmVnaXN0ZXJfZ2xvYmFsIiwibmFtZV9vcHQiLCJuaWQiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwiY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IiLCJjYW1sX3N0cmluZ19nZXQiLCJjYW1sX3N0cmluZ19vZl9ieXRlcyIsImNhbWxfc3lzX2NvbnN0X21heF93b3NpemUiLCJjYW1sX3JhaXNlX25vdF9mb3VuZCIsImNhbWxfc3lzX2dldGVudiIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiRGF0ZSIsImNhbWxfdHJhbXBvbGluZSIsImNhbWxfdHJhbXBvbGluZV9yZXR1cm4iLCJjYW1sX3dyYXBfZXhjZXB0aW9uIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIiLCJvcmlnaW4iLCJldmVudCIsInplcm9fcG9zIiwibG9jZm10IiwiZW1wdHkkMiIsImVtcHR5JDMiLCJvY2FtbF9sZXhfdGFibGVzIiwidHBfbG9jIiwidHBfbG9jJDAiLCJ0cF9sb2MkMSIsInRwX2xvYyQyIiwidHBfbG9jJDMiLCJ0cF9sb2MkNCIsInRwX2xvYyQ1IiwidHBfbG9jJDYiLCJwYXRoJDEiLCJwYXRoJDIiLCJuYW1lJDYiLCJpbml0aWFsX3JlcG9ydCIsInN0cmluZ3MiLCJ1cmwkMCIsImRlZmF1bHQkMSIsImFsYnVtIiwiYXJ0aXN0IiwiZXJhc2VfcmVsIiwicmVzdCIsInJlc3QkMCIsInJlc3QkMSIsInJlc3QkMiIsInJlc3QkMyIsInJlc3QkNCIsInJlc3QkNSIsInJlc3QkNiIsInJlc3QkNyIsInR5IiwicmVzdCQ4IiwidHkxIiwicmVzdCQ5IiwicmVzdCQxMCIsInJlc3QkMTEiLCJyZXN0JDEyIiwicmVzdCQxMyIsImNvbmNhdF9mbXR0eSIsImZtdHR5MSIsImZtdHR5MiIsInR5MiIsImNvbmNhdF9mbXQiLCJmbXQxIiwiZm10MiIsInBhZCIsInBhZCQwIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJjdXIiLCJmYWlsd2l0aCIsImludmFsaWRfYXJnIiwiYWJzIiwibG5vdCIsIm1heF9pbnQiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwic3RyaW5nX29mX2ludCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibG9vcCIsImkkMCIsImkkMSIsInN0cmluZ19vZl9mbG9hdCIsInN5bWJvbCIsImwxIiwibDIiLCJ0bCIsImhkIiwic3Rkb3V0Iiwic3RkZXJyIiwib3Blbl9vdXRfZ2VuIiwicGVybSIsIm9wZW5fb3V0IiwiZmx1c2hfYWxsIiwiaXRlciIsIm91dHB1dF9zdHJpbmciLCJvYyIsIm91dHB1dF9zdWJzdHJpbmciLCJjbG9zZV9vdXQiLCJvcGVuX2luX2dlbiIsIm9wZW5faW4iLCJpYyIsInByZXJyX2VuZGxpbmUiLCJleGl0X2Z1bmN0aW9uIiwiZl95ZXRfdG9fcnVuIiwib2xkX2V4aXQiLCJmX3lldF90b19ydW4kMCIsIm9sZF9leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiaXNfYmxvY2siLCJyYWlzZV91bmRlZmluZWQiLCJmb3JjZV9sYXp5X2Jsb2NrIiwiYmxrIiwiY2xvc3VyZSIsImUkMCIsImZyb21fdmFsIiwidmFsdWUiLCJkZWZhdWx0JDAiLCJnZXQkMCIsIm1hcCIsImlzX3NvbWUiLCJnZXRfb2siLCJtYXAkMCIsIm9mX2ludF9leG4iLCJzJDAiLCJsZW5ndGhfYXV4IiwibGVuJDAiLCJjb25zIiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X3RhaWxyZWNfYXV4IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsImluaXRfYXV4Iiwicm1hcF9mIiwiYWNjdSQwIiwiYWNjdSIsImwkMCIsImwkMSIsImFjY3UkMSIsImZpbmQiLCJhdXgiLCJwYXJ0IiwieWVzJDAiLCJubyQwIiwiY21wIiwicmV2X21lcmdlIiwidDIiLCJoMiIsInQxIiwiaDEiLCJhY2N1JDIiLCJhY2N1JDMiLCJyZXZfbWVyZ2VfcmV2Iiwic29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsImMkMCIsImMkMSIsImMkMiIsImMkMyIsImMkNCIsImMkNSIsIm4xIiwibjIiLCJyZXZfc29ydCIsInRsJDAiLCJjb21wYXJlIiwibWluIiwibWF4JDAiLCJ0b19zdHJpbmciLCJvZnMxIiwib2ZzMiIsImlzX3NwYWNlIiwiZW5zdXJlX2dlIiwic3VtX2xlbmd0aHMiLCJzZXBsZW4iLCJ1bnNhZmVfYmxpdHMiLCJkc3QiLCJwb3MkMCIsImlzX3NwYWNlJDAiLCJlc2NhcGVfaWZfbmVlZGVkIiwiaW5kZXhfcmVjIiwibGltIiwidG9saXN0IiwicmVzJDAiLCJyZXMkMSIsImxpc3RfbGVuZ3RoIiwiZmlsbCIsImxleF9yZWZpbGwiLCJyZWFkX2Z1biIsImF1eF9idWZmZXIiLCJuZXdsZW4iLCJuZXdidWYiLCJvcHQiLCJzdGgiLCJ3aXRoX3Bvc2l0aW9ucyIsImhlaWdodCIsImNyZWF0ZSIsImhsIiwiaCQwIiwiaHIiLCJiYWwiLCJsciIsImx2IiwibGwiLCJscnIiLCJscnYiLCJscmwiLCJyciIsInJ2IiwicmwiLCJybHIiLCJybHYiLCJybGwiLCJzaW5nbGV0b24iLCJhZGRfbWluX2VsZW1lbnQiLCJhZGRfbWF4X2VsZW1lbnQiLCJqb2luIiwicmgiLCJsaCIsIm1pbl9lbHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsIm1lcmdlIiwiY29uY2F0Iiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwiZW1wdHkiLCJpc19lbXB0eSIsInJlbW92ZSIsInVuaW9uIiwidjIiLCJ2MSIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJkaWZmIiwiY29uc19lbnVtIiwiZSQxIiwiY29tcGFyZV9hdXgiLCJlMSIsImUyIiwiZTEkMCIsImUyJDAiLCJlMiQxIiwiZTEkMSIsImUyJDIiLCJlMSQyIiwiZXF1YWwiLCJzdWJzZXQiLCJzMSQwIiwiczIkMCIsImZvbGQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9sYXN0X29wdF9hdXgiLCJ2MCQwIiwiZmluZF9sYXN0X29wdCIsIm9mX3NvcnRlZF9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibGVmdCIsIm1pZCIsImwkMiIsInJpZ2h0Iiwib2ZfbGlzdCIsIng0IiwibGQiLCJscmQiLCJybGQiLCJmaW5kX29wdCIsIm1lbSIsIm1pbl9iaW5kaW5nIiwicmVtb3ZlX21pbl9iaW5kaW5nIiwibSQwIiwiZm9yX2FsbCIsImFkZF9taW5fYmluZGluZyIsImFkZF9tYXhfYmluZGluZyIsImNvbmNhdF9vcl9qb2luIiwiZCQwIiwiZDEiLCJkMiIsImQyJDAiLCJkMSQwIiwibTEiLCJtMiIsImVxdWFsX2F1eCIsImNsZWFyIiwicHVzaCIsInBvcCIsInBvcF9vcHQiLCJ0b3AiLCJ0b3Bfb3B0IiwiaXRlciQxIiwiY3JlYXRlJDAiLCJjbGVhciQwIiwiY2VsbCIsIm1hdGNoIiwicGVla19vcHQiLCJ0YWtlIiwibmV4dCIsInRha2Vfb3B0IiwiZnJvbSIsImNyZWF0ZSQxIiwibiQwIiwibiQxIiwic3ViJDIiLCJsZW5ndGgkMCIsInJlc2V0IiwicmVzaXplIiwibW9yZSIsIm9sZF9wb3MiLCJvbGRfbGVuIiwibmV3X2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsImFkZF9zdWJzdHJpbmciLCJuZXdfcG9zaXRpb24iLCJhZGRfc3RyaW5nIiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2Zjb252IiwiY0YiLCJicHJpbnRfZmNvbnZfZmxhZyIsInN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCIsImZvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfZm10dHkiLCJmbXR0eSQxIiwiZm10dHkkMiIsImZtdHR5JDMiLCJmbXR0eSQ0IiwiZm10dHkkNSIsImZtdHR5JDYiLCJmbXR0eSQ3IiwiZm10dHkkOCIsImZtdHR5JDkiLCJzdWJfZm10dHkiLCJmbXR0eSQxMCIsInN1Yl9mbXR0eSQwIiwiZm10dHkkMTEiLCJmbXR0eSQxMiIsImZtdHR5JDEzIiwiZm10dHkkMTQiLCJmbXR0eSQxNSIsInN5bW0iLCJmbXR0eV9yZWxfZGV0IiwiZGUiLCJlZCIsImFmIiwiZmEiLCJkZSQwIiwiZWQkMCIsImFmJDAiLCJmYSQwIiwiZGUkMSIsImVkJDEiLCJhZiQxIiwiZmEkMSIsImRlJDIiLCJlZCQyIiwiYWYkMiIsImZhJDIiLCJkZSQzIiwiZWQkMyIsImFmJDMiLCJmYSQzIiwiZGUkNCIsImVkJDQiLCJhZiQ0IiwiZmEkNCIsImRlJDUiLCJlZCQ1IiwiYWYkNSIsImZhJDUiLCJkZSQ2IiwiZWQkNiIsImFmJDYiLCJmYSQ2IiwiZGUkNyIsImVkJDciLCJhZiQ3IiwiZmEkNyIsImRlJDgiLCJlZCQ4IiwiYWYkOCIsImZhJDgiLCJ0cmFucyIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwicmVzdDEiLCJyZXN0MiIsInJlc3QxJDAiLCJyZXN0MiQwIiwicmVzdDEkMSIsInJlc3QyJDEiLCJyZXN0MSQyIiwicmVzdDIkMiIsInJlc3QxJDMiLCJyZXN0MiQzIiwicmVzdDEkNCIsInJlc3QyJDQiLCJyZXN0MSQ1IiwicmVzdDIkNSIsInJlc3QxJDYiLCJyZXN0MiQ2IiwicmVzdDEkNyIsInR5MSQwIiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDEkOCIsInR5MTIiLCJ0eTExIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZjQiLCJmMiIsInJlc3QxJDkiLCJyZXN0MiQ5IiwicmVzdDEkMTAiLCJyZXN0MiQxMCIsInJlc3QxJDExIiwicmVzdDIkMTEiLCJyZXN0MSQxMiIsInJlc3QyJDEyIiwicmVzdDEkMTMiLCJyZXN0MiQxMyIsInR5cGVfcGFkZGluZyIsInBhZHR5IiwicGFkdHkkMCIsInR5cGVfcGFkcHJlYyIsInR5cGVfZm9ybWF0IiwidHlwZV9mb3JtYXRfZ2VuIiwiZm10JDAiLCJmbXR0eV9yZXN0IiwiZm10X3Jlc3QiLCJmbXR0eV9yZXN0JDAiLCJmbXRfcmVzdCQwIiwiZm10JDEiLCJmbXRfcmVzdCQxIiwiZm10dHlfcmVzdCQxIiwiZm10JDIiLCJmbXRfcmVzdCQyIiwiZm10dHlfcmVzdCQyIiwiZm10JDMiLCJmbXRfcmVzdCQzIiwiZm10dHlfcmVzdCQzIiwiZm10JDQiLCJmbXRfcmVzdCQ0IiwiZm10dHlfcmVzdCQ0IiwiZm10JDUiLCJmbXRfcmVzdCQ1IiwiZm10dHlfcmVzdCQ1IiwicHJlYyQ0IiwiZm10JDYiLCJmbXRfcmVzdCQ2IiwicHJlYyQ1IiwicGFkJDkiLCJwYWQkMTAiLCJmbXR0eV9yZXN0JDYiLCJwcmVjJDYiLCJmbXQkNyIsImZtdF9yZXN0JDciLCJwcmVjJDciLCJwYWQkMTEiLCJwYWQkMTIiLCJmbXR0eV9yZXN0JDciLCJwcmVjJDgiLCJmbXQkOCIsImZtdF9yZXN0JDgiLCJwYWQkMTMiLCJwYWQkMTQiLCJmbXR0eV9yZXN0JDgiLCJmbXQkOSIsImZtdF9yZXN0JDkiLCJmbXQkMTAiLCJmbXRfcmVzdCQxMCIsImZtdCQxMSIsImZtdF9yZXN0JDExIiwiZm10JDEyIiwiZm10dHlfcmVzdCQ5IiwiZm10X3Jlc3QkMTIiLCJwYWRfb3B0IiwiZm10JDEzIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwicGFkX29wdCQwIiwiZm10JDE0IiwiZm10dHlfcmVzdCQxMSIsImZtdF9yZXN0JDE0IiwiZm10JDE1IiwiZm10dHlfcmVzdCQxMiIsImZtdF9yZXN0JDE1IiwiZm10dHkkMTYiLCJmbXQkMTYiLCJmbXRfcmVzdCQxNiIsImZtdHR5JDE3IiwiZm10JDE3IiwiZm10X3Jlc3QkMTciLCJmb3JtYXR0aW5nX2dlbiIsInR5cGVfZm9ybWF0dGluZ19nZW4iLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW0iLCJmbXQwIiwiZm10dHkwIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwidHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpIiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDUiLCJzdWJfZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkNyIsInN1Yl9mbXR0eV9yZXN0JDgiLCJzdWJfZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJzdWJfZm10dHlfcmVzdCQxNCIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsInN1Yl9mbXR0eV9yZXN0JDE2Iiwic3ViMl9mbXR0eSQxIiwic3ViMV9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE3Iiwic3ViMl9mbXR0eSQyIiwic3ViMV9mbXR0eSQwIiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJzdWJfZm10dHlfcmVzdCQxOSIsInN1Yl9mbXR0eV9yZXN0JDIwIiwic3ViX2ZtdHR5X3Jlc3QkMjEiLCJzdWJfZm10dHlfcmVzdCQyMiIsInN1Yl9mbXR0eV9yZXN0JDIzIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJzdWJfZm10dHlfcmVzdCQyNSIsInN1Yl9mbXR0eV9yZXN0JDI2IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCIsIndpZHRoJDAiLCJmaXhfaW50X3ByZWNpc2lvbiIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9pY29udiIsImZvcm1hdF9vZl9pY29udkwiLCJmb3JtYXRfb2ZfaWNvbnZsIiwiZm9ybWF0X29mX2ljb252biIsImZvcm1hdF9vZl9mY29udiIsInRyYW5zZm9ybV9pbnRfYWx0IiwiZGlnaXRzIiwicHV0IiwiY29udmVydF9pbnQiLCJjb252ZXJ0X2ludDMyIiwiY29udmVydF9uYXRpdmVpbnQiLCJjb252ZXJ0X2ludDY0IiwiY29udmVydF9mbG9hdCIsImhleCIsImFkZF9kb3RfaWZfbmVlZGVkIiwiaXNfdmFsaWQiLCJjYW1sX3NwZWNpYWxfdmFsIiwiZm9ybWF0X2NhbWxfY2hhciIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmJDAiLCJrJDAiLCJuZXdfYWNjIiwibWFrZV9wcmludGYiLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsIm1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24iLCJhY2MkMiIsImFjYyQzIiwiYWNjJDQiLCJrJDEiLCJrYWNjIiwiayQyIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsInAkMCIsInAkMSIsImFyaXR5JDAiLCJtYWtlX2N1c3RvbSIsIm91dHB1dF9hY2MiLCJwJDMiLCJwJDQiLCJwJDUiLCJwJDIiLCJzdHJwdXRfYWNjIiwiZmFpbHdpdGhfbWVzc2FnZSIsIm9wZW5fYm94X29mX3N0cmluZyIsImludmFsaWRfYm94IiwicGFyc2Vfc3BhY2VzIiwicGFyc2VfbHdvcmQiLCJqJDAiLCJqJDEiLCJwYXJzZV9pbnQiLCJ3c3RhcnQiLCJ3ZW5kIiwiYm94X25hbWUiLCJuc3RhcnQiLCJuZW5kIiwiaW5kZW50IiwiZXhwX2VuZCIsImJveF90eXBlIiwia2ZwcmludGYiLCJmcHJpbnRmIiwiZXByaW50ZiIsImtzcHJpbnRmIiwic3ByaW50ZiIsInByaW50ZXJzIiwiZmllbGQiLCJvdGhlcl9maWVsZHMiLCJmaWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJjb252IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyJDAiLCJsaW5lIiwiY2hhciQxIiwibGluZSQwIiwiZmlsZSQwIiwiY2hhciQyIiwibGluZSQxIiwiZmlsZSQxIiwiY29uc3RydWN0b3IiLCJ0b19zdHJpbmckMCIsImNvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImJ0IiwiZm9ybWF0X2JhY2t0cmFjZV9zbG90Iiwic2xvdCIsImluZm8iLCJpc19yYWlzZSIsInByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2UiLCJvdXRjaGFuIiwiYmFja3RyYWNlIiwicHJpbnRfcmF3X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2UiLCJyZWdpc3Rlcl9wcmludGVyIiwiZm4iLCJvbGRfcHJpbnRlcnMiLCJuZXdfcHJpbnRlcnMiLCJlcnJvcnMiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJzdGF0dXMiLCJlbXB0eV9iYWNrdHJhY2UiLCJ0cnlfZ2V0X3Jhd19iYWNrdHJhY2UiLCJoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uIiwiZGVidWdnZXJfaW5fdXNlIiwiZXhuJDEiLCJleG4kMCIsInJhd19iYWNrdHJhY2UkMCIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24kMCIsIm5ld19zdGF0ZSIsImFzc2lnbiIsInN0MSIsInN0MiIsImZ1bGxfaW5pdCIsImNvbWJpbmUiLCJleHRyYWN0Iiwic2VlZCQwIiwibWFrZSQyIiwibWFrZV9zZWxmX2luaXQiLCJjb3B5JDAiLCJiaXRzIiwiY3VydmFsIiwibmV3dmFsIiwibmV3dmFsMzAiLCJpbnRhdXgiLCJpbnQkMCIsImJvdW5kIiwiaW50JDEiLCJvbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInBybmciLCJwb3dlcl8yX2Fib3ZlIiwieCQwIiwieCQxIiwiaW5pdGlhbF9zaXplIiwicmFuZG9tIiwiaW5zZXJ0X2FsbF9idWNrZXRzIiwiaW5kZXhmdW4iLCJpbnBsYWNlIiwib2RhdGEiLCJuZGF0YSIsIm5zaXplIiwibmRhdGFfdGFpbCIsImluc2VydF9idWNrZXQiLCJjZWxsJDAiLCJjZWxsJDEiLCJuaWR4IiwicmVzaXplJDAiLCJvc2l6ZSIsImtleV9pbmRleCIsInJlbW92ZV9idWNrZXQiLCJmaW5kX3JlYyIsIm5leHQxIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2luX2J1Y2tldCIsInJlcGxhY2VfYnVja2V0IiwibWVtX2luX2J1Y2tldCIsInplcm8iLCJ1bmtub3duIiwiaXNfa25vd24iLCJwcF9lbnF1ZXVlIiwidG9rZW4iLCJwcF9jbGVhcl9xdWV1ZSIsInBwX2luZmluaXR5IiwicHBfb3V0cHV0X3N0cmluZyIsInBwX291dHB1dF9uZXdsaW5lIiwicHBfb3V0cHV0X3NwYWNlcyIsInBwX291dHB1dF9pbmRlbnQiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJhZnRlciIsImJlZm9yZSIsInJlYWxfaW5kZW50IiwiYnJlYWtfbGluZSIsImJyZWFrX3NhbWVfbGluZSIsInBwX2ZvcmNlX2JyZWFrX2xpbmUiLCJwcF9za2lwX3Rva2VuIiwiZm9ybWF0X3BwX3Rva2VuIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJ0YWlsIiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQxIiwiYm94X3R5cGUkMCIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJhZHZhbmNlX2xlZnQiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQwIiwiZW5xdWV1ZV9hZHZhbmNlIiwidG9rIiwiZW5xdWV1ZV9zdHJpbmdfYXMiLCJlbnF1ZXVlX3N0cmluZyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInF1ZXVlX2VsZW0iLCJzZXRfc2l6ZSIsImxlZnRfdG90YWwiLCJzY2FuX3B1c2giLCJlbGVtIiwicHBfb3Blbl9ib3hfZ2VuIiwiYnJfdHkiLCJwcF9vcGVuX3N5c19ib3giLCJwcF9jbG9zZV90YWciLCJwY3QiLCJwb3QiLCJtY3QiLCJtb3QiLCJwcF9yaW5pdCIsImNsZWFyX3RhZ19zdGFjayIsInBwX2ZsdXNoX3F1ZXVlIiwicHBfcHJpbnRfYXNfc2l6ZSIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYm9vbCIsInBwX3ByaW50X2NoYXIiLCJwcF9wcmludF9mbHVzaCIsInBwX2ZvcmNlX25ld2xpbmUiLCJwcF9wcmludF9jdXQiLCJkaXNwbGF5X25ld2xpbmUiLCJibGFua19saW5lIiwiZGlzcGxheV9ibGFua3MiLCJkZWZhdWx0X3BwX21hcmtfb3Blbl90YWciLCJkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnIiwiZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyIsImRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnIiwicHBfbWFrZV9mb3JtYXR0ZXIiLCJwcF9xdWV1ZSIsInN5c190b2siLCJzY2FuX3N0YWNrIiwicHBfbWFyZ2luIiwib3V0cHV0IiwiZmx1c2giLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJwcF9idWZmZXJfc2l6ZSIsInBwX21ha2VfYnVmZmVyIiwic3RkX2Zvcm1hdHRlciIsImVycl9mb3JtYXR0ZXIiLCJmbHVzaF9idWZmZXJfZm9ybWF0dGVyIiwicHBfdiIsIm9wdCQwIiwicHBfc2VwIiwib3B0JDEiLCJub25lIiwiY29tcHV0ZV90YWciLCJ0YWdfYWNjIiwib3V0cHV0X2Zvcm1hdHRpbmdfbGl0Iiwib3V0cHV0X2FjYyQwIiwiYnR5IiwiZiQwIiwicCQ2IiwicCQ3IiwiZnByaW50ZiQwIiwiZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsInZhbHVlJDAiLCJjb250ZW50X3JlY3QiLCJ0YXJnZXQkMCIsInN0cmluZ19vZl9ib3giLCJvYnNlcnZlIiwiYm94IiwiYm94JDAiLCJjcmVhdGUkNyIsImNhbGxiYWNrIiwiY2FsbGJhY2skMCIsImVudHJpZXMiLCJvYnNlcnZlciIsImVudHJpZXMkMCIsIm9mX25hdmlnYXRvciIsImltZ190b19qdiIsImltZyIsInRvX2p2IiwiYXJ0d29yayIsInNldF9tZXRhZGF0YSIsIm1ldGFkYXRhIiwibmV4dF90cmFjayIsInByZXZpb3VzX3RyYWNrIiwic2V0X2FjdGlvbl9oYW5kbGVyIiwiYWN0aW9uIiwic2V0X3Bvc2l0aW9uX3N0YXRlIiwiZHVyYXRpb24iLCJwbGF5YmFja19yYXRlIiwicG9zaXRpb24iLCJtYXliZV9mbG9hdCIsImR1cmF0aW9uJDAiLCJwbGF5YmFja19yYXRlJDAiLCJwb3NpdGlvbiQwIiwic3RhdGVfZGljdCIsInN1Ym1pdCIsInBhdHRlcm4iLCJwZXJzaXN0IiwibWFuYWdlciIsImFueSIsInJldHVybiQxIiwicHVyZSIsImlzX3B1cmUiLCJkdW1teSIsIm9wZXJhdG9yIiwiZGVzYyIsImZ1bmMiLCJ2eCIsIm1hcDIiLCJ2eSIsImNoaWxkIiwiYmluZCQxIiwiYWRkX2lkeCIsInBhcmFtIiwicmVtX2lkeF9yZWMiLCJzZWxmIiwicmVtX2lkeCIsInRyYWNlX2lkeCIsInRyYWNlX2lkeCQwIiwiaWR4JDAiLCJtb3ZfaWR4X3JlYyIsIm9sZGlkeCIsIm5ld2lkeCIsIm1vdl9pZHgiLCJnZXRfaWR4X3JlYyIsImdldF9pZHgiLCJpbnZhbGlkYXRlX25vZGUkMCIsInNlbnNpdGl2aXR5Iiwibm9kZSIsInNlbnNpdGl2aXR5JDAiLCJpbnZhbGlkYXRlX3RyYWNlIiwiaW52YWxpZGF0ZV9ub2RlIiwieiIsInkkMCIsInokMCIsInkkMSIsIngkMiIsImFjdGl2ZSIsImRlZmF1bHRfdW5zYWZlX211dGF0aW9uX2xvZ2dlciIsImNhbGxzdGFjayIsImRvX2ludmFsaWRhdGUiLCJ1bnNhZmUiLCJ2YXIkMCIsImdldCQ0IiwicGVlayIsInVwZGF0ZSIsInByaW0iLCJhY3F1aXJlIiwicmVsZWFzZSIsImdldF9wcmltIiwiaW52YWxpZGF0ZSIsInN1Yl9yZWxlYXNlIiwiZmFpbHVyZXMkMCIsIm9yaWdpbiQxIiwib3JpZ2luJDAiLCJ0cmFjZSIsInRyYWNlJDAiLCJ4JDQiLCJ4JDUiLCJ4JDYiLCJyZXZpZHgiLCJzZWxmJDAiLCJzZWxmJDEiLCJzZWxmJDIiLCJzZWxmJDMiLCJpbnRlcm1lZGlhdGUiLCJmYWlsdXJlcyQ0IiwiY2hpbGQkMCIsIngkMyIsIndydCIsInNlbGYkNCIsInN1Yl9hY3F1aXJlIiwidHJhY2UkMSIsImVudHJpZXMkMSIsImRvYyIsImFjdGl2YXRlX3RyYWNpbmciLCJ0biIsInN1Yl9pc19kYW1hZ2VkIiwic3ViX3NhbXBsZSIsImYkMSIsInJlc3VsdCQwIiwib2JzZXJ2ZSQwIiwib25faW52YWxpZGF0ZSIsInJhd19mbHVzaF9yZWxlYXNlX3F1ZXVlIiwicGFyYW0kMCIsImZhaWx1cmVzJDEiLCJmbHVzaF9yZWxlYXNlX3F1ZXVlIiwicXVldWUkMCIsInNhbXBsZSIsInNldF9vbl9pbnZhbGlkYXRlIiwiZmx1c2hfb3JfZmFpbCIsIm1haW5fZXhuIiwiZmFpbHVyZXMiLCJxdWlja19zYW1wbGUiLCJtYXBfcmVkdWNlIiwiaW5qIiwiaXRlbXMiLCJwbHVzIiwiY29uc19tb25vaWQiLCJ4cyIsInhzJDAiLCJ2JDAiLCJ4cyQxIiwidiQxIiwidiQyIiwiY29uc19tb25vaWQkMCIsIm5vdF9vcmlnaW4iLCJtYWtlJDMiLCJzZXRfcGFyZW50IiwibWFrZV9ub2RlIiwic2V0IiwiYmluZGluZyIsInJhd19pbnZhbGlkYXRlIiwiYXBwZW5kJDAiLCJnZXQkNSIsImludmFsaWRhdGVfYmluZGluZyIsInNldF9iaW5kaW5nIiwidW5zZXQiLCJzbWFsbGVyX2VsbCIsInNtaW4iLCJzbWF4IiwiZGlzYmFsYW5jZWQiLCJyZXBhcmVudCIsIm9sZGNoaWxkIiwibmV3Y2hpbGQiLCJyb3RfbGVmdCQwIiwidmVyc2lvbiIsInNuIiwicm4iLCJybCQwIiwiYmFsYW5jZSIsImJhbGFuY2UkMCIsInJvdF9sZWZ0Iiwicm90X3JpZ2h0JDAiLCJsbiIsImxyJDAiLCJyb3RfcmlnaHQiLCJpbmNfbGVmdCIsImluY19yaWdodCIsInNsIiwic3IiLCJjb21wdXRlX3N1Yl9zaXplIiwicmVzZXRfdmVyc2lvbiIsInJlYmFsYW5jZSIsInZlcnNpb24kMCIsImV4dHJhY3RfYmluZGluZ3MiLCJ0cmVlIiwicm5vZGUiLCJmdWxsX3JlYnVpbGQiLCJyZWQiLCJiaW5kaW5ncyIsImJpbmRpbmdzJDAiLCJyZWR1Y3Rpb24iLCJiaW5kaW5nJDAiLCJyZWR1Y3Rpb24kMCIsImFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0ZSQwIiwiZXh0cmFjdF9mcmluZ2UiLCJpbmNyZW1lbnRhbF9yZWJ1aWxkIiwiZnJpbmdlIiwiZnJpbmdlJDAiLCJmcmluZ2UkMSIsImV2YWwkMCIsIm9wYXF1ZSIsIm1hcF9yZWR1Y2UkMCIsIm1hcHBlciIsIm1vbm9pZCIsInNvdXJjZSIsInByaW0kMCIsImxlZnRfbW9zdCIsIndhbGtfcm9vdCIsInBhcmVudCQwIiwiZW1wdHkkMSIsImVsZW1lbnQiLCJtYXhpIiwicmFuayIsImNvbmNhdCQxIiwibWFza19vbGQiLCJtYXNrX25ldyIsIm1hc2tfYm90aCIsImlzX3NoYXJlZCIsImlzX25vdF9zaGFyZWQiLCJpc19ib3RoIiwiaXNfb2xkIiwiaXNfbmV3Iiwic2V0X2JvdGgiLCJnZXRfaW5kZXgiLCJ3aXRoX2luZGV4X25ldyIsInVubWFyayIsIm1hcmtlZCIsInNoYXJlZCIsImJsb2NrZWQiLCJta19zdGF0cyIsIm5ld19tYXJrZWQiLCJzdGF0cyIsIm5ld19zaGFyZWQiLCJuZXdfYmxvY2tlZCIsImJsb2NrIiwibWFzayIsIm1hcmsiLCJtYXJrJDAiLCJlbnF1ZXVlIiwiZGVxdWV1ZSIsInRyYXZlcnNlMSIsInRyYXZlcnNlIiwic29sZCIsInNuZXciLCJxb2xkIiwicW5ldyIsIm9sZF9zdGF0cyIsInRyIiwibmV3X3N0YXRzIiwidW5zYWZlX3RyYXZlcnNlIiwib2xkX3Jvb3QiLCJuZXdfcm9vdCIsIm9sZF9xdWV1ZSIsIm5ld19xdWV1ZSIsInJlc3RvcmUiLCJuZXh0X3NoYXJlZF9pbmRleCIsInN0IiwidW5ibG9jayIsInQkMCIsInVubWFya19vbGQiLCJpbmRleCQwIiwiZHJvcHBlZF9sZWFmIiwiYSQwIiwiYiQwIiwiaW5kZXgkMSIsImluZGV4JDIiLCJkcm9wcGVkX2pvaW4iLCJwcmVwYXJlX3NoYXJlZCIsInVubWFya19uZXciLCJub19kcm9wcGVkIiwiZ2V0X2Ryb3BwZWQiLCJ4b2xkIiwidG5ldyIsInRyYXZlcnNhbCIsIm5iX2Ryb3BwZWQiLCJuYl9zaGFyZWQiLCJuYl9kcm9wcGVkJDAiLCJ4bGVhZiIsInhqb2luIiwiZXZhbCQxIiwib3RoZXIiLCJtYWtlJDQiLCJyZWR1Y2UiLCJ1cGRhdGUkMCIsIm5ld190cmVlIiwib2xkX3RyZWUiLCJ1cGRhdGVfYW5kX2dldF9kcm9wcGVkIiwiZHJvcHBlZCIsImZvbGRfZHJvcHBlZCIsImJvdW5kJDAiLCJwdXJlX21hcF9yZWR1Y2UiLCJmb2xkX21vbm9pZCIsInNlcSIsInJlZHVjZSQwIiwicmVkdWNlciIsInJlZHVjZXIkMCIsInRyYW5zZm9ybV9saXN0Iiwib2ZfbGlzdCQxIiwidG9fbGlzdCQxIiwibHdkX2VtcHR5IiwibHdkX21vbm9pZCIsIm1hcCQ0IiwiZmlsdGVyX21hcCQwIiwic2VsZWN0IiwiYmluZCQyIiwibGlmdCIsIm9wdHMiLCJ0eXBlIiwiaXNfcHVyZV9lbGVtZW50IiwiZXh0cmFjdF9wdXJlX2VsZW1lbnQiLCJleHRyYWN0X3B1cmVfZWxlbWVudHMiLCJwcmVwYXJlX2NvbCIsImNvbCIsImltcHVyZSIsImNvbnN1bWVfY2hpbGRyZW4iLCJjaGlsZF9ub2RlIiwiY2hpbGRfam9pbiIsImp2X2FwcGVuZCIsImp2X2JlZm9yZSIsImp2X3JlbW92ZSIsImp2X2NvbnRhaW5zIiwiY29udGFpbnNfZm9jdXMiLCJlbCIsInVwZGF0ZV9jaGlsZHJlbiIsImNoaWxkcmVuIiwic2NoZWR1bGVfZm9yX3JlbW92YWwiLCJwcmVzZXJ2ZV9mb2N1cyIsInNoaWZ0X3NpYmxpbmdzIiwic2libGluZyIsInJlbW92ZV9jaGlsZCIsInB1cmVfdW5pdCIsImR1bW15X2t2X2F0IiwiYXR0YWNoX2F0dHJpYnMiLCJhdHRyaWJzIiwic2V0X2t2IiwidW5zZXRfa3YiLCJzZXRfbHdkX2F0IiwicHJldiIsImF0IiwicGFpciIsImF0cyIsInNldF9hdCIsImt2IiwibGlzdGVuJDAiLCJhdHRhY2hfZXZlbnRzIiwiZXZlbnRzIiwiY2FjaGVkIiwidiQ0Iiwic3RoJDAiLCJldiIsImltcHVyZV9hdCIsImF0JDAiLCJpbXB1cmVfZXYiLCJldiQwIiwiaW1wdXJlX2NoaWxkcmVuIiwiY2hpbGRyZW4kMCIsImNoaWxkcmVuJDEiLCJjaGlsZHJlbiQyIiwiY29ucyQxIiwiY3MiLCJ2b2lkX2NvbnMiLCJidXR0b24kMCIsImRpdiQxIiwiZm9ybSQwIiwiaW1nJDAiLCJpbnB1dCQxIiwibGFiZWwkMCIsIm9wdGlvbiQwIiwic2VsZWN0JDAiLCJzcGFuJDEiLCJzaHVmZmxlIiwicmFuZF9pbnQiLCJpdGVtX3RvX3N0cmluZyIsImlzX25hbiIsIm9mX3N0cmluZ19vcHQiLCJpbnRfb2ZfY29sb3IiLCJjb2RlX29mX3N0eWxlIiwic3RyaW5nX29mX3N0eWxlIiwic3R5bGVfb2ZfdGFnIiwibWFya19vcGVuX3N0eWxlIiwibWFya19jbG9zZV9zdHlsZSIsIm1hcmtfb3Blbl9zdGFnIiwib3JfZWxzZSIsInN0eWxlJDAiLCJtYXJrX2Nsb3NlX3N0YWciLCJzZXRfY29sb3JfdGFnX2hhbmRsaW5nIiwiZnVucyIsImZ1bnMkMCIsInNwcmludGYkMCIsImZvcm1hdCIsInNwcmludGYkMSIsImNvbXBhcmUkMSIsIm9mX3N0cmluZyQwIiwib2ZfZmxvYXQiLCJzeW1ib2wkMTAiLCJtYXBfb3IiLCJpc19zb21lJDEiLCJmbGF0X21hcCIsInN5bWJvbF9iaW5kJDAiLCJ2YWx1ZSQzIiwidG9fbGlzdCQyIiwic3ltYm9sJDExIiwicmV0dXJuJDIiLCJzeW1ib2wkMTIiLCJnZXRfZXhuIiwiZ2V0X29yIiwiZmxhdF9tYXAkMCIsInN5bWJvbCQxMyIsInN5bWJvbF9iaW5kJDEiLCJzdWYiLCJjaGVjayIsInNpbmdsZSIsImRlZXAiLCJtaWRkbGUiLCJpc19lbXB0eSQxIiwiY29ucyQyIiwieiQxIiwibWlkZGxlJDAiLCJ6JDIiLCJ5JDMiLCJ6JDMiLCJ6JDQiLCJ5JDQiLCJxJDAiLCJ5JDIiLCJ0YWtlX2JhY2tfZXhuIiwicSQxIiwidGFrZV9iYWNrIiwic2l6ZV9kaWdpdCIsImxleF9lcnJvciIsImVycm9yX3BvcyIsImNudW0iLCJlbnVtJDAiLCJzdHJpbmcybnVtIiwidXBkYXRlX3BvcyIsImludF9vZl9oZXhjaGFyIiwidXRmOF9vZl9jb2RlIiwidSIsIm1heF91c2VkX2JpdHMiLCJ1dGY4X29mX3N1cnJvZ2F0ZV9wYWlyIiwiaGlnaCIsImxvdyIsImhpZ2gkMCIsImxvdyQwIiwiZXNjYXBpbmdfZXJyb3IiLCJvZmZzIiwidW5lc2NhcGVfc3RyaW5nIiwidTEiLCJ1MiIsInJlYWQkMCIsIm9jYW1sX2xleF9yZWFkX3JlYyIsIm9jYW1sX2xleF9zdGF0ZSIsIm9jYW1sX2xleF9zdGF0ZSQwIiwib2NhbWxfbGV4X3N0YXRlJDEiLCJyZWFkX2NvbW1lbnQiLCJyZWFkX2NvbW1lbnQkMCIsIm9jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIiwiY3JlYXRlX2Zyb21fbGV4YnVmIiwiZW1zZyIsImVjaGFyIiwic2NoYXIiLCJlbGluZSIsImxvZzIiLCJiaXRzJDAiLCJtYXhfanNvbl9pbnQiLCJzdHJpbmdfb2ZfZmxvYXRfanNvbiIsImlzX2ludCIsImludF92YWx1ZSIsInRva2VuX2Vycm9yIiwicyQxIiwicyQyIiwianNvbl92YWx1ZSIsInRva2VuX3ZhbHVlIiwib2JqZWN0X3ZhbHVlX3N0YXJ0IiwiYXJyYXlfdmFsdWVfc3RhcnQiLCJ2YXJpYW50X3ZhbHVlX3N0YXJ0IiwidHVwbGVfdmFsdWVfc3RhcnQiLCJhcnJheV92YWx1ZXNfc3RhcnQiLCJ0b2skMCIsImFycmF5X3ZhbHVlcyIsIm9iamVjdF92YWx1ZXNfc3RhcnQiLCJjb2xvbl92YWx1ZSIsIm9iamVjdF92YWx1ZXMiLCJrZXlfY29sb25fdmFsdWUiLCJ0dXBsZV92YWx1ZXMiLCJ2YXJpYW50X2VuZCIsImRlY29kZSIsImVyciQwIiwibmliYmxlX3RvX2hleCIsImFkZF9oZXhfYnl0ZSIsImVzY2FwZSIsInRvX2pzb25fc3RyaW5nIiwiYWRkX2NoYXIkMCIsImFkZF9zdHJpbmckMCIsImFkZF9xdW90ZV9zdHJpbmciLCJwcF9saXN0IiwicHB4Iiwib3V0IiwianNvbiIsImZvcm1hdF9maWVsZCIsImpzb24kMCIsInMkMyIsInByZXR0eV9wcmludCIsInByZXR0eV9wcmludF90b19zdHJpbmciLCJwcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCIsImVycm9yJDIiLCJ0b19hc3NvYyIsIm51bGwkMSIsInRva2VuX3RvX3N0cmluZyIsInJlYWRfanNvbiIsInJlYWRfanNvbl9lcnJvcl9pbmZvIiwiZXJyX2luZm8iLCJqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIiwianNvbl9vZl9jaGFubmVsX2Vycm9yX2luZm8iLCJpbmMiLCJqc29uX29mX2ZpbGVfZXJyb3JfaW5mbyIsImZpbGVuYW1lIiwianNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wIiwic3RyZWFtIiwicmVhZF9qc29uX3N0cmVhbV9lcnJvcl9pbmZvIiwiZmluIiwic3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9maWxlX2Vycm9yX2luZm8iLCJzdHJlYW1fZnJvbV9sZXhidWZfZXJyb3JfaW5mbyIsImpzb25fdG9fY2hhbm5lbF9mbXQiLCJlb2wiLCJpbmNyIiwicHNlcCIsImFkZF9pbnQiLCJhZGRfZmxvYXQiLCJwc2VwJDAiLCJsZHIkMSIsImpzb25fbGlzdCIsImxkciQyIiwibGRyIiwianNvbl9hc3NvYyIsImxkciQwIiwibmV3c2VwIiwianNvbl90b19jaGFubmVsIiwianNvbl90b19maWxlX2V4biIsImpzb25fdG9fYnVmZmVyIiwianNvbl90b19zdHJpbmciLCJqc29uX2Vycm9yIiwiZXJyb3JfdG9fc3RyaW5nIiwiZXJyb3JfaW5mbyIsImZuYW1lIiwibG51bSIsImxudW0kMCIsImxudW0kMSIsImZuYW1lJDAiLCJsb2MiLCJhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyIsImZyb21fc3RyaW5nIiwidG9fc3RhbmRhcmQiLCJ0cGwiLCJqb3B0Iiwic3RkIiwibGV4X3N0cmluZyIsImxleF9udW1iZXIiLCJsZXhfaW50ZWdlciIsImxleF9sYXJnZWludCIsImxleF92YXJpYW50IiwibGV4X3R1cGxlIiwiY29tbWVudF9jaGVjayIsIm51bWJlcl90b19zdHJpbmciLCJsYXJnZWludCIsImludGVnZXIiLCJudWxsJDIiLCJzdHJpbmckMCIsImJvb2wiLCJhc3NvYyIsImxpc3QiLCJ0dXBsZSIsIm51bWJlciIsImFycmF5X3N0YXJ0IiwiYXJyYXlfZW5kIiwib2JqZWN0X3N0YXJ0Iiwib2JqZWN0X2VuZCIsInR1cGxlX3N0YXJ0IiwidHVwbGVfZW5kIiwidmFyaWFudF9zdGFydCIsIm5hbWUkMCIsImxleF9zdHJpbmckMCIsImxleF9udW1iZXIkMCIsImxleF9pbnRlZ2VyJDAiLCJsZXhfbGFyZ2VpbnQkMCIsImxleF92YXJpYW50JDAiLCJsZXhfdHVwbGUkMCIsImNvbW1lbnRfY2hlY2skMCIsIm51bWJlcl90b19zdHJpbmckMCIsImxhcmdlaW50JDAiLCJpbnRlZ2VyJDAiLCJudWxsJDMiLCJzdHJpbmckMSIsImJvb2wkMCIsImFzc29jJDAiLCJsaXN0JDAiLCJ0dXBsZSQwIiwidmFyaWFudCQwIiwibnVtYmVyJDAiLCJhcnJheV9zdGFydCQwIiwiYXJyYXlfZW5kJDAiLCJvYmplY3Rfc3RhcnQkMCIsIm9iamVjdF9lbmQkMCIsInR1cGxlX3N0YXJ0JDAiLCJ0dXBsZV9lbmQkMCIsInZhcmlhbnRfc3RhcnQkMCIsInZhcmlhbnRfZW5kJDAiLCJuYW1lJDEiLCJmcm9tX3N0cmluZyQwIiwidG9fc3RyaW5nJDQiLCJsZXhfc3RyaW5nJDEiLCJsZXhfbnVtYmVyJDEiLCJsZXhfaW50ZWdlciQxIiwibGV4X2xhcmdlaW50JDEiLCJsZXhfdmFyaWFudCQxIiwibGV4X3R1cGxlJDEiLCJjb21tZW50X2NoZWNrJDEiLCJudW1iZXJfdG9fc3RyaW5nJDEiLCJsYXJnZWludCQxIiwiaW50ZWdlciQxIiwibnVsbCQ0Iiwic3RyaW5nJDIiLCJib29sJDEiLCJhc3NvYyQxIiwibGlzdCQxIiwidHVwbGUkMSIsInZhcmlhbnQkMSIsIm51bWJlciQxIiwiYXJyYXlfc3RhcnQkMSIsImFycmF5X2VuZCQxIiwib2JqZWN0X3N0YXJ0JDEiLCJvYmplY3RfZW5kJDEiLCJ0dXBsZV9zdGFydCQxIiwidHVwbGVfZW5kJDEiLCJ2YXJpYW50X3N0YXJ0JDEiLCJ2YXJpYW50X2VuZCQxIiwibmFtZSQyIiwicTEiLCJxMiIsImV2aWN0X29uZSIsIm9uX2V2aWN0IiwiZXZpY3RfcTIiLCJldmljdF9xMiQwIiwiZXZpY3RfcTEiLCJlbHQiLCJ2aXNpdGVkIiwidCQxIiwiZXZpY3QiLCJpbnNlcnQiLCJvbl9pbnNlcnQiLCJ2aXNpdGVkJDAiLCJ0b19qc3RyJDEiLCJvZl9qc3RyJDAiLCJqc3RyIiwib2ZfanYiLCJqdiIsInJhbmRvbV9zdGF0ZSIsIm5ld191dWlkX3Y0IiwidGVlIiwidG9fYXQiLCJlbXB0eSQ1IiwidG9fYXQkMCIsImlkJDAiLCJjbGFzc2VzIiwidW5pb24kMCIsImF0dHJzIiwiYWRkJDEiLCJhdF9uYW1lIiwiYWRkX2Jvb2wiLCJhZGRfb3B0IiwibWFwX2NvbCIsIm9mX2F0IiwiY29ucyQzIiwiY2xhc3MkMiIsInYkNSIsInN5bWJvbCQxNCIsIm9mX3N0cmluZyQxIiwidG9fc3RyaW5nJDYiLCJ0b19weCIsImdldF9mb250X3NpemVfaW5fcHgiLCJmb250X3NpemUiLCJmb250X3NpemUkMCIsIm1hcDMiLCJ0cmlwbGUiLCJqc19zY3JvbGwiLCJtYWtlJDUiLCJzY3JvbGxfdGFyZ2V0IiwiYWN0aXZlX2NsYXNzIiwiYXQkMSIsIm9uX2NsaWNrIiwiaGFuZGxlciQwIiwiY29udHJvbHMiLCJvbl93aGVlbCIsImVsdCQwIiwidiQ2IiwiY3NzX3NpemUiLCJ0b19oZWFkZXIiLCJjZWxscyIsInN0eWxlJDEiLCJ0ZW1wbGF0ZSIsInN0eWxlJDIiLCJoZWFkZXIiLCJyb3dfaGVpZ2h0IiwibWFrZSQ2IiwidWlfdGFibGUiLCJyZW5kZXIiLCJmZXRjaCIsInRvdGFsX2l0ZW1zIiwicm93X3NpemUiLCJoZWlnaHRfbiIsImhlaWdodCQwIiwidGFibGUiLCJyb3dfaW5kZXgiLCJ1bmxvYWQiLCJyb3ciLCJyb3dfZGF0YSIsIm5ld19jYWNoZSIsImNhY2hlX3JlZiIsImluZGV4ZXMiLCJjYWNoZSIsImxvYWQiLCJkYXRhJDAiLCJpbnNlcnRlZCIsImNhY2hlJDAiLCJ0b19sb2FkIiwidGFibGVfaGVpZ2h0IiwiY29tcHV0ZV92aXNpYmxlX3Jvd3MiLCJsYXN0X3Njcm9sbF95IiwiZGl2Iiwic2Nyb2xsX3kkMCIsImRpcmVjdGlvbiIsInZpc2libGVfaGVpZ2h0IiwiaGVhZGVyX2hlaWdodCIsIm51bWJlcl9vZl92aXNpYmxlX3Jvd3MiLCJzY3JvbGxfeSQxIiwiZmlyc3RfdmlzaWJsZV9yb3ciLCJsYXN0X3Zpc2libGVfcm93IiwiYmxlZWRpbmciLCJibGVlZGluZyQwIiwibGFzdCIsInByZXBhcmUiLCJjdXJyZW50X3JvdyIsInJvdyQwIiwicG9wdWxhdGVfb25fc2Nyb2xsIiwidmlzaWJsZV9yb3dzIiwic2Nyb2xsX2hhbmRsZXIiLCJsYXN0X3VwZGF0ZSIsInRpbWVvdXQiLCJyZXNldF90aWNrZXIiLCJkZWJvdW5jaW5nX2ludGVydmFsIiwicmVwb3B1bGF0ZV9kZXBzIiwibWFrZV9zcGFjZXIiLCJyZW5kZXIkMCIsInJlbmRlcmVkX3JvdyIsInJvd3MiLCJzcGFjZXIiLCJ0YWJsZV9ib2R5IiwiZmlyc3Rfc3BhY2VyIiwibGFzdF9zcGFjZXIiLCJ0YWJsZV9oZWFkZXIiLCJyZWN0IiwiZ3JpZF9zdHlsZSIsInRhYmxlJDAiLCJzY3JvbGxfdGFyZ2V0JDAiLCJzY3JvbGxfdGFyZ2V0JDEiLCJtYWtlJDciLCJDIiwibGFuZyIsImtleXMiLCJjaGVja19rZXkiLCJsb2NhbF9zdG9yYWdlIiwic3RvcmUiLCJmZXRjaCQwIiwiZW5jb2RlZF92YWx1ZSIsImluaXRpYWxfdmFsdWUiLCJtYWtlX3BlcnNpc3RlbnRfdmFyIiwidmFyJDEiLCJuZXdfdmFsdWUiLCJ2YXJfZiIsImtleSQwIiwibWFrZV9oYW5kbGVyIiwidmFsdWVfY2hhbmdlX2V2ZW50IiwiZGVmYXVsdF92YWx1ZSIsIm9uX2NoYW5nZSIsIm1ha2VfaW5wdXQiLCJ2YWxpZGF0ZSIsInBhdHRlcm4kMCIsInJlcXVpcmVkIiwidHlwZSQxIiwidmFsaWRhdGUkMCIsInRleHRfaW5wdXQiLCJwbGFjZWhvbGRlciQwIiwicGFzc3dvcmRfaW5wdXQiLCJzdWJtaXQkMCIsImZpZWxkJDAiLCJzZXR0ZXIiLCJjcmVhdGUkOCIsIkZvcm0iLCJvbl9zdWJtaXQiLCJlbHRzIiwiZWx0cyQwIiwib25fc3VibWl0JDAiLCJuYW1lJDMiLCJiYXNlX25hbWUiLCJtYWtlJDgiLCJuYW1lJDQiLCJtYWtlJDkiLCJvcHRpb25zIiwib3B0aW9ucyQwIiwic2VsZWN0ZWQiLCJuYW1lJDUiLCJtYWtlJDEwIiwibWFrZV9jaGVjayIsImxhYmVsIiwiY2hlY2tlZCIsImxibCIsImNoZWNrZWQkMSIsIm1ha2VfYWxsIiwiYWxsIiwidiQ3IiwiYXBwbHlfc3RhdGUiLCJ3aXRoX3N0YXRlIiwiUyIsInZfc3RhdGUiLCJnZXRfc3RhdGUiLCJzZXRfc3RhdGUiLCJmdW5jJDAiLCJoJDEiLCJuZXh0JDAiLCJ0d29fc3RhdGUiLCJ5b2pzb25fb2Zfc3RyaW5nIiwieW9qc29uX29mX2ludCIsInlvanNvbl9vZl9vcHRpb24iLCJ5b2pzb25fb2ZfYSIsInlvanNvbl9vZl9saXN0IiwibHN0IiwicmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyIsIm9mX3lvanNvbl9lcnJvciIsIndoYXQiLCJ5b2pzb24iLCJzdHJpbmdfb2ZfeW9qc29uIiwiaW50X29mX3lvanNvbiIsIm9wdGlvbl9vZl95b2pzb24iLCJhX29mX3lvanNvbiIsImxpc3Rfb2ZfeW9qc29uIiwicmV2X2xzdCIsInN0YWdfbm9fYXJncyIsIm5lc3RlZF9saXN0X2ludmFsaWRfc3VtIiwiZW1wdHlfbGlzdF9pbnZhbGlkX3N1bSIsInVuZXhwZWN0ZWRfc3RhZyIsInJlY29yZF9zdXBlcmZsdW91c19maWVsZHMiLCJyZXZfZmxkX25hbWVzIiwiZmxkX25hbWVzX3N0ciIsInJlY29yZF9kdXBsaWNhdGVfZmllbGRzIiwicmVjb3JkX2V4dHJhX2ZpZWxkcyIsInJlY29yZF9nZXRfdW5kZWZpbmVkX2xvb3AiLCJmaWVsZHMkMCIsInJlY29yZF91bmRlZmluZWRfZWxlbWVudHMiLCJ1bmRlZmluZWQkMCIsInJlY29yZF9saXN0X2luc3RlYWRfYXRvbSIsInN5bWJvbCQxNSIsImpzdHJfb2ZfbWV0aG9kIiwidXNlcl9vZl95b2pzb24iLCJmaWVsZF95b2pzb25zIiwibmFtZV9maWVsZCIsInNlcnZlcl9pZF9maWVsZCIsInNlcnZlcl9uYW1lX2ZpZWxkIiwiaWRfZmllbGQiLCJkdXBsaWNhdGVzIiwiZXh0cmEiLCJmaWVsZF95b2pzb24iLCJmaWVsZF9uYW1lIiwiZnZhbHVlIiwiZnZhbHVlJDAiLCJmdmFsdWUkMSIsImZ2YWx1ZSQyIiwic2VydmVyX25hbWVfdmFsdWUiLCJpZF92YWx1ZSIsInNlcnZlcl9pZF92YWx1ZSIsIm5hbWVfdmFsdWUiLCJ5b2pzb25fb2ZfdXNlciIsInZfaWQiLCJ2X3NlcnZlcl9uYW1lIiwidl9zZXJ2ZXJfaWQiLCJ2X25hbWUiLCJibmRzIiwiYXJnJDAiLCJibmRzJDAiLCJhcmckMSIsImJuZHMkMSIsImFyZyQyIiwiYm5kcyQyIiwicGFyYW1zX29mX3lvanNvbiIsInVzZXJuYW1lX2ZpZWxkIiwicHdfZmllbGQiLCJwd192YWx1ZSIsInVzZXJuYW1lX3ZhbHVlIiwieW9qc29uX29mX3BhcmFtcyIsInZfcHciLCJ2X3VzZXJuYW1lIiwicmVzcG9uc2Vfb2ZfeW9qc29uIiwidXNlcl9maWVsZCIsImFjY2Vzc190b2tlbl9maWVsZCIsImFjY2Vzc190b2tlbl92YWx1ZSIsInVzZXJfdmFsdWUiLCJ5b2pzb25fb2ZfcmVzcG9uc2UiLCJ2X2FjY2Vzc190b2tlbiIsInZfdXNlciIsImVuZHBvaW50IiwiaW1hZ2VfYmx1cl9oYXNoX29mX3lvanNvbiIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2giLCJpbWFnZV9ibHVyX2hhc2hlc19vZl95b2pzb24iLCJwcmltYXJ5X2ZpZWxkIiwicHJpbWFyeV92YWx1ZSIsInlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2hlcyIsInZfcHJpbWFyeSIsImJuZCIsInR5cGVfb2ZfeW9qc29uIiwieW9qc29uX29mX3R5cGUiLCJ0eXBlX3N0cl9vZl95b2pzb24iLCJ5b2pzb25fb2ZfdHlwZV9zdHIiLCJ0cyIsInRfb2ZfeW9qc29uIiwic29ydF9uYW1lX2ZpZWxkIiwicGF0aF9maWVsZCIsImFsYnVtX2lkX2ZpZWxkIiwicGFyZW50X2lkX2ZpZWxkIiwiaW1hZ2VfYmx1cl9oYXNoZXNfZmllbGQiLCJ0eXBlX2ZpZWxkIiwiY29sbGVjdGlvbl90eXBlX2ZpZWxkIiwiZnZhbHVlJDMiLCJmdmFsdWUkNCIsImZ2YWx1ZSQ1IiwiZnZhbHVlJDYiLCJmdmFsdWUkNyIsImZ2YWx1ZSQ4Iiwic29ydF9uYW1lX3ZhbHVlIiwicGF0aF92YWx1ZSIsImFsYnVtX2lkX3ZhbHVlIiwicGFyZW50X2lkX3ZhbHVlIiwiY29sbGVjdGlvbl90eXBlX3ZhbHVlIiwidHlwZV92YWx1ZSIsImltYWdlX2JsdXJfaGFzaGVzX3ZhbHVlIiwieW9qc29uX29mX3QiLCJ2X2NvbGxlY3Rpb25fdHlwZSIsInZfdHlwZSIsInZfaW1hZ2VfYmx1cl9oYXNoZXMiLCJ2X3BhcmVudF9pZCIsInZfYWxidW1faWQiLCJ2X3BhdGgiLCJ2X3NvcnRfbmFtZSIsImFyZyQ4IiwiYm5kJDMiLCJibmRzJDMiLCJibmRzJDQiLCJhcmckMyIsImJuZCQwIiwiYm5kcyQ1IiwiYXJnJDQiLCJibmQkMSIsImJuZHMkNiIsImFyZyQ1IiwiYm5kcyQ3IiwiYXJnJDYiLCJibmQkMiIsImJuZHMkOCIsImFyZyQ3IiwiYm5kcyQ5Iiwic2Vzc2lvbl91dWlkIiwic2V0X3Nlc3Npb25fdXVpZCIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiQwIiwic2Vzc2lvbl91dWlkJDAiLCJyZXF1ZXN0JDEiLCJiYXNlX3VybCIsImhlYWRlcnMiLCJRIiwicGF0aF9wYXJhbXMiLCJiYXNlX3VyaSIsImJhc2VfcGF0aF9zZWdtZW50cyIsImVuZHBvaW50X3BhdGhfc2VnbWVudHMiLCJwYXRoX3NlZ21lbnRzJDAiLCJ1cmkiLCJ1cmkkMCIsImF1dGhvcml6YXRpb24kMCIsImhlYWRlcnMkMCIsIm1ldGhvZCIsImJvZHkiLCJwYXJhbXMkMCIsInVyaV93aXRoX3BhcmFtcyIsInVybCQxIiwiaW5pdCQwIiwiY29ubmVjdCIsImNyZWRlbnRpYWxzIiwicGFzc3dvcmQiLCJ1c2VybmFtZSIsImF1dGgiLCJhdXRoX3Jlc3BvbnNlIiwidGFnX29mIiwiZnV0dXJlcyIsImxpc3RlbmVycyIsIndvcmtlciIsInF1ZXJ5IiwidXVpZCIsImZ1dCIsInNldCQwIiwicXVlcnkkMCIsIm9uX21lc3NhZ2UiLCJtZXNzYWdlIiwib2Zfc3RyaW5nJDIiLCJvZl9zdHJpbmckMyIsIml0ZW1fY291bnQiLCJyZXEiLCJzcmNfdmlld3MiLCJzdGgkMSIsImZpbHRlcnMiLCJ0X3RvX2p2IiwiZW5jb2RlciIsImp2X3RvX3QiLCJkZWNvZGVyIiwic29ydHNfb2ZfeW9qc29uIiwiZGF0ZV9hZGRlZF9maWVsZCIsInZpZXdzX2ZpZWxkIiwidmlld3NfdmFsdWUiLCJkYXRlX2FkZGVkX3ZhbHVlIiwieW9qc29uX29mX3NvcnRzIiwidl92aWV3cyIsInZfZGF0ZV9hZGRlZCIsInRfb2ZfeW9qc29uJDAiLCJzb3J0c19maWVsZCIsIml0ZW1fZmllbGQiLCJpdGVtX3ZhbHVlIiwic29ydHNfdmFsdWUiLCJ5b2pzb25fb2ZfdCQwIiwidl9pdGVtIiwidl9zb3J0cyIsImNvbXBhcmUkMiIsInRvX2p2JDAiLCJ2aWV3cyIsInNvcnRfbmFtZSIsInNvcnRfbmFtZSQwIiwidmlld3MkMCIsIm9mX2p2JDAiLCJwYXRoJDAiLCJ0b19qdiQxIiwib2ZfanYkMSIsInRvX2p2JDIiLCJvZl9qdiQyIiwidG9fanYkMyIsIm9mX2p2JDMiLCJwYXRoJDMiLCJ0b19qdiQ0Iiwib2ZfanYkNCIsImNvbGxlY3Rpb25fdHlwZSIsInBhdGgkNCIsInRvX2p2JDUiLCJvZl9qdiQ1IiwiZ2V0X2tleSIsInN0YXR1c190b19zdHJpbmciLCJsYXN0X3NvdXJjZV9pdGVtX2tleSIsImZpcnN0X3VuZmV0Y2hlZF9rZXkiLCJmaXJzdF9taXNzaW5nX2tleSIsImZpcnN0X3VuZmV0Y2hlZF9rZXkkMCIsInBwX3Byb2dyZXNzIiwicmVtYWluaW5nIiwicHBfcmVwb3J0Iiwic3luY19wcm9ncmVzcyIsInN0YXR1cyQwIiwiYWN0aXZlX2xheW91dCIsImdldCQ3Iiwic3RyaW5nIiwic2V0JDEiLCJzZXJ2ZXJzX3N0YXR1cyIsInJlcG9ydCIsImNyZWF0ZV92aWV3IiwiY29ubmV4aW9ucyIsImNvbm5lY3QkMCIsInJlZnJlc2giLCJjb25uZXhpb24iLCJzZXJ2ZXJfaWQiLCJwcmV2aW91c19zdGF0dXMiLCJyZW1haW5pbmckMCIsInNlcnZlcnNfd2l0aF9zdGF0dXMiLCJzZXJ2ZXIiLCJuZXdfY29ubmV4aW9uIiwic2VydmVycyIsInVybF9maWVsZCIsInBhc3N3b3JkX2ZpZWxkIiwic3VibWl0JDEiLCJ1aV9mb3JtIiwidXJsIiwidWlfc3RhdHVzIiwiZnV0X3RvX2x3ZCIsInNlcV9zaGFyZSIsImxfc2FtZSIsInJfc2FtZSIsInIkMSIsImxpYl9kaWZmIiwic2VydmVyc19saWJyYXJpZXMiLCJwcmV2aW91c192YWx1ZSIsInVpIiwic3RhdHVzZXMiLCJ1aV9mb3JtJDAiLCJub3dfcGxheWluZyIsImF1ZGlvX3VybCIsIml0ZW1faWQiLCJzZXRfcGxheV91cmwiLCJwbGF5bGlzdCIsImN1cnJlbnRfaW5kZXgiLCJwbGF5bGlzdCQwIiwiaXRlbSIsImFsYnVtX2lkIiwic2Vzc2lvbiIsImltYWdlX2lkIiwiaW1nX3NyYyIsInJlc2V0X3BsYXlsaXN0IiwibWFrZSIsImF1ZGlvX2VsdCIsInNldF9zcmMiLCJuZXh0X2luZGV4Iiwic2V0X3Bvc2l0aW9uX3N0YXRlJDAiLCJvbl9lcnJvciIsImJ0bl9uZXh0IiwibnAiLCJ0cmFja19jb3ZlciIsInR4dCQwIiwidGl0bGUiLCJ0cmFja19kZXRhaWxzIiwibm93X3BsYXlpbmckMCIsImF0JDIiLCJtYWtlJDExIiwib25fY2xpY2skMCIsImNvbHVtbnMiLCJtYWtlJDEyIiwicmFuZ2VkX3ZpZXciLCJpbWdfdXJsIiwic3RhcnRfaW5kZXgiLCJpbWFnZV9ibHVyX2hhc2hlcyIsInBsYXlfZnJvbSIsInBsYXlfb25fY2xpY2siLCJpbWdfdXJsJDAiLCJwbGFjZWhvbGRlciIsInJhbmdlZCIsInZpZXckMCIsImRhdGFfc291cmNlIiwibWFrZV9ub3dfcGxheWluZyIsImZldGNoJDEiLCJwbCIsInBsYXllciIsInBsYXllcl91aSIsImZfc2VhcmNoIiwiZl9zb3J0IiwiZl9vcmRlciIsImZfc29ydF9vcmRlciIsImNob2ljZXMiLCJmX2xpYnJhcmllcyIsImZfdmFsdWUiLCJ2aWV3JDEiLCJtYWluX3ZpZXciLCJvcmRlciIsIm9yZGVyJDAiLCJtYWluX2xpc3QiLCJkaXNwbGF5X25vbmUiLCJzdHlsZSQzIiwiYmlnX2NvdmVyIiwiYXBwIiwiaXNfc3RvcmFnZV9wZXJzaXN0ZW50Iiwib25fbG9hZCIsImFwcCQwIl0sInNvdXJjZXMiOlsiL2J1aWx0aW4vK2FycmF5LmpzIiwiL2J1aWx0aW4vK21sQnl0ZXMuanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytzdGRsaWIuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rZmFpbC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8raW50NjQuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8raW50cy5qcyIsIi9idWlsdGluLytoYXNoLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytmb3JtYXQuanMiLCIvYnVpbHRpbi8rZnNfbm9kZS5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLyt1bml4LmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbGV4aW5nLmpzIiwiL2J1aWx0aW4vK21kNS5qcyIsIi9idWlsdGluLytpby5qcyIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3ByaW50ZXhjLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy1kYXRhL0NDRlF1ZXVlLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2NvbXBsaWFudF9sZXh4ZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluX2FwaS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvZGIvc3RvcmVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9kYi9zeW5jLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9sYW5nLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi93b3JrZXJfY2xpZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9zZXJ2ZXJzLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi9wbGF5ZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxBdG9taWMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDSW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvbGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL29iai5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2NhbWxpbnRlcm5hbExhenkubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvb3B0aW9uLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0NoYXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvYnl0ZXMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3NldC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL21hcC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdHJlYW0ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9wcmludGYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3lvanNvbl9jb252X2Vycm9yLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZnVuLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvZGlnZXN0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvb2NhbWwvaGFzaHRibC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NGb3JtYXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9jYWxsYmFjay5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzX29mX29jYW1sLWNvbXBpbGVyL3J1bnRpbWUvanNvb19ydW50aW1lLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJlci9kb21fcmVjdF9yZWFkX29ubHkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2JycmVyL3Jlc2l6ZV9vYnNlcnZlci5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvbWVkaWFfc2Vzc2lvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyZXIvYnJyZXIubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC92ZW5kb3IvbHdkL2xpYi9sd2QvbHdkX3V0aWxzLm1sIiwiL3dvcmtzcGFjZV9yb290L3ZlbmRvci9sd2QvbGliL2x3ZC9sd2RfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvbHdkL2x3ZF9zZXEucHAubWwiLCIvd29ya3NwYWNlX3Jvb3QvdmVuZG9yL2x3ZC9saWIvYnJyLWx3ZC9lbHdkLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0FycmF5Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0Zsb2F0Lm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ0hhc2h0YmwubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDTGlzdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NPcHRpb24ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDUmFuZG9tLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy9DQ1Jlc3VsdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2NvbnRhaW5lcnMvQ0NTZXQubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9jb250YWluZXJzL0NDU3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvY29udGFpbmVycy1kYXRhL0NDTXVsdGlNYXAubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvbGV4eGVyX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L2Vycm9yX2luZm8ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvanNvbl9mbG9hdC5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wYXJzZXJfdG9vbHMubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9qc29ueHQvcGFyc2VyLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3ByZXR0eS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC9wcm9jZXNzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3Rva2VuX3V0aWxzLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3JlYWRlcl9zdHJpbmdfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfZmlsZS5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL2pzb254dC93cml0ZXJfc3RyaW5nLm1sIiwiL2hvbWUvcnVubmVyL3dvcmsvb2NhbWl4L29jYW1peC9fb3BhbS9saWIvanNvbnh0L3lvanNvbi5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvc3RkL0ZGQ2FjaGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL3N0ZC9zdGQubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvYXR0cnMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdXRpbHMubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvY29udHJvbGxlZF9zY3JvbGwubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdGFibGUvc2NoZW1hLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL3RhYmxlL3ZpcnR1YWxfdGFibGUubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvdHJhbnNsYXRlZC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9wZXJzaXN0ZW50Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2Zvcm0ubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2Jycl9sd2RfdWkvZm9ybXMvZmllbGRfdGV4dGlucHV0Lm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2Zvcm1zL2ZpZWxkX3NlbGVjdC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9saWIvYnJyX2x3ZF91aS9mb3Jtcy9maWVsZF9jaGVja2JveGVzLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi9icnJfbHdkX3VpL2J1dHRvbi5tbCIsIi9ob21lL3J1bm5lci93b3JrL29jYW1peC9vY2FtaXgvX29wYW0vbGliL3BweF95b2pzb25fY29udl9saWIveW9qc29uX2NvbnYubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9wcHhfeW9qc29uX2NvbnZfbGliL3BweF95b2pzb25fY29udl9saWIubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RhdGFfc291cmNlL2plbGx5ZmluLm1sIiwiL3dvcmtzcGFjZV9yb290L2xpYi93b3JrZXJfYXBpL3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL3ZpZXcubWwiLCIvd29ya3NwYWNlX3Jvb3QvbGliL2RiL2RiX3dvcmtlcl9hcGkubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL2ltcG9ydC5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vYXBwX3N0YXRlLm1sIiwiL3dvcmtzcGFjZV9yb290L2Jpbi91aS5tbCIsIi93b3Jrc3BhY2Vfcm9vdC9iaW4vdWlfcGxheWxpc3QubWwiLCIvd29ya3NwYWNlX3Jvb3QvYmluL21haW4ubWwiLCIvaG9tZS9ydW5uZXIvd29yay9vY2FtaXgvb2NhbWl4L19vcGFtL2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7QSxDOztHOzs7UTtTOzs7RztJO0k7STtHO0U7Ozs7R0FxREEsU0FBU0EsZ0JBQWdCQyxJQUFJQyxJQUFJQyxJQUFJQyxJQUFJQztJQUN2QyxHQUFJRCxNQUFNRjtLQUFJLElBQ0QsSUFBRkksT0FBT0EsS0FBS0QsS0FBS0MsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7O0tBQy9DLElBQ00sSUFBRkEsSUFBSUQsS0FBS0MsUUFBUUEsS0FBS0gsR0FBR0MsS0FBS0UsS0FBS0wsR0FBR0MsS0FBS0k7SUFFdEQ7R0FDRjtHQXhDQSxTQUFTQyxlQUFnQkMsR0FBR0MsR0FBR0o7SUFDdEIsSUFBSEYsU0FBU08sTUFBTUw7SUFDbkJGO0lBQ0EsUUFBUUMsUUFBUUYsS0FBSU8sT0FBS0wsTUFBTUMsS0FBS0QsTUFBS0YsTUFDdkNDLEdBQUdDLE1BQUlJLEVBQUVOO0lBRVgsT0FBT0M7R0FDVDtHQzZDQSxTQUFTUSx5QkFBMEJILEdBQUdDLEdBQUdKO0lBQ2pDLElBQUZPLElBQUlDO0lBQ1IsR0FBSUosVUFBVUosZUFBZUEsT0FBT0csVUFBVSxPQUFPSSxRQUFT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T0FBQSxXQUxRamdCLEdBcldWc3VDLHVCQXNXRWowQyxHQUNBMnpDO0lBRzhCO0lBQ2xDLE9OMEhNeE8sWU03SEZGLFFBSG1CbDVCOztxQkFTWkEsS0FBTSxpQkE3MUNma00sSUE2MUNTbE0sS0FBc0I7WUFJL0JpcEM7SUM3MUNBdEMsZUFnSkFxQjtJRDhzQ0YsT0M5MUNFckIsZUFpSkFzQjtHRDhzQzZCO0czQmgxQnpCajRCLFEyQjgwQkppNUI7WUVoMkNBQyxtQkFBbUJ2c0MsTUFDakJ0RztJQUFKLElBQ0lpbkMsT0FBVSxhQURWam5DLGVBQUFBLE1BQUFBO0lBRUosMEJBSHFCc0csTUFFakIyZ0M7SUFDSjtHQUE4QjtHQ3dJOUI7R0QzSUU0TDtHQytJcUIsZSxVO0c7d0IscUI7O0k7SSxPO0c7RzsyQixPLGM7O0k7SSxPO0c7O0k7STs7OztJLE87Rzt5QixPLHNCLGM7MEIsaUM7bUMsTyx5Qjs4QjtHO0csSSxlO3VCLDRCOzRCLGlDOztJO0k7Rzt5QixzQjs7SSw0QjtHOztJLFk7O0ksTzs7Rzs7SSxZOztJO0k7O0c7d0IsTSxPO3lCLGMsTzs7SSxZOztJOzt3QixZO3dCLFk7MkIsVSxPOztJLFk7O0k7OzhCO3dCLDhCO3dCLHFCOztJO0ksNkIsTyx1QjtHOzs7OztvQjs7TSxVOzs7Ozs7STtHOztJO0ksVzs7STtJO0c7O0k7SSxPLHlCLFU7RztHOzs7SyxPOzZCLE8sTyxlLE8sTztJO0ksbUI7Rzt1QixPLG1COzBCLE8scUMsTzt5QixPLE8sc0M7O0ksTzthO2E7Rzs7SSxPO0c7WUNuR25CQyxjO3VCO21CLGdCO3lCLGtCOztJO0ssTTtJO0ksdUIsK0M7STtJLHFDLDhCO0k7b0IsdUQ7STtHOzBCLGdDO3dCLHVCOztJOzs7MkIsaUIsbUI7Rzs7SSw2QixnQixtQjtHO2tCLHdCO3FCLHdCOztxQixtQixvQjtJLG9CLG1CLHVCO0k7Rzs7SSxxQztHOztJLHNCOztjLGU7O2MsTzthO0c7O0ksNEIsT3ZCM0NGbndCO0c7RztzQixxQjswQyw4QjtHOytCLG9CLFM7O0k7SSxVOztLO0s7STtJO0k7RzsrQixPLHdCO0c7STtJO0k7STtJO0k7STtJO0k7RztHO0c7RztHO3NCLE8sa0I7O0ksSSxROzs7OztLOztJO0c7RztHO0c7STtJO0k7O0ksVzs7STtHO0c7b0Isc0I7OzJCLE8sb0I7STtLO007TTtNO0s7Ozs7OztLOztHOzsyQixzQixxQjtJO0ssSSxrQjtLO0s7Szs7Ozs7O0s7O0c7Rzt1QixPLGE7c0Isa0I7O0k7STtJO0c7eUIsTyxhO3NCLGlCO0c7d0IsdUI7c0IsdUI7d0IsaUM7MEI7RztJO0k7STtJO0k7STtJO0k7STtJO0k7STtJO0k7dUIsdUI7cUIscUI7b0Isb0I7RyxJLCtCO3FCLG1CO3VCLHFCO3NCLG9CO3VCLHVCO3VCLHVCO0c7d0IsMEI7RywrQjt1QixrQixTOzs7Ozs7Tyw2QkxtQ0FXO087O007OztLOzs7TTs7Ozs7NEI7OztVOzs7O0k7STtJLFE7STtJLHNCO0k7Rzs7STtJLE87Rzs7STtJO0c7O0ksa0I7MEIsd0I7STtJO0c7MkIsZ0M7O0ksMEM7Rzt1QixvQixPLHVCOztJLFksK0I7Rzs7STtJLEksUSx1QjtJO0c7d0Isc0I7O0k7STtJO0k7RztHO0k7STtJO0k7STtJO0k7STtJO0k7STtvQyw0QjtHLG1DO0csaUM7RyxnQztHLGtDO29CLDhCOztJO0k7Ozs7O0c7O0ksZ0M7RztrQyxrQyxPO0c7O0k7OztvQjs7TTtNOzs7OztJLE87RztxQixnRDt5QixnRDtzQixnRDt5QixTO3NCLE8sUTtHO0c7STtJO0k7Rzs7SSxPLGtCO0c7NEIsMEIsTzs7SSw2QjtJO0c7RztHOzBCOztJLG1DLGU7RztHOztJO0ksUztJOztLO0s7O0ksc0I7STtHOzs7Ozs7Ozs7Ozs7Ozs7STtJLG9EO0k7STtJLHFCSXBDQWQsbUI7STtJO0k7STtJO0k7STtJLG9EO0k7RztHOztJO0k7RztHO0c7O3dCO0ksc0Isa0M7RztHO0c7RztHO0c7b0IsaUI7RztxQix5Qjs7d0I7SSxzQiwrQjtHOztJLEksaUI7OzswQjs7O0c7RztHOztJO0k7Rzs7STtJO0k7RztHOztJO0k7STtHO0c7RztHO1l5QmhCQXVGLE9B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K0RGdnRELFVBQUFndEQ7Ozs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7OzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzs7Ozs7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7Ozs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0MvREVPLGFoQytERnZ0RCxVQUFBZ3REOzsyQmdDL0RFTyxhaEMrREZ2dEQsVUFBQWd0RDs7MkJnQy9ERU8sYWhDK0RGdnRELFVBQUFndEQ7OzJCZ0Mv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O01wRDVFSmptQztRQTBOQXFDLE1pRHBTQTg5Qjt3Qkd1SitDLGdEQUV4QjtJQUVuQitGO01wRGpGSmxtQztRQTBOQXFDLE12Q3pSQWlnQztpQjJGaUorQ29CO1NBQ3pDLEdBRHlDQTtVQUtwQjttQkFMb0JBO1dBSVA1QztXQUFWZ0M7V0FBSjNpRTtXQUNWNmlFLFczQ3BEaEI1c0IsUTJDbUQ4QjBzQixVQUFKM2lFO1dBRVZpaEUsVWpEdWNoQnJ4QixVSDNUQXpOLEt4Q3pTQW8rQjtXNEY4SmdCRyxpQkFId0JDLFdBRXhCTTtrQkFDQVA7V0FOTngvRCxNQVNFLFdqRXBLWjZ1QixxQmlFK0pnQjh5Qzs7Y0FKTjNoRTtTQVlLO2tCQUFBLHdCQUFRLFdqRXZLdkI2dUIsZWlFMkpVN3VCO1FBWThEO0lBRXBFK3hDLG1CQXJCQTZ5QjtJQUZGRTtNaERrTEZweUI7O1lnRDNKSVg7O29CaEQySkpXLHlCZ0QzS0lteUI7Ozs7O1FoRDJLSm55Qjs7OztzQmdEN0xFZ3dCO21CQXJGQXFCO0lBNEhGOztlQWpJRS95Qzs7OztTaER1UkYwaEI7Ozs7O29CZ0RsTEVveUI7d0JBdEVBckosc0JBd0RBa0o7O0lBdEdGSTtNaERzU0FyeUI7OzJCLE8wQm5TQTZTLHNCQUlBRTs7O0lzQm9KQXVmLHdCckR6SU05bUMsUUFHRkM7WXFEMElGOG1DO0lBQ0Ysa0JBTEFEO0lBTVUsSUFBTkUsUXBEMGFKNWhDLGFvRDNrQkF5aEM7SUFrS0EsU0FBSXhoQztLQUNGLHdDcEQ4ZUZXLGFvRGhmSWdoQyxRQUdvQixTQUFvQjtLQURoQztJQUNnQztJQUVFLGVwRDJlOUNoaEMsYW9EaGZJZ2hDO0lBS0o7SUFBQSxPcERpZUFwaEMsa0JvRHRlSW9oQyxPQUNBM2hDO0dBS21DO0dBRXpDLDhCQVZJMGhDO0d4RmtYRm42RDs7RSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gQXJyYXlcblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zdWIgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9zdWIgKGEsIGksIGxlbikge1xuICB2YXIgYTIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBhMlswXT0wO1xuICBmb3IodmFyIGkyID0gMSwgaTE9IGkrMTsgaTIgPD0gbGVuOyBpMisrLGkxKysgKXtcbiAgICBhMltpMl09YVtpMV07XG4gIH1cbiAgcmV0dXJuIGEyO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2FwcGVuZCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2FwcGVuZChhMSwgYTIpIHtcbiAgdmFyIGwxID0gYTEubGVuZ3RoLCBsMiA9IGEyLmxlbmd0aDtcbiAgdmFyIGwgPSBsMStsMi0xXG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gMDtcbiAgdmFyIGkgPSAxLGogPSAxO1xuICBmb3IoO2k8bDE7aSsrKSBhW2ldPWExW2ldO1xuICBmb3IoO2k8bDtpKyssaisrKSBhW2ldPWEyW2pdO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9jb25jYXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9hcnJheV9jb25jYXQobCkge1xuICB2YXIgYSA9IFswXTtcbiAgd2hpbGUgKGwgIT09IDApIHtcbiAgICB2YXIgYiA9IGxbMV07XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSBhLnB1c2goYltpXSk7XG4gICAgbCA9IGxbMl07XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYmxpdFxuZnVuY3Rpb24gY2FtbF9hcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRhcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfYmxpdChhMSwgaTEsIGEyLCBpMiwgbGVuKSB7XG4gIGlmIChpMiA8PSBpMSkge1xuICAgIGZvciAodmFyIGogPSAxOyBqIDw9IGxlbjsgaisrKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBqID0gbGVuOyBqID49IDE7IGotLSkgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH07XG4gIHJldHVybiAwO1xufVxuXG4vLy8vLy8vLy8vLy8vIFBlcnZhc2l2ZVxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9zZXQgKG11dGFibGUsIGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2FycmF5X2dldCAoYXJyYXksIGluZGV4KSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5W2luZGV4KzFdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfZmlsbChhcnJheSwgb2ZzLCBsZW4sIHYpe1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIGFycmF5W29mcytpKzFdID0gdjtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jaGVja19ib3VuZCAobXV0YWJsZSwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2NoZWNrX2JvdW5kIChhcnJheSwgaW5kZXgpIHtcbiAgaWYgKGluZGV4ID4+PiAwID49IGFycmF5Lmxlbmd0aCAtIDEpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfdmVjdCBjb25zdCAoY29uc3QsIG11dGFibGUpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICB2YXIgYSA9IG5ldyBVaW50OEFycmF5KHMubCk7XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IFVpbnQ4QXJyYXkobCk7XG4gIHZhciBpID0gMDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIGFbaV0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSk7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9jcmVhdGVfc3RyaW5nKGxlbikge1xuICBpZihsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHJpbmcuY3JlYXRlXCIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMobGVuPzI6OSxcIlwiLGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pIHtcbiAgaWYgKGxlbiA8IDApIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJ5dGVzLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9hcnJheSAoYSkge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoYSwwLGEubGVuZ3RoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGEpIHtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgYSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICB9XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vQWxpYXM6IGNhbWxfZmlsbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ibGl0X2J5dGVzKHMxLCBpMSwgczIsIGkyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgaWYgKChpMiA9PSAwKSAmJlxuICAgICAgKGxlbiA+PSBzMi5sIHx8IChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBsZW4gPj0gczIuYy5sZW5ndGgpKSkge1xuICAgIHMyLmMgPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIGlmIChzMi50ID09IDIgLyogUEFSVElBTCAqLyAmJiBpMiA9PSBzMi5jLmxlbmd0aCkge1xuICAgIHMyLmMgKz0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSB7XG4gICAgaWYgKHMyLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMyKTtcbiAgICB2YXIgYzEgPSBzMS5jLCBjMiA9IHMyLmM7XG4gICAgaWYgKHMxLnQgPT0gNCAvKiBBUlJBWSAqLykge1xuICAgICAgaWYgKGkyIDw9IGkxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIGMyIFtpMiArIGldID0gYzEgW2kxICsgaV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBsID0gTWF0aC5taW4gKGxlbiwgYzEubGVuZ3RoIC0gaTEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIGMyIFtpMiArIGldID0gYzEuY2hhckNvZGVBdChpMSArIGkpO1xuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSAwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ibGl0X3N0cmluZyhhLGIsYyxkLGUpIHtcbiAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGEpLGIsYyxkLGUpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9ieXRlc19sZW5ndGgocykgeyByZXR1cm4gcy5sIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2NvbmNhdChhLGIpIHsgcmV0dXJuIGEgKyBiIH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29uY2F0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBNbEJ5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb25jYXQoczEsczIpe1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXMoczEudCxzMS5jK3MyLmMsczEubCtzMi5sKVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gcy5jaGFyQ29kZUF0KGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gcy5sZW5ndGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPy0xOihzMSA+IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8PSBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhbiBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMuYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNhbWxfanNieXRlc19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSB7XG4gIGlmKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIHM7XG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICBpZiAoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKVxuICBlbHNlIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfdXRmOF9vZl91dGYxNihzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIG5ldyBNbEJ5dGVzKDAscyxzLmxlbmd0aCk7IH1cblxuXG4vLyBUaGUgc2VjdGlvbiBiZWxvdyBzaG91bGQgYmUgdXNlZCB3aGVuIHVzZS1qcy1zdHJpbmc9ZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocyxpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocyxpLGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19jb21wYXJlXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19jb21wYXJlKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB7IHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gcy5jIH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKXtcbiAgcmV0dXJuIHMudG9VdGYxNigpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyhzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9pc19tbF9ieXRlcyhzKSB7XG4gIHJldHVybiAocyBpbnN0YW5jZW9mIE1sQnl0ZXMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfY29udGVudChzKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmM7XG4gIGNhc2UgNDpcbiAgICByZXR1cm4gcy5jXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3QocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9pc19tbF9ieXRlcyhzKTtcbn1cblxuLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZGVwcmVjYXRlZFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbmV3X3N0cmluZyAocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19mcm9tX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3RvX2pzX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdG9fc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHgpIHsgcmV0dXJuIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nKHgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9ieXRlcyh4KSB7IHJldHVybiBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHgpIH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N5c19leGl0IChjb2RlKSB7XG4gIGlmKGdsb2JhbFRoaXMucXVpdCkgZ2xvYmFsVGhpcy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQpXG4gICAgZ2xvYmFsVGhpcy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb24sIGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgY2FtbF9jYWxsYmFjayhoYW5kbGVyLCBbZXJyLGZhbHNlXSk7XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbXNnID0gY2FtbF9mb3JtYXRfZXhjZXB0aW9uKGVycik7XG4gICAgICB2YXIgYXRfZXhpdCA9IGNhbWxfbmFtZWRfdmFsdWUoXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIik7XG4gICAgICBpZihhdF9leGl0KSBjYW1sX2NhbGxiYWNrKGF0X2V4aXQsIFswXSk7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiBcIiArIG1zZyk7XG4gICAgICBpZihlcnIuanNfZXJyb3IpIHRocm93IGVyci5qc19lcnJvcjtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZXRfc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLHYpe1xuICBpZighZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYpXG4gICAgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnYgPSB7fVxuICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX3N5c19nZXRlbnYgKGNvbnN0KVxuZnVuY3Rpb24ganNvb19zeXNfZ2V0ZW52KG4pIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIC8vbm9kZWpzIGVudlxuICBpZihwcm9jZXNzXG4gICAgICYmIHByb2Nlc3MuZW52XG4gICAgICYmIHByb2Nlc3MuZW52W25dICE9IHVuZGVmaW5lZClcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnZbbl07XG4gIGlmKGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52XG4gICAgICYmIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dKVxuICAgIHJldHVybiBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudltuXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpIHtcbiAgdmFyIHIgPSBqc29vX3N5c19nZXRlbnYoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSkpO1xuICBpZihyID09PSB1bmRlZmluZWQpXG4gICAgY2FtbF9yYWlzZV9ub3RfZm91bmQgKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSl7XG4gIHJldHVybiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKChmdW5jdGlvbiAoKSB7XG4gIHZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xuICB2YXIgbWFpbiA9IFwiYS5vdXRcIjtcbiAgdmFyIGFyZ3MgPSBbXVxuXG4gIGlmKHByb2Nlc3NcbiAgICAgJiYgcHJvY2Vzcy5hcmd2XG4gICAgICYmIHByb2Nlc3MuYXJndi5sZW5ndGggPiAxKSB7XG4gICAgdmFyIGFyZ3YgPSBwcm9jZXNzLmFyZ3ZcbiAgICAvL25vZGVqc1xuICAgIG1haW4gPSBhcmd2WzFdO1xuICAgIGFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICB9XG5cbiAgdmFyIHAgPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhtYWluKTtcbiAgdmFyIGFyZ3MyID0gWzAsIHBdO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKylcbiAgICBhcmdzMi5wdXNoKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGFyZ3NbaV0pKTtcbiAgcmV0dXJuIGFyZ3MyO1xufSkoKSlcblxuLy9Qcm92aWRlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxudmFyIGNhbWxfZXhlY3V0YWJsZV9uYW1lID0gY2FtbF9hcmd2WzFdXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2dldF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldF9hcmd2IChhKSB7XG4gIHJldHVybiBbMCwgY2FtbF9hcmd2WzFdLCBjYW1sX2FyZ3ZdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX2FyZ3YgKGEpIHtcbiAgcmV0dXJuIGNhbWxfYXJndjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbW9kaWZ5X2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfYXJndlxuZnVuY3Rpb24gY2FtbF9zeXNfbW9kaWZ5X2FyZ3YoYXJnKXtcbiAgY2FtbF9hcmd2ID0gYXJnO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2V4ZWN1dGFibGVfbmFtZVxuZnVuY3Rpb24gY2FtbF9zeXNfZXhlY3V0YWJsZV9uYW1lKGEpe1xuICByZXR1cm4gY2FtbF9leGVjdXRhYmxlX25hbWVcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZChjbWQpe1xuICB2YXIgY21kID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoY21kKTtcbiAgaWYgKHR5cGVvZiByZXF1aXJlICE9IFwidW5kZWZpbmVkXCIpe1xuICAgIHZhciBjaGlsZF9wcm9jZXNzID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuICAgIGlmKGNoaWxkX3Byb2Nlc3MgJiYgY2hpbGRfcHJvY2Vzcy5leGVjU3luYylcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkX3Byb2Nlc3MuZXhlY1N5bmMoY21kLHtzdGRpbzogJ2luaGVyaXQnfSk7XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gIH1cbiAgZWxzZSByZXR1cm4gMTI3O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19zeXN0ZW1fY29tbWFuZFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kKGNtZCl7XG4gIHJldHVybiAxMjc7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3RpbWUgbXV0YWJsZVxudmFyIGNhbWxfaW5pdGlhbF90aW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAqIDAuMDAxO1xuZnVuY3Rpb24gY2FtbF9zeXNfdGltZSAoKSB7XG4gIHZhciBub3cgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICByZXR1cm4gbm93ICogMC4wMDEgLSBjYW1sX2luaXRpYWxfdGltZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuXG4vL1JlcXVpcmVzOiBjYW1sX3N5c190aW1lXG5mdW5jdGlvbiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW4oYikge1xuICByZXR1cm4gY2FtbF9zeXNfdGltZSgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yYW5kb21fc2VlZCBtdXRhYmxlXG4vL1RoZSBmdW5jdGlvbiBuZWVkcyB0byByZXR1cm4gYW4gYXJyYXkgc2luY2UgT0NhbWwgNC4wLi4uXG5mdW5jdGlvbiBjYW1sX3N5c19yYW5kb21fc2VlZCAoKSB7XG4gIGlmIChnbG9iYWxUaGlzLmNyeXB0bykge1xuICAgICBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICAgdmFyIGEgPSBnbG9iYWxUaGlzLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IEludDMyQXJyYXkoNCkpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH0gZWxzZSBpZiAoZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgICB2YXIgYSA9IG5ldyBJbnQzMkFycmF5KGdsb2JhbFRoaXMuY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS5idWZmZXIpO1xuICAgICAgIHJldHVybiBbMCwgYVswXSwgYVsxXSwgYVsyXSwgYVszXV07XG4gICAgIH1cbiAgfVxuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiBvc190eXBlID09IFwiVW5peFwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJXaW4zMlwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIkN5Z3dpblwiID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbnZhciBvc190eXBlID0gKGdsb2JhbFRoaXMucHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSA/IFwiQ3lnd2luXCIgOiBcIlVuaXhcIjtcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG9zX3R5cGUpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xudmFyIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyAoYm9vbCkge1xuICBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSBib29sO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWRcbi8vUmVxdWlyZXM6IGNhbWxfcnVudGltZV93YXJuaW5nc1xuZnVuY3Rpb24gY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQgKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3J1bnRpbWVfd2FybmluZ3M7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfZW5hYmxlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9lbmFibGVkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfY2hhbm5lbF9mb3Jfc3BhY2V0aW1lKF9jaGFubmVsKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJTcGFjZXRpbWUgcHJvZmlsaW5nIG9ubHkgd29ya3MgZm9yIG5hdGl2ZSBjb2RlXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3hkZ19kZWZhdWx0c1xuLy9WZXJzaW9uOiA+PSA1LjJcbmZ1bmN0aW9uIGNhbWxfeGRnX2RlZmF1bHRzKF91bml0KSB7XG4gIHJldHVybiAwOyAvLyBlbXB0eSBsaXN0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX3JlZ3VsYXJfZmlsZShuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5pc0ZpbGUocm9vdC5yZXN0KTtcbn1cbi8vQWx3YXlzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpIHtcbiAgdmFyIHByb2Nlc3MgPSBnbG9iYWxUaGlzLnByb2Nlc3M7XG4gIGlmKHByb2Nlc3MgJiYgcHJvY2Vzcy5vbikge1xuICAgIHByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gKGVyciwgb3JpZ2luKSB7XG4gICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgcHJvY2Vzcy5leGl0ICgyKTtcbiAgICB9KVxuICB9XG4gIGVsc2UgaWYoZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKXtcbiAgICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgaWYoZXZlbnQuZXJyb3Ipe1xuICAgICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihldmVudC5lcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbmNhbWxfc2V0dXBfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIoKTtcblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG4vL1JlcXVpcmVzOiBqc29vX3N5c19nZXRlbnZcbnZhciBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9IEZMQUcoXCJ3aXRoLWpzLWVycm9yXCIpO1xuXG4oZnVuY3Rpb24gKCkge1xuICB2YXIgciA9IGpzb29fc3lzX2dldGVudihcIk9DQU1MUlVOUEFSQU1cIilcbiAgaWYociAhPT0gdW5kZWZpbmVkKXtcbiAgICB2YXIgbCA9IHIuc3BsaXQoXCIsXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBsLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKGxbaV0gPT0gXCJiXCIpIHsgY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWcgPSAxOyBicmVhayB9XG4gICAgICBlbHNlIGlmIChsW2ldLnN0YXJ0c1dpdGgoXCJiPVwiKSkge1xuICAgICAgICBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZyA9ICsobFtpXS5zbGljZSgyKSl9XG4gICAgICBlbHNlIGNvbnRpbnVlO1xuICAgIH1cbiAgfVxufSkgKClcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYmFja3RyYWNlX3N0YXR1c1xuLy9SZXF1aXJlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlX2ZsYWdcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoX3VuaXQpIHsgcmV0dXJuIGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlICgpIHsgcmV0dXJuIFswXTsgfVxuLy9Qcm92aWRlczogY2FtbF9yZWNvcmRfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZ1xuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlIChiKSB7IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnID0gYjsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsX2dlbiAoY29uc3QsIHNoYWxsb3cpXG4vL0lmOiAhZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHZhciBnID0gZi5hcHBseShudWxsLGFyZ3Muc2xpY2UoMCxuKSk7XG4gICAgaWYodHlwZW9mIGcgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGc7XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZyxhcmdzLnNsaWNlKG4pKTtcbiAgfVxuICBlbHNlIHtcbiAgICBzd2l0Y2ggKGQpIHtcbiAgICBjYXNlIDE6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDEpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIDI6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKHgsIHkpe1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIDIpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBuYXJnc1thcmdzTGVuXSA9IHg7XG4gICAgICAgIG5hcmdzW2FyZ3NMZW4gKyAxXSA9IHk7XG4gICAgICAgIHJldHVybiBmLmFwcGx5KG51bGwsIG5hcmdzKVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB2YXIgZyA9IGZ1bmN0aW9uICgpe1xuICAgICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKyApIG5hcmdzW2ldID0gYXJnc1tpXTtcbiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIG5hcmdzW2FyZ3MubGVuZ3RoK2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICAgIH07XG4gICAgfX1cbiAgICBnLmwgPSBkO1xuICAgIHJldHVybiBnO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9JZjogZWZmZWN0c1xuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgdmFyIG4gPSAoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpO1xuICB2YXIgYXJnc0xlbiA9IGFyZ3MubGVuZ3RoO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuO1xuICBpZiAoZCA9PSAwKSB7XG4gICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0gZWxzZSBpZiAoZCA8IDApIHtcbiAgICB2YXIgcmVzdCA9IGFyZ3Muc2xpY2UobiAtIDEpO1xuICAgIHZhciBrID0gYXJncyBbYXJnc0xlbiAtIDFdO1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIG4pO1xuICAgIGFyZ3NbbiAtIDFdID0gZnVuY3Rpb24gKGcpIHtcbiAgICAgIGlmICh0eXBlb2YgZyAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gayhnKTtcbiAgICAgIHZhciBhcmdzID0gcmVzdC5zbGljZSgpO1xuICAgICAgYXJnc1thcmdzLmxlbmd0aCAtIDFdID0gaztcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGcsIGFyZ3MpOyB9O1xuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NMZW4tLTtcbiAgICB2YXIgayA9IGFyZ3MgW2FyZ3NMZW5dO1xuICAgIHN3aXRjaCAoZCkge1xuICAgIGNhc2UgMToge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSl7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMik7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgMjoge1xuICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoeCwgeSwgeil7XG4gICAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzTGVuICsgMyk7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzTGVuOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIG5hcmdzW2FyZ3NMZW5dID0geDtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDFdID0geTtcbiAgICAgICAgbmFyZ3NbYXJnc0xlbiArIDJdID0gejtcbiAgICAgICAgcmV0dXJuIGYuYXBwbHkobnVsbCwgbmFyZ3MpXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhciBnID0gZnVuY3Rpb24gKCl7XG4gICAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgbmFyZ3MgPSBuZXcgQXJyYXkoYXJnc0xlbiArIGV4dHJhX2FyZ3MpO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJnc0xlbjsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrIClcbiAgICAgICAgICBuYXJnc1thcmdzTGVuICsgaV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIG5hcmdzKVxuICAgICAgfTtcbiAgICB9fVxuICAgIGcubCA9IGQgKyAxO1xuICAgIHJldHVybiBrKGcpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsbXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnVpbGRfc3ltYm9sc1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnVpbGRfc3ltYm9scyhzeW1iKSB7XG4gIHZhciByID0ge307XG4gIGlmKHN5bWIpIHtcbiAgICBmb3IodmFyIGkgPSAxOyBpIDwgc3ltYi5sZW5ndGg7IGkrKyl7XG4gICAgICByW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHN5bWJbaV1bMV0pXSA9IHN5bWJbaV1bMl1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX2NhbGxiYWNrLCBjYW1sX2J1aWxkX3N5bWJvbHNcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChuLCB2LCBuYW1lX29wdCkge1xuICBpZiAobmFtZV9vcHQpIHtcbiAgICB2YXIgbmFtZSA9IG5hbWVfb3B0O1xuICAgIGlmKGdsb2JhbFRoaXMudG9wbGV2ZWxSZWxvYykge1xuICAgICAgbiA9IGNhbWxfY2FsbGJhY2soZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jLCBbbmFtZV0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpIHtcbiAgICAgIGlmKCFjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCkge1xuICAgICAgICBjYW1sX2dsb2JhbF9kYXRhLnN5bWlkeCA9IGNhbWxfYnVpbGRfc3ltYm9scyhjYW1sX2dsb2JhbF9kYXRhLnN5bWJvbHMpXG4gICAgICB9XG4gICAgICB2YXIgbmlkID0gY2FtbF9nbG9iYWxfZGF0YS5zeW1pZHhbbmFtZV1cbiAgICAgIGlmKG5pZCA+PSAwKVxuICAgICAgICBuID0gbmlkXG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfcmVnaXN0ZXJfZ2xvYmFsOiBjYW5ub3QgbG9jYXRlIFwiICsgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNhbWxfZ2xvYmFsX2RhdGFbbiArIDFdID0gdjtcbiAgaWYobmFtZV9vcHQpIGNhbWxfZ2xvYmFsX2RhdGFbbmFtZV9vcHRdID0gdjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfZ2xvYmFsX2RhdGEgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9nZXRfZ2xvYmFsX2RhdGEgKCkgeyByZXR1cm4gY2FtbF9nbG9iYWxfZGF0YTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX3ByaW50YWJsZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2lzX3ByaW50YWJsZShjKSB7IHJldHVybiArKGMgPiAzMSAmJiBjIDwgMTI3KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21heWJlX3ByaW50X3N0YXRzXG5mdW5jdGlvbiBjYW1sX21heWJlX3ByaW50X3N0YXRzKHVuaXQpIHsgcmV0dXJuIDAgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgbGlicmFyeVxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEpzbGliXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfcHVyZV9leHByIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3B1cmVfZXhwciAoZikgeyByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBbMF0pOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfc2V0IChtdXRhYmxlLCBjb25zdCwgbXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfanNfc2V0KG8sZix2KSB7IG9bZl09djtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0IChtdXRhYmxlLCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0KG8sZikgeyByZXR1cm4gb1tmXTsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19kZWxldGUgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19kZWxldGUobyxmKSB7IGRlbGV0ZSBvW2ZdOyByZXR1cm4gMH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19pbnN0YW5jZW9mIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2luc3RhbmNlb2YobyxjKSB7IHJldHVybiAobyBpbnN0YW5jZW9mIGMpID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc190eXBlb2YgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc190eXBlb2YobykgeyByZXR1cm4gdHlwZW9mIG87IH1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZShyZXMpIHtcbiAgdmFyIGMgPSAxO1xuICB3aGlsZShyZXMgJiYgcmVzLmpvb190cmFtcCl7XG4gICAgcmVzID0gcmVzLmpvb190cmFtcC5hcHBseShudWxsLCByZXMuam9vX2FyZ3MpO1xuICAgIGMrKztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZixhcmdzKSB7XG4gIHJldHVybiB7am9vX3RyYW1wOmYsam9vX2FyZ3M6YXJnc307XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF9zdGFja19kZXB0aFxuLy9JZjogZWZmZWN0c1xudmFyIGNhbWxfc3RhY2tfZGVwdGggPSAwO1xuXG4vL1Byb3ZpZGVzOmNhbWxfc3RhY2tfY2hlY2tfZGVwdGhcbi8vSWY6IGVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9zdGFja19kZXB0aFxuZnVuY3Rpb24gY2FtbF9zdGFja19jaGVja19kZXB0aCgpIHtcbiAgICByZXR1cm4gLS1jYW1sX3N0YWNrX2RlcHRoID4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jYWxsYmFja1xuLy9JZjogIWVmZmVjdHNcbi8vUmVxdWlyZXM6Y2FtbF9jYWxsX2dlblxudmFyIGNhbWxfY2FsbGJhY2sgPSBjYW1sX2NhbGxfZ2VuO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxiYWNrXG4vL0lmOiBlZmZlY3RzXG4vL1JlcXVpcmVzOmNhbWxfc3RhY2tfZGVwdGgsIGNhbWxfY2FsbF9nZW4sIGNhbWxfZXhuX3N0YWNrLCBjYW1sX2ZpYmVyX3N0YWNrLCBjYW1sX3dyYXBfZXhjZXB0aW9uLCBjYW1sX3Jlc3VtZV9zdGFjaywgY2FtbF9mcmVzaF9vb19pZCwgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF9jYWxsYmFjayhmLGFyZ3MpIHtcbiAgZnVuY3Rpb24gdW5jYXVnaHRfZWZmZWN0X2hhbmRsZXIoZWZmLGssbXMpIHtcbiAgICAvLyBSZXN1bWVzIHRoZSBjb250aW51YXRpb24gayBieSByYWlzaW5nIGV4Y2VwdGlvbiBVbmhhbmRsZWQuXG4gICAgY2FtbF9yZXN1bWVfc3RhY2soa1sxXSxtcyk7XG4gICAgdmFyIGV4biA9IGNhbWxfbmFtZWRfdmFsdWUoXCJFZmZlY3QuVW5oYW5kbGVkXCIpO1xuICAgIGlmKGV4bikgY2FtbF9yYWlzZV93aXRoX2FyZyhleG4sIGVmZik7XG4gICAgZWxzZSB7XG4gICAgICBleG4gPSBbMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJFZmZlY3QuVW5oYW5kbGVkXCIpLCBjYW1sX2ZyZXNoX29vX2lkKDApXTtcbiAgICAgIGNhbWxfcmFpc2VfY29uc3RhbnQoZXhuKTtcbiAgICB9XG4gIH1cbiAgdmFyIHNhdmVkX3N0YWNrX2RlcHRoID0gY2FtbF9zdGFja19kZXB0aDtcbiAgdmFyIHNhdmVkX2V4bl9zdGFjayA9IGNhbWxfZXhuX3N0YWNrO1xuICB2YXIgc2F2ZWRfZmliZXJfc3RhY2sgPSBjYW1sX2ZpYmVyX3N0YWNrO1xuICB0cnkge1xuICAgIGNhbWxfZXhuX3N0YWNrID0gMDtcbiAgICBjYW1sX2ZpYmVyX3N0YWNrID1cbiAgICAgIHtoOlswLCAwLCAwLCB1bmNhdWdodF9lZmZlY3RfaGFuZGxlcl0sIHI6e2s6MCwgeDowLCBlOjB9fTtcbiAgICB2YXIgcmVzID0ge2pvb190cmFtcDogZixcbiAgICAgICAgICAgICAgIGpvb19hcmdzOiBhcmdzLmNvbmNhdChmdW5jdGlvbiAoeCl7cmV0dXJuIHg7fSl9O1xuICAgIGRvIHtcbiAgICAgIGNhbWxfc3RhY2tfZGVwdGggPSA0MDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGNhbWxfY2FsbF9nZW4ocmVzLmpvb190cmFtcCwgcmVzLmpvb19hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLyogSGFuZGxlIGV4Y2VwdGlvbiBjb21pbmcgZnJvbSBKYXZhU2NyaXB0IG9yIGZyb20gdGhlIHJ1bnRpbWUuICovXG4gICAgICAgIGlmICghY2FtbF9leG5fc3RhY2spIHRocm93IGU7XG4gICAgICAgIHZhciBoYW5kbGVyID0gY2FtbF9leG5fc3RhY2tbMV07XG4gICAgICAgIGNhbWxfZXhuX3N0YWNrID0gY2FtbF9leG5fc3RhY2tbMl07XG4gICAgICAgIHJlcyA9IHtqb29fdHJhbXA6IGhhbmRsZXIsXG4gICAgICAgICAgICAgICBqb29fYXJnczogW2NhbWxfd3JhcF9leGNlcHRpb24oZSldfTtcbiAgICAgIH1cbiAgICB9IHdoaWxlKHJlcyAmJiByZXMuam9vX2FyZ3MpXG4gIH0gZmluYWxseSB7XG4gICAgY2FtbF9zdGFja19kZXB0aCA9IHNhdmVkX3N0YWNrX2RlcHRoO1xuICAgIGNhbWxfZXhuX3N0YWNrID0gc2F2ZWRfZXhuX3N0YWNrO1xuICAgIGNhbWxfZmliZXJfc3RhY2sgPSBzYXZlZF9maWJlcl9zdGFjaztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2pzXG5mdW5jdGlvbiBjYW1sX2lzX2pzKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX3VzZV9qc19zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc191c2VfanNfc3RyaW5nKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcInVzZS1qcy1zdHJpbmdcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc29vX2ZsYWdzX2VmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNvb19mbGFnc19lZmZlY3RzKHVuaXQpe1xuICByZXR1cm4gRkxBRyhcImVmZmVjdHNcIilcbn1cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAobXV0YWJsZSlcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcsY2FtbF9uYW1lZF92YWx1ZVxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmIChGTEFHKFwiZXhjd3JhcFwiKSkge1xuICAgIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gICAgdmFyIGV4bjtcbiAgICAvL1N0YWNrX292ZXJmbG93OiBjaHJvbWUsIHNhZmFyaVxuICAgIGlmKGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAgICYmIGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLlJhbmdlRXJyb3JcbiAgICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL21heGltdW0gY2FsbCBzdGFjay9pKSlcbiAgICAgIGV4biA9IGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3c7XG4gICAgLy9TdGFja19vdmVyZmxvdzogZmlyZWZveFxuICAgIGVsc2UgaWYoZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICAgJiYgZSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAgICYmIGUubWVzc2FnZVxuICAgICAgICYmIGUubWVzc2FnZS5tYXRjaCgvdG9vIG11Y2ggcmVjdXJzaW9uL2kpKVxuICAgICAgZXhuID0gY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdztcbiAgICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gICAgZWxzZSBpZihlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvciAmJiBjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSlcbiAgICAgIGV4biA9IFswLGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLGVdO1xuICAgIGVsc2VcbiAgICAgIC8vZmFsbGJhY2s6IHdyYXBwZWQgaW4gRmFpbHVyZVxuICAgICAgZXhuID0gWzAsY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChTdHJpbmcoZSkpXTtcbiAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXJyb3IgYXQgaGFuZCwgbGV0J3MgdXNlIGl0LlxuICAgIGlmIChlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5FcnJvcilcbiAgICAgIGV4bi5qc19lcnJvciA9IGU7XG4gICAgcmV0dXJuIGV4bjtcbiAgfSBlbHNlXG4gICAgcmV0dXJuIGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZVxuLy9SZXF1aXJlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZV9mbGFnXG5mdW5jdGlvbiBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoZXhuLCBmb3JjZSkge1xuICBpZihjYW1sX3JlY29yZF9iYWNrdHJhY2VfZmxhZylcbiAgICByZXR1cm4gY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2UoZXhuLCBmb3JjZSk7XG4gIGVsc2UgcmV0dXJuIGV4blxufVxuXG4vLyBFeHBlcmltZW50YWxcbi8vUHJvdmlkZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIC8vbmV2ZXIgcmVyYWlzZSBmb3IgY29uc3RhbnQgZXhuXG4gIGlmKCFleG4uanNfZXJyb3IgfHwgZm9yY2UgfHwgZXhuWzBdID09IDI0OCkgZXhuLmpzX2Vycm9yID0gbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmKGV4bi5qc19lcnJvcikgeyByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07IH1cbiAgcmV0dXJuIDA7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7IHJldHVybiAhIXg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Jvb2woeCkgeyByZXR1cm4gK3g7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9mbG9hdCBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX2Zyb21faW50MzJcbi8vQWxpYXM6IGNhbWxfanNfZnJvbV9uYXRpdmVpbnRcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19pbnQzMiBjb25zdCAoY29uc3QpXG4vL0FsaWFzOiBjYW1sX2pzX3RvX25hdGl2ZWludFxuZnVuY3Rpb24gY2FtbF9qc190b19pbnQzMih4KSB7IHJldHVybiB4fDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYXJyYXkoYSkge1xuICByZXR1cm4gYS5zbGljZSgxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYXJyYXkoYSkge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYlswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8bGVuO2krKykgYltpKzFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKXtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGk9YS5sZW5ndGggLSAxOyBpPj0wOyBpLS0pe1xuICAgIHZhciBlID0gYVtpXTtcbiAgICBsID0gWzAsZSxsXTtcbiAgfVxuICByZXR1cm4gbFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3RfdG9fanNfYXJyYXkgY29uc3QgKG11dGFibGUpXG5mdW5jdGlvbiBjYW1sX2xpc3RfdG9fanNfYXJyYXkobCl7XG4gIHZhciBhID0gW107XG4gIGZvcig7IGwgIT09IDA7IGwgPSBsWzJdKSB7XG4gICAgYS5wdXNoKGxbMV0pO1xuICB9XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3ZhciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmKCF4Lm1hdGNoKC9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKFxcLlthLXpBLVpfJF1bYS16QS1aXyQwLTldKikqJC8pKXtcbiAgICBjb25zb2xlLmVycm9yKFwiY2FtbF9qc192YXI6IFxcXCJcIiArIHggKyBcIlxcXCIgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCB2YXJpYWJsZS4gY29udGludWluZyAuLlwiKTtcbiAgICAvL2NvbnNvbGUuZXJyb3IoXCJKcy5VbnNhZmUuZXZhbF9zdHJpbmdcIilcbiAgfVxuICByZXR1cm4gZXZhbCh4KTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfY2FsbCAoY29uc3QsIG11dGFibGUsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfanNfY2FsbChmLCBvLCBhcmdzKSB7IHJldHVybiBmLmFwcGx5KG8sIGNhbWxfanNfZnJvbV9hcnJheShhcmdzKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnVuX2NhbGwgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2Z1bl9jYWxsKGYsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDE6IHJldHVybiBmKCk7XG4gIGNhc2UgMjogcmV0dXJuIGYgKGFbMV0pO1xuICBjYXNlIDM6IHJldHVybiBmIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0pO1xuICBjYXNlIDY6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIGYgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdLGFbN10pO1xuICB9XG4gIHJldHVybiBmLmFwcGx5KG51bGwsIGNhbWxfanNfZnJvbV9hcnJheShhKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX21ldGhfY2FsbCAobXV0YWJsZSwgY29uc3QsIHNoYWxsb3cpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX21ldGhfY2FsbChvLCBmLCBhcmdzKSB7XG4gIHJldHVybiBvW2NhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGYpXS5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19uZXcgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX25ldyhjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMjogcmV0dXJuIG5ldyBjIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSk7XG4gIGNhc2UgNTogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSk7XG4gIGNhc2UgODogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfb2pzX25ld19hcnIgKGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX29qc19uZXdfYXJyKGMsIGEpIHtcbiAgc3dpdGNoIChhLmxlbmd0aCkge1xuICBjYXNlIDA6IHJldHVybiBuZXcgYztcbiAgY2FzZSAxOiByZXR1cm4gbmV3IGMgKGFbMF0pO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVswXSxhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICB9XG4gIGZ1bmN0aW9uIEYoKSB7IHJldHVybiBjLmFwcGx5KHRoaXMsIGEpOyB9XG4gIEYucHJvdG90eXBlID0gYy5wcm90b3R5cGU7XG4gIHJldHVybiBuZXcgRjtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFjayBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmKGxlbiA+IDApe1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MgPSBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgdmFyIHJlcyA9IGNhbWxfY2FsbGJhY2soZiwgYXJncyk7XG4gICAgcmV0dXJuIChyZXMgaW5zdGFuY2VvZiBGdW5jdGlvbik/Y2FtbF9qc193cmFwX2NhbGxiYWNrKHJlcyk6cmVzO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHNcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHMoZikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIFthcmdzXSk7XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9jYWxsYmFja19zdHJpY3QoYXJpdHksIGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJpdHkpO1xuICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoLCBhcml0eSlcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsIGFyZ3MpO1xuICB9O1xufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfY2FsbGJhY2tfdW5zYWZlKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gY2FtbF9qc19mdW5jdGlvbl9hcml0eShmKTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2ssIGNhbWxfanNfd3JhcF9jYWxsYmFja1xuZnVuY3Rpb24gY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2soZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB2YXIgcmVzID0gY2FtbF9jYWxsYmFjayhmLGFyZ3MpO1xuICAgIHJldHVybiAocmVzIGluc3RhbmNlb2YgRnVuY3Rpb24pP2NhbWxfanNfd3JhcF9jYWxsYmFjayhyZXMpOnJlcztcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxiYWNrKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbGJhY2tcbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsYmFjayhmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxiYWNrLCBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIC0gMTtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbGJhY2soZiwgYXJncyk7IH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mdW5jdGlvbl9hcml0eVxuLy9JZjogIWVmZmVjdHNcbmZ1bmN0aW9uIGNhbWxfanNfZnVuY3Rpb25fYXJpdHkoZikge1xuICByZXR1cm4gKGYubCA+PSAwKT9mLmw6KGYubCA9IGYubGVuZ3RoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5XG4vL0lmOiBlZmZlY3RzXG5mdW5jdGlvbiBjYW1sX2pzX2Z1bmN0aW9uX2FyaXR5KGYpIHtcbiAgLy8gRnVuY3Rpb25zIGhhdmUgYW4gYWRkaXRpb25hbCBjb250aW51YXRpb24gcGFyYW1ldGVyLiBUaGlzIHNob3VsZFxuICAvLyBub3QgYmUgdmlzaWJsZSB3aGVuIGNhbGxpbmcgdGhlbSBmcm9tIEphdmFTY3JpcHRcbiAgcmV0dXJuICgoZi5sID49IDApP2YubDooZi5sID0gZi5sZW5ndGgpKSAtIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3N0cmljdF9lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zdHJpY3RfZXF1YWxzICh4LCB5KSB7IHJldHVybiArKHggPT09IHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXZhbF9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXZhbF9zdHJpbmcgKHMpIHtyZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V4cHIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJjYW1sX2pzX2V4cHI6IGZhbGxiYWNrIHRvIHJ1bnRpbWUgZXZhbHVhdGlvblxcblwiKTtcbiAgcmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9wdXJlX2pzX2V4cHIgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcHVyZV9qc19leHByIChzKXtcbiAgY29uc29sZS5lcnJvcihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9SYWlzZSBleGNlcHRpb25cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9jb25zdGFudCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2NvbnN0YW50ICh0YWcpIHsgdGhyb3cgdGFnOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGFyZykgeyB0aHJvdyBjYW1sX21heWJlX2F0dGFjaF9iYWNrdHJhY2UoWzAsIHRhZywgYXJnXSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZ3MgKGNvbnN0LCBtdXRhYmxlKVxuLy9SZXF1aXJlczogY2FtbF9tYXliZV9hdHRhY2hfYmFja3RyYWNlXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyAodGFnLCBhcmdzKSB7IHRocm93IGNhbWxfbWF5YmVfYXR0YWNoX2JhY2t0cmFjZShbMCwgdGFnXS5jb25jYXQoYXJncykpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcgKHRhZywgbXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9hcmcgKHRhZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhtc2cpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mYWlsd2l0aCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZhaWx3aXRoIChtc2cpIHtcbiAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSlcbiAgICBjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmU9WzI0OCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiRmFpbHVyZVwiKSwtM107XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBtc2cpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuSW52YWxpZF9hcmd1bWVudCwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5FbmRfb2ZfZmlsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5Ob3RfZm91bmQpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgZmxvYXQzMmFbMF0gPSB4O1xuICB2YXIgaW50MzJhID0gbmV3IEludDMyQXJyYXkoZmxvYXQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGludDMyYVswXSB8IDA7XG59XG5cbi8vRlAgbGl0ZXJhbHMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGhleGFkZWNpbWFsXG4vL25vdGF0aW9uIDB4PG1hbnRpc3NhIGluIGhleD5wPGV4cG9uZW50PiBmcm9tIElTTyBDOTkuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1oZXhmbG9hdC9ibG9iL21hc3Rlci9oZXhmbG9hdC5qc1xuLy9Qcm92aWRlczogY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0ICh4LCBwcmVjLCBzdHlsZSkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nICgoeCA+IDApP1wiaW5maW5pdHlcIjpcIi1pbmZpbml0eVwiKTtcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzE6KHg+PTApPzA6MTtcbiAgaWYoc2lnbikgeCA9IC14O1xuICB2YXIgZXhwID0gMDtcbiAgaWYgKHggPT0gMCkgeyB9XG4gIGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSAgeyB4ICo9IDI7IGV4cC0tIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoeCA+PSAyKSB7IHggLz0gMjsgZXhwKysgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyAnJyA6ICcrJztcbiAgdmFyIHNpZ25fc3RyID0gJyc7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9ICctJ1xuICBlbHNlIHtcbiAgICBzd2l0Y2goc3R5bGUpe1xuICAgIGNhc2UgNDMgLyogJysnICovOiBzaWduX3N0ciA9ICcrJzsgYnJlYWs7XG4gICAgY2FzZSAzMiAvKiAnICcgKi86IHNpZ25fc3RyID0gJyAnOyBicmVhaztcbiAgICBkZWZhdWx0OiBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLHByZWMgKiA0KTtcbiAgICB4ID0gTWF0aC5yb3VuZCh4ICogY3N0KSAvIGNzdDtcbiAgfVxuICB2YXIgeF9zdHIgPSB4LnRvU3RyaW5nKDE2KTtcbiAgaWYocHJlYyA+PSAwKXtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZignLicpO1xuICAgIGlmKGlkeDwwKSB7XG4gICAgICB4X3N0ciArPSAnLicgKyBjYW1sX3N0cl9yZXBlYXQocHJlYywgJzAnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgc2l6ZSA9IGlkeCsxK3ByZWM7XG4gICAgICBpZih4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgJzAnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeF9zdHIgPSB4X3N0ci5zdWJzdHIoMCxzaXplKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzaWduX3N0ciArICcweCcgKyB4X3N0ciArICdwJyArIGV4cF9zaWduICsgZXhwLnRvU3RyaW5nKDEwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIHZhciBleHAgPSAoaGkgJiAweDdmZmYpID4+IDQ7XG4gIGlmIChleHAgPT0gMjA0Nykge1xuICAgIGlmICgobG98bWl8KGhpJjB4ZikpID09IDApXG4gICAgICByZXR1cm4gKGhpICYgMHg4MDAwKT8oLUluZmluaXR5KTpJbmZpbml0eTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwtMjQpO1xuICB2YXIgcmVzID0gKGxvKmsrbWkpKmsrKGhpJjB4Zik7XG4gIGlmIChleHAgPiAwKSB7XG4gICAgcmVzICs9IDE2O1xuICAgIHJlcyAqPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgfSBlbHNlXG4gICAgcmVzICo9IE1hdGgucG93KDIsLTEwMjYpO1xuICBpZiAoaGkgJiAweDgwMDApIHJlcyA9IC0gcmVzO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCAoeCx5KSB7XG4gIGlmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gTmFOO1xuICBpZih4PT15KSByZXR1cm4geTtcbiAgaWYoeD09MCl7XG4gICAgaWYoeSA8IDApXG4gICAgICByZXR1cm4gLU1hdGgucG93KDIsIC0xMDc0KVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBNYXRoLnBvdygyLCAtMTA3NClcbiAgfVxuICB2YXIgYml0cyA9IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh4KTtcbiAgdmFyIG9uZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoMSk7XG4gIGlmICgoeDx5KSA9PSAoeD4wKSlcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9hZGQoYml0cywgb25lKVxuICBlbHNlXG4gICAgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSlcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhiaXRzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF90cnVuY19mbG9hdFxuZnVuY3Rpb24gY2FtbF90cnVuY19mbG9hdCh4KXtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoeCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBpbnQzMmEgPSBuZXcgSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IEZsb2F0MzJBcnJheShpbnQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGZsb2F0MzJhWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NsYXNzaWZ5X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NsYXNzaWZ5X2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9IDApIHJldHVybiAxO1xuICAgIHJldHVybiAyO1xuICB9XG4gIHJldHVybiBpc05hTih4KT80OjM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgdmFyIG5lZyA9ICgxL3gpIDwgMDtcbiAgICB4ID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yICh4KTtcbiAgICB2YXIgZiA9IHggLSBpO1xuICAgIGlmIChuZWcpIHsgaSA9IC1pOyBmID0gLWY7IH1cbiAgICByZXR1cm4gWzAsIGYsIGldO1xuICB9XG4gIGlmIChpc05hTiAoeCkpIHJldHVybiBbMCwgTmFOLCBOYU5dO1xuICByZXR1cm4gWzAsIDEveCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0ICh4LGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7ICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfZnJleHBfZmxvYXQgKHgpIHtcbiAgaWYgKCh4ID09IDApIHx8ICFpc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLSB4O1xuICB2YXIgZXhwID0gTWF0aC5tYXgoLTEwMjMsIGpzb29fZmxvb3JfbG9nMih4KSArIDEpO1xuICB4ICo9IE1hdGgucG93KDIsLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLSB4O1xuICByZXR1cm4gWzAsIHgsIGV4cF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbG9hdF9jb21wYXJlICh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSByZXR1cm4gMDtcbiAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gIGlmICh4ID4geSkgcmV0dXJuIDE7XG4gIGlmICh4ID09PSB4KSByZXR1cm4gMTtcbiAgaWYgKHkgPT09IHkpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29weXNpZ25fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29weXNpZ25fZmxvYXQgKHgsIHkpIHtcbiAgaWYgKHkgPT0gMCkgeSA9IDEgLyB5O1xuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHJldHVybiAoeSA8IDApPygteCk6eDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zaWduYml0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PSAwKSB4ID0gMSAvIHg7XG4gIHJldHVybiAoeCA8IDApPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5leHBtMSh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5wb3coMiwgeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMXBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMXBfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cxcCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cyKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0ICh4LCB5KSB7IHJldHVybiBNYXRoLmh5cG90KHgsIHkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmxvZzEwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFjb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5zaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFzaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC50YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmF0YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0ICh4KSB7XG4gIGlmICh4ID49IDApIHtcbiAgICB2YXIgeSA9IE1hdGguZmxvb3IoeCk7XG4gICAgcmV0dXJuICh4IC0geSA+PSAwLjUpPyh5ICsgMSk6eVxuICB9IGVsc2Uge1xuICAgIHZhciB5ID0gTWF0aC5jZWlsKHgpO1xuICAgIHJldHVybiAoeSAtIHggPj0gMC41KT8oeSAtIDEpOnlcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jYnJ0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NicnRfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguY2JydCh4KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9lcmZfZmxvYXQoeCkge1xuICB2YXIgYTEgPSAwLjI1NDgyOTU5MjtcbiAgdmFyIGEyID0gLTAuMjg0NDk2NzM2O1xuICB2YXIgYTMgPSAxLjQyMTQxMzc0MTtcbiAgdmFyIGE0ID0gLTEuNDUzMTUyMDI3O1xuICB2YXIgYTUgPSAxLjA2MTQwNTQyOTtcbiAgdmFyIHAgPSAwLjMyNzU5MTE7XG5cbiAgdmFyIHNpZ24gPSAxO1xuICBpZiAoeCA8IDApIHtcbiAgICBzaWduID0gLTE7XG4gIH1cbiAgeCA9IE1hdGguYWJzKHgpO1xuICB2YXIgdCA9IDEuMCAvICgxLjAgKyBwICogeCk7XG4gIHZhciB5ID0gMS4wIC0gKCgoKGE1ICogdCArIGE0KSAqIHQgKyBhMykgKiB0ICsgYTIpICogdCArIGExKSAqIHQgKiBNYXRoLmV4cCgteCAqIHgpO1xuXG4gIHJldHVybiBzaWduICogeTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZjX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2VyZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9lcmZjX2Zsb2F0KHgpIHtcbiAgcmV0dXJuIDEgLSBjYW1sX2VyZl9mbG9hdCh4KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZtYV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbWFfZmxvYXQoeCwgeSwgeikge1xuICB2YXIgU1BMSVQgPSBNYXRoLnBvdygyLCAyNykgKyAxO1xuICB2YXIgTUlOX1ZBTFVFID0gTWF0aC5wb3coMiwgLTEwMjIpO1xuICB2YXIgRVBTSUxPTiA9IE1hdGgucG93KDIsIC01Mik7XG4gIHZhciBDID0gNDE2O1xuICB2YXIgQSA9IE1hdGgucG93KDIsICtDKTtcbiAgdmFyIEIgPSBNYXRoLnBvdygyLCAtQyk7XG5cbiAgZnVuY3Rpb24gbXVsdGlwbHkgKGEsIGIpIHtcbiAgICB2YXIgYXQgPSBTUExJVCAqIGE7XG4gICAgdmFyIGFoaSA9IGF0IC0gKGF0IC0gYSk7XG4gICAgdmFyIGFsbyA9IGEgLSBhaGk7XG4gICAgdmFyIGJ0ID0gU1BMSVQgKiBiO1xuICAgIHZhciBiaGkgPSBidCAtIChidCAtIGIpO1xuICAgIHZhciBibG8gPSBiIC0gYmhpO1xuICAgIHZhciBwID0gYSAqIGI7XG4gICAgdmFyIGUgPSAoKGFoaSAqIGJoaSAtIHApICsgYWhpICogYmxvICsgYWxvICogYmhpKSArIGFsbyAqIGJsbztcbiAgICByZXR1cm4ge1xuICAgICAgcDogcCxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkZCAoYSwgYikge1xuICAgIHZhciBzID0gYSArIGI7XG4gICAgdmFyIHYgPSBzIC0gYTtcbiAgICB2YXIgZSA9IChhIC0gKHMgLSB2KSkgKyAoYiAtIHYpO1xuICAgIHJldHVybiB7XG4gICAgICBzOiBzLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRqdXN0ICh4LCB5KSB7XG4gICAgcmV0dXJuIHggIT09IDAgJiYgeSAhPT0gMCAmJiBTUExJVCAqIHggLSAoU1BMSVQgKiB4IC0geCkgPT09IHggPyB4ICogKDEgKyAoeCA8IDAgPyAtMSA6ICsxKSAqICh5IDwgMCA/IC0xIDogKzEpICogRVBTSUxPTikgOiB4O1xuICB9O1xuXG4gIGlmICh4ID09PSAwIHx8IHggIT09IHggfHwgeCA9PT0gKzEgLyAwIHx8IHggPT09IC0xIC8gMCB8fFxuICAgICAgeSA9PT0gMCB8fCB5ICE9PSB5IHx8IHkgPT09ICsxIC8gMCB8fCB5ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKyB6O1xuICB9XG4gIGlmICh6ID09PSAwKSB7XG4gICAgcmV0dXJuIHggKiB5O1xuICB9XG4gIGlmICh6ICE9PSB6IHx8IHogPT09ICsxIC8gMCB8fCB6ID09PSAtMSAvIDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciBzY2FsZSA9IDE7XG4gIHdoaWxlIChNYXRoLmFicyh4KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHggKj0gQjtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB5ICo9IEI7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAxIC8gMCkge1xuICAgIHJldHVybiB4ICogeSAqIHNjYWxlO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh4KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHggKj0gQTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeSkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB5ICo9IEE7XG4gIH1cbiAgaWYgKHNjYWxlID09PSAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgeHMgPSB4O1xuICB2YXIgeXMgPSB5O1xuICB2YXIgenMgPSB6IC8gc2NhbGU7XG5cbiAgaWYgKE1hdGguYWJzKHpzKSA+IE1hdGguYWJzKHhzICogeXMpICogNCAvIEVQU0lMT04pIHtcbiAgICByZXR1cm4gejtcbiAgfVxuICBpZiAoTWF0aC5hYnMoenMpIDwgTWF0aC5hYnMoeHMgKiB5cykgKiBFUFNJTE9OIC8gNCAqIEVQU0lMT04gLyA0KSB7XG4gICAgenMgPSAoeiA8IDAgPyAtMSA6ICsxKSAqIE1JTl9WQUxVRTtcbiAgfVxuXG4gIHZhciB4eSA9IG11bHRpcGx5KHhzLCB5cyk7XG4gIHZhciBzID0gYWRkKHh5LnAsIHpzKTtcbiAgdmFyIHUgPSBhZGQoeHkuZSwgcy5lKTtcbiAgdmFyIGkgPSBhZGQocy5zLCB1LnMpO1xuXG4gIHZhciBmID0gaS5zICsgYWRqdXN0KGkuZSwgdS5lKTtcbiAgaWYgKGYgPT09IDApIHtcbiAgICByZXR1cm4gZjtcbiAgfVxuXG4gIHZhciBmcyA9IGYgKiBzY2FsZTtcbiAgaWYgKE1hdGguYWJzKGZzKSA+IE1JTl9WQUxVRSkge1xuICAgIHJldHVybiBmcztcbiAgfVxuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlcmUgd2FzIGV4dHJhIHJvdW5kaW5nIGZvciBhIGRlbm9ybWFsaXplZCB2YWx1ZS5cbiAgcmV0dXJuIGZzICsgYWRqdXN0KGYgLSBmcyAvIHNjYWxlLCBpLmUpICogc2NhbGU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfZmxvYXQgKGZtdCwgeCkge1xuICBmdW5jdGlvbiB0b0ZpeGVkKHgsZHApIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPCAxLjApIHtcbiAgICAgIHJldHVybiB4LnRvRml4ZWQoZHApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgZSA9IHBhcnNlSW50KHgudG9TdHJpbmcoKS5zcGxpdCgnKycpWzFdKTtcbiAgICAgIGlmIChlID4gMjApIHtcbiAgICAgICAgZSAtPSAyMDtcbiAgICAgICAgeCAvPSBNYXRoLnBvdygxMCxlKTtcbiAgICAgICAgeCArPSAobmV3IEFycmF5KGUrMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgaWYoZHAgPiAwKSB7XG4gICAgICAgICAgeCA9IHggKyAnLicgKyAobmV3IEFycmF5KGRwKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG4gICAgICBlbHNlIHJldHVybiB4LnRvRml4ZWQoZHApXG4gICAgfVxuICB9XG4gIHZhciBzLCBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgdmFyIHByZWMgPSAoZi5wcmVjIDwgMCk/NjpmLnByZWM7XG4gIGlmICh4IDwgMCB8fCAoeCA9PSAwICYmIDEveCA9PSAtSW5maW5pdHkpKSB7IGYuc2lnbiA9IC0xOyB4ID0gLXg7IH1cbiAgaWYgKGlzTmFOKHgpKSB7IHMgPSBcIm5hblwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlIGlmICghaXNGaW5pdGUoeCkpIHsgcyA9IFwiaW5mXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2VcbiAgICBzd2l0Y2ggKGYuY29udikge1xuICAgIGNhc2UgJ2UnOlxuICAgICAgdmFyIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyk7XG4gICAgICAvLyBleHBvbmVudCBzaG91bGQgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0c1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aDtcbiAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZic6XG4gICAgICBzID0gdG9GaXhlZCh4LCBwcmVjKTsgYnJlYWs7XG4gICAgY2FzZSAnZyc6XG4gICAgICBwcmVjID0gcHJlYz9wcmVjOjE7XG4gICAgICBzID0geC50b0V4cG9uZW50aWFsKHByZWMgLSAxKTtcbiAgICAgIHZhciBqID0gcy5pbmRleE9mKCdlJyk7XG4gICAgICB2YXIgZXhwID0gK3Muc2xpY2UoaiArIDEpO1xuICAgICAgaWYgKGV4cCA8IC00IHx8IHggPj0gMWUyMSB8fCB4LnRvRml4ZWQoMCkubGVuZ3RoID4gcHJlYykge1xuICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgIHZhciBpID0gaiAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSkgKyBzLnNsaWNlKGopO1xuICAgICAgICBpID0gcy5sZW5ndGg7XG4gICAgICAgIGlmIChzLmNoYXJBdChpIC0gMykgPT0gJ2UnKVxuICAgICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHAgPSBwcmVjO1xuICAgICAgICBpZiAoZXhwIDwgMCkgeyBwIC09IGV4cCArIDE7IHMgPSB4LnRvRml4ZWQocCk7IH1cbiAgICAgICAgZWxzZSB3aGlsZSAocyA9IHgudG9GaXhlZChwKSwgcy5sZW5ndGggPiBwcmVjICsgMSkgcC0tO1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgICBzID0gcy5zbGljZSgwLCBpICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHJlcztcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocylcbiAgcmVzID0gK3M7XG4gIGlmICgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSByZXR1cm4gcmVzO1xuICBzID0gcy5yZXBsYWNlKC9fL2csXCJcIik7XG4gIHJlcyA9ICtzO1xuICBpZiAoKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHx8IC9eWystXT9uYW4kL2kudGVzdChzKSkgcmV0dXJuIHJlcztcbiAgdmFyIG0gPSAvXiAqKFsrLV0/KTB4KFswLTlhLWZdKylcXC4/KFswLTlhLWZdKikocChbKy1dP1swLTldKykpPy9pLmV4ZWMocyk7XG4gIC8vICAgICAgICAgIDEgICAgICAgIDIgICAgICAgICAgICAgMyAgICAgICAgICAgNVxuICBpZihtKXtcbiAgICB2YXIgbTMgPSBtWzNdLnJlcGxhY2UoLzArJC8sJycpO1xuICAgIHZhciBtYW50aXNzYSA9IHBhcnNlSW50KG1bMV0gKyBtWzJdICsgbTMsIDE2KTtcbiAgICB2YXIgZXhwb25lbnQgPSAobVs1XXwwKSAtIDQqbTMubGVuZ3RoO1xuICAgIHJlcyA9IG1hbnRpc3NhICogTWF0aC5wb3coMiwgZXhwb25lbnQpO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgaWYoL15cXCs/aW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIEluZmluaXR5O1xuICBpZigvXi1pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gLUluZmluaXR5O1xuICBjYW1sX2ZhaWx3aXRoKFwiZmxvYXRfb2Zfc3RyaW5nXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15ICh4LCB5KSB7XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIHZhciBpID0geS5sZW5ndGg7IHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hbGxvY19kdW1teV9pbmZpeFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9hbGxvY19kdW1teV9pbmZpeCAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmICh4KSB7IHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBbeF0pIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfYmxvY2sgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfYmxvY2sgKHgpIHsgcmV0dXJuICsoeCBpbnN0YW5jZW9mIEFycmF5KTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyAoeCkge1xuICBpZiAoKHggaW5zdGFuY2VvZiBBcnJheSkgJiYgeFswXSA9PSAoeFswXSA+Pj4gMCkpXG4gICAgcmV0dXJuIHhbMF1cbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoKHggaW5zdGFuY2VvZiBGdW5jdGlvbikgfHwgdHlwZW9mIHggPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAyNDdcbiAgZWxzZSBpZiAoeCAmJiB4LmNhbWxfY3VzdG9tKVxuICAgIHJldHVybiAyNTVcbiAgZWxzZVxuICAgIHJldHVybiAxMDAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF90YWcgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3RhZyAoeCwgdGFnKSB7IHhbMF0gPSB0YWc7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX29ial9ibG9jayBjb25zdCAoY29uc3QsY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9ibG9jayAodGFnLCBzaXplKSB7XG4gIHZhciBvID0gbmV3IEFycmF5KHNpemUrMSk7XG4gIG9bMF09dGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzaXplOyBpKyspIG9baV0gPSAwO1xuICByZXR1cm4gbztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfd2l0aF90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3dpdGhfdGFnKHRhZyx4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IodmFyIGkgPSAxOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcFxuZnVuY3Rpb24gY2FtbF9vYmpfY29tcGFyZV9hbmRfc3dhcCh4LGksb2xkLG4pe1xuICBpZih4W2krMV0gPT0gb2xkKSB7XG4gICAgeFtpKzFdID0gbjtcbiAgICByZXR1cm4gMTtcbiAgfVxuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19zaGFyZWRcbmZ1bmN0aW9uIGNhbWxfb2JqX2lzX3NoYXJlZCh4KXtcbiAgcmV0dXJuIDFcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAobXV0YWJsZSlcbmZ1bmN0aW9uIGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgKHYpIHsgcmV0dXJuIFsyNTAsIHZdOyB9XG5cbi8vLy8vLy8vLy8vLy8gQ2FtbGludGVybmFsT09cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgY29uc3RcbnZhciBjYW1sX21ldGhvZF9jYWNoZSA9IFtdO1xuZnVuY3Rpb24gY2FtbF9nZXRfcHVibGljX21ldGhvZCAob2JqLCB0YWcsIGNhY2hlaWQpIHtcbiAgdmFyIG1ldGhzID0gb2JqWzFdO1xuICB2YXIgb2ZzID0gY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF07XG4gIGlmIChvZnMgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgYXJyYXkgaXMgbm90IHNwYXJzZVxuICAgIGZvciAodmFyIGkgPSBjYW1sX21ldGhvZF9jYWNoZS5sZW5ndGg7IGkgPCBjYWNoZWlkOyBpKyspXG4gICAgICBjYW1sX21ldGhvZF9jYWNoZVtpXSA9IDA7XG4gIH0gZWxzZSBpZiAobWV0aHNbb2ZzXSA9PT0gdGFnKSB7XG4gICAgcmV0dXJuIG1ldGhzW29mcyAtIDFdO1xuICB9XG4gIHZhciBsaSA9IDMsIGhpID0gbWV0aHNbMV0gKiAyICsgMSwgbWk7XG4gIHdoaWxlIChsaSA8IGhpKSB7XG4gICAgbWkgPSAoKGxpK2hpKSA+PiAxKSB8IDE7XG4gICAgaWYgKHRhZyA8IG1ldGhzW21pKzFdKSBoaSA9IG1pLTI7XG4gICAgZWxzZSBsaSA9IG1pO1xuICB9XG4gIGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdID0gbGkgKyAxO1xuICAvKiByZXR1cm4gMCBpZiB0YWcgaXMgbm90IHRoZXJlICovXG4gIHJldHVybiAodGFnID09IG1ldGhzW2xpKzFdID8gbWV0aHNbbGldIDogMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb29fbGFzdF9pZFxudmFyIGNhbWxfb29fbGFzdF9pZCA9IDA7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X29vX2lkXG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfc2V0X29vX2lkIChiKSB7XG4gIGJbMl09Y2FtbF9vb19sYXN0X2lkKys7XG4gIHJldHVybiBiO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXNoX29vX2lkIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX29vX2xhc3RfaWRcbmZ1bmN0aW9uIGNhbWxfZnJlc2hfb29faWQoKSB7XG4gIHJldHVybiBjYW1sX29vX2xhc3RfaWQrKztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9yYXdfZmllbGQobyxpKSB7IHJldHVybiBvW2krMV0gfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfcmF3X2ZpZWxkKG8saSx2KSB7IHJldHVybiBvW2krMV0gPSB2IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXG5mdW5jdGlvbiBjYW1sX29ial9yZWFjaGFibGVfd29yZHMobykgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9hZGRfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX29ial9hZGRfb2Zmc2V0KHYsb2Zmc2V0KSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJPYmouYWRkX29mZnNldCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial91cGRhdGVfdGFnXG5mdW5jdGlvbiBjYW1sX29ial91cGRhdGVfdGFnKGIsbyxuKSB7XG4gICAgaWYoYlswXT09bykgeyBiWzBdID0gbjsgcmV0dXJuIDEgfVxuICAgIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yY2luZ1xuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuZnVuY3Rpb24gY2FtbF9sYXp5X3VwZGF0ZV90b19mb3JjaW5nKG8pIHtcbiAgaWYgKChvIGluc3RhbmNlb2YgQXJyYXkpICYmIG9bMF0gPT0gKG9bMF0gPj4+IDApICYmXG4gICAgICBjYW1sX29ial91cGRhdGVfdGFnKG8sIDI0NiwgMjQ0KSkge1xuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV91cGRhdGVfdG9fZm9yd2FyZFxuLy9SZXF1aXJlczogY2FtbF9vYmpfdXBkYXRlX3RhZ1xuICBmdW5jdGlvbiBjYW1sX2xhenlfdXBkYXRlX3RvX2ZvcndhcmQobykge1xuICBjYW1sX29ial91cGRhdGVfdGFnKG8sMjQ0LDI1MCk7XG4gIHJldHVybiAwOyAvLyB1bml0XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3Jlc2V0X3RvX2xhenlcbi8vUmVxdWlyZXM6IGNhbWxfb2JqX3VwZGF0ZV90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZXNldF90b19sYXp5KG8pIHtcbiAgY2FtbF9vYmpfdXBkYXRlX3RhZyhvLDI0NCwyNDYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X3JlYWRfcmVzdWx0XG4vL1JlcXVpcmVzOiBjYW1sX29ial90YWdcbmZ1bmN0aW9uIGNhbWxfbGF6eV9yZWFkX3Jlc3VsdChvKSB7XG4gIHJldHVybiAoY2FtbF9vYmpfdGFnKG8pID09IDI1MCk/b1sxXTpvO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xuLy9WZXJzaW9uOiA8IDVcbmZ1bmN0aW9uIGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWdcbi8vVmVyc2lvbjogPj0gNVxuZnVuY3Rpb24gY2FtbF9pc19jb250aW51YXRpb25fdGFnKHQpIHtcbiAgcmV0dXJuICh0ID09IDI0NSkgPyAxIDogMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mZnNldFxudmFyIGNhbWxfaW50NjRfb2Zmc2V0ID0gTWF0aC5wb3coMiwgLTI0KTtcblxuLy9Qcm92aWRlczogTWxJbnQ2NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIE1sSW50NjQgKGxvLG1pLGhpKSB7XG4gIHRoaXMubG8gPSBsbyAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gbWkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IGhpICYgMHhmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY2FtbF9jdXN0b20gPSBcIl9qXCJcbk1sSW50NjQucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvLHRoaXMubWksdGhpcy5oaSk7XG59XG5cbk1sSW50NjQucHJvdG90eXBlLnVjb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHRoaXMuaGkgPiB4LmhpKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMuaGkgPCB4LmhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGhpID0gdGhpcy5oaSA8PCAxNjtcbiAgdmFyIHhoaSA9IHguaGkgPDwgMTY7XG4gIGlmIChoaSA+IHhoaSkgcmV0dXJuIDE7XG4gIGlmIChoaSA8IHhoaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubmVnID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbG8gPSAtIHRoaXMubG87XG4gIHZhciBtaSA9IC0gdGhpcy5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IC0gdGhpcy5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKyB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pICsgeC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgKyB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc3ViID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAtIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgLSB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSAtIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5tdWwgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICogeC5sbztcbiAgdmFyIG1pID0gKChsbyAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5taSAqIHgubG8gKyB0aGlzLmxvICogeC5taTtcbiAgdmFyIGhpID0gKChtaSAqIGNhbWxfaW50NjRfb2Zmc2V0KSB8IDApICsgdGhpcy5oaSAqIHgubG8gKyB0aGlzLm1pICogeC5taSArIHRoaXMubG8gKiB4LmhpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5sb3x0aGlzLm1pfHRoaXMuaGkpID09IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5pc05lZyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmhpIDw8IDE2KSA8IDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5hbmQgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyAmIHgubG8sIHRoaXMubWkgJiB4Lm1pLCB0aGlzLmhpICYgeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5vciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvfHgubG8sIHRoaXMubWl8eC5taSwgdGhpcy5oaXx4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnhvciA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvXngubG8sIHRoaXMubWleeC5taSwgdGhpcy5oaV54LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X2xlZnQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNCkge1xuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5sbyA8PCBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgcykgfCAodGhpcy5sbyA+PiAoMjQgLSBzKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5oaSA8PCBzKSB8ICh0aGlzLm1pID4+ICgyNCAtIHMpKSk7XG4gIH1cbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvIDw8IChzIC0gMjQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubWkgPDwgKHMgLSAyNCkpIHwgKHRoaXMubG8gPj4gKDQ4IC0gcykpKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KDAsIDAsIHRoaXMubG8gPDwgKHMgLSA0OCkpXG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodF91bnNpZ25lZCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKHRoaXMuaGkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gcykpO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiAocyAtIDI0KSksXG4gICAgICAwKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmhpID4+IChzIC0gNDgpLCAwLCAwKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIHZhciBoID0gKHRoaXMuaGkgPDwgMTYpID4+IDE2O1xuICBpZiAocyA8IDI0KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5sbyA+PiBzKSB8ICh0aGlzLm1pIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLm1pID4+IHMpIHwgKGggPDwgKDI0IC0gcykpLFxuICAgICAgKCh0aGlzLmhpIDw8IDE2KSA+PiBzKSA+Pj4gMTYpO1xuICB2YXIgc2lnbiA9ICh0aGlzLmhpIDw8IDE2KSA+PiAzMTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMjQpID4+IDE2LFxuICAgICAgc2lnbiAmIDB4ZmZmZik7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoKHRoaXMuaGkgPDwgMTYpID4+IChzIC0gMzIpLCBzaWduLCBzaWduKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzbDEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGkgPSAodGhpcy5oaSA8PCAxKSB8ICh0aGlzLm1pID4+IDIzKTtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA8PCAxKSB8ICh0aGlzLmxvID4+IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5sbyA9ICh0aGlzLmxvIDw8IDEpICYgMHhmZmZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc3IxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmxvID0gKCh0aGlzLmxvID4+PiAxKSB8ICh0aGlzLm1pIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9ICgodGhpcy5taSA+Pj4gMSkgfCAodGhpcy5oaSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSB0aGlzLmhpID4+PiAxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudWRpdm1vZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBvZmZzZXQgPSAwO1xuICB2YXIgbW9kdWx1cyA9IHRoaXMuY29weSgpO1xuICB2YXIgZGl2aXNvciA9IHguY29weSgpO1xuICB2YXIgcXVvdGllbnQgPSBuZXcgTWxJbnQ2NCgwLDAsMCk7XG4gIHdoaWxlIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID4gMCkge1xuICAgIG9mZnNldCsrO1xuICAgIGRpdmlzb3IubHNsMSgpO1xuICB9XG4gIHdoaWxlIChvZmZzZXQgPj0gMCkge1xuICAgIG9mZnNldCAtLTtcbiAgICBxdW90aWVudC5sc2wxKCk7XG4gICAgaWYgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPj0gMCkge1xuICAgICAgcXVvdGllbnQubG8gKys7XG4gICAgICBtb2R1bHVzID0gbW9kdWx1cy5zdWIoZGl2aXNvcik7XG4gICAgfVxuICAgIGRpdmlzb3IubHNyMSgpO1xuICB9XG4gIHJldHVybiB7IHF1b3RpZW50IDogcXVvdGllbnQsIG1vZHVsdXMgOiBtb2R1bHVzIH07XG59XG5NbEludDY0LnByb3RvdHlwZS5kaXYgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpIF4geS5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciBxID0geC51ZGl2bW9kKHkpLnF1b3RpZW50O1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgcSA9IHEubmVnKCk7XG4gIHJldHVybiBxO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubW9kID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaTtcbiAgaWYgKHguaGkgJiAweDgwMDApIHggPSB4Lm5lZygpO1xuICBpZiAoeS5oaSAmIDB4ODAwMCkgeSA9IHkubmVnKCk7XG4gIHZhciByID0geC51ZGl2bW9kKHkpLm1vZHVsdXM7XG4gIGlmIChzaWduICYgMHg4MDAwKSByID0gci5uZWcoKTtcbiAgcmV0dXJuIHI7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0ludCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAodGhpcy5taSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS50b0Zsb2F0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLmhpIDw8IDE2KSAqIE1hdGgucG93KDIsIDMyKSArIHRoaXMubWkgKiBNYXRoLnBvdygyLCAyNCkpICsgdGhpcy5sbztcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbdGhpcy5oaSA+PiA4LFxuICAgICAgICAgIHRoaXMuaGkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgPj4gMTYsXG4gICAgICAgICAgKHRoaXMubWkgPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubWkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gPj4gMTYsXG4gICAgICAgICAgKHRoaXMubG8gPj4gOCkgJiAweGZmLFxuICAgICAgICAgIHRoaXMubG8gJiAweGZmXTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxvMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKCh0aGlzLm1pICYgMHhmZikgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaGkzMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5taSA+Pj4gOCkgJiAweGZmZmYpIHwgKHRoaXMuaGkgPDwgMTYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VsdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bHQoeCx5KSB7IHJldHVybiB4LnVjb21wYXJlKHkpIDwgMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NvbXBhcmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY29tcGFyZSh4LHksIHRvdGFsKSB7IHJldHVybiB4LmNvbXBhcmUoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X25lZyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9uZWcgKHgpIHsgcmV0dXJuIHgubmVnKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FkZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hZGQgKHgsIHkpIHsgcmV0dXJuIHguYWRkKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zdWIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc3ViICh4LCB5KSB7IHJldHVybiB4LnN1Yih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbXVsIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tdWwoeCx5KSB7IHJldHVybiB4Lm11bCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfemVybyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc196ZXJvKHgpIHsgcmV0dXJuICt4LmlzWmVybygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkgeyByZXR1cm4gK3guaXNOZWcoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2FuZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9hbmQgKHgsIHkpIHsgcmV0dXJuIHguYW5kKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb3IgKHgsIHkpIHsgcmV0dXJuIHgub3IoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF94b3IgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfeG9yICh4LCB5KSB7IHJldHVybiB4Lnhvcih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfbGVmdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X2xlZnQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0X3Vuc2lnbmVkICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZGl2IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2RpdiAoeCwgeSkgeyByZXR1cm4geC5kaXYoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21vZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tb2QgKHgsIHkpIHsgcmV0dXJuIHgubW9kKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9pbnQzMiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoeCAmIDB4ZmZmZmZmLCAoeCA+PiAyNCkgJiAweGZmZmZmZiwgKHggPj4gMzEpICYgMHhmZmZmKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2ludDMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2ludDMyICh4KSB7IHJldHVybiB4LnRvSW50KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2Zsb2F0ICh4KSB7IHJldHVybiB4LnRvRmxvYXQgKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoeCkge1xuICBpZiAoeCA8IDApIHggPSBNYXRoLmNlaWwoeCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChcbiAgICB4ICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmZmYsXG4gICAgTWF0aC5mbG9vcih4ICogY2FtbF9pbnQ2NF9vZmZzZXQgKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmYpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zvcm1hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfbmVnYXRpdmUsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3RvX2ludDMyXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX3plcm8sIGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mb3JtYXQgKGZtdCwgeCkge1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSkge1xuICAgIGYuc2lnbiA9IC0xOyB4ID0gY2FtbF9pbnQ2NF9uZWcoeCk7XG4gIH1cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIHZhciB3YmFzZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZi5iYXNlKTtcbiAgdmFyIGN2dGJsID0gXCIwMTIzNDU2Nzg5YWJjZGVmXCI7XG4gIGRvIHtcbiAgICB2YXIgcCA9IHgudWRpdm1vZCh3YmFzZSk7XG4gICAgeCA9IHAucXVvdGllbnQ7XG4gICAgYnVmZmVyID0gY3Z0YmwuY2hhckF0KGNhbWxfaW50NjRfdG9faW50MzIocC5tb2R1bHVzKSkgKyBidWZmZXI7XG4gIH0gd2hpbGUgKCEgY2FtbF9pbnQ2NF9pc196ZXJvKHgpKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBidWZmZXIubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgYnVmZmVyID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgYnVmZmVyO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIGJ1ZmZlcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcGFyc2VfZGlnaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdWx0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9tdWwsIGNhbWxfaW50NjRfbmVnXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9zdHJpbmcocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgYmFzZTY0ID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihiYXNlKTtcbiAgdmFyIHRocmVzaG9sZCA9XG4gICAgICBuZXcgTWxJbnQ2NCgweGZmZmZmZiwgMHhmZmZmZmZmLCAweGZmZmYpLnVkaXZtb2QoYmFzZTY0KS5xdW90aWVudDtcbiAgdmFyIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgZm9yICg7Oykge1xuICAgIGkrKztcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIG11bHRpcGxpY2F0aW9uIGJhc2UgKiByZXMgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQodGhyZXNob2xkLCByZXMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgICBkID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihkKTtcbiAgICByZXMgPSBjYW1sX2ludDY0X2FkZChjYW1sX2ludDY0X211bChiYXNlNjQsIHJlcyksIGQpO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBhZGRpdGlvbiAoYmFzZSAqIHJlcykgKyBkICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHJlcywgZCkpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChiYXNlID09IDEwICYmIGNhbWxfaW50NjRfdWx0KG5ldyBNbEludDY0KDAsIDAsIDB4ODAwMCksIHJlcykpXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIGlmIChzaWduIDwgMCkgcmVzID0gY2FtbF9pbnQ2NF9uZWcocmVzKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKGxvLCBtaSwgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSlcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsbywgaGkpe1xuICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgIGxvICYgMHhmZmZmZmYsXG4gICAgKChsbyA+Pj4gMjQpICYgMHhmZikgfCAoKGhpICYgMHhmZmZmKSA8PCA4KSxcbiAgICAoaGkgPj4+IDE2KSAmIDB4ZmZmZik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2xvMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbG8zMih2KXsgcmV0dXJuIHYubG8zMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oaTMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hpMzIodil7IHJldHVybiB2LmhpMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSkge1xuICByZXR1cm4gbmV3IE1sSW50NjQoYVs3XSA8PCAwIHwgKGFbNl0gPDwgOCkgfCAoYVs1XSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzRdIDw8IDAgfCAoYVszXSA8PCA4KSB8IChhWzJdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbMV0gPDwgMCB8IChhWzBdIDw8IDgpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fYnl0ZXMoeCkgeyByZXR1cm4geC50b0FycmF5KCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hhc2ggY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGFzaCh2KXtcbiAgcmV0dXJuICh2LmxvMzIoKSkgXiAodi5oaTMyKCkpXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCl7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSA3OiBjYXNlIDEwOiBjYXNlIDExOiByZXR1cm4gMjtcbiAgZGVmYXVsdDogcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKXtcbiAgdmFyIHZpZXc7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAwOiAgdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTogIHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gSW50OEFycmF5OyBicmVhaztcbiAgY2FzZSAzOiAgdmlldyA9IFVpbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDQ6ICB2aWV3ID0gSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBVaW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNjogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA3OiAgdmlldyA9IEludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgOTogIHZpZXcgPSBJbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMDogdmlldyA9IEZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBGbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDEyOiB2aWV3ID0gVWludDhBcnJheTsgYnJlYWs7XG4gIH1cbiAgaWYgKCF2aWV3KSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHZhciBkYXRhID0gbmV3IHZpZXcoc2l6ZSAqIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA8IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyYXlcIlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246ID49IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIlxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSwgY2FtbF9pbnQ2NF9oaTMyLCBjYW1sX2ludDY0X2xvMzJcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5IChraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuXG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gY2FtbF9iYV9jdXN0b21fbmFtZTtcblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIG9mcyA9IDA7XG4gIGlmKHR5cGVvZiBhcmcgPT09IFwibnVtYmVyXCIpIGFyZyA9IFthcmddO1xuICBpZiAoISAoYXJnIGluc3RhbmNlb2YgQXJyYXkpKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJiaWdhcnJheS5qczogaW52YWxpZCBvZmZzZXRcIik7XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGFyZy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZ2V0L3NldDogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICBpZih0aGlzLmxheW91dCA9PSAwIC8qIGNfbGF5b3V0ICovKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pXG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgYXJnW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMSB8fCBhcmdbaV0gPiB0aGlzLmRpbXNbaV0pe1xuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICB9XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIChhcmdbaV0gLSAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9mcztcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBsID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGwsaCk7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGkgPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBbMjU0LCByLCBpXTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gdGhpcy5kYXRhW29mc11cbiAgfVxufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gdlsxXTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB2YXIgYiA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBpZihhID09IGIpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gYSA6IGI7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIGltID0gdlsxXTtcbiAgICB2YXIgcmUgPSB2WzJdO1xuICAgIGlmKGltID09IHJlKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGltKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBpbSA6IHJlO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICBicmVhaztcbiAgfVxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIsIHRvdGFsKSB7XG4gIGlmICh0aGlzLmxheW91dCAhPSBiLmxheW91dCB8fCB0aGlzLmtpbmQgIT0gYi5raW5kKSB7XG4gICAgdmFyIGsxID0gdGhpcy5raW5kIHwgKHRoaXMubGF5b3V0IDw8IDgpO1xuICAgIHZhciBrMiA9ICAgIGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICByZXR1cm4gazIgLSBrMTtcbiAgfVxuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBiLmRpbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmICh0aGlzLmRpbXNbaV0gIT0gYi5kaW1zW2ldKVxuICAgICAgcmV0dXJuICh0aGlzLmRpbXNbaV0gPCBiLmRpbXNbaV0pID8gLTEgOiAxO1xuICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgY2FzZSAxMDpcbiAgY2FzZSAxMTpcbiAgICAvLyBGbG9hdHNcbiAgICB2YXIgeCwgeTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgeCA9IHRoaXMuZGF0YVtpXTtcbiAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICBpZiAoeCA8IHkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh4ID4geSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoeCAhPSB5KSB7XG4gICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgIGlmICh4ID09IHgpIHJldHVybiAxO1xuICAgICAgICBpZiAoeSA9PSB5KSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrPTIpIHtcbiAgICAgIC8vIENoZWNrIGhpZ2hlc3QgYml0cyBmaXJzdFxuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdIDwgYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA+IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA8IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPiAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDI6XG4gIGNhc2UgMzpcbiAgY2FzZSA0OlxuICBjYXNlIDU6XG4gIGNhc2UgNjpcbiAgY2FzZSA4OlxuICBjYXNlIDk6XG4gIGNhc2UgMTI6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPiBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSAgID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUgPSBuZXcgTWxfQmlnYXJyYXkoKVxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgaWYodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIil7XG4gICAgaWYoKGFyZyBpbnN0YW5jZW9mIEFycmF5KSAmJiBhcmcubGVuZ3RoID09IDEpXG4gICAgICBhcmcgPSBhcmdbMF07XG4gICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gIH1cbiAgaWYgKGFyZyA8IDAgfHwgYXJnID49IHRoaXMuZGltc1swXSlcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcmc7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gIHJldHVybiAwXG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgdGhpcy5kYXRhLmZpbGwodik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9iYV9jb21wYXJlKGEsYix0b3RhbCl7XG4gIHJldHVybiBhLmNvbXBhcmUoYix0b3RhbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSl7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKTtcbiAgaWYoY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSAqIHNpemVfcGVyX2VsZW1lbnQgIT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmKGxheW91dCA9PSAwICYmIC8vIGNfbGF5b3V0XG4gICAgIGRpbXMubGVuZ3RoID09IDEgJiYgLy8gQXJyYXkxXG4gICAgIHNpemVfcGVyX2VsZW1lbnQgPT0gMSkgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcblxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZShraW5kLCBsYXlvdXQsIGRpbXNfbWwpIHtcbiAgdmFyIGRpbXMgPSBjYW1sX2pzX2Zyb21fYXJyYXkoZGltc19tbCk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIGNhbWxfYmFfZ2V0X3NpemUoZGltcykpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY2hhbmdlX2xheW91dFxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2NoYW5nZV9sYXlvdXQoYmEsIGxheW91dCkge1xuICBpZihiYS5sYXlvdXQgPT0gbGF5b3V0KSByZXR1cm4gYmE7XG4gIHZhciBuZXdfZGltcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbYmEuZGltcy5sZW5ndGggLSBpIC0gMV07XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgbGF5b3V0LCBuZXdfZGltcywgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kKGJhKSB7XG4gIHJldHVybiBiYS5raW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2xheW91dFxuZnVuY3Rpb24gY2FtbF9iYV9sYXlvdXQoYmEpIHtcbiAgcmV0dXJuIGJhLmxheW91dDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9udW1fZGltc1xuZnVuY3Rpb24gY2FtbF9iYV9udW1fZGltcyhiYSkge1xuICByZXR1cm4gYmEuZGltcy5sZW5ndGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZGltKGJhLCBpKSB7XG4gIGlmIChpIDwgMCB8fCBpID49IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMgKyAxKTtcbiAgcmV0dXJuIChiMSB8IChiMiA8PCA4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MzIoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHJldHVybiAoIChiMSA8PCAwKSAgfFxuICAgICAgICAgICAoYjIgPDwgOCkgIHxcbiAgICAgICAgICAgKGIzIDw8IDE2KSB8XG4gICAgICAgICAgIChiNCA8PCAyNCkgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQ2NChiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgdmFyIGI1ID0gYmEuZ2V0KG9mcys0KTtcbiAgdmFyIGI2ID0gYmEuZ2V0KG9mcys1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcys2KTtcbiAgdmFyIGI4ID0gYmEuZ2V0KG9mcys3KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW2I4LGI3LGI2LGI1LGI0LGIzLGIyLGIxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzEoYmEsIGkwKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KGkwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzIoYmEsIGkwLCBpMSkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxLGkyXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0X2dlbmVyaWMoYmEsIGksIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMrMywgKHYgPj4+IDI0KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQ2NChiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBiYS5zZXQob2ZzK2ksIHZbNy1pXSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMihiYSwgaTAsIGkxLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMyhiYSwgaTAsIGkxLCBpMiwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZmlsbFxuZnVuY3Rpb24gY2FtbF9iYV9maWxsKGJhLCB2KSB7XG4gIGJhLmZpbGwodik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9ibGl0KHNyYywgZHN0KSB7XG4gIGlmIChkc3QuZGltcy5sZW5ndGggIT0gc3JjLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkc3QuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoZHN0LmRpbXNbaV0gIT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IChiYS5kaW1zLmxlbmd0aCAtIDEpOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCAob2ZzICsgbGVuKSA+IGJhLmRpbXNbY2hhbmdlZF9kaW1dKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zdWI6IGJhZCBzdWItYXJyYXlcIik7XG4gIH1cbiAgdmFyIG5ld19kaW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAwO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZShudW1faW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyArIGldID0gdmluZFtpXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMTtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UoMCwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyk7XG4gIH1cbiAgb2ZzID0gYmEub2Zmc2V0KGluZGV4KTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKHN1Yl9kaW1zKTtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIHNpemVfcGVyX2VsZW1lbnQsIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgc3ViX2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9yZXNoYXBlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG5mdW5jdGlvbiBjYW1sX2JhX3Jlc2hhcGUoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG5ld19kaW0gPSBbXTtcbiAgdmFyIG51bV9kaW1zID0gdmluZC5sZW5ndGg7XG5cbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPSBzaXplKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IHNpemUgbWlzbWF0Y2hcIik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF90b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX3NlcmlhbGl6ZSh3cml0ZXIsIGJhLCBzeikge1xuICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXMubGVuZ3RoKTtcbiAgd3JpdGVyLndyaXRlKDMyLCAoYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpKTtcbiAgaWYoYmEuY2FtbF9jdXN0b20gPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYoYmEuZGltc1tpXSA8IDB4ZmZmZilcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHdyaXRlci53cml0ZSgzMixiYS5kaW1zW2ldKVxuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoOCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB3cml0ZXIud3JpdGUoOCwwKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhiYS5nZXQoaSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgaiA9IGJhLmdldChpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMV0pKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsxXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMl0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogNDtcbiAgc3pbMV0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGVzZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlcywgY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKXtcbiAgdmFyIG51bV9kaW1zID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogd3JvbmcgbnVtYmVyIG9mIGJpZ2FycmF5IGRpbWVuc2lvbnNcIik7XG4gIHZhciB0YWcgPSByZWFkZXIucmVhZDMycygpO1xuICB2YXIga2luZCA9IHRhZyAmIDB4ZmZcbiAgdmFyIGxheW91dCA9ICh0YWcgPj4gOCkgJiAxO1xuICB2YXIgZGltcyA9IFtdXG4gIGlmKG5hbWUgPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICAgIHZhciBzaXplX2RpbSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICBpZihzaXplX2RpbSA9PSAweGZmZmYpe1xuICAgICAgICB2YXIgc2l6ZV9kaW1faGkgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICB2YXIgc2l6ZV9kaW1fbG8gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICBpZihzaXplX2RpbV9oaSAhPSAwKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogYmlnYXJyYXkgZGltZW5zaW9uIG92ZXJmbG93IGluIDMyYml0XCIpO1xuICAgICAgICBzaXplX2RpbSA9IHNpemVfZGltX2xvO1xuICAgICAgfVxuICAgICAgZGltcy5wdXNoKHNpemVfZGltKTtcbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIGRpbXMucHVzaChyZWFkZXIucmVhZDMydSgpKTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGRpbXMpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKTtcbiAgdmFyIGJhID0gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDhzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgdmFyIHNpeHR5ID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIGlmKHNpeHR5KSBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNhbm5vdCByZWFkIGJpZ2FycmF5IHdpdGggNjQtYml0IE9DYW1sIGludHNcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogLy8gKGludDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICBiYS5zZXQoaSxpbnQ2NCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrXG4gIH1cbiAgc3pbMF0gPSAoNCArIG51bV9kaW1zKSAqIDQ7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9EZXByZWNhdGVkXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIGpzdHlwLCBraW5kLCBsYXlvdXQsIGRpbXMpe1xuICBpZihkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09IDIpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfY3JlYXRlX2Zyb206IHVzZSByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlXCIpO1xuICB9XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaGFzaCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfaGFzaChiYSl7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyA0IDw9IGJhLmRhdGEubGVuZ3RoOyBpKz00KXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDgpIHwgKGJhLmRhdGFbaSsyXSA8PCAxNikgfCAoYmEuZGF0YVtpKzNdIDw8IDI0KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICB3ID0gMDtcbiAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgIGNhc2UgMzogdyAgPSBiYS5kYXRhW2krMl0gPDwgMTY7ICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAyOiB3IHw9IGJhLmRhdGFbaSsxXSA8PCA4OyAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDE6IHcgfD0gYmEuZGF0YVtpKzBdO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgMiA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9Mil7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCAxNik7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgaWYgKChudW1fZWx0cyAmIDEpICE9IDApXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgbnVtX2VsdHMgKj0gMlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9iYV90b190eXBlZF9hcnJheShiYSl7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZDtcbiAgaWYgICAgICAodGEgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkga2luZCA9IDE7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50OEFycmF5KSBraW5kID0gMjtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSkga2luZCA9IDM7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgSW50MTZBcnJheSkga2luZCA9IDQ7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIEludDMyQXJyYXkpIGtpbmQgPSA2O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSBraW5kID0gNjtcbiAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXk6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHJldHVybiBraW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGNhbWxfYmFfZnJvbV90eXBlZF9hcnJheSh0YSl7XG4gIHZhciBraW5kID0gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKTtcbiAgdmFyIHRhID1cbiAgICAgIC8qIE5lZWRlZCB0byBhdm9pZCB1bnNpZ25lZCBzZXR0ZXJzIG92ZXJmbG93aW5nXG4gICAgICAgICB0aGUgcmFuZ2Ugb2YgT0NhbWwgW2ludDMyXSB2YWx1ZXMuICovXG4gICAgICB0YSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ID9cbiAgICAgIG5ldyBJbnQzMkFycmF5KHRhLmJ1ZmZlciAsdGEuYnl0ZU9mZnNldCwgdGEubGVuZ3RoKSA6IHRhO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9pbnQgY29uc3QgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nLCBjYW1sX3N0cl9yZXBlYXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2ludChmbXQsIGkpIHtcbiAgaWYgKGNhbWxfanNieXRlc19vZl9zdHJpbmcoZm10KSA9PSBcIiVkXCIpIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIraSk7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGkgPCAwKSB7IGlmIChmLnNpZ25lZGNvbnYpIHsgZi5zaWduID0gLTE7IGkgPSAtaTsgfSBlbHNlIGkgPj4+PSAwOyB9XG4gIHZhciBzID0gaS50b1N0cmluZyhmLmJhc2UpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIHMubGVuZ3RoO1xuICAgIGlmIChuID4gMCkgcyA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIHM7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpIHtcbiAgdmFyIGkgPSAwLCBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyksIGJhc2UgPSAxMCwgc2lnbiA9IDE7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsaSkpIHtcbiAgICBjYXNlIDQ1OiBpKys7IHNpZ24gPSAtMTsgYnJlYWs7XG4gICAgY2FzZSA0MzogaSsrOyBzaWduID0gMTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChpICsgMSA8IGxlbiAmJiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpID09IDQ4KVxuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpICsgMSkpIHtcbiAgICBjYXNlIDEyMDogY2FzZSA4ODogYmFzZSA9IDE2OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTExOiBjYXNlIDc5OiBiYXNlID0gIDg7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAgOTg6IGNhc2UgNjY6IGJhc2UgPSAgMjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExNzogY2FzZSA4NTogaSArPSAyOyBicmVhaztcbiAgICB9XG4gIHJldHVybiBbaSwgc2lnbiwgYmFzZV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZGlnaXRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZGlnaXQoYykge1xuICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSAgcmV0dXJuIGMgLSA0ODtcbiAgaWYgKGMgPj0gNjUgJiYgYyA8PSA5MCkgIHJldHVybiBjIC0gNTU7XG4gIGlmIChjID49IDk3ICYmIGMgPD0gMTIyKSByZXR1cm4gYyAtIDg3O1xuICByZXR1cm4gLTE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9wYXJzZV9kaWdpdCwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9pbnRfb2Zfc3RyaW5nIChzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciB0aHJlc2hvbGQgPSAtMSA+Pj4gMDtcbiAgdmFyIGMgPSAoaSA8IGxlbik/Y2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTowO1xuICB2YXIgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB2YXIgcmVzID0gZDtcbiAgZm9yIChpKys7aTxsZW47aSsrKSB7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIHJlcyA9IGJhc2UgKiByZXMgKyBkO1xuICAgIGlmIChyZXMgPiB0aHJlc2hvbGQpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICB9XG4gIGlmIChpICE9IGxlbikgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIC8vIEZvciBiYXNlIGRpZmZlcmVudCBmcm9tIDEwLCB3ZSBleHBlY3QgYW4gdW5zaWduZWQgcmVwcmVzZW50YXRpb24sXG4gIC8vIGhlbmNlIGFueSB2YWx1ZSBvZiAncmVzJyAobGVzcyB0aGFuICd0aHJlc2hvbGQnKSBpcyBhY2NlcHRhYmxlLlxuICAvLyBCdXQgd2UgaGF2ZSB0byBjb252ZXJ0IHRoZSByZXN1bHQgYmFjayB0byBhIHNpZ25lZCBpbnRlZ2VyLlxuICByZXMgPSBzaWduICogcmVzO1xuICBpZiAoKGJhc2UgPT0gMTApICYmICgocmVzIHwgMCkgIT0gcmVzKSlcbiAgICAvKiBTaWduZWQgcmVwcmVzZW50YXRpb24gZXhwZWN0ZWQsIGFsbG93IC0yXihuYml0cy0xKSB0byAyXihuYml0cy0xKSAtIDEgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgcmV0dXJuIHJlcyB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbXVsIGNvbnN0XG5mdW5jdGlvbiBjYW1sX211bChhLGIpe1xuICByZXR1cm4gTWF0aC5pbXVsKGEsYik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZGl2XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX2Rpdih4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuICh4L3kpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW9kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBjYW1sX21vZCh4LHkpIHtcbiAgaWYgKHkgPT0gMCkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgcmV0dXJuIHgleTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ic3dhcDE2XG5mdW5jdGlvbiBjYW1sX2Jzd2FwMTYoeCkge1xuICByZXR1cm4gKCgoKHggJiAweDAwRkYpIDw8IDgpIHxcbiAgICAgICAgICAgKCh4ICYgMHhGRjAwKSA+PiA4KSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl9ic3dhcFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9ic3dhcCh4KSB7XG4gIHJldHVybiAoKCh4ICYgMHgwMDAwMDBGRikgPDwgMjQpIHxcbiAgICAgICAgICAoKHggJiAweDAwMDBGRjAwKSA8PCA4KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMEZGMDAwMCkgPj4+IDgpIHxcbiAgICAgICAgICAoKHggJiAweEZGMDAwMDAwKSA+Pj4gMjQpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYnN3YXBcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYnN3YXAoeCkge1xuICB2YXIgeSA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoeCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFt5WzddLCB5WzZdLCB5WzVdLCB5WzRdLCB5WzNdLCB5WzJdLCB5WzFdLCB5WzBdXSk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEhhc2h0YmxcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfdW5pdl9wYXJhbSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vVmVyc2lvbjogPCA0LjEyXG5mdW5jdGlvbiBjYW1sX2hhc2hfdW5pdl9wYXJhbSAoY291bnQsIGxpbWl0LCBvYmopIHtcbiAgdmFyIGhhc2hfYWNjdSA9IDA7XG4gIGZ1bmN0aW9uIGhhc2hfYXV4IChvYmopIHtcbiAgICBsaW1pdCAtLTtcbiAgICBpZiAoY291bnQgPCAwIHx8IGxpbWl0IDwgMCkgcmV0dXJuO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSAmJiBvYmpbMF0gPT09IChvYmpbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAob2JqWzBdKSB7XG4gICAgICBjYXNlIDI0ODpcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmpbMl0pIHwgMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBsaW1pdCsrOyBoYXNoX2F1eChvYmopOyBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvdW50IC0tO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBvYmpbMF0pIHwgMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IG9iai5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSBoYXNoX2F1eCAob2JqW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMob2JqKSkge1xuICAgICAgY291bnQgLS07XG4gICAgICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudChvYmopO1xuICAgICAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgZm9yICh2YXIgYiA9IGNvbnRlbnQsIGwgPSBiLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgICB9IGVsc2UgeyAvKiBBUlJBWSAqL1xuICAgICAgICBmb3IgKHZhciBhID0gY29udGVudCwgbCA9IGEubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBhW2ldKSB8IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhvYmopKSB7XG4gICAgICB2YXIganNieXRlcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob2JqKTtcbiAgICAgIGZvciAodmFyIGIgPSBqc2J5dGVzLCBsID0ganNieXRlcy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAodmFyIGIgPSBvYmosIGwgPSBvYmoubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IChvYmp8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGNvdW50IC0tO1xuICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09ICtvYmopIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBjb3VudC0tO1xuICAgICAgdmFyIHAgPSBjYW1sX2ludDY0X3RvX2J5dGVzIChjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKG9iaikpO1xuICAgICAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgaS0tKSBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBwW2ldKSB8IDA7XG4gICAgfSBlbHNlIGlmKG9iaiAmJiBvYmouY2FtbF9jdXN0b20pIHtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGggPSBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKG9iaikgfCAwO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBoKSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGhhc2hfYXV4IChvYmopO1xuICByZXR1cm4gaGFzaF9hY2N1ICYgMHgzRkZGRkZGRjtcbn1cblxuLy9mdW5jdGlvbiBST1RMMzIoeCxuKSB7IHJldHVybiAoKHggPDwgbikgfCAoeCA+Pj4gKDMyLW4pKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQoaCxkKSB7XG4gIGQgPSBjYW1sX211bChkLCAweGNjOWUyZDUxfDApO1xuICBkID0gKChkIDw8IDE1KSB8IChkID4+PiAoMzItMTUpKSk7IC8vIFJPVEwzMihkLCAxNSk7XG4gIGQgPSBjYW1sX211bChkLCAweDFiODczNTkzKTtcbiAgaCBePSBkO1xuICBoID0gKChoIDw8IDEzKSB8IChoID4+PiAoMzItMTMpKSk7ICAgLy9ST1RMMzIoaCwgMTMpO1xuICByZXR1cm4gKCgoaCArIChoIDw8IDIpKXwwKSArICgweGU2NTQ2YjY0fDApKXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9maW5hbChoKSB7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIGggPSBjYW1sX211bCAoaCwgMHg4NWViY2E2YnwwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsIChoLCAweGMyYjJhZTM1fDApO1xuICBoIF49IGggPj4+IDE2O1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2hhc2hfbWl4X2ludDY0XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0IChoLCB2MCkge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9pbnQ2NChoLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHYwKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9sbzMyLCBjYW1sX2ludDY0X2hpMzJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50NjQgKGgsIHYpIHtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfbG8zMih2KSk7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2hpMzIodikpO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzLmNoYXJDb2RlQXQoaSlcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDgpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNilcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gcy5jaGFyQ29kZUF0KGkrMikgPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzLmNoYXJDb2RlQXQoaSsxKSA8PCA4O1xuICBjYXNlIDE6XG4gICAgdyB8PSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gc1tpXVxuICAgICAgfCAoc1tpKzFdIDw8IDgpXG4gICAgICB8IChzW2krMl0gPDwgMTYpXG4gICAgICB8IChzW2krM10gPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzW2krMl0gPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzW2krMV0gPDwgODtcbiAgY2FzZSAxOiB3IHw9IHNbaV07XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzKGgsIHYpIHtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQodik7XG4gIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY29udGVudClcbiAgZWxzZSAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBjb250ZW50KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQsIGNhbWxfaGFzaF9taXhfc3RyaW5nLCBjYW1sX2hhc2hfbWl4X2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2hhc2ggKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07IHJkID0gMDsgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2ICYmIHYuY2FtbF9jdXN0b20pe1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoaCA9IGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKHYpO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQgKGgsIGhoKTtcbiAgICAgICAgbnVtIC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgIG51bS0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIHF1ZXVlWy0tcmRdID0gdlsxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZihjYW1sX2lzX2NvbnRpbnVhdGlvbl90YWcodlswXSkpIHtcbiAgICAgICAgICAvKiBBbGwgY29udGludWF0aW9ucyBoYXNoIHRvIHRoZSBzYW1lIHZhbHVlLFxuICAgICAgICAgICAgIHNpbmNlIHdlIGhhdmUgbm8gaWRlYSBob3cgdG8gZGlzdGluZ3Vpc2ggdGhlbS4gKi9cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB2YXIgdGFnID0gKCh2Lmxlbmd0aCAtIDEpIDw8IDEwKSB8IHZbMF07XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHdyID49IHN6KSBicmVhaztcbiAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9ieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHYgPT09ICh2fDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdit2KzEpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsdik7XG4gICAgICBudW0tLTtcbiAgICB9XG4gIH1cbiAgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9maW5hbCwgY2FtbF9oYXNoX21peF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2hhc2goaCwgdil7XG4gIHZhciBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KTtcbiAgdmFyIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIFVJbnQ4QXJyYXlSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gczsgdGhpcy5pID0gaTsgfVxuVUludDhBcnJheVJlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnNbdGhpcy5pKytdOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zW3RoaXMuaSsrXSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDgpIHwgc1tpICsgMV1cbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzW2ldIDw8IDI0ID4+IDE2KSB8IHNbaSArIDFdO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzW2ldIDw8IDI0KSB8IChzW2krMV0gPDwgMTYpIHxcbiAgICAgICAgICAgIChzW2krMl0gPDwgOCkgfCBzW2krM10pID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHNbaV0gPDwgMjQpIHwgKHNbaSsxXSA8PCAxNikgfFxuICAgICAgKHNbaSsyXSA8PCA4KSB8IHNbaSszXTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkodGhpcy5zLnN1YmFycmF5KGksIGkgKyBsZW4pKTtcbiAgfSxcbiAgcmVhZHVpbnQ4YXJyYXk6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIHRoaXMucy5zdWJhcnJheShpLCBpICsgbGVuKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sU3RyaW5nUmVhZGVyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBNbFN0cmluZ1JlYWRlciAocywgaSkgeyB0aGlzLnMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpOyB0aGlzLmkgPSBpOyB9XG5NbFN0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLnMuY2hhckNvZGVBdCh0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCA+PiAxNikgfCBzLmNoYXJDb2RlQXQoaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKSkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5zLnN1YnN0cmluZyhpLCBpICsgbGVuKSk7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgdmFyIHMgPSB0aGlzLnM7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgZm9yKHZhciBqID0gMDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICBiW2pdID0gcy5jaGFyQ29kZUF0KGkgKyBqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gYjtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH0sXG4gIHJlYWR1aW50OGFycmF5OmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgb2Zmc2V0ID0gdGhpcy5vZmZzZXQoaSk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gdGhpcy5zLmRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW4pO1xuICB9XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKGEpIHtcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoY2FtbF9pbnQ2NF9vZl9ieXRlcyAoYSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fc3RyaW5nKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKHMsIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAoY2FtbF9zdHJpbmdfb2ZfYnl0ZXMocyksIHR5cGVvZiBvZnM9PVwibnVtYmVyXCI/b2ZzOm9mc1swXSk7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gIHNpemVbMF0gPSA4O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyAodCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9tYXJzaGFsKHdyaXRlciwgdiwgc2l6ZXMpIHtcbiAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzICh2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHdyaXRlci53cml0ZSAoOCwgYltpXSk7XG4gIHNpemVzWzBdID0gODsgc2l6ZXNbMV0gPSA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX3VubWFyc2hhbFxuZnVuY3Rpb24gY2FtbF9pbnQzMl91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc2l6ZVswXSA9IDQ7XG4gIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwocmVhZGVyLCBzaXplKXtcbiAgc3dpdGNoIChyZWFkZXIucmVhZDh1ICgpKSB7XG4gIGNhc2UgMTpcbiAgICBzaXplWzBdID0gNDtcbiAgICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG4gIGNhc2UgMjpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IG5hdGl2ZSBpbnRlZ2VyIHZhbHVlIHRvbyBsYXJnZVwiKTtcbiAgZGVmYXVsdDogY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG5hdGl2ZSBpbnRlZ2VyXCIpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF91bm1hcnNoYWwsIGNhbWxfaW50NjRfbWFyc2hhbCwgY2FtbF9pbnQ2NF9jb21wYXJlLCBjYW1sX2ludDY0X2hhc2hcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsLCBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfYmFfc2VyaWFsaXplLCBjYW1sX2JhX2Rlc2VyaWFsaXplLCBjYW1sX2JhX2NvbXBhcmUsIGNhbWxfYmFfaGFzaFxudmFyIGNhbWxfY3VzdG9tX29wcyA9XG4gICAge1wiX2pcIjoge1xuICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDY0X3VubWFyc2hhbCxcbiAgICAgIHNlcmlhbGl6ZSAgOiBjYW1sX2ludDY0X21hcnNoYWwsXG4gICAgICBmaXhlZF9sZW5ndGggOiA4LFxuICAgICAgY29tcGFyZSA6IGNhbWxfaW50NjRfY29tcGFyZSxcbiAgICAgIGhhc2ggOiBjYW1sX2ludDY0X2hhc2hcbiAgICB9LFxuICAgICBcIl9pXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50MzJfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX25cIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsLFxuICAgICAgIGZpeGVkX2xlbmd0aCA6IDQsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycmF5XCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnJheVwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9LFxuICAgICBcIl9iaWdhcnIwMlwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyMDJcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfVxuICAgIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL1JlcXVpcmVzOiBjYW1sX2Zsb2F0X29mX2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IFVJbnQ4QXJyYXlSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfZGVjb21wcmVzc19pbnB1dFxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcykge1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByZWFkZXIucmVhZDh1KCk7XG4gICAgdmFyIG4gPSBjICYgMHg3RjtcbiAgICB3aGlsZSAoKGMgJiAweDgwKSAhPSAwKSB7XG4gICAgICBjID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIG43ID0gbiA8PCA3O1xuICAgICAgaWYgKG4gIT0gbjcgPj4gNykgb3ZlcmZsb3dbMF0gPSB0cnVlO1xuICAgICAgbiA9IG43IHwgKGMgJiAweDdGKTtcbiAgICB9XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgdmFyIG1hZ2ljID0gcmVhZGVyLnJlYWQzMnUgKClcbiAgc3dpdGNoKG1hZ2ljKXtcbiAgY2FzZSAweDg0OTVBNkJFOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX3NtYWxsICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSAyMDtcbiAgICB2YXIgY29tcHJlc3NlZCA9IDA7XG4gICAgdmFyIGRhdGFfbGVuID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgdmFyIHVuY29tcHJlc3NlZF9kYXRhX2xlbiA9IGRhdGFfbGVuO1xuICAgIHZhciBudW1fb2JqZWN0cyA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV8zMiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByZWFkZXIucmVhZDh1KCkgJiAweDNGO1xuICAgIHZhciBjb21wcmVzc2VkID0gMTtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIHZhciB1bmNvbXByZXNzZWRfZGF0YV9sZW4gPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgbnVtX29iamVjdHMgPSByZWFkdmxxKG92ZXJmbG93KTtcbiAgICB2YXIgX3NpemVfMzIgPSByZWFkdmxxIChvdmVyZmxvdyk7XG4gICAgdmFyIF9zaXplXzY0ID0gcmVhZHZscSAob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXI6IG9iamVjdCB0b28gbGFyZ2UgdG8gYmUgcmVhZCBiYWNrIG9uIHRoaXMgcGxhdGZvcm1cIik7XG4gICAgfVxuICAgIGJyZWFrXG4gIGNhc2UgMHg4NDk1QTZCRjogLyogSW50ZXh0X21hZ2ljX251bWJlcl9iaWcgKi9cbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gYSAzMi1iaXQgcGxhdGZvcm1cIik7XG4gICAgYnJlYWtcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcjogYmFkIG9iamVjdFwiKTtcbiAgICBicmVhaztcbiAgfVxuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjIChyZWFkZXIpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIGlmKGNvbXByZXNzZWQgPT0gMCkgb2Zmc2V0ID0gb2JqX2NvdW50ZXIgLSBvZmZzZXQ7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICBpZihjb21wcmVzc2VkID09IDApIG9mZnNldCA9IG9ial9jb3VudGVyIC0gb2Zmc2V0O1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgaWYoY29tcHJlc3NlZCA9PSAwKSBvZmZzZXQgPSBvYmpfY291bnRlciAtIG9mZnNldDtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmKGNvbXByZXNzZWQpIHtcbiAgICBpZihjYW1sX2RlY29tcHJlc3NfaW5wdXQpIHtcbiAgICAgIHZhciBkYXRhID0gcmVhZGVyLnJlYWR1aW50OGFycmF5KGRhdGFfbGVuKTtcbiAgICAgIHZhciByZXMgPSBuZXcgVWludDhBcnJheSh1bmNvbXByZXNzZWRfZGF0YV9sZW4pO1xuICAgICAgdmFyIHJlcyA9IGNhbWxfZGVjb21wcmVzc19pbnB1dChkYXRhLCByZXMpO1xuICAgICAgdmFyIHJlYWRlciA9IG5ldyBVSW50OEFycmF5UmVhZGVyKHJlcywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogY29tcHJlc3NlZCBvYmplY3QsIGNhbm5vdCBkZWNvbXByZXNzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcmVzID0gaW50ZXJuX3JlYyAocmVhZGVyKTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgc2l6ZSA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciB2ID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIGQgPSB2Lmxlbmd0aDtcbiAgICBpZiAoZCA8IHNpemUpIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgdltkXSA9IGludGVybl9yZWMgKHJlYWRlcik7XG4gIH1cbiAgaWYgKHR5cGVvZiBvZnMhPVwibnVtYmVyXCIpIG9mc1swXSA9IHJlYWRlci5pO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemVcbi8vVmVyc2lvbjogPCA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDIwXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuLy9WZXJzaW9uOiA+PSA1LjEuMFxudmFyIGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSA9IDE2XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuLy9SZXF1aXJlczogVUludDhBcnJheVJlYWRlclxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplXG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgdmFyIHIgPSBuZXcgVUludDhBcnJheVJlYWRlcihjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpLCBvZnMpO1xuICBmdW5jdGlvbiByZWFkdmxxKG92ZXJmbG93KSB7XG4gICAgdmFyIGMgPSByLnJlYWQ4dSgpO1xuICAgIHZhciBuID0gYyAmIDB4N0Y7XG4gICAgd2hpbGUgKChjICYgMHg4MCkgIT0gMCkge1xuICAgICAgYyA9IHIucmVhZDh1KCk7XG4gICAgICB2YXIgbjcgPSBuIDw8IDc7XG4gICAgICBpZiAobiAhPSBuNyA+PiA3KSBvdmVyZmxvd1swXSA9IHRydWU7XG4gICAgICBuID0gbjcgfCAoYyAmIDB4N0YpO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHN3aXRjaChyLnJlYWQzMnUoKSl7XG4gIGNhc2UgMHg4NDk1QTZCRTogLyogSW50ZXh0X21hZ2ljX251bWJlcl9zbWFsbCAqL1xuICAgIHZhciBoZWFkZXJfbGVuID0gMjA7XG4gICAgdmFyIGRhdGFfbGVuID0gci5yZWFkMzJ1KCk7XG4gICAgYnJlYWs7XG4gIGNhc2UgMHg4NDk1QTZCRDogLyogSW50ZXh0X21hZ2ljX251bWJlcl9jb21wcmVzc2VkICovXG4gICAgdmFyIGhlYWRlcl9sZW4gPSByLnJlYWQ4dSgpICYgMHgzRjtcbiAgICB2YXIgb3ZlcmZsb3cgPSBbZmFsc2VdO1xuICAgIHZhciBkYXRhX2xlbiA9IHJlYWR2bHEob3ZlcmZsb3cpO1xuICAgIGlmKG92ZXJmbG93WzBdKXtcbiAgICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogb2JqZWN0IHRvbyBsYXJnZSB0byBiZSByZWFkIGJhY2sgb24gdGhpcyBwbGF0Zm9ybVwiKTtcbiAgICB9XG4gICAgYnJlYWtcbiAgY2FzZSAweDg0OTVBNkJGOiAvKiBJbnRleHRfbWFnaWNfbnVtYmVyX2JpZyAqL1xuICBkZWZhdWx0OlxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgICBicmVha1xuICB9XG4gIHJldHVybiBoZWFkZXJfbGVuIC0gY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplICsgZGF0YV9sZW47XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzLk1hcCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIC8qIHBvbHlmaWxsICh1c2luZyBsaW5lYXIgc2VhcmNoKSAqL1xuICAgIGZ1bmN0aW9uIE5haXZlTG9va3VwKG9ianMpIHsgdGhpcy5vYmpzID0gb2JqczsgfVxuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbih2KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub2Jqcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAodGhpcy5vYmpzW2ldID09PSB2KSByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9O1xuICAgIE5haXZlTG9va3VwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIC8vIERvIG5vdGhpbmcgaGVyZS4gW01sT2JqZWN0VGFibGUuc3RvcmVdIHdpbGwgcHVzaCB0byBbdGhpcy5vYmpzXSBkaXJlY3RseS5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgICB0aGlzLm9ianMgPSBbXTsgdGhpcy5sb29rdXAgPSBuZXcgTmFpdmVMb29rdXAodGhpcy5vYmpzKTtcbiAgICB9O1xuICB9KCk7XG59XG5lbHNlIHtcbiAgTWxPYmplY3RUYWJsZSA9IGZ1bmN0aW9uIE1sT2JqZWN0VGFibGUoKSB7XG4gICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IGdsb2JhbFRoaXMuTWFwKCk7XG4gIH07XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnN0b3JlID0gZnVuY3Rpb24odikge1xuICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gIHRoaXMub2Jqcy5wdXNoKHYpO1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5yZWNhbGwgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICByZXR1cm4gKGkgPT09IHVuZGVmaW5lZClcbiAgICA/IHVuZGVmaW5lZCA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAgIC8qIGluZGV4IGlzIHJlbGF0aXZlICovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfaXNfY29udGludWF0aW9uX3RhZ1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IGZ1bmN0aW9uICgpe1xuICBmdW5jdGlvbiBXcml0ZXIgKCkgeyB0aGlzLmNodW5rID0gW107IH1cbiAgV3JpdGVyLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua19pZHg6MjAsIGJsb2NrX2xlbjowLCBvYmpfY291bnRlcjowLCBzaXplXzMyOjAsIHNpemVfNjQ6MCxcbiAgICB3cml0ZTpmdW5jdGlvbiAoc2l6ZSwgdmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2F0OmZ1bmN0aW9uIChwb3MsIHNpemUsIHZhbHVlKSB7XG4gICAgICB2YXIgcG9zID0gcG9zO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2NvZGU6ZnVuY3Rpb24gKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX3NoYXJlZDpmdW5jdGlvbiAob2Zmc2V0KSB7XG4gICAgICBpZiAob2Zmc2V0IDwgKDEgPDwgOCkpIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgKDEgPDwgMTYpKSB0aGlzLndyaXRlX2NvZGUoMTYsIDB4MDUgLypjc3QuQ09ERV9TSEFSRUQxNiovLCBvZmZzZXQpO1xuICAgICAgZWxzZSB0aGlzLndyaXRlX2NvZGUoMzIsIDB4MDYgLypjc3QuQ09ERV9TSEFSRUQzMiovLCBvZmZzZXQpO1xuICAgIH0sXG4gICAgcG9zOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2h1bmtfaWR4IH0sXG4gICAgZmluYWxpemU6ZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSB0aGlzLmNodW5rX2lkeCAtIDIwO1xuICAgICAgdGhpcy5jaHVua19pZHggPSAwO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIDB4ODQ5NUE2QkUpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLm9ial9jb3VudGVyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfMzIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gKGZsYWdzLmluZGV4T2YoMCAvKk1hcnNoYWwuTm9fc2hhcmluZyovKSAhPT0gLTEpLFxuICAgICAgICBjbG9zdXJlcyA9ICAoZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTEpO1xuICAgIC8qIE1hcnNoYWwuQ29tcGF0XzMyIGlzIHJlZHVuZGFudCBzaW5jZSBpbnRlZ2VycyBhcmUgMzItYml0IGFueXdheSAqL1xuXG4gICAgaWYgKGNsb3N1cmVzKVxuICAgICAgY29uc29sZS53YXJuKFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlciAoKTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgaW50ZXJuX29ial90YWJsZSA9IG5vX3NoYXJpbmcgPyBudWxsIDogbmV3IE1sT2JqZWN0VGFibGUoKTtcblxuICAgIGZ1bmN0aW9uIG1lbW8odikge1xuICAgICAgaWYgKG5vX3NoYXJpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBleGlzdGluZ19vZmZzZXQgPSBpbnRlcm5fb2JqX3RhYmxlLnJlY2FsbCh2KTtcbiAgICAgIGlmIChleGlzdGluZ19vZmZzZXQpIHsgd3JpdGVyLndyaXRlX3NoYXJlZChleGlzdGluZ19vZmZzZXQpOyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IGludGVybl9vYmpfdGFibGUuc3RvcmUodik7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWMgKHYpIHtcbiAgICAgIGlmICh2LmNhbWxfY3VzdG9tKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBuYW1lID0gdi5jYW1sX2N1c3RvbTtcbiAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tuYW1lXTtcbiAgICAgICAgdmFyIHN6XzMyXzY0ID0gWzAsMF07XG4gICAgICAgIGlmKCFvcHMuc2VyaWFsaXplKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEN1c3RvbSlcIik7XG4gICAgICAgIGlmKG9wcy5maXhlZF9sZW5ndGggPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIGhlYWRlcl9wb3MgPSB3cml0ZXIucG9zICgpO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MsIDMyLCBzel8zMl82NFswXSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA0LCAzMiwgMCk7IC8vIHplcm9cbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDgsIDMyLCBzel8zMl82NFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE5IC8qY3N0LkNPREVfQ1VTVE9NX0ZJWEVEKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSB3cml0ZXIucG9zKCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPSB3cml0ZXIucG9zKCkgLSBvbGRfcG9zKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgICAgaWYgKHZbMF0gPT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FtbF9pc19jb250aW51YXRpb25fdGFnKHZbMF0pKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogY29udGludWF0aW9uIHZhbHVlXCIpO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLyArIHZbMF0gKyAoKHYubGVuZ3RoIC0gMSk8PDQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDA4IC8qY3N0LkNPREVfQkxPQ0szMiovLCAoKHYubGVuZ3RoLTEpIDw8IDEwKSB8IHZbMF0pO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2ggKHYsIDEpO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICAgIGlmKCEoY2FtbF9pc19tbF9ieXRlcyhjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpKSkpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodiAhPSAodnwwKSl7XG4gICAgICAgICAgdmFyIHR5cGVfb2ZfdiA9IHR5cGVvZiB2O1xuICAgICAgICAgIGlmKHR5cGVfb2ZfdiAhPSBcIm51bWJlclwiKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKFwiK3R5cGVfb2ZfditcIilcIik7XG4gICAgICAgICAgLy8gSWYgYSBmbG9hdCBoYXBwZW5zIHRvIGJlIGFuIGludGVnZXIgaXQgaXMgc2VyaWFsaXplZCBhcyBhbiBpbnRlZ2VyXG4gICAgICAgICAgLy8gKEpzX29mX29jYW1sIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHR5cGUgb2YgYW4gaW50ZWdlciBudW1iZXIgaXNcbiAgICAgICAgICAvLyBmbG9hdCBvciBpbnRlZ2VyLikgVGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgY3Jhc2hlcyB3aGVuXG4gICAgICAgICAgLy8gdW5tYXJzaGFsbGluZyB1c2luZyB0aGUgc3RhbmRhcmQgcnVudGltZS5cbiAgICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICAgIHZhciB0ID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodikpO1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgwQyAvKmNzdC5DT0RFX0RPVUJMRV9MSVRUTEUqLyk7XG4gICAgICAgICAgZm9yKHZhciBpID0gMDsgaTw4OyBpKyspe3dyaXRlci53cml0ZSg4LHRbNyAtIGldKX1cbiAgICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAzXG4gICAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMlxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPj0gMCAmJiB2IDwgMHg0MCkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMFg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8gKyB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodiA+PSAtKDEgPDwgNykgJiYgdiA8ICgxIDw8IDcpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwMCAvKmNzdC5DT0RFX0lOVDgqLywgdik7XG4gICAgICAgICAgZWxzZSBpZiAodiA+PSAtKDEgPDwgMTUpICYmIHYgPCAoMSA8PCAxNSkpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDAyIC8qY3N0LkNPREVfSU5UMzIqLywgdik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZXh0ZXJuX3JlYyAodik7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBpID0gc3RhY2sucG9wICgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AgKCk7XG4gICAgICBpZiAoaSArIDEgPCB2Lmxlbmd0aCkgc3RhY2sucHVzaCAodiwgaSArIDEpO1xuICAgICAgZXh0ZXJuX3JlYyAodltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB3cml0ZXIuY2h1bms7XG4gIH1cbn0gKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9ibGl0X2J5dGVzXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIgKHMsIG9mcywgbGVuLCB2LCBmbGFncykge1xuICB2YXIgdCA9IGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGggKFwiTWFyc2hhbC50b19idWZmZXI6IGJ1ZmZlciBvdmVyZmxvd1wiKTtcbiAgY2FtbF9ibGl0X2J5dGVzKHQsIDAsIHMsIG9mcywgdC5sZW5ndGgpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSl7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpIHJldHVybiAyNTI7IC8vIHN0cmluZ190YWdcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoYSkpIHJldHVybiAxMjUyOyAvLyBvY2FtbCBzdHJpbmcgKGlmIGRpZmZlcmVudCBmcm9tIGJ5dGVzKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgQXJyYXkgJiYgYVswXSA9PT0gKGFbMF0+Pj4wKSAmJiBhWzBdIDw9IDI1NSkge1xuICAgIC8vIExvb2sgbGlrZSBhbiBvY2FtbCBibG9ja1xuICAgIHZhciB0YWcgPSBhWzBdIHwgMDtcbiAgICAvLyBpZ25vcmUgZG91YmxlX2FycmF5X3RhZyBiZWNhdXNlIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IHNldFxuICAgIC8vIHRoaXMgdGFnIHdoZW4gd2UgY3JlYXRlIGFuIGFycmF5IG9mIGZsb2F0LlxuICAgIHJldHVybiAodGFnID09IDI1NCk/MDp0YWdcbiAgfVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBOdW1iZXIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChhICYmIGEuY2FtbF9jdXN0b20pIHJldHVybiAxMjU1OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAoYSAmJiBhLmNvbXBhcmUpIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN5bWJvbFwiKSByZXR1cm4gMTI1MTtcbiAgcmV0dXJuIDEwMDE7IC8vb3V0X29mX2hlYXBfdGFnXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSl7XG4gIHJldHVybiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20obnVtLCBjdXN0b20sIHN3YXAsIHRvdGFsKSB7XG4gIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGN1c3RvbSk7XG4gIGlmKGNvbXApIHtcbiAgICB2YXIgeCA9IChzd2FwID4gMCk/Y29tcChjdXN0b20sbnVtLHRvdGFsKTpjb21wKG51bSxjdXN0b20sdG90YWwpO1xuICAgIGlmKHRvdGFsICYmIHggIT0geCkgcmV0dXJuIHN3YXA7IC8vIHRvdGFsICYmIG5hblxuICAgIGlmKCt4ICE9ICt4KSByZXR1cm4gK3g7IC8vIG5hblxuICAgIGlmKCh4IHwgMCkgIT0gMCkgcmV0dXJuICh4IHwgMCk7IC8vICFuYW5cbiAgfVxuICByZXR1cm4gc3dhcFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsIChjb25zdCwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnRfY29tcGFyZSwgY2FtbF9zdHJpbmdfY29tcGFyZSwgY2FtbF9ieXRlc19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSwgY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19jb250aW51YXRpb25fdGFnXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0b3RhbCkge1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgZm9yKDs7KSB7XG4gICAgaWYgKCEodG90YWwgJiYgYSA9PT0gYikpIHtcbiAgICAgIHZhciB0YWdfYSA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGEpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2EgPT0gMjUwKSB7IGEgPSBhWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIHZhciB0YWdfYiA9IGNhbWxfY29tcGFyZV92YWxfdGFnKGIpO1xuICAgICAgLy8gZm9yd2FyZF90YWcgP1xuICAgICAgaWYodGFnX2IgPT0gMjUwKSB7IGIgPSBiWzFdOyBjb250aW51ZSB9XG5cbiAgICAgIC8vIHRhZ3MgYXJlIGRpZmZlcmVudFxuICAgICAgaWYodGFnX2EgIT09IHRhZ19iKSB7XG4gICAgICAgIGlmKHRhZ19hID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYiA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGEsIGIsIC0xLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmKHRhZ19iID09IDEwMDApIHtcbiAgICAgICAgICBpZih0YWdfYSA9PSAxMjU1KSB7IC8vaW1tZWRpYXRlIGNhbiBjb21wYXJlIGFnYWluc3QgY3VzdG9tXG4gICAgICAgICAgICByZXR1cm4gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKGIsIGEsIDEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIDFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRhZ19hIDwgdGFnX2IpPy0xOjE7XG4gICAgICB9XG4gICAgICBzd2l0Y2godGFnX2Epe1xuICAgICAgICAvLyAyNDY6IExhenlfdGFnIGhhbmRsZWQgYmVsbG93XG4gICAgICBjYXNlIDI0NzogLy8gQ2xvc3VyZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNDg6IC8vIE9iamVjdFxuICAgICAgICB2YXIgeCA9IGNhbWxfaW50X2NvbXBhcmUoYVsyXSwgYlsyXSk7XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ5OiAvLyBJbmZpeFxuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1MDogLy8gRm9yd2FyZCB0YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEZvcndhcmRfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MTogLy9BYnN0cmFjdFxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTI6IC8vIE9DYW1sIGJ5dGVzXG4gICAgICAgIGlmIChhICE9PSBiKSB7XG4gICAgICAgICAgdmFyIHggPSBjYW1sX2J5dGVzX2NvbXBhcmUoYSwgYik7XG4gICAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTM6IC8vIERvdWJsZV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfYXJyYXlfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjU1OiAvLyBDdXN0b21fdGFnXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgQ3VzdG9tX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjQ3OiAvLyBGdW5jdGlvblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NTogLy8gQ3VzdG9tXG4gICAgICAgIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpO1xuICAgICAgICBpZihjb21wICE9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShiKSl7XG4gICAgICAgICAgcmV0dXJuIChhLmNhbWxfY3VzdG9tPGIuY2FtbF9jdXN0b20pPy0xOjE7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIWNvbXApXG4gICAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogYWJzdHJhY3QgdmFsdWVcIik7XG4gICAgICAgIHZhciB4ID0gY29tcChhLGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1NjogLy8gY29tcGFyZSBmdW5jdGlvblxuICAgICAgICB2YXIgeCA9IGEuY29tcGFyZShiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KSB7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAwOiAvLyBOdW1iZXJcbiAgICAgICAgYSA9ICthO1xuICAgICAgICBiID0gK2I7XG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDE6IC8vIFRoZSByZXN0XG4gICAgICAgIC8vIEhlcmUgd2UgY2FuIGJlIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgICAgIC8vIDEuIEphdmFTY3JpcHQgcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDIuIEphdmFTY3JpcHQgb2JqZWN0IHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vIDMuIEphdmFTY3JpcHQgb2JqZWN0IHRoYW4gY2Fubm90IGJlIGNvZXJjZWQgdG8gcHJpbWl0aXZlIHR5cGVzXG4gICAgICAgIC8vXG4gICAgICAgIC8vICgzKSB3aWxsIHJhaXNlIGEgW1R5cGVFcnJvcl1cbiAgICAgICAgLy8gKDIpIHdpbGwgY29lcmNlIHRvIHByaW1pdGl2ZSB0eXBlcyB1c2luZyBbdmFsdWVPZl0gb3IgW3RvU3RyaW5nXVxuICAgICAgICAvLyAoMikgYW5kICgzKSwgYWZ0ZXIgZXZlbnR1YWwgY29lcmNpb25cbiAgICAgICAgLy8gLSBpZiBhIGFuZCBiIGFyZSBzdHJpbmdzLCBhcHBseSBsZXhpY29ncmFwaGljIGNvbXBhcmlzb25cbiAgICAgICAgLy8gLSBpZiBhIG9yIGIgYXJlIG5vdCBzdHJpbmdzLCBjb252ZXJ0IGEgYW5kIGIgdG8gbnVtYmVyXG4gICAgICAgIC8vICAgYW5kIGFwcGx5IHN0YW5kYXJkIGNvbXBhcmlzb25cbiAgICAgICAgLy9cbiAgICAgICAgLy8gRXhjZXB0aW9uOiBgIT1gIHdpbGwgbm90IGNvZXJjZS9jb252ZXJ0IGlmIGJvdGggYSBhbmQgYiBhcmUgb2JqZWN0c1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUxOiAvLyBKYXZhU2NyaXB0IFN5bWJvbCwgbm8gb3JkZXJpbmcuXG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyOiAvLyBvY2FtbCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhhKTtcbiAgICAgICAgdmFyIGIgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGIpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTIwOiAvLyBqYXZhc2NyaXB0IHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XG4gICAgICAgIHZhciBiID0gYi50b1N0cmluZygpO1xuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgICBpZihhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0NjogLy8gTGF6eV90YWdcbiAgICAgIGNhc2UgMjU0OiAvLyBEb3VibGVfYXJyYXlcbiAgICAgIGRlZmF1bHQ6IC8vIEJsb2NrIHdpdGggb3RoZXIgdGFnXG4gICAgICAgIGlmKGNhbWxfaXNfY29udGludWF0aW9uX3RhZyh0YWdfYSkpIHtcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBjb250aW51YXRpb24gdmFsdWVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gKGEubGVuZ3RoIDwgYi5sZW5ndGgpPy0xOjE7XG4gICAgICAgIGlmIChhLmxlbmd0aCA+IDEpIHN0YWNrLnB1c2goYSwgYiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHJldHVybiAwO1xuICAgIHZhciBpID0gc3RhY2sucG9wKCk7XG4gICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoaSArIDEgPCBhLmxlbmd0aCkgc3RhY2sucHVzaChhLCBiLCBpICsgMSk7XG4gICAgYSA9IGFbaV07XG4gICAgYiA9IGJbaV07XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlIChhLCBiKSB7IHJldHVybiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0cnVlKTsgfVxuLy9Qcm92aWRlczogY2FtbF9pbnRfY29tcGFyZSBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2ludF9jb21wYXJlIChhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuICgtMSk7IGlmIChhID09IGIpIHJldHVybiAwOyByZXR1cm4gMTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9lcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgIT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcmVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcmVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVydGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3NlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPD0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc3RoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzdGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPCAwKTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBGb3JtYXRcblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9mb3JtYXRcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9mb3JtYXQgKGZtdCkge1xuICBmbXQgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCk7XG4gIHZhciBsZW4gPSBmbXQubGVuZ3RoO1xuICBpZiAobGVuID4gMzEpIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImZvcm1hdF9pbnQ6IGZvcm1hdCB0b28gbG9uZ1wiKTtcbiAgdmFyIGYgPVxuICAgICAgeyBqdXN0aWZ5OicrJywgc2lnbnN0eWxlOictJywgZmlsbGVyOicgJywgYWx0ZXJuYXRlOmZhbHNlLFxuICAgICAgICBiYXNlOjAsIHNpZ25lZGNvbnY6ZmFsc2UsIHdpZHRoOjAsIHVwcGVyY2FzZTpmYWxzZSxcbiAgICAgICAgc2lnbjoxLCBwcmVjOi0xLCBjb252OidmJyB9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGMgPSBmbXQuY2hhckF0KGkpO1xuICAgIHN3aXRjaCAoYykge1xuICAgIGNhc2UgJy0nOlxuICAgICAgZi5qdXN0aWZ5ID0gJy0nOyBicmVhaztcbiAgICBjYXNlICcrJzogY2FzZSAnICc6XG4gICAgICBmLnNpZ25zdHlsZSA9IGM7IGJyZWFrO1xuICAgIGNhc2UgJzAnOlxuICAgICAgZi5maWxsZXIgPSAnMCc7IGJyZWFrO1xuICAgIGNhc2UgJyMnOlxuICAgICAgZi5hbHRlcm5hdGUgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6XG4gICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6XG4gICAgICBmLndpZHRoID0gMDtcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi53aWR0aCA9IGYud2lkdGggKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnLic6XG4gICAgICBmLnByZWMgPSAwO1xuICAgICAgaSsrO1xuICAgICAgd2hpbGUgKGM9Zm10LmNoYXJDb2RlQXQoaSkgLSA0OCwgYyA+PSAwICYmIGMgPD0gOSkge1xuICAgICAgICBmLnByZWMgPSBmLnByZWMgKiAxMCArIGM7IGkrK1xuICAgICAgfVxuICAgICAgaS0tO1xuICAgIGNhc2UgJ2QnOiBjYXNlICdpJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAndSc6XG4gICAgICBmLmJhc2UgPSAxMDsgYnJlYWs7XG4gICAgY2FzZSAneCc6XG4gICAgICBmLmJhc2UgPSAxNjsgYnJlYWs7XG4gICAgY2FzZSAnWCc6XG4gICAgICBmLmJhc2UgPSAxNjsgZi51cHBlcmNhc2UgPSB0cnVlOyBicmVhaztcbiAgICBjYXNlICdvJzpcbiAgICAgIGYuYmFzZSA9IDg7IGJyZWFrO1xuICAgIGNhc2UgJ2UnOiBjYXNlICdmJzogY2FzZSAnZyc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyBmLmNvbnYgPSBjOyBicmVhaztcbiAgICBjYXNlICdFJzogY2FzZSAnRic6IGNhc2UgJ0cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi51cHBlcmNhc2UgPSB0cnVlO1xuICAgICAgZi5jb252ID0gYy50b0xvd2VyQ2FzZSAoKTsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHJhd2J1ZmZlcikge1xuICBpZiAoZi51cHBlcmNhc2UpIHJhd2J1ZmZlciA9IHJhd2J1ZmZlci50b1VwcGVyQ2FzZSgpO1xuICB2YXIgbGVuID0gcmF3YnVmZmVyLmxlbmd0aDtcbiAgLyogQWRqdXN0IGxlbiB0byByZWZsZWN0IGFkZGl0aW9uYWwgY2hhcnMgKHNpZ24sIGV0YykgKi9cbiAgaWYgKGYuc2lnbmVkY29udiAmJiAoZi5zaWduIDwgMCB8fCBmLnNpZ25zdHlsZSAhPSAnLScpKSBsZW4rKztcbiAgaWYgKGYuYWx0ZXJuYXRlKSB7XG4gICAgaWYgKGYuYmFzZSA9PSA4KSBsZW4gKz0gMTtcbiAgICBpZiAoZi5iYXNlID09IDE2KSBsZW4gKz0gMjtcbiAgfVxuICAvKiBEbyB0aGUgZm9ybWF0dGluZyAqL1xuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnKycgJiYgZi5maWxsZXIgPT0gJyAnKVxuICAgIGZvciAodmFyIGkgPSBsZW47IGkgPCBmLndpZHRoOyBpKyspIGJ1ZmZlciArPSAnICc7XG4gIGlmIChmLnNpZ25lZGNvbnYpIHtcbiAgICBpZiAoZi5zaWduIDwgMCkgYnVmZmVyICs9ICctJztcbiAgICBlbHNlIGlmIChmLnNpZ25zdHlsZSAhPSAnLScpIGJ1ZmZlciArPSBmLnNpZ25zdHlsZTtcbiAgfVxuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDgpIGJ1ZmZlciArPSAnMCc7XG4gIGlmIChmLmFsdGVybmF0ZSAmJiBmLmJhc2UgPT0gMTYpIGJ1ZmZlciArPSBmLnVwcGVyY2FzZT9cIjBYXCI6XCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKVxufVxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIGZhbHNlXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGZCwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2Uocm9vdCkge1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5yb290ID0gcm9vdDtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmV4aXN0cyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHNTeW5jKHRoaXMubm0obmFtZSkpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzRmlsZSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm1rZGlyID0gZnVuY3Rpb24obmFtZSwgbW9kZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMubWtkaXJTeW5jKHRoaXMubm0obmFtZSkse21vZGU6bW9kZX0pO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5ybWRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIDBcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLnJlYWRkaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmlzX2RpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5zdGF0U3luYyh0aGlzLm5tKG5hbWUpKS5pc0RpcmVjdG9yeSgpPzE6MDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnVubGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYiA9IHRoaXMuZnMuZXhpc3RzU3luYyh0aGlzLm5tKG5hbWUpKT8xOjA7XG4gICAgdGhpcy5mcy51bmxpbmtTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiBiO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmLCByYWlzZV91bml4KSB7XG4gIHZhciBjb25zdHMgPSByZXF1aXJlKCdjb25zdGFudHMnKTtcbiAgdmFyIHJlcyA9IDA7XG4gIGZvcih2YXIga2V5IGluIGYpe1xuICAgIHN3aXRjaChrZXkpe1xuICAgIGNhc2UgXCJyZG9ubHlcIiAgOiByZXMgfD0gY29uc3RzLk9fUkRPTkxZOyBicmVhaztcbiAgICBjYXNlIFwid3Jvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1dST05MWTsgYnJlYWs7XG4gICAgY2FzZSBcImFwcGVuZFwiICA6XG4gICAgICByZXMgfD0gY29uc3RzLk9fV1JPTkxZIHwgY29uc3RzLk9fQVBQRU5EO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcImNyZWF0ZVwiICAgOiByZXMgfD0gY29uc3RzLk9fQ1JFQVQ7ICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0cnVuY2F0ZVwiIDogcmVzIHw9IGNvbnN0cy5PX1RSVU5DOyAgICBicmVhaztcbiAgICBjYXNlIFwiZXhjbFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19FWENMOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcImJpbmFyeVwiICAgOiByZXMgfD0gY29uc3RzLk9fQklOQVJZOyAgIGJyZWFrO1xuICAgIGNhc2UgXCJ0ZXh0XCIgICAgIDogcmVzIHw9IGNvbnN0cy5PX1RFWFQ7ICAgICBicmVhaztcbiAgICBjYXNlIFwibm9uYmxvY2tcIiA6IHJlcyB8PSBjb25zdHMuT19OT05CTE9DSzsgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRyeSB7XG4gICAgdmFyIGZkID0gdGhpcy5mcy5vcGVuU3luYyh0aGlzLm5tKG5hbWUpLCByZXMpO1xuICAgIHZhciBpc0NoYXJhY3RlckRldmljZSA9IHRoaXMuZnMubHN0YXRTeW5jKHRoaXMubm0obmFtZSkpLmlzQ2hhcmFjdGVyRGV2aWNlKCk7XG4gICAgZi5pc0NoYXJhY3RlckRldmljZSA9IGlzQ2hhcmFjdGVyRGV2aWNlO1xuICAgIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGYpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLm9wZW5kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMub3BlbmRpclN5bmModGhpcy5ubShuYW1lKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmFpc2Vfbm9kZWpzX2Vycm9yID0gZnVuY3Rpb24oZXJyLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gY2FtbF9uYW1lZF92YWx1ZShcIlVuaXguVW5peF9lcnJvclwiKTtcbiAgaWYgKHJhaXNlX3VuaXggJiYgdW5peF9lcnJvcikge1xuICAgIHZhciBhcmdzID0gbWFrZV91bml4X2Vycl9hcmdzKGVyci5jb2RlLCBlcnIuc3lzY2FsbCwgZXJyLnBhdGgsIGVyci5lcnJubyk7XG4gICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnN0YXRzX2Zyb21fanMgPSBmdW5jdGlvbihqc19zdGF0cykge1xuICAvKiA9PT1Vbml4LmZpbGVfa2luZD09PVxuICAgKiB0eXBlIGZpbGVfa2luZCA9XG4gICAqICAgICBTX1JFRyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFJlZ3VsYXIgZmlsZSAqKVxuICAgKiAgIHwgU19ESVIgICAgICAgICAgICAgICAgICAgICAgICgqKiBEaXJlY3RvcnkgKilcbiAgICogICB8IFNfQ0hSICAgICAgICAgICAgICAgICAgICAgICAoKiogQ2hhcmFjdGVyIGRldmljZSAqKVxuICAgKiAgIHwgU19CTEsgICAgICAgICAgICAgICAgICAgICAgICgqKiBCbG9jayBkZXZpY2UgKilcbiAgICogICB8IFNfTE5LICAgICAgICAgICAgICAgICAgICAgICAoKiogU3ltYm9saWMgbGluayAqKVxuICAgKiAgIHwgU19GSUZPICAgICAgICAgICAgICAgICAgICAgICgqKiBOYW1lZCBwaXBlICopXG4gICAqICAgfCBTX1NPQ0sgICAgICAgICAgICAgICAgICAgICAgKCoqIFNvY2tldCAqKVxuICAgKi9cbiAgdmFyIGZpbGVfa2luZDtcbiAgaWYgKGpzX3N0YXRzLmlzRmlsZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgZmlsZV9raW5kID0gMTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0NoYXJhY3RlckRldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMjtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0Jsb2NrRGV2aWNlKCkpIHtcbiAgICBmaWxlX2tpbmQgPSAzO1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzU3ltYm9saWNMaW5rKCkpIHtcbiAgICBmaWxlX2tpbmQgPSA0O1xuICB9IGVsc2UgaWYgKGpzX3N0YXRzLmlzRklGTygpKSB7XG4gICAgZmlsZV9raW5kID0gNTtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1NvY2tldCgpKSB7XG4gICAgZmlsZV9raW5kID0gNjtcbiAgfVxuICAvKiA9PT1Vbml4LnN0YXRzPT09XG4gICAqIHR5cGUgc3RhdHMgPVxuICAgKiAgeyBzdF9kZXYgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIERldmljZSBudW1iZXIgKilcbiAgICogICAgc3RfaW5vIDogaW50OyAgICAgICAgICAgICAgICgqKiBJbm9kZSBudW1iZXIgKilcbiAgICogICAgc3Rfa2luZCA6IGZpbGVfa2luZDsgICAgICAgICgqKiBLaW5kIG9mIHRoZSBmaWxlICopXG4gICAqICAgIHN0X3Blcm0gOiBmaWxlX3Blcm07ICAgICAgICAoKiogQWNjZXNzIHJpZ2h0cyAqKVxuICAgKiAgICBzdF9ubGluayA6IGludDsgICAgICAgICAgICAgKCoqIE51bWJlciBvZiBsaW5rcyAqKVxuICAgKiAgICBzdF91aWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIFVzZXIgaWQgb2YgdGhlIG93bmVyICopXG4gICAqICAgIHN0X2dpZCA6IGludDsgICAgICAgICAgICAgICAoKiogR3JvdXAgSUQgb2YgdGhlIGZpbGUncyBncm91cCAqKVxuICAgKiAgICBzdF9yZGV2IDogaW50OyAgICAgICAgICAgICAgKCoqIERldmljZSBJRCAoaWYgc3BlY2lhbCBmaWxlKSAqKVxuICAgKiAgICBzdF9zaXplIDogaW50OyAgICAgICAgICAgICAgKCoqIFNpemUgaW4gYnl0ZXMgKilcbiAgICogICAgc3RfYXRpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IGFjY2VzcyB0aW1lICopXG4gICAqICAgIHN0X210aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBtb2RpZmljYXRpb24gdGltZSAqKVxuICAgKiAgICBzdF9jdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3Qgc3RhdHVzIGNoYW5nZSB0aW1lICopXG4gICAqICB9XG4gICAqL1xuICByZXR1cm4gQkxPQ0soXG4gICAgMCxcbiAgICBqc19zdGF0cy5kZXYsXG4gICAganNfc3RhdHMuaW5vLFxuICAgIGZpbGVfa2luZCxcbiAgICBqc19zdGF0cy5tb2RlLFxuICAgIGpzX3N0YXRzLm5saW5rLFxuICAgIGpzX3N0YXRzLnVpZCxcbiAgICBqc19zdGF0cy5naWQsXG4gICAganNfc3RhdHMucmRldixcbiAgICBqc19zdGF0cy5zaXplLFxuICAgIGpzX3N0YXRzLmF0aW1lTXMsXG4gICAganNfc3RhdHMubXRpbWVNcyxcbiAgICBqc19zdGF0cy5jdGltZU1zXG4gICk7XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVEZXZpY2VcblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVEZXZpY2UoKSB7XG59XG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZkKGZkLCBmbGFncyl7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLmZkID0gZmQ7XG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sTm9kZUZkLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5NbE5vZGVGZC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbE5vZGVGZDtcblxuTWxOb2RlRmQucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCxsZW58MCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmQucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5mc3RhdFN5bmModGhpcy5mZCkuc2l6ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmLCBidWZfb2Zmc2V0LCBsZW4pO1xuICAgIGVsc2VcbiAgICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZiwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxhLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdHJ5IHtcbiAgICBpZih0aGlzLmZsYWdzLmlzQ2hhcmFjdGVyRGV2aWNlKVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbik7XG4gICAgZWxzZVxuICAgICAgdmFyIHJlYWQgPSB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGEsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgICByZXR1cm4gcmVhZDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGZC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpe1xuICB0cnkge1xuICAgIHRoaXMuZnMuY2xvc2VTeW5jKHRoaXMuZmQpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZkXG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBNbE5vZGVGZCgpe1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbi8vUmVxdWlyZXM6IE1sTm9kZUZkXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyl7XG4gIGlmKGZsYWdzLm5hbWUpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGZzID0gcmVxdWlyZShcImZzXCIpO1xuICAgICAgdmFyIGZkMiA9IGZzLm9wZW5TeW5jKGZsYWdzLm5hbWUsIFwicnNcIik7XG4gICAgICByZXR1cm4gbmV3IE1sTm9kZUZkKGZkMiwgZmxhZ3MpO1xuICAgIH0gY2F0Y2goZSkgeyAgfVxuICB9XG4gIHJldHVybiBuZXcgTWxOb2RlRmQoZmQsIGZsYWdzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gY2FtbF9zeXNfb3Blbl9mb3Jfbm9kZShmZCwgZmxhZ3Mpe1xuICByZXR1cm4gbnVsbDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRHVtbXkgZmlsZXN5c3RlbVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpe1xuICByZXR1cm4gKG5hbWUuc2xpY2UoLTEpICE9PSBcIi9cIikgPyAobmFtZSArIFwiL1wiKSA6IG5hbWU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3VycmVudF9kaXJcbi8vUmVxdWlyZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2gsIGZzX25vZGVfc3VwcG9ydGVkXG5pZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmN3ZClcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCcvJyk7XG5lbHNlXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gIFwiL3N0YXRpY1wiO1xuY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2goY2FtbF9jdXJyZW50X2Rpcik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3Jvb3Rcbi8vUmVxdWlyZXM6IHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfZ2V0X3Jvb3QocGF0aCl7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCJ9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9IGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHwgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuXG4vL1Byb3ZpZGVzOiBNbEZpbGVcbmZ1bmN0aW9uIE1sRmlsZSgpeyAgfVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCkge1xuICBmdW5jdGlvbiBwb3NpeChwYXRoKSB7XG4gICAgaWYgKHBhdGguY2hhckF0KDApID09PSAnLycpIHJldHVybiBbXCJcIiwgcGF0aC5zdWJzdHJpbmcoMSldO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdpbjMyKHBhdGgpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9iM2ZjYzI0NWZiMjU1Mzk5MDllZjFkNWVhYTAxZGJmOTJlMTY4NjMzL2xpYi9wYXRoLmpzI0w1NlxuICAgIHZhciBzcGxpdERldmljZVJlID0gL14oW2EtekEtWl06fFtcXFxcL117Mn1bXlxcXFwvXStbXFxcXC9dK1teXFxcXC9dKyk/KFtcXFxcL10pPyhbXFxzXFxTXSo/KSQvO1xuICAgIHZhciByZXN1bHQgPSBzcGxpdERldmljZVJlLmV4ZWMocGF0aCk7XG4gICAgdmFyIGRldmljZSA9IHJlc3VsdFsxXSB8fCAnJztcbiAgICB2YXIgaXNVbmMgPSBCb29sZWFuKGRldmljZSAmJiBkZXZpY2UuY2hhckF0KDEpICE9PSAnOicpO1xuXG4gICAgLy8gVU5DIHBhdGhzIGFyZSBhbHdheXMgYWJzb2x1dGVcbiAgICBpZiAoQm9vbGVhbihyZXN1bHRbMl0gfHwgaXNVbmMpKSB7XG4gICAgICB2YXIgcm9vdCA9IChyZXN1bHRbMV0gfHwgJycpO1xuICAgICAgdmFyIHNlcCA9IChyZXN1bHRbMl0gfHwgJycpO1xuICAgICAgcmV0dXJuIFtyb290LCBwYXRoLnN1YnN0cmluZyhyb290Lmxlbmd0aCArIHNlcC5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYoZnNfbm9kZV9zdXBwb3J0ZWQgKCkgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4zMiA6IHBvc2l4O1xuICB9XG4gIGVsc2UgcmV0dXJuIHBvc2l4XG59XG52YXIgcGF0aF9pc19hYnNvbHV0ZSA9IG1ha2VfcGF0aF9pc19hYnNvbHV0ZSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21ha2VfcGF0aFxuLy9SZXF1aXJlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcsIHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfbWFrZV9wYXRoIChuYW1lKSB7XG4gIG5hbWU9Y2FtbF9qc3N0cmluZ19vZl9zdHJpbmcobmFtZSk7XG4gIGlmKCAhcGF0aF9pc19hYnNvbHV0ZShuYW1lKSApXG4gICAgbmFtZSA9IGNhbWxfY3VycmVudF9kaXIgKyBuYW1lO1xuICB2YXIgY29tcDAgPSBwYXRoX2lzX2Fic29sdXRlKG5hbWUpO1xuICB2YXIgY29tcCA9IGNvbXAwWzFdLnNwbGl0KFwiL1wiKTtcbiAgdmFyIG5jb21wID0gW11cbiAgZm9yKHZhciBpID0gMDsgaTxjb21wLmxlbmd0aDsgaSsrKXtcbiAgICBzd2l0Y2goY29tcFtpXSl7XG4gICAgY2FzZSBcIi4uXCI6IGlmKG5jb21wLmxlbmd0aD4xKSBuY29tcC5wb3AoKTsgYnJlYWs7XG4gICAgY2FzZSBcIi5cIjogYnJlYWs7XG4gICAgY2FzZSBcIlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gcGF0aC5qb2luKFwiL1wiKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpO1xuICB2YXIgcmVzO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZihuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09IDBcbiAgICAgICAmJiAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKSlcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gIH1cbiAgaWYoICFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGRpcikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfYV9kaXIobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmlsZV9leGlzdHNcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19maWxlX2V4aXN0cyAobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9hX2RpciwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLnJlYWRkaXIocm9vdC5yZXN0KTtcbiAgdmFyIGwgPSBuZXcgQXJyYXkoYS5sZW5ndGggKyAxKTtcbiAgbFswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKVxuICAgIGxbaSsxXSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYVtpXSk7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW1vdmVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgb2sgPSByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0KTtcbiAgaWYob2sgPT0gMCkgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiBhPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVuYW1lKG8sbil7XG4gIHZhciBvX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShvKTtcbiAgdmFyIG5fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG4pO1xuICBpZihvX3Jvb3QuZGV2aWNlICE9IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZighb19yb290LmRldmljZS5yZW5hbWUpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm8gaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfc3lzX21rZGlyKG5hbWUsIHBlcm0pe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QscGVybSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vdF9hX2RpclxuZnVuY3Rpb24gY2FtbF9zeXNfcm1kaXIobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfc3lzX2Zkc1t2ZmRdO1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9iYV9tYXBfZmlsZSBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGVfYnl0ZWNvZGUoYXJndixhcmduKXtcbiAgcmV0dXJuIGNhbWxfYmFfbWFwX2ZpbGUoYXJndlswXSxhcmd2WzFdLGFyZ3ZbMl0sYXJndlszXSxhcmd2WzRdLGFyZ3ZbNV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlX2V4dGVyblxuZnVuY3Rpb24ganNvb19jcmVhdGVfZmlsZV9leHRlcm4obmFtZSxjb250ZW50KXtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKVxuICAgIGdsb2JhbFRoaXMuanNvb19jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZighZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCkgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICAgIGdsb2JhbFRoaXMuY2FtbF9mc190bXAucHVzaCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGpzb29fY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCAoKXtcbiAgdmFyIHRtcD1nbG9iYWxUaGlzLmNhbWxfZnNfdG1wXG4gIGlmKHRtcCl7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHRtcC5sZW5ndGg7IGkrKyl7XG4gICAgICBqc29vX2NyZWF0ZV9maWxlKHRtcFtpXS5uYW1lLHRtcFtpXS5jb250ZW50KTtcbiAgICB9XG4gIH1cbiAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlID0ganNvb19jcmVhdGVfZmlsZTtcbiAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcCA9IFtdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKCEgcm9vdC5kZXZpY2UucmVnaXN0ZXIpIGNhbWxfZmFpbHdpdGgoXCJjYW5ub3QgcmVnaXN0ZXIgZmlsZVwiKTtcbiAgcm9vdC5kZXZpY2UucmVnaXN0ZXIocm9vdC5yZXN0LGNvbnRlbnQpO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBqc29vX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9maWxlLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCkge1xuICB2YXIgbmFtZSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk7XG4gIHZhciBjb250ZW50ID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjb250ZW50KTtcbiAgcmV0dXJuIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSwgY29udGVudCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9yZWFkX2ZpbGVfY29udGVudFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWFkX2ZpbGVfY29udGVudCAobmFtZSkge1xuICB2YXIgbmFtZSA9ICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKT9jYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpOm5hbWU7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbik7XG4gICAgZmlsZS5yZWFkKDAsYnVmLDAsbGVuKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYnVmKVxuICB9XG4gIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkpO1xufVxuIiwiLy9Qcm92aWRlczogY2FtbF91bml4X2dldHRpbWVvZmRheVxuLy9BbGlhczogdW5peF9nZXR0aW1lb2ZkYXlcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR0aW1lb2ZkYXkgKCkge1xuICByZXR1cm4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKSAvIDEwMDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF90aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfZ2V0dGltZW9mZGF5XG4vL0FsaWFzOiB1bml4X3RpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoY2FtbF91bml4X2dldHRpbWVvZmRheSAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9nbXRpbWVcbi8vQWxpYXM6IHVuaXhfZ210aW1lXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ210aW1lICh0KSB7XG4gIHZhciBkID0gbmV3IERhdGUgKHQgKiAxMDAwKTtcbiAgdmFyIGRfbnVtID0gZC5nZXRUaW1lKCk7XG4gIHZhciBqYW51YXJ5Zmlyc3QgPSAobmV3IERhdGUoRGF0ZS5VVEMoZC5nZXRVVENGdWxsWWVhcigpLCAwLCAxKSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0VVRDU2Vjb25kcygpLCBkLmdldFVUQ01pbnV0ZXMoKSwgZC5nZXRVVENIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXRlKCksIGQuZ2V0VVRDTW9udGgoKSwgZC5nZXRVVENGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIGZhbHNlIHwgMCAvKiBmb3IgVVRDIGRheWxpZ2h0IHNhdmluZ3MgdGltZSBpcyBmYWxzZSAqLylcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xvY2FsdGltZVxuLy9BbGlhczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIGNhbWxfdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXREYXRlKCksIGQuZ2V0TW9udGgoKSwgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbWt0aW1lXG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfbG9jYWx0aW1lXG4vL0FsaWFzOiB1bml4X21rdGltZVxuZnVuY3Rpb24gY2FtbF91bml4X21rdGltZSh0bSl7XG4gIHZhciBkID0gKG5ldyBEYXRlKHRtWzZdKzE5MDAsdG1bNV0sdG1bNF0sdG1bM10sdG1bMl0sdG1bMV0pKS5nZXRUaW1lKCk7XG4gIHZhciB0ID0gTWF0aC5mbG9vcihkIC8gMTAwMCk7XG4gIHZhciB0bTIgPSBjYW1sX3VuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhcnR1cCBjb25zdFxuLy9BbGlhczogd2luX3N0YXJ0dXBcbmZ1bmN0aW9uIGNhbWxfdW5peF9zdGFydHVwKCkge31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2NsZWFudXAgY29uc3Rcbi8vQWxpYXM6IHdpbl9jbGVhbnVwXG5mdW5jdGlvbiBjYW1sX3VuaXhfY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQgY29uc3Rcbi8vQWxpYXM6IHdpbl9oYW5kbGVfZmRcbmZ1bmN0aW9uIGNhbWxfdW5peF9maWxlZGVzY3Jfb2ZfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2lzYXR0eVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG4gICAgcmV0dXJuIHR0eS5pc2F0dHkoZmlsZURlc2NyaXB0b3IpPzE6MDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9pc2F0dHlcbi8vQWxpYXM6IHVuaXhfaXNhdHR5XG4vL0lmOiBicm93c2VyXG5mdW5jdGlvbiBjYW1sX3VuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBtYWtlX3VuaXhfZXJyX2FyZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgdW5peF9lcnJvciA9IFtcbiAgLyogPT09VW5peC5lcnJvcj09PVxuICAgKlxuICAgKiBUaGlzIGFycmF5IGlzIGluIG9yZGVyIG9mIHRoZSB2YXJpYW50IGluIE9DYW1sXG4gICAqL1xuICBcIkUyQklHXCIsIFwiRUFDQ0VTXCIsIFwiRUFHQUlOXCIsIFwiRUJBREZcIiwgXCJFQlVTWVwiLCBcIkVDSElMRFwiLCBcIkVERUFETEtcIiwgXCJFRE9NXCIsXG4gIFwiRUVYSVNUXCIsIFwiRUZBVUxUXCIsIFwiRUZCSUdcIiwgXCJFSU5UUlwiLCBcIkVJTlZBTFwiLCBcIkVJT1wiLCBcIkVJU0RJUlwiLCBcIkVNRklMRVwiLFxuICBcIkVNTElOS1wiLCBcIkVOQU1FVE9PTE9OR1wiLCBcIkVORklMRVwiLCBcIkVOT0RFVlwiLCBcIkVOT0VOVFwiLCBcIkVOT0VYRUNcIiwgXCJFTk9MQ0tcIixcbiAgXCJFTk9NRU1cIiwgXCJFTk9TUENcIiwgXCJFTk9TWVNcIiwgXCJFTk9URElSXCIsIFwiRU5PVEVNUFRZXCIsIFwiRU5PVFRZXCIsIFwiRU5YSU9cIixcbiAgXCJFUEVSTVwiLCBcIkVQSVBFXCIsIFwiRVJBTkdFXCIsIFwiRVJPRlNcIiwgXCJFU1BJUEVcIiwgXCJFU1JDSFwiLCBcIkVYREVWXCIsIFwiRVdPVUxEQkxPQ0tcIixcbiAgXCJFSU5QUk9HUkVTU1wiLCBcIkVBTFJFQURZXCIsIFwiRU5PVFNPQ0tcIiwgXCJFREVTVEFERFJSRVFcIiwgXCJFTVNHU0laRVwiLFxuICBcIkVQUk9UT1RZUEVcIiwgXCJFTk9QUk9UT09QVFwiLCBcIkVQUk9UT05PU1VQUE9SVFwiLCBcIkVTT0NLVE5PU1VQUE9SVFwiLFxuICBcIkVPUE5PVFNVUFBcIiwgXCJFUEZOT1NVUFBPUlRcIiwgXCJFQUZOT1NVUFBPUlRcIiwgXCJFQUREUklOVVNFXCIsIFwiRUFERFJOT1RBVkFJTFwiLFxuICBcIkVORVRET1dOXCIsIFwiRU5FVFVOUkVBQ0hcIiwgXCJFTkVUUkVTRVRcIiwgXCJFQ09OTkFCT1JURURcIiwgXCJFQ09OTlJFU0VUXCIsIFwiRU5PQlVGU1wiLFxuICBcIkVJU0NPTk5cIiwgXCJFTk9UQ09OTlwiLCBcIkVTSFVURE9XTlwiLCBcIkVUT09NQU5ZUkVGU1wiLCBcIkVUSU1FRE9VVFwiLCBcIkVDT05OUkVGVVNFRFwiLFxuICBcIkVIT1NURE9XTlwiLCBcIkVIT1NUVU5SRUFDSFwiLCBcIkVMT09QXCIsIFwiRU9WRVJGTE9XXCJcbl07XG5mdW5jdGlvbiBtYWtlX3VuaXhfZXJyX2FyZ3MoY29kZSwgc3lzY2FsbCwgcGF0aCwgZXJybm8pIHtcbiAgdmFyIHZhcmlhbnQgPSB1bml4X2Vycm9yLmluZGV4T2YoY29kZSk7XG4gIGlmICh2YXJpYW50IDwgMCkge1xuICAgIC8vIERlZmF1bHQgaWYgdW5kZWZpbmVkXG4gICAgaWYgKGVycm5vID09IG51bGwpIHtcbiAgICAgIGVycm5vID0gLTk5OTlcbiAgICB9XG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgdmFyaWFudHMsIGZhbGxiYWNrIHRvIEVVTktOT1dORVJSKGludClcbiAgICB2YXJpYW50ID0gQkxPQ0soMCwgZXJybm8pO1xuICB9XG4gIHZhciBhcmdzID0gW1xuICAgIHZhcmlhbnQsXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoc3lzY2FsbCB8fCBcIlwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoIHx8IFwiXCIpXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3N0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uuc3RhdChyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zdGF0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9zdGF0XzY0XG5mdW5jdGlvbiBjYW1sX3VuaXhfc3RhdF82NChuYW1lKSB7XG4gIHZhciByID0gY2FtbF91bml4X3N0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2xzdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9sc3RhdFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5sc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbHN0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubHN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfbHN0YXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9sc3RhdCwgY2FtbF9pbnQ2NF9vZl9pbnQzMlxuLy9BbGlhczogdW5peF9sc3RhdF82NFxuZnVuY3Rpb24gY2FtbF91bml4X2xzdGF0XzY0KG5hbWUpIHtcbiAgdmFyIHIgPSBjYW1sX3VuaXhfbHN0YXQobmFtZSk7XG4gIHJbOV0gPSBjYW1sX2ludDY0X29mX2ludDMyKHJbOV0pO1xuICByZXR1cm4gcjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9ta2RpclxuZnVuY3Rpb24gY2FtbF91bml4X21rZGlyKG5hbWUsIHBlcm0pIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ta2Rpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfbWtkaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubWtkaXIocm9vdC5yZXN0LCBwZXJtLCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X3JtZGlyXG5mdW5jdGlvbiBjYW1sX3VuaXhfcm1kaXIobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJtZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9ybWRpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ybWRpcihyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9zeW1saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuLy9BbGlhczogdW5peF9zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfc3ltbGluayh0b19kaXIsIHNyYywgZHN0KSB7XG4gIHZhciBzcmNfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKHNyYyk7XG4gIHZhciBkc3Rfcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRzdCk7XG4gIGlmKHNyY19yb290LmRldmljZSAhPSBkc3Rfcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9zeW1saW5rOiBjYW5ub3Qgc3ltbGluayBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtc1wiKTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2Uuc3ltbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3VuaXhfc3ltbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBzcmNfcm9vdC5kZXZpY2Uuc3ltbGluayh0b19kaXIsIHNyY19yb290LnJlc3QsIGRzdF9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9yZWFkbGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfcmVhZGxpbmtcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3VubGlua1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbi8vQWxpYXM6IHVuaXhfdW5saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfdW5saW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS51bmxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF91bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuLy9BbGlhczogdW5peF9nZXR1aWRcbmZ1bmN0aW9uIGNhbWxfdW5peF9nZXR1aWQodW5pdCkge1xuICBpZihnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLmdldHVpZCl7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZ2V0cHd1aWRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL0FsaWFzOiB1bml4X2dldHB3dWlkXG5mdW5jdGlvbiBjYW1sX3VuaXhfZ2V0cHd1aWQodW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL0FsaWFzOiB1bml4X2hhc19zeW1saW5rXG5mdW5jdGlvbiBjYW1sX3VuaXhfaGFzX3N5bWxpbmsodW5pdCkge1xuICByZXR1cm4gZnNfbm9kZV9zdXBwb3J0ZWQoKT8xOjBcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X29wZW5kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG4vL0FsaWFzOiB1bml4X29wZW5kaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShwYXRoKTtcbiAgaWYgKCFyb290LmRldmljZS5vcGVuZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfdW5peF9vcGVuZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgdmFyIGRpcl9oYW5kbGUgPSByb290LmRldmljZS5vcGVuZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbiAgcmV0dXJuIHsgcG9pbnRlciA6IGRpcl9oYW5kbGUsIHBhdGg6IHBhdGggfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVcbi8vQWxpYXM6IHVuaXhfcmVhZGRpclxuZnVuY3Rpb24gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSkge1xuICB2YXIgZW50cnk7XG4gIHRyeSB7XG4gICAgICBlbnRyeSA9IGRpcl9oYW5kbGUucG9pbnRlci5yZWFkU3luYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJyZWFkZGlyXCIsIGRpcl9oYW5kbGUucGF0aCkpO1xuICB9XG4gIGlmIChlbnRyeSA9PT0gbnVsbCkge1xuICAgICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGVudHJ5Lm5hbWUpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzLCBjYW1sX3JhaXNlX3dpdGhfYXJncywgY2FtbF9uYW1lZF92YWx1ZVxuLy9BbGlhczogdW5peF9jbG9zZWRpclxuZnVuY3Rpb24gY2FtbF91bml4X2Nsb3NlZGlyKGRpcl9oYW5kbGUpIHtcbiAgdHJ5IHtcbiAgICAgIGRpcl9oYW5kbGUucG9pbnRlci5jbG9zZVN5bmMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFyIHVuaXhfZXJyb3IgPSBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVCQURGXCIsIFwiY2xvc2VkaXJcIiwgZGlyX2hhbmRsZS5wYXRoKSk7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X3Jld2luZGRpclxuLy9SZXF1aXJlczogY2FtbF91bml4X2Nsb3NlZGlyLCBjYW1sX3VuaXhfb3BlbmRpclxuLy9BbGlhczogdW5peF9yZXdpbmRkaXJcbmZ1bmN0aW9uIGNhbWxfdW5peF9yZXdpbmRkaXIoZGlyX2hhbmRsZSkge1xuICBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG4gIHZhciBuZXdfZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKGRpcl9oYW5kbGUucGF0aCk7XG4gIGRpcl9oYW5kbGUucG9pbnRlciA9IG5ld19kaXJfaGFuZGxlLnBvaW50ZXI7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VuaXhfZmluZGZpcnN0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9vcGVuZGlyLCBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRmaXJzdFxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRmaXJzdChwYXRoKSB7XG4gIC8vIFRoZSBXaW5kb3dzIGNvZGUgYWRkcyB0aGlzIGdsb2IgdG8gdGhlIHBhdGgsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0XG4gIHZhciBwYXRoX2pzID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocGF0aCk7XG4gIHBhdGhfanMgPSBwYXRoX2pzLnJlcGxhY2UoLyhefFtcXFxcXFwvXSlcXCpcXC5cXCokLywgXCJcIik7XG4gIHBhdGggPSBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoX2pzKTtcbiAgLy8gKi4qIGlzIG5vdyBzdHJpcHBlZFxuICB2YXIgZGlyX2hhbmRsZSA9IGNhbWxfdW5peF9vcGVuZGlyKHBhdGgpO1xuICB2YXIgZmlyc3RfZW50cnkgPSBjYW1sX3VuaXhfcmVhZGRpcihkaXJfaGFuZGxlKTtcbiAgLy8gVGhlIFdpbmRvd3MgYmluZGluZ3MgdHlwZSBkaXJfaGFuZGxlIGFzIGFuIGBpbnRgIGJ1dCBpdCdzIG5vdCBpbiBKU1xuICByZXR1cm4gWzAsIGZpcnN0X2VudHJ5LCBkaXJfaGFuZGxlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2ZpbmRuZXh0XG4vL1JlcXVpcmVzOiBjYW1sX3VuaXhfcmVhZGRpclxuLy9BbGlhczogd2luX2ZpbmRuZXh0XG5mdW5jdGlvbiBjYW1sX3VuaXhfZmluZG5leHQoZGlyX2hhbmRsZSkge1xuICByZXR1cm4gY2FtbF91bml4X3JlYWRkaXIoZGlyX2hhbmRsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5peF9maW5kY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfdW5peF9jbG9zZWRpclxuLy9BbGlhczogd2luX2ZpbmRjbG9zZVxuZnVuY3Rpb24gY2FtbF91bml4X2ZpbmRjbG9zZShkaXJfaGFuZGxlKSB7XG4gIHJldHVybiBjYW1sX3VuaXhfY2xvc2VkaXIoZGlyX2hhbmRsZSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgY29uc3Rcbi8vQWxpYXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF91bml4X2luZXRfYWRkcl9vZl9zdHJpbmcgKCkge3JldHVybiAwO31cblxuXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBNbEZha2VEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIE1sRmFrZUZkLCBjYW1sX2NyZWF0ZV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9hcnJheSwgY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzXG5mdW5jdGlvbiBNbEZha2VEZXZpY2UgKHJvb3QsIGYpIHtcbiAgdGhpcy5jb250ZW50PXt9O1xuICB0aGlzLnJvb3QgPSByb290O1xuICB0aGlzLmxvb2t1cEZ1biA9IGY7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jcmVhdGVfZGlyX2lmX25lZWRlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIHJlcyA9IFwiXCI7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICBpZih0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgdGhpcy5jb250ZW50W3Jlc10gPSBTeW1ib2woXCJkaXJlY3RvcnlcIik7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuc2xhc2ggPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpP25hbWU6KG5hbWUgKyBcIi9cIik7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYoIXRoaXMuY29udGVudFtuYW1lXSAmJiB0aGlzLmxvb2t1cEZ1bikge1xuICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucm9vdCksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSkpO1xuICAgIGlmKHJlcyAhPT0gMCkge1xuICAgICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICAgIHRoaXMuY29udGVudFtuYW1lXT1uZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICB9XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0pIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNGaWxlID0gZnVuY3Rpb24obmFtZSkge1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSAmJiAhdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICByZXR1cm4gMVxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiAwXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFRVhJU1RcIiwgXCJta2RpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBGaWxlIGV4aXN0c1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICBwYXJlbnQgPSAocGFyZW50ICYmIHBhcmVudFsxXSkgfHwgJyc7XG4gIGlmKCF0aGlzLmV4aXN0cyhwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQodGhpcy5zbGFzaChuYW1lKSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIGlmKG4ubWF0Y2gocikpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RFTVBUWVwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIjogRGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICB9XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIHZhciBzZWVuID0ge31cbiAgdmFyIGEgPSBbXTtcbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIHZhciBtID0gbi5tYXRjaChyKTtcbiAgICBpZihtICYmICFzZWVuW21bMV1dKSB7c2VlblttWzFdXSA9IHRydWU7IGEucHVzaChtWzFdKX1cbiAgfVxuICByZXR1cm4gYTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbmRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuXG4gIHZhciBhID0gdGhpcy5yZWFkZGlyKG5hbWUpO1xuICB2YXIgYyA9IGZhbHNlO1xuICB2YXIgaSA9IDA7XG4gIHJldHVybiB7IHJlYWRTeW5jIDogKGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoYykge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGkgPT0gYS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIHZhciBlbnRyeSA9IGFbaV07XG4gICAgaSsrO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5IH1cbiAgfSlcbiAgICAsIGNsb3NlU3luYzogKGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChjKSB7XG4gICAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRUJBREZcIiwgXCJjbG9zZWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBjbG9zZWRpciBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGMgPSB0cnVlO1xuICAgICAgYSA9IFtdO1xuICAgIH0pXG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICBpZihuYW1lID09IFwiXCIpICByZXR1cm4gdHJ1ZTtcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVfc2xhc2hdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICB2YXIgZmlsZTtcbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB0aGlzLmxvb2t1cChuYW1lKTtcbiAgaWYgKHRoaXMuY29udGVudFtuYW1lXSkge1xuICAgIGlmICh0aGlzLmlzX2RpcihuYW1lKSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogaXMgYSBkaXJlY3RvcnlcIik7XG4gICAgaWYgKGYuY3JlYXRlICYmIGYuZXhjbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG4gIHJldHVybiBuZXcgTWxGYWtlRmQodGhpcy5ubShuYW1lKSwgZmlsZSwgZik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKG5hbWUsIGYpIHtcbiAgdmFyIGZpbGU7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgZmlsZSA9IHRoaXMuY29udGVudFtuYW1lXTtcbiAgICBpZihmLnRydW5jYXRlKSBmaWxlLnRydW5jYXRlKCk7XG4gIH0gZWxzZSBpZiAoZi5jcmVhdGUpIHtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKTtcbiAgICBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlICh0aGlzLm5tKG5hbWUpKTtcbiAgfVxuICByZXR1cm4gbmV3IE1sRmFrZUZkKHRoaXMubm0obmFtZSksIGZpbGUsIGYpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJlZ2lzdGVyPSBmdW5jdGlvbiAobmFtZSxjb250ZW50KXtcbiAgdmFyIGZpbGU7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lXSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmlsZSBhbHJlYWR5IGV4aXN0c1wiKTtcbiAgaWYoY2FtbF9pc19tbF9ieXRlcyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY29udGVudCk7XG4gIGlmKGNhbWxfaXNfbWxfc3RyaW5nKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2FycmF5KGNvbnRlbnQpKTtcbiAgZWxzZSBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIilcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50LnRvU3RyaW5nKSB7XG4gICAgdmFyIGJ5dGVzID0gY2FtbF9ieXRlc19vZl9zdHJpbmcoY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoY29udGVudC50b1N0cmluZygpKSk7XG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGJ5dGVzKTtcbiAgfVxuICBpZihmaWxlKXtcbiAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgIHRoaXMuY29udGVudFtuYW1lXSA9IGZpbGU7XG4gIH1cbiAgZWxzZSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiByZWdpc3RlcmluZyBmaWxlIHdpdGggaW52YWxpZCBjb250ZW50IHR5cGVcIik7XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VEZXZpY2VcblxuLy9Qcm92aWRlczogTWxGYWtlRmlsZVxuLy9SZXF1aXJlczogTWxGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9ieXRlc19vZl9hcnJheVxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuTWxGYWtlRmlsZS5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB2YXIgb2xkID0gdGhpcy5kYXRhO1xuICB0aGlzLmRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgbGVuKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgdmFyIG9sZF9kYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMuZGF0YSA9IG5ld19zdHI7XG4gICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICB9XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIHBvcywgdGhpcy5kYXRhLCBvZmZzZXQsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1Zixwb3MsbGVuKXtcbiAgdmFyIGNsZW4gPSB0aGlzLmxlbmd0aCgpO1xuICBpZihvZmZzZXQgKyBsZW4gPj0gY2xlbikge1xuICAgIGxlbiA9IGNsZW4gLSBvZmZzZXQ7XG4gIH1cbiAgaWYobGVuKSB7XG4gICAgdmFyIGRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gICAgY2FtbF9ibGl0X2J5dGVzKHRoaXMuZGF0YSwgb2Zmc2V0LCBkYXRhLCAwLCBsZW4pO1xuICAgIGJ1Zi5zZXQoY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhkYXRhKSwgcG9zKTtcbiAgfVxuICByZXR1cm4gbGVuXG59XG5cblxuLy9Qcm92aWRlczogTWxGYWtlRmRfb3V0XG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmRfb3V0KGZkLGZsYWdzKSB7XG4gIE1sRmFrZUZpbGUuY2FsbCh0aGlzLCBjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gIHRoaXMubG9nID0gKGZ1bmN0aW9uIChzKSB7IHJldHVybiAwIH0pO1xuICBpZihmZCA9PSAxICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PSBcImZ1bmN0aW9uXCIpXG4gICAgdGhpcy5sb2cgPSBjb25zb2xlLmxvZztcbiAgZWxzZSBpZihmZCA9PSAyICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUuZXJyb3I7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnNvbGUubG9nID09IFwiZnVuY3Rpb25cIilcbiAgICB0aGlzLmxvZyA9IGNvbnNvbGUubG9nXG4gIHRoaXMuZmxhZ3MgPSBmbGFncztcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24oKSB7IHJldHVybiAwIH1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAob2Zmc2V0LGJ1Zixwb3MsbGVuKSB7XG4gIGlmKHRoaXMubG9nKSB7XG4gICAgaWYobGVuID4gMFxuICAgICAgICYmIHBvcyA+PSAwXG4gICAgICAgJiYgcG9zK2xlbiA8PSBidWYubGVuZ3RoXG4gICAgICAgJiYgYnVmW3BvcytsZW4tMV0gPT0gMTApXG4gICAgICBsZW4gLS07XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgdmFyIHNyYyA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoYnVmKSwgcG9zLCBzcmMsIDAsIGxlbik7XG4gICAgdGhpcy5sb2coc3JjLnRvVXRmMTYoKSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5mZCAgKyBcIjogZmlsZSBkZXNjcmlwdG9yIGFscmVhZHkgY2xvc2VkXCIpO1xufVxuTWxGYWtlRmRfb3V0LnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24gKG9mZnNldCwgYnVmLCBwb3MsIGxlbikge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLmZkICArIFwiOiBmaWxlIGRlc2NyaXB0b3IgaXMgd3JpdGUgb25seVwiKTtcbn1cbk1sRmFrZUZkX291dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG9nID0gdW5kZWZpbmVkO1xufVxuXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZkXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxGYWtlRmQobmFtZSwgZmlsZSxmbGFncykge1xuICB0aGlzLmZpbGUgPSBmaWxlO1xuICB0aGlzLm5hbWUgPSBuYW1lO1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG59XG5cbk1sRmFrZUZkLnByb3RvdHlwZS5lcnJfY2xvc2VkID0gZnVuY3Rpb24gKCkge1xuICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5hbWUgICsgXCI6IGZpbGUgZGVzY3JpcHRvciBhbHJlYWR5IGNsb3NlZFwiKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLmxlbmd0aCAoKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsYnVmLHBvcyxsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLndyaXRlKG9mZnNldCxidWYscG9zLGxlbilcbiAgdGhpcy5lcnJfY2xvc2VkKCk7XG59XG5NbEZha2VGZC5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChvZmZzZXQsIGJ1ZiwgcG9zLCBsZW4pIHtcbiAgaWYodGhpcy5maWxlKSByZXR1cm4gdGhpcy5maWxlLnJlYWQob2Zmc2V0LCBidWYsIHBvcywgbGVuKVxuICB0aGlzLmVycl9jbG9zZWQoKTtcbn1cbk1sRmFrZUZkLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maWxlID0gdW5kZWZpbmVkO1xufVxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAqL1xuLyogIGVuIEF1dG9tYXRpcXVlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCAgICAqL1xuLyogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aXRoICAgICAqL1xuLyogIHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIC4uL0xJQ0VOU0UuICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKiAkSWQ6IGxleGluZy5jIDYwNDUgMjAwNC0wMS0wMSAxNjo0Mjo0M1ogZG9saWdleiAkICovXG5cbi8qIFRoZSB0YWJsZS1kcml2ZW4gYXV0b21hdG9uIGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXguICovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2xleF9hcnJheShzKSB7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpO1xuICB2YXIgbCA9IHMubGVuZ3RoIC8gMjtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgIGFbaV0gPSAocy5jaGFyQ29kZUF0KDIgKiBpKSB8IChzLmNoYXJDb2RlQXQoMiAqIGkgKyAxKSA8PCA4KSkgPDwgMTYgPj4gMTY7XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5LCBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuXG4gIGlmICghdGJsLmxleF9kZWZhdWx0KSB7XG4gICAgdGJsLmxleF9iYXNlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV0pO1xuICAgIHRibC5sZXhfYmFja3RyayA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtdKTtcbiAgICB0YmwubGV4X2NoZWNrID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9jaGVja10pO1xuICAgIHRibC5sZXhfdHJhbnMgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zXSk7XG4gICAgdGJsLmxleF9kZWZhdWx0ID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF0pO1xuICB9XG5cbiAgdmFyIGMsIHN0YXRlID0gc3RhcnRfc3RhdGU7XG5cbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMobGV4YnVmW2xleF9idWZmZXJdKTtcblxuICBpZiAoc3RhdGUgPj0gMCkge1xuICAgIC8qIEZpcnN0IGVudHJ5ICovXG4gICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X3N0YXJ0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IC0xO1xuICB9IGVsc2Uge1xuICAgIC8qIFJlZW50cnkgYWZ0ZXIgcmVmaWxsICovXG4gICAgc3RhdGUgPSAtc3RhdGUgLSAxO1xuICB9XG4gIGZvcig7Oykge1xuICAgIC8qIExvb2t1cCBiYXNlIGFkZHJlc3Mgb3IgYWN0aW9uIG51bWJlciBmb3IgY3VycmVudCBzdGF0ZSAqL1xuICAgIHZhciBiYXNlID0gdGJsLmxleF9iYXNlW3N0YXRlXTtcbiAgICBpZiAoYmFzZSA8IDApIHJldHVybiAtYmFzZS0xO1xuICAgIC8qIFNlZSBpZiBpdCdzIGEgYmFja3RyYWNrIHBvaW50ICovXG4gICAgdmFyIGJhY2t0cmsgPSB0YmwubGV4X2JhY2t0cmtbc3RhdGVdO1xuICAgIGlmIChiYWNrdHJrID49IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogTmV3IGxleGVyIGVuZ2luZSwgd2l0aCBtZW1vcnkgb2YgcG9zaXRpb25zICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19sZXhfZW5naW5lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2xleF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF91aW50OF9hcnJheV9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9sZXhfcnVuX21lbShzLCBpLCBtZW0sIGN1cnJfcG9zKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm47XG4gICAgdmFyIHNyYyA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChzcmMgPT0gMHhmZilcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBjdXJyX3BvcztcbiAgICBlbHNlXG4gICAgICBtZW0gW2RzdCArIDFdID0gbWVtIFtzcmMgKyAxXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fdGFnKHMsIGksIG1lbSkge1xuICBmb3IgKDs7KSB7XG4gICAgdmFyIGRzdCA9IHMuY2hhckNvZGVBdChpKTsgaSsrO1xuICAgIGlmIChkc3QgPT0gMHhmZikgcmV0dXJuIDtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IC0xO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbmV3X2xleF9lbmdpbmUodGJsLCBzdGFydF9zdGF0ZSwgbGV4YnVmKSB7XG4gIHZhciBsZXhfYnVmZmVyID0gMjtcbiAgdmFyIGxleF9idWZmZXJfbGVuID0gMztcbiAgdmFyIGxleF9zdGFydF9wb3MgPSA1O1xuICB2YXIgbGV4X2N1cnJfcG9zID0gNjtcbiAgdmFyIGxleF9sYXN0X3BvcyA9IDc7XG4gIHZhciBsZXhfbGFzdF9hY3Rpb24gPSA4O1xuICB2YXIgbGV4X2VvZl9yZWFjaGVkID0gOTtcbiAgdmFyIGxleF9tZW0gPSAxMDtcbiAgdmFyIGxleF9iYXNlID0gMTtcbiAgdmFyIGxleF9iYWNrdHJrID0gMjtcbiAgdmFyIGxleF9kZWZhdWx0ID0gMztcbiAgdmFyIGxleF90cmFucyA9IDQ7XG4gIHZhciBsZXhfY2hlY2sgPSA1O1xuICB2YXIgbGV4X2Jhc2VfY29kZSA9IDY7XG4gIHZhciBsZXhfYmFja3Rya19jb2RlID0gNztcbiAgdmFyIGxleF9kZWZhdWx0X2NvZGUgPSA4O1xuICB2YXIgbGV4X3RyYW5zX2NvZGUgPSA5O1xuICB2YXIgbGV4X2NoZWNrX2NvZGUgPSAxMDtcbiAgdmFyIGxleF9jb2RlID0gMTE7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHRfY29kZSkge1xuICAgIHRibC5sZXhfYmFzZV9jb2RlID0gICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFzZV9jb2RlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrX2NvZGUgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrX2NvZGVdKTtcbiAgICB0YmwubGV4X2NoZWNrX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrX2NvZGVdKTtcbiAgICB0YmwubGV4X3RyYW5zX2NvZGUgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X3RyYW5zX2NvZGVdKTtcbiAgICB0YmwubGV4X2RlZmF1bHRfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRfY29kZV0pO1xuICB9XG4gIGlmICh0YmwubGV4X2NvZGUgPT0gbnVsbCkgdGJsLmxleF9jb2RlID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh0YmxbbGV4X2NvZGVdKTtcblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFzZV9jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICByZXR1cm4gLWJhc2UtMTtcbiAgICB9XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgdmFyIHBjX29mZiA9IHRibC5sZXhfYmFja3Rya19jb2RlW3N0YXRlXTtcbiAgICAgIGNhbWxfbGV4X3J1bl90YWcodGJsLmxleF9jb2RlLCBwY19vZmYsIGxleGJ1ZltsZXhfbWVtXSk7XG4gICAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSBiYWNrdHJrO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgd2UgbmVlZCBhIHJlZmlsbCAqL1xuICAgIGlmIChsZXhidWZbbGV4X2N1cnJfcG9zXSA+PSBsZXhidWZbbGV4X2J1ZmZlcl9sZW5dKXtcbiAgICAgIGlmIChsZXhidWZbbGV4X2VvZl9yZWFjaGVkXSA9PSAwKVxuICAgICAgICByZXR1cm4gLXN0YXRlIC0gMTtcbiAgICAgIGVsc2VcbiAgICAgICAgYyA9IDI1NjtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIFJlYWQgbmV4dCBpbnB1dCBjaGFyICovXG4gICAgICBjID0gYnVmZmVyW2xleGJ1ZltsZXhfY3Vycl9wb3NdXTtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdICsrO1xuICAgIH1cbiAgICAvKiBEZXRlcm1pbmUgbmV4dCBzdGF0ZSAqL1xuICAgIHZhciBwc3RhdGUgPSBzdGF0ZSA7XG4gICAgaWYgKHRibC5sZXhfY2hlY2tbYmFzZSArIGNdID09IHN0YXRlKVxuICAgICAgc3RhdGUgPSB0YmwubGV4X3RyYW5zW2Jhc2UgKyBjXTtcbiAgICBlbHNlXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfZGVmYXVsdFtzdGF0ZV07XG4gICAgLyogSWYgbm8gdHJhbnNpdGlvbiBvbiB0aGlzIGNoYXIsIHJldHVybiB0byBsYXN0IGJhY2t0cmFjayBwb2ludCAqL1xuICAgIGlmIChzdGF0ZSA8IDApIHtcbiAgICAgIGxleGJ1ZltsZXhfY3Vycl9wb3NdID0gbGV4YnVmW2xleF9sYXN0X3Bvc107XG4gICAgICBpZiAobGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPT0gLTEpXG4gICAgICAgIGNhbWxfZmFpbHdpdGgoXCJsZXhpbmc6IGVtcHR5IHRva2VuXCIpO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbGV4YnVmW2xleF9sYXN0X2FjdGlvbl07XG4gICAgfWVsc2V7XG4gICAgICAvKiBJZiBzb21lIHRyYW5zaXRpb24sIGdldCBhbmQgcGVyZm9ybSBtZW1vcnkgbW92ZXMgKi9cbiAgICAgIHZhciBiYXNlX2NvZGUgPSB0YmwubGV4X2Jhc2VfY29kZVtwc3RhdGVdLCBwY19vZmY7XG4gICAgICBpZiAodGJsLmxleF9jaGVja19jb2RlW2Jhc2VfY29kZSArIGNdID09IHBzdGF0ZSlcbiAgICAgICAgcGNfb2ZmID0gdGJsLmxleF90cmFuc19jb2RlW2Jhc2VfY29kZSArIGNdO1xuICAgICAgZWxzZVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X2RlZmF1bHRfY29kZVtwc3RhdGVdO1xuICAgICAgaWYgKHBjX29mZiA+IDApXG4gICAgICAgIGNhbWxfbGV4X3J1bl9tZW1cbiAgICAgICh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dLCBsZXhidWZbbGV4X2N1cnJfcG9zXSk7XG4gICAgICAvKiBFcmFzZSB0aGUgRU9GIGNvbmRpdGlvbiBvbmx5IGlmIHRoZSBFT0YgcHNldWRvLWNoYXJhY3RlciB3YXNcbiAgICAgICAgIGNvbnN1bWVkIGJ5IHRoZSBhdXRvbWF0b24gKGkuZS4gdGhlcmUgd2FzIG5vIGJhY2t0cmFjayBhYm92ZSlcbiAgICAgICovXG4gICAgICBpZiAoYyA9PSAyNTYpIGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID0gMDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9jaGFuXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9NRDVJbml0LCBjYW1sX01ENVVwZGF0ZSwgY2FtbF9NRDVGaW5hbFxuZnVuY3Rpb24gY2FtbF9tZDVfY2hhbihjaGFuaWQsdG9yZWFkKXtcbiAgdmFyIGN0eCA9IGNhbWxfTUQ1SW5pdCgpO1xuICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoNDA5Nik7XG4gIGlmKHRvcmVhZCA8IDApe1xuICAgIHdoaWxlKHRydWUpe1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCxidWZmZXIubGVuZ3RoKTtcbiAgICAgIGlmKHJlYWQgPT0gMCkgYnJlYWs7XG4gICAgICBjYW1sX01ENVVwZGF0ZShjdHgsYnVmZmVyLnN1YmFycmF5KDAsIHJlYWQpLCByZWFkKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUodG9yZWFkID4gMCkge1xuICAgICAgdmFyIHJlYWQgPSBjYW1sX21sX2lucHV0X2Jsb2NrKGNoYW5pZCxidWZmZXIsMCwgKHRvcmVhZCA+IGJ1ZmZlci5sZW5ndGggPyBidWZmZXIubGVuZ3RoIDogdG9yZWFkKSk7XG4gICAgICBpZihyZWFkID09IDApIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgICAgIGNhbWxfTUQ1VXBkYXRlKGN0eCxidWZmZXIuc3ViYXJyYXkoMCwgcmVhZCksIHJlYWQpO1xuICAgICAgdG9yZWFkIC09IHJlYWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGNhbWxfTUQ1RmluYWwoY3R4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWQ1X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfbWQ1X2J5dGVzXG5mdW5jdGlvbiBjYW1sX21kNV9zdHJpbmcocywgb2ZzLCBsZW4pIHtcbiAgcmV0dXJuIGNhbWxfbWQ1X2J5dGVzKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpLG9mcyxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENVRyYW5zZm9ybVxudmFyIGNhbWxfTUQ1VHJhbnNmb3JtID0gKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkICh4LCB5KSB7IHJldHVybiAoeCArIHkpIHwgMDsgfVxuICBmdW5jdGlvbiB4eChxLGEsYix4LHMsdCkge1xuICAgIGEgPSBhZGQoYWRkKGEsIHEpLCBhZGQoeCwgdCkpO1xuICAgIHJldHVybiBhZGQoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBmZihhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBoaChhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpOyB9XG4gIGZ1bmN0aW9uIGlpKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodywgYnVmZmVyKSB7XG4gICAgdmFyIGEgPSB3WzBdLCBiID0gd1sxXSwgYyA9IHdbMl0sIGQgPSB3WzNdO1xuXG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMF0sIDcsIDB4RDc2QUE0NzgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbIDFdLCAxMiwgMHhFOEM3Qjc1Nik7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsgMl0sIDE3LCAweDI0MjA3MERCKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWyAzXSwgMjIsIDB4QzFCRENFRUUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbIDRdLCA3LCAweEY1N0MwRkFGKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyWyA1XSwgMTIsIDB4NDc4N0M2MkEpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNywgMHhBODMwNDYxMyk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlclsgN10sIDIyLCAweEZENDY5NTAxKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyWyA4XSwgNywgMHg2OTgwOThEOCk7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOV0sIDEyLCAweDhCNDRGN0FGKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyWzEwXSwgMTcsIDB4RkZGRjVCQjEpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbMTFdLCAyMiwgMHg4OTVDRDdCRSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDcsIDB4NkI5MDExMjIpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbMTNdLCAxMiwgMHhGRDk4NzE5Myk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlclsxNF0sIDE3LCAweEE2Nzk0MzhFKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyWzE1XSwgMjIsIDB4NDlCNDA4MjEpO1xuXG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDUsIDB4RjYxRTI1NjIpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDZdLCA5LCAweEMwNDBCMzQwKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTQsIDB4MjY1RTVBNTEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDBdLCAyMCwgMHhFOUI2QzdBQSk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgNV0sIDUsIDB4RDYyRjEwNUQpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTBdLCA5LCAweDAyNDQxNDUzKTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTQsIDB4RDhBMUU2ODEpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDRdLCAyMCwgMHhFN0QzRkJDOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsgOV0sIDUsIDB4MjFFMUNERTYpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbMTRdLCA5LCAweEMzMzcwN0Q2KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyAzXSwgMTQsIDB4RjRENTBEODcpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbIDhdLCAyMCwgMHg0NTVBMTRFRCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlclsxM10sIDUsIDB4QTlFM0U5MDUpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbIDJdLCA5LCAweEZDRUZBM0Y4KTtcbiAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyWyA3XSwgMTQsIDB4Njc2RjAyRDkpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbMTJdLCAyMCwgMHg4RDJBNEM4QSk7XG5cbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA1XSwgNCwgMHhGRkZBMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsgOF0sIDExLCAweDg3NzFGNjgxKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzExXSwgMTYsIDB4NkQ5RDYxMjIpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbMTRdLCAyMywgMHhGREU1MzgwQyk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlclsgMV0sIDQsIDB4QTRCRUVBNDQpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbIDRdLCAxMSwgMHg0QkRFQ0ZBOSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlclsgN10sIDE2LCAweEY2QkI0QjYwKTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyWzEwXSwgMjMsIDB4QkVCRkJDNzApO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbMTNdLCA0LCAweDI4OUI3RUM2KTtcbiAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyWyAwXSwgMTEsIDB4RUFBMTI3RkEpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbIDNdLCAxNiwgMHhENEVGMzA4NSk7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlclsgNl0sIDIzLCAweDA0ODgxRDA1KTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyWyA5XSwgNCwgMHhEOUQ0RDAzOSk7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMl0sIDExLCAweEU2REI5OUU1KTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyWzE1XSwgMTYsIDB4MUZBMjdDRjgpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbIDJdLCAyMywgMHhDNEFDNTY2NSk7XG5cbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyAwXSwgNiwgMHhGNDI5MjI0NCk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsgN10sIDEwLCAweDQzMkFGRjk3KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWzE0XSwgMTUsIDB4QUI5NDIzQTcpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDVdLCAyMSwgMHhGQzkzQTAzOSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlclsxMl0sIDYsIDB4NjU1QjU5QzMpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbIDNdLCAxMCwgMHg4RjBDQ0M5Mik7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlclsxMF0sIDE1LCAweEZGRUZGNDdEKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyWyAxXSwgMjEsIDB4ODU4NDVERDEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbIDhdLCA2LCAweDZGQTg3RTRGKTtcbiAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyWzE1XSwgMTAsIDB4RkUyQ0U2RTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbIDZdLCAxNSwgMHhBMzAxNDMxNCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlclsxM10sIDIxLCAweDRFMDgxMUExKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyWyA0XSwgNiwgMHhGNzUzN0U4Mik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlclsxMV0sIDEwLCAweEJEM0FGMjM1KTtcbiAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyWyAyXSwgMTUsIDB4MkFEN0QyQkIpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbIDldLCAyMSwgMHhFQjg2RDM5MSk7XG5cbiAgICB3WzBdID0gYWRkKGEsIHdbMF0pO1xuICAgIHdbMV0gPSBhZGQoYiwgd1sxXSk7XG4gICAgd1syXSA9IGFkZChjLCB3WzJdKTtcbiAgICB3WzNdID0gYWRkKGQsIHdbM10pO1xuICB9fSkoKVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUluaXRcbmZ1bmN0aW9uIGNhbWxfTUQ1SW5pdCgpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig2NCk7XG4gIHZhciBiMzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcbiAgdmFyIGI4ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIHtsZW46MCxcbiAgICAgICAgICB3Om5ldyBVaW50MzJBcnJheShbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3Nl0pLFxuICAgICAgICAgIGIzMjpiMzIsXG4gICAgICAgICAgYjg6Yjh9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfTUQ1VXBkYXRlXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVVcGRhdGUoY3R4LCBpbnB1dCwgaW5wdXRfbGVuKXtcbiAgdmFyIGluX2J1ZiA9IGN0eC5sZW4gJiAweDNmO1xuICB2YXIgaW5wdXRfcG9zID0gMDtcbiAgY3R4LmxlbiArPSBpbnB1dF9sZW47XG4gIGlmKGluX2J1Zil7XG4gICAgdmFyIG1pc3NpbmcgPSA2NCAtIGluX2J1ZjtcbiAgICBpZihpbnB1dF9sZW4gPCBtaXNzaW5nKSB7XG4gICAgICBjdHguYjguc2V0KGlucHV0LnN1YmFycmF5KDAsaW5wdXRfbGVuKSxpbl9idWYpO1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoMCxtaXNzaW5nKSxpbl9idWYpO1xuICAgIGNhbWxfTUQ1VHJhbnNmb3JtKGN0eC53LCBjdHguYjMyKTtcbiAgICBpbnB1dF9sZW4gLT0gbWlzc2luZztcbiAgICBpbnB1dF9wb3MgKz0gbWlzc2luZztcbiAgfVxuICB3aGlsZShpbnB1dF9sZW4gPj0gNjQpe1xuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIDY0KSwgMCk7XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGlucHV0X2xlbiAtPSA2NDtcbiAgICBpbnB1dF9wb3MgKz0gNjQ7XG4gIH1cbiAgaWYoaW5wdXRfbGVuKVxuICAgIGN0eC5iOC5zZXQoaW5wdXQuc3ViYXJyYXkoaW5wdXRfcG9zLGlucHV0X3BvcyArIGlucHV0X2xlbiksIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX01ENUZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX01ENVRyYW5zZm9ybVxuZnVuY3Rpb24gY2FtbF9NRDVGaW5hbChjdHgpe1xuICB2YXIgaW5fYnVmID0gY3R4LmxlbiAmIDB4M2Y7XG4gIGN0eC5iOFtpbl9idWZdID0gMHg4MDtcbiAgaW5fYnVmICsrO1xuICBpZihpbl9idWYgPiA1Nikge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDY0OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gICAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICAgIGZvcih2YXIgaiA9IDA7IGogPCA1NjsgaisrKXtcbiAgICAgIGN0eC5iOFtqXSA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvcih2YXIgaiA9IGluX2J1ZjsgaiA8IDU2OyBqKyspe1xuICAgICAgY3R4LmI4W2pdID0gMDtcbiAgICB9XG4gIH1cbiAgY3R4LmIzMlsxNF0gPSBjdHgubGVuIDw8IDM7XG4gIGN0eC5iMzJbMTVdID0gKGN0eC5sZW4gPj4gMjkpICYgMHgxRkZGRkZGRjtcbiAgY2FtbF9NRDVUcmFuc2Zvcm0oY3R4LncsIGN0eC5iMzIpO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXG4gICAgICB0W2kgKiA0ICsgal0gPSAoY3R4LndbaV0gPj4gKDggKiBqKSkgJiAweEZGO1xuICByZXR1cm4gdDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF91aW50OF9hcnJheV9vZl9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfTUQ1SW5pdCwgY2FtbF9NRDVVcGRhdGUsIGNhbWxfTUQ1RmluYWxcbmZ1bmN0aW9uIGNhbWxfbWQ1X2J5dGVzKHMsIG9mcywgbGVuKSB7XG4gIHZhciBjdHggPSBjYW1sX01ENUluaXQoKTtcbiAgdmFyIGEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKHMpO1xuICBjYW1sX01ENVVwZGF0ZShjdHgsYS5zdWJhcnJheShvZnMsIG9mcyArIGxlbiksIGxlbik7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheShjYW1sX01ENUZpbmFsKGN0eCkpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBJb1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19mZHNcbnZhciBjYW1sX3N5c19mZHMgPSBuZXcgQXJyYXkoMyk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZSkgZmlsZS5jbG9zZSgpO1xuICBkZWxldGUgY2FtbF9zeXNfZmRzW2ZkXTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IE1sRmFrZUZkX291dFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5fZm9yX25vZGVcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoZmlsZSxpZHgpIHtcbiAgaWYoaWR4ID09IHVuZGVmaW5lZCl7XG4gICAgaWR4ID0gY2FtbF9zeXNfZmRzLmxlbmd0aDtcbiAgfVxuICBjYW1sX3N5c19mZHNbaWR4XSA9IGZpbGU7XG4gIHJldHVybiBpZHggfCAwO1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbiAobmFtZSwgZmxhZ3MsIF9wZXJtcykge1xuICB2YXIgZiA9IHt9O1xuICB3aGlsZShmbGFncyl7XG4gICAgc3dpdGNoKGZsYWdzWzFdKXtcbiAgICBjYXNlIDA6IGYucmRvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDE6IGYud3Jvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDI6IGYuYXBwZW5kID0gMTticmVhaztcbiAgICBjYXNlIDM6IGYuY3JlYXRlID0gMTticmVhaztcbiAgICBjYXNlIDQ6IGYudHJ1bmNhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNTogZi5leGNsID0gMTsgYnJlYWs7XG4gICAgY2FzZSA2OiBmLmJpbmFyeSA9IDE7YnJlYWs7XG4gICAgY2FzZSA3OiBmLnRleHQgPSAxO2JyZWFrO1xuICAgIGNhc2UgODogZi5ub25ibG9jayA9IDE7YnJlYWs7XG4gICAgfVxuICAgIGZsYWdzPWZsYWdzWzJdO1xuICB9XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCxmKTtcbiAgcmV0dXJuIGNhbWxfc3lzX29wZW5faW50ZXJuYWwgKGZpbGUsIHVuZGVmaW5lZCk7XG59XG4oZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBmaWxlKGZkLCBmbGFncykge1xuICAgIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVybiBjYW1sX3N5c19vcGVuX2Zvcl9ub2RlKGZkLCBmbGFncyk7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBuZXcgTWxGYWtlRmRfb3V0KGZkLCBmbGFncylcbiAgfVxuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMCx7cmRvbmx5OjEsYWx0bmFtZTpcIi9kZXYvc3RkaW5cIixpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDApO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMSx7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDEpO1xuICBjYW1sX3N5c19vcGVuX2ludGVybmFsKGZpbGUoMix7YnVmZmVyZWQ6Mix3cm9ubHk6MSxpc0NoYXJhY3RlckRldmljZTp0cnVlfSksIDIpO1xufSkoKVxuXG5cbi8vIG9jYW1sIENoYW5uZWxzXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lKGNoYW5pZCwgbmFtZSkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgY2hhbi5uYW1lID0gbmFtZTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbHNcbnZhciBjYW1sX21sX2NoYW5uZWxzID0gbmV3IEFycmF5KCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZWRpcmVjdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3JlZGlyZWN0IChjYXB0dXJlZCwgaW50byl7XG4gIHZhciB0b19yZXN0b3JlID0gY2FtbF9tbF9jaGFubmVsX2dldChjYXB0dXJlZCk7XG4gIHZhciBuZXdfID0gY2FtbF9tbF9jaGFubmVsX2dldChpbnRvKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjYXB0dXJlZF0gPSBuZXdfOyAvLyBYWFhcbiAgcmV0dXJuIHRvX3Jlc3RvcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2hhbm5lbF9yZXN0b3JlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfcmVzdG9yZSAoY2FwdHVyZWQsIHRvX3Jlc3RvcmUpe1xuICBjYW1sX21sX2NoYW5uZWxzW2NhcHR1cmVkXSA9IHRvX3Jlc3RvcmU7IC8vIFhYWFxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX2dldChpZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tpZF07IC8vIFhYWFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3lzX2Zkc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfc3lzX29wZW5cbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCAoZmQpIHtcbiAgdmFyIGZpbGUgPSBjYW1sX3N5c19mZHNbZmRdO1xuICBpZihmaWxlLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGJ1ZmZlcmVkID0gKGZpbGUuZmxhZ3MuYnVmZmVyZWQgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZsYWdzLmJ1ZmZlcmVkIDogMTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OnRydWUsXG4gICAgYnVmZmVyX2N1cnI6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIGJ1ZmZlcmVkOmJ1ZmZlcmVkXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX3N5c19mZHNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19vcGVuXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiAoZmQpICB7XG4gIHZhciBmaWxlID0gY2FtbF9zeXNfZmRzW2ZkXTtcbiAgaWYoZmlsZS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpmaWxlLFxuICAgIG9mZnNldDpmaWxlLmZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjAsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICBidWZmZXJfY3VycjowLFxuICAgIGJ1ZmZlcl9tYXg6MCxcbiAgICBidWZmZXI6bmV3IFVpbnQ4QXJyYXkoNjU1MzYpLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbl93aXRoX2ZsYWdzXG4vL1JlcXVpcmVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luX3dpdGhfZmxhZ3MoZmQsIGZsYWdzKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luKGZkKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0X3dpdGhfZmxhZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFxuLy9WZXJzaW9uOiA+PSA1LjFcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dF93aXRoX2ZsYWdzKGZkLCBmbGFncyl7XG4gIHJldHVybiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQoZmQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldFxuLy9BbGlhczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG5mdW5jdGlvbiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvcihjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLmZpbGUuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGNoYW4uZmlsZS5mbGFncy5iaW5hcnkgPSBtb2RlXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG4vL1ZlcnNpb246ID49IDUuMlxuZnVuY3Rpb24gY2FtbF9tbF9pc19iaW5hcnlfbW9kZShjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsX2dldFxuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZihjaGFuLm9wZW5lZCkge1xuICAgIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gICAgY2FtbF9zeXNfY2xvc2UoY2hhbi5mZCk7XG4gICAgY2hhbi5mZCA9IC0xO1xuICAgIGNoYW4uYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBjaGFuLm91dHB1dCA9IChmdW5jdGlvbiAocykge2Yocyl9KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbChjaGFuaWQsZikge1xuICBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCkucmVmaWxsID0gZjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVmaWxsXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfdWludDhfYXJyYXlfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZmlsbCAoY2hhbikge1xuICBpZihjaGFuLnJlZmlsbCAhPSBudWxsKXtcbiAgICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgICB2YXIgc3RyX2EgPSBjYW1sX3VpbnQ4X2FycmF5X29mX3N0cmluZyhzdHIpO1xuICAgIGlmIChzdHJfYS5sZW5ndGggPT0gMCkge1xuICAgICAgY2hhbi5yZWZpbGwgPSBudWxsXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYoY2hhbi5idWZmZXIubGVuZ3RoIDwgY2hhbi5idWZmZXJfbWF4ICsgc3RyX2EubGVuZ3RoKXtcbiAgICAgICAgdmFyIGIgPSBuZXcgVWludDhBcnJheShjaGFuLmJ1ZmZlcl9tYXggKyBzdHJfYS5sZW5ndGgpO1xuICAgICAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgICAgIGNoYW4uYnVmZmVyID0gYjtcbiAgICAgIH1cbiAgICAgIGNoYW4uYnVmZmVyLnNldChzdHJfYSxjaGFuLmJ1ZmZlcl9tYXgpO1xuICAgICAgY2hhbi5vZmZzZXQgKz0gc3RyX2EubGVuZ3RoO1xuICAgICAgY2hhbi5idWZmZXJfbWF4ICs9IHN0cl9hLmxlbmd0aDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5yZWFkID0gY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCBjaGFuLmJ1ZmZlcl9tYXgsIGNoYW4uYnVmZmVyLmxlbmd0aCAtIGNoYW4uYnVmZmVyX21heCk7XG4gICAgY2hhbi5vZmZzZXQgKz0gbnJlYWQ7XG4gICAgY2hhbi5idWZmZXJfbWF4ICs9IG5yZWFkO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfaW5wdXRfYmxvY2tcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgYiwgaSwgbCkge1xuICB2YXIgYmEgPSBjYW1sX3VpbnQ4X2FycmF5X29mX2J5dGVzKGIpO1xuICByZXR1cm4gY2FtbF9tbF9pbnB1dF9ibG9jayhjaGFuaWQsIGJhLCBpLCBsKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2JpZ2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2Jsb2NrXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5XG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2JpZ2FycmF5IChjaGFuaWQsIGIsIGksIGwpIHtcbiAgdmFyIGJhID0gY2FtbF9iYV90b190eXBlZF9hcnJheShiKTtcbiAgcmV0dXJuIGNhbWxfbWxfaW5wdXRfYmxvY2soY2hhbmlkLCBiYSwgaSwgbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9ibG9ja1xuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfYmxvY2sgKGNoYW5pZCwgYmEsIGksIGwpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciBuID0gbDtcbiAgdmFyIGF2YWlsID0gY2hhbi5idWZmZXJfbWF4IC0gY2hhbi5idWZmZXJfY3VycjtcbiAgaWYobCA8PSBhdmFpbCkge1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBsO1xuICB9XG4gIGVsc2UgaWYoYXZhaWwgPiAwKSB7XG4gICAgYmEuc2V0KGNoYW4uYnVmZmVyLnN1YmFycmF5KGNoYW4uYnVmZmVyX2N1cnIsY2hhbi5idWZmZXJfY3VyciArIGF2YWlsKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBhdmFpbDtcbiAgICBuID0gYXZhaWw7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICBjYW1sX3JlZmlsbChjaGFuKTtcbiAgICB2YXIgYXZhaWwgPSBjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgIGlmKG4gPiBhdmFpbCkgbiA9IGF2YWlsO1xuICAgIGJhLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyLGNoYW4uYnVmZmVyX2N1cnIgKyBuKSwgaSk7XG4gICAgY2hhbi5idWZmZXJfY3VyciArPSBuO1xuICB9XG4gIHJldHVybiBuIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9ieXRlc19vZl9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9yZWZpbGwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZVxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICB2YXIgaGVhZGVyID0gbmV3IFVpbnQ4QXJyYXkoY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgZnVuY3Rpb24gYmxvY2soYnVmZmVyLCBvZmZzZXQsIG4pIHtcbiAgICB2YXIgciA9IDA7XG4gICAgd2hpbGUociA8IG4pe1xuICAgICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgICAgICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgICAgICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgICAgICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpXG4gICAgICAgIGJyZWFrO1xuICAgICAgYnVmZmVyW29mZnNldCtyXSA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICAgICAgY2hhbi5idWZmZXJfY3VycisrO1xuICAgICAgcisrO1xuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuICB2YXIgciA9IGJsb2NrKGhlYWRlciwgMCwgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgaWYociA9PSAwKVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgZWxzZSBpZiAociA8IGNhbWxfbWFyc2hhbF9oZWFkZXJfc2l6ZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3RcIik7XG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChjYW1sX2J5dGVzX29mX2FycmF5KGhlYWRlciksIDApO1xuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuICsgY2FtbF9tYXJzaGFsX2hlYWRlcl9zaXplKTtcbiAgYnVmLnNldChoZWFkZXIsMCk7XG4gIHZhciByID0gYmxvY2soYnVmLCBjYW1sX21hcnNoYWxfaGVhZGVyX3NpemUsIGxlbilcbiAgaWYociA8IGxlbilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHRydW5jYXRlZCBvYmplY3QgXCIgKyByICsgXCIgIFwiICsgbGVuKTtcbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KGJ1ZiksIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfdG9fb3V0c2lkZV9oZWFwXG4vL1JlcXVpcmVzOiBjYW1sX2lucHV0X3ZhbHVlXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX3RvX291dHNpZGVfaGVhcChjKSB7XG4gIHJldHVybiBjYW1sX2lucHV0X3ZhbHVlKGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUsIGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlcl9tYXgpe1xuICAgIGNoYW4uYnVmZmVyX2N1cnIgPSAwO1xuICAgIGNoYW4uYnVmZmVyX21heCA9IDA7XG4gICAgY2FtbF9yZWZpbGwoY2hhbik7XG4gIH1cbiAgaWYgKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXJfbWF4KVxuICAgIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgdmFyIHJlcyA9IGNoYW4uYnVmZmVyW2NoYW4uYnVmZmVyX2N1cnJdO1xuICBjaGFuLmJ1ZmZlcl9jdXJyKys7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX21sX2lucHV0X2NoYXIsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgNDsgaSsrKXtcbiAgICByZXMgPSAocmVzIDw8IDgpICsgY2FtbF9tbF9pbnB1dF9jaGFyKGNoYW5pZCkgfCAwO1xuICB9XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3NlZWtfaW4oY2hhbmlkLCBwb3MpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgaWYocG9zID49IGNoYW4ub2Zmc2V0IC0gY2hhbi5idWZmZXJfbWF4XG4gICAgICYmIHBvcyA8PSBjaGFuLm9mZnNldFxuICAgICAmJiBjaGFuLmZpbGUuZmxhZ3MuYmluYXJ5KSB7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IGNoYW4uYnVmZmVyX21heCAtIChjaGFuLm9mZnNldCAtIHBvcyk7XG4gIH0gZWxzZSB7XG4gICAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgY2hhbi5idWZmZXJfbWF4ID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXG4vL1JlcXVpcmVzOiBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQscG9zKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3NlZWtfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbl82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19pbihjaGFuaWQsIHBvcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX3Bvc19pbihjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCAtIChjaGFuLmJ1ZmZlcl9tYXggLSBjaGFuLmJ1ZmZlcl9jdXJyKSB8IDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19pblxuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW4oY2hhbmlkKSB7XG4gIHJldHVybiBjYW1sX3Bvc19pbihjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9wb3NfaW5cbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjYW1sX3Bvc19pbihjaGFuaWQpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfcmVmaWxsXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKTtcbiAgdmFyIHAgPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBkbyB7XG4gICAgaWYocCA+PSBjaGFuLmJ1ZmZlcl9tYXgpIHtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPiAwKSB7XG4gICAgICAgIGNoYW4uYnVmZmVyLnNldChjaGFuLmJ1ZmZlci5zdWJhcnJheShjaGFuLmJ1ZmZlcl9jdXJyKSwwKTtcbiAgICAgICAgcCAtPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICAgICAgICBjaGFuLmJ1ZmZlcl9tYXggLT0gY2hhbi5idWZmZXJfY3VycjtcbiAgICAgICAgY2hhbi5idWZmZXJfY3VyciA9IDA7XG4gICAgICB9XG4gICAgICBpZihjaGFuLmJ1ZmZlcl9tYXggPj0gY2hhbi5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgICAgdmFyIHByZXZfbWF4ID0gY2hhbi5idWZmZXJfbWF4O1xuICAgICAgY2FtbF9yZWZpbGwgKGNoYW4pO1xuICAgICAgaWYocHJldl9tYXggPT0gY2hhbi5idWZmZXJfbWF4KSB7XG4gICAgICAgIHJldHVybiAtKGNoYW4uYnVmZmVyX21heCkgfCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSB3aGlsZSAoY2hhbi5idWZmZXJbcCsrXSAhPSAxMCk7XG4gIHJldHVybiAocCAtIGNoYW4uYnVmZmVyX2N1cnIpIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9mbHVzaFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbF9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXJfY3VyciA9PSAwKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5vdXRwdXQpIHtcbiAgICBjaGFuLm91dHB1dChjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoY2hhbi5idWZmZXIsIDAsIGNoYW4uYnVmZmVyX2N1cnIpKTtcbiAgfSBlbHNlIHtcbiAgICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIGNoYW4uYnVmZmVyLCAwLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgfVxuICBjaGFuLm9mZnNldCArPSBjaGFuLmJ1ZmZlcl9jdXJyO1xuICBjaGFuLmJ1ZmZlcl9jdXJyID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X3RhXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsX2dldFxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfdGEoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBvdXRwdXQgdG8gYSBjbG9zZWQgY2hhbm5lbFwiKTtcbiAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgbGVuKTtcbiAgaWYoY2hhbi5idWZmZXJfY3VyciArIGJ1ZmZlci5sZW5ndGggPiBjaGFuLmJ1ZmZlci5sZW5ndGgpIHtcbiAgICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KGNoYW4uYnVmZmVyX2N1cnIgKyBidWZmZXIubGVuZ3RoKTtcbiAgICBiLnNldChjaGFuLmJ1ZmZlcik7XG4gICAgY2hhbi5idWZmZXIgPSBiXG4gIH1cbiAgc3dpdGNoKGNoYW4uYnVmZmVyZWQpe1xuICBjYXNlIDA6IC8vIFVuYnVmZmVyZWRcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgY2FtbF9tbF9mbHVzaCAoY2hhbmlkKTtcbiAgICBicmVha1xuICBjYXNlIDE6IC8vIEJ1ZmZlcmVkICh0aGUgZGVmYXVsdClcbiAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYoY2hhbi5idWZmZXJfY3VyciA+PSBjaGFuLmJ1ZmZlci5sZW5ndGgpXG4gICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8vIEJ1ZmZlcmVkIChvbmx5IGZvciBzdGRvdXQgYW5kIHN0ZGVycilcbiAgICB2YXIgaWQgPSBidWZmZXIubGFzdEluZGV4T2YoMTApXG4gICAgaWYoaWQgPCAwKSB7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLCBjaGFuLmJ1ZmZlcl9jdXJyKTtcbiAgICAgIGNoYW4uYnVmZmVyX2N1cnIgKz0gYnVmZmVyLmxlbmd0aDtcbiAgICAgIGlmKGNoYW4uYnVmZmVyX2N1cnIgPj0gY2hhbi5idWZmZXIubGVuZ3RoKVxuICAgICAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoYW4uYnVmZmVyLnNldChidWZmZXIuc3ViYXJyYXkoMCwgaWQgKyAxKSwgY2hhbi5idWZmZXJfY3Vycik7XG4gICAgICBjaGFuLmJ1ZmZlcl9jdXJyICs9IGlkICsgMTtcbiAgICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgICBjaGFuLmJ1ZmZlci5zZXQoYnVmZmVyLnN1YmFycmF5KGlkICsgMSksIGNoYW4uYnVmZmVyX2N1cnIpO1xuICAgICAgY2hhbi5idWZmZXJfY3VyciArPSBidWZmZXIubGVuZ3RoIC0gaWQgLSAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfdWludDhfYXJyYXlfb2ZfYnl0ZXMoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfYmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXksIGNhbWxfbWxfb3V0cHV0X3RhXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9iaWdhcnJheShjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGJ1ZmZlciA9IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYnVmZmVyKTtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X3RhKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbik7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsX2dldCwgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9zZWVrX291dChjaGFuaWQsIHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9zZWVrX291dFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgdmFyIHBvcyA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIGNhbWxfc2Vla19vdXQoY2hhbmlkLCBwb3MpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3Bvc19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfcG9zX291dChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxfZ2V0KGNoYW5pZCk7XG4gIHJldHVybiBjaGFuLm9mZnNldCArIGNoYW4uYnVmZmVyX2N1cnJcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3Bvc19vdXRcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX291dChjaGFuaWQpIHtcbiAgcmV0dXJuIGNhbWxfcG9zX291dChjaGFuaWQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfcG9zX291dFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdCAoY2FtbF9wb3Nfb3V0KGNoYW5pZCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lzX2J1ZmZlcmVkXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxfZ2V0XG5mdW5jdGlvbiBjYW1sX21sX2lzX2J1ZmZlcmVkKGNoYW5pZCkge1xuICByZXR1cm4gY2FtbF9tbF9jaGFubmVsX2dldChjaGFuaWQpLmJ1ZmZlcmVkID8gMSA6IDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbF9nZXQsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGNoYW5pZCx2KSB7XG4gIGNhbWxfbWxfY2hhbm5lbF9nZXQoY2hhbmlkKS5idWZmZXJlZCA9IHY7XG4gIGlmKCF2KSBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiAwXG59XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBsZXhlcnMgZ2VuZXJhdGVkIGJ5IGNhbWxsZXggKilcblxudHlwZSBwb3NpdGlvbiA9IHtcbiAgcG9zX2ZuYW1lIDogc3RyaW5nO1xuICBwb3NfbG51bSA6IGludDtcbiAgcG9zX2JvbCA6IGludDtcbiAgcG9zX2NudW0gOiBpbnQ7XG59XG5cbmxldCBkdW1teV9wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMDtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gLTE7XG59XG5cbnR5cGUgbGV4YnVmID1cbiAgeyByZWZpbGxfYnVmZiA6IGxleGJ1ZiAtPiB1bml0O1xuICAgIG11dGFibGUgbGV4X2J1ZmZlciA6IGJ5dGVzO1xuICAgIG11dGFibGUgbGV4X2J1ZmZlcl9sZW4gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfYWJzX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfbGFzdF9hY3Rpb24gOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfZW9mX3JlYWNoZWQgOiBib29sO1xuICAgIG11dGFibGUgbGV4X21lbSA6IGludCBhcnJheTtcbiAgICBtdXRhYmxlIGxleF9zdGFydF9wIDogcG9zaXRpb247XG4gICAgbXV0YWJsZSBsZXhfY3Vycl9wIDogcG9zaXRpb247XG4gIH1cblxudHlwZSBsZXhfdGFibGVzID1cbiAgeyBsZXhfYmFzZTogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHQ6IHN0cmluZztcbiAgICBsZXhfdHJhbnM6IHN0cmluZztcbiAgICBsZXhfY2hlY2s6IHN0cmluZztcbiAgICBsZXhfYmFzZV9jb2RlIDogc3RyaW5nO1xuICAgIGxleF9iYWNrdHJrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2RlZmF1bHRfY29kZSA6IHN0cmluZztcbiAgICBsZXhfdHJhbnNfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY2hlY2tfY29kZSA6IHN0cmluZztcbiAgICBsZXhfY29kZTogc3RyaW5nO31cblxuZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuZXh0ZXJuYWwgY19uZXdfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX25ld19sZXhfZW5naW5lXCJcblxubGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxuXG5sZXQgbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgbGV0IHJlc3VsdCA9IGNfbmV3X2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cbmxldCBsZXhfcmVmaWxsIHJlYWRfZnVuIGF1eF9idWZmZXIgbGV4YnVmID1cbiAgbGV0IHJlYWQgPVxuICAgIHJlYWRfZnVuIGF1eF9idWZmZXIgKEJ5dGVzLmxlbmd0aCBhdXhfYnVmZmVyKSBpblxuICBsZXQgbiA9XG4gICAgaWYgcmVhZCA+IDBcbiAgICB0aGVuIHJlYWRcbiAgICBlbHNlIChsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWU7IDApIGluXG4gICgqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcjpcbiAgICAgICAgPC0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tPlxuICAgICAgICB8ICBqdW5rIHwgICAgICB2YWxpZCBkYXRhICAgICB8ICAganVuayAgICB8XG4gICAgICAgIF4gICAgICAgXiAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgIF5cbiAgICAgICAgMCAgICBzdGFydF9wb3MgICAgICAgICAgICAgYnVmZmVyX2VuZCAgICBCeXRlcy5sZW5ndGggYnVmZmVyXG4gICopXG4gIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG4gPiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIgdGhlbiBiZWdpblxuICAgICgqIFRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuXG4gICAgICAgPD0gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyXG4gICAgdGhlbiBiZWdpblxuICAgICAgKCogQnV0IHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpZiB3ZSByZWNsYWltIHRoZSBqdW5rIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgIG9mIHRoZSBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcylcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgKCogV2UgbXVzdCBncm93IHRoZSBidWZmZXIuICBEb3VibGluZyBpdHMgc2l6ZSB3aWxsIHByb3ZpZGUgZW5vdWdoXG4gICAgICAgICBzcGFjZSBzaW5jZSBuIDw9IFN0cmluZy5sZW5ndGggYXV4X2J1ZmZlciA8PSBTdHJpbmcubGVuZ3RoIGJ1ZmZlci5cbiAgICAgICAgIFdhdGNoIG91dCBmb3Igc3RyaW5nIGxlbmd0aCBvdmVyZmxvdywgdGhvdWdoLiAqKVxuICAgICAgbGV0IG5ld2xlbiA9XG4gICAgICAgIEludC5taW4gKDIgKiBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXIpIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBpblxuICAgICAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgKyBuID4gbmV3bGVuXG4gICAgICB0aGVuIGZhaWx3aXRoIFwiTGV4aW5nLmxleF9yZWZpbGw6IGNhbm5vdCBncm93IGJ1ZmZlclwiO1xuICAgICAgbGV0IG5ld2J1ZiA9IEJ5dGVzLmNyZWF0ZSBuZXdsZW4gaW5cbiAgICAgICgqIENvcHkgdGhlIHZhbGlkIGRhdGEgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbmV3YnVmIDBcbiAgICAgICAgICAgICAgICAgIChsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3Bvcyk7XG4gICAgICBsZXhidWYubGV4X2J1ZmZlciA8LSBuZXdidWZcbiAgICBlbmQ7XG4gICAgKCogUmVhbGxvY2F0aW9uIG9yIG5vdCwgd2UgaGF2ZSBzaGlmdGVkIHRoZSBkYXRhIGxlZnQgYnlcbiAgICAgICBzdGFydF9wb3MgY2hhcmFjdGVyczsgdXBkYXRlIHRoZSBwb3NpdGlvbnMgKilcbiAgICBsZXQgcyA9IGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gICAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIGxleGJ1Zi5sZXhfYWJzX3BvcyArIHM7XG4gICAgbGV4YnVmLmxleF9jdXJyX3BvcyA8LSBsZXhidWYubGV4X2N1cnJfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X3N0YXJ0X3BvcyA8LSAwO1xuICAgIGxleGJ1Zi5sZXhfbGFzdF9wb3MgPC0gbGV4YnVmLmxleF9sYXN0X3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIHMgO1xuICAgIGxldCB0ID0gbGV4YnVmLmxleF9tZW0gaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIHQtMSBkb1xuICAgICAgbGV0IHYgPSB0LihpKSBpblxuICAgICAgaWYgdiA+PSAwIHRoZW5cbiAgICAgICAgdC4oaSkgPC0gdi1zXG4gICAgZG9uZVxuICBlbmQ7XG4gICgqIFRoZXJlIGlzIG5vdyBlbm91Z2ggc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICopXG4gIEJ5dGVzLmJsaXQgYXV4X2J1ZmZlciAwIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiBuO1xuICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuICsgblxuXG5sZXQgemVyb19wb3MgPSB7XG4gIHBvc19mbmFtZSA9IFwiXCI7XG4gIHBvc19sbnVtID0gMTtcbiAgcG9zX2JvbCA9IDA7XG4gIHBvc19jbnVtID0gMDtcbn1cblxubGV0IGZyb21fZnVuY3Rpb24gPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIGYgPVxuICB7IHJlZmlsbF9idWZmID0gbGV4X3JlZmlsbCBmIChCeXRlcy5jcmVhdGUgNTEyKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDEwMjQ7XG4gICAgbGV4X2J1ZmZlcl9sZW4gPSAwO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSBmYWxzZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IGZyb21fY2hhbm5lbCA/d2l0aF9wb3NpdGlvbnMgaWMgPVxuICBmcm9tX2Z1bmN0aW9uID93aXRoX3Bvc2l0aW9ucyAoZnVuIGJ1ZiBuIC0+IGlucHV0IGljIGJ1ZiAwIG4pXG5cbmxldCBmcm9tX3N0cmluZyA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgcyA9XG4gIHsgcmVmaWxsX2J1ZmYgPSAoZnVuIGxleGJ1ZiAtPiBsZXhidWYubGV4X2VvZl9yZWFjaGVkIDwtIHRydWUpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5vZl9zdHJpbmcgczsgKCogaGF2ZSB0byBtYWtlIGEgY29weSBmb3IgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB1bnNhZmUtc3RyaW5nIG1vZGUgKilcbiAgICBsZXhfYnVmZmVyX2xlbiA9IFN0cmluZy5sZW5ndGggcztcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gdHJ1ZTtcbiAgICBsZXhfc3RhcnRfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gICAgbGV4X2N1cnJfcCA9IGlmIHdpdGhfcG9zaXRpb25zIHRoZW4gemVyb19wb3MgZWxzZSBkdW1teV9wb3M7XG4gIH1cblxubGV0IHNldF9wb3NpdGlvbiBsZXhidWYgcG9zaXRpb24gPVxuICBsZXhidWYubGV4X2N1cnJfcCAgPC0ge3Bvc2l0aW9uIHdpdGggcG9zX2ZuYW1lID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2ZuYW1lfTtcbiAgbGV4YnVmLmxleF9hYnNfcG9zIDwtIHBvc2l0aW9uLnBvc19jbnVtXG5cbmxldCBzZXRfZmlsZW5hbWUgbGV4YnVmIGZuYW1lID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgPC0ge2xleGJ1Zi5sZXhfY3Vycl9wIHdpdGggcG9zX2ZuYW1lID0gZm5hbWV9XG5cbmxldCB3aXRoX3Bvc2l0aW9ucyBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3NcblxubGV0IGxleGVtZSBsZXhidWYgPVxuICBsZXQgbGVuID0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3MgbGVuXG5cbmxldCBzdWJfbGV4ZW1lIGxleGJ1ZiBpMSBpMiA9XG4gIGxldCBsZW4gPSBpMi1pMSBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlblxuXG5sZXQgc3ViX2xleGVtZV9vcHQgbGV4YnVmIGkxIGkyID1cbiAgaWYgaTEgPj0gMCB0aGVuIGJlZ2luXG4gICAgbGV0IGxlbiA9IGkyLWkxIGluXG4gICAgU29tZSAoQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW4pXG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgTm9uZVxuICBlbmRcblxubGV0IHN1Yl9sZXhlbWVfY2hhciBsZXhidWYgaSA9IEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXJfb3B0IGxleGJ1ZiBpID1cbiAgaWYgaSA+PSAwIHRoZW5cbiAgICBTb21lIChCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxuXG5sZXQgbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPVxuICBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgKGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgaSlcblxubGV0IGxleGVtZV9zdGFydCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3AucG9zX2NudW1cbmxldCBsZXhlbWVfZW5kIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19jbnVtXG5cbmxldCBsZXhlbWVfc3RhcnRfcCBsZXhidWYgPSBsZXhidWYubGV4X3N0YXJ0X3BcbmxldCBsZXhlbWVfZW5kX3AgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3BcblxubGV0IG5ld19saW5lIGxleGJ1ZiA9XG4gIGxldCBsY3AgPSBsZXhidWYubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsZXhidWYubGV4X2N1cnJfcCA8LVxuICAgICAgeyBsY3Agd2l0aFxuICAgICAgICBwb3NfbG51bSA9IGxjcC5wb3NfbG51bSArIDE7XG4gICAgICAgIHBvc19ib2wgPSBsY3AucG9zX2NudW07XG4gICAgICB9XG5cblxuXG4oKiBEaXNjYXJkIGRhdGEgbGVmdCBpbiBsZXhlciBidWZmZXIuICopXG5cbmxldCBmbHVzaF9pbnB1dCBsYiA9XG4gIGxiLmxleF9jdXJyX3BvcyA8LSAwO1xuICBsYi5sZXhfYWJzX3BvcyA8LSAwO1xuICBsZXQgbGNwID0gbGIubGV4X2N1cnJfcCBpblxuICBpZiBsY3AgIT0gZHVtbXlfcG9zIHRoZW5cbiAgICBsYi5sZXhfY3Vycl9wIDwtIHt6ZXJvX3BvcyB3aXRoIHBvc19mbmFtZSA9IGxjcC5wb3NfZm5hbWV9O1xuICBsYi5sZXhfYnVmZmVyX2xlbiA8LSAwO1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgRnVuY3Rpb25hbCBxdWV1ZXMgKGZpZm8pfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxuXG4oKiogezIgQmFzaWNzfSAqKVxuXG5bQEBAd2FybmluZyBcIi0zN1wiXVxuXG50eXBlIHplcm8gPSBaZXJvXG50eXBlICd4IHN1Y2MgPSBTdWNjXG50eXBlIG9uZSA9IHplcm8gc3VjY1xudHlwZSB0d28gPSB6ZXJvIHN1Y2Mgc3VjY1xudHlwZSB0aHJlZSA9IHplcm8gc3VjYyBzdWNjIHN1Y2NcblxudHlwZSAoKydhLCAnbCkgZGlnaXQgPVxuICB8IFplcm8gOiAoJ2EsIHplcm8pIGRpZ2l0XG4gIHwgT25lIDogJ2EgLT4gKCdhLCBvbmUpIGRpZ2l0XG4gIHwgVHdvIDogJ2EgKiAnYSAtPiAoJ2EsIHR3bykgZGlnaXRcbiAgfCBUaHJlZSA6ICdhICogJ2EgKiAnYSAtPiAoJ2EsIHRocmVlKSBkaWdpdFxuXG4oKiBzdG9yZSB0aGUgc2l6ZSBpbiBkZWVwIHZlcnNpb24gKilcbnR5cGUgKydhIHQgPVxuICB8IFNoYWxsb3cgOiAoJ2EsIF8pIGRpZ2l0IC0+ICdhIHRcbiAgfCBEZWVwIDpcbiAgICAgIGludCAqICgnYSwgXyBzdWNjKSBkaWdpdCAqICgnYSAqICdhKSB0IGxhenlfdCAqICgnYSwgXyBzdWNjKSBkaWdpdFxuICAgICAgLT4gJ2EgdFxuXG5sZXQgZW1wdHkgOiB0eXBlIGEuIGEgdCA9IFNoYWxsb3cgWmVyb1xuXG5leGNlcHRpb24gRW1wdHlcblxubGV0IF9lbXB0eSA9IFNoYWxsb3cgWmVyb1xubGV0IF9zaW5nbGUgeCA9IFNoYWxsb3cgKE9uZSB4KVxubGV0IF9kb3VibGUgeCB5ID0gU2hhbGxvdyAoVHdvICh4LCB5KSlcblxubGV0IF9kZWVwIDpcbiAgICB0eXBlIGwwIGwxLlxuICAgIGludCAtPlxuICAgICgnYSwgbDAgc3VjYykgZGlnaXQgLT5cbiAgICAoJ2EgKiAnYSkgdCBsYXp5X3QgLT5cbiAgICAoJ2EsIGwxIHN1Y2MpIGRpZ2l0IC0+XG4gICAgJ2EgdCA9XG4gZnVuIG4gaGQgbWlkZGxlIHRsIC0+IERlZXAgKG4sIGhkLCBtaWRkbGUsIHRsKVxuXG5sZXQgaXNfZW1wdHkgPSBmdW5jdGlvblxuICB8IFNoYWxsb3cgWmVybyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgc2luZ2xldG9uIHggPSBfc2luZ2xlIHhcbmxldCBkb3VibGV0b24geCB5ID0gX2RvdWJsZSB4IHlcblxubGV0IHJlYyBjb25zIDogdHlwZSBhLiBhIC0+IGEgdCAtPiBhIHQgPVxuIGZ1biB4IHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBaZXJvIC0+IF9zaW5nbGUgeFxuICB8IFNoYWxsb3cgKE9uZSB5KSAtPiBTaGFsbG93IChUd28gKHgsIHkpKVxuICB8IFNoYWxsb3cgKFR3byAoeSwgeikpIC0+IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSlcbiAgfCBTaGFsbG93IChUaHJlZSAoeSwgeiwgeicpKSAtPlxuICAgIF9kZWVwIDQgKFR3byAoeCwgeSkpIChsYXp5IF9lbXB0eSkgKFR3byAoeiwgeicpKVxuICB8IERlZXAgKG4sIE9uZSB5LCBtaWRkbGUsIHRsKSAtPiBfZGVlcCAobiArIDEpIChUd28gKHgsIHkpKSBtaWRkbGUgdGxcbiAgfCBEZWVwIChuLCBUd28gKHksIHopLCBtaWRkbGUsIHRsKSAtPlxuICAgIF9kZWVwIChuICsgMSkgKFRocmVlICh4LCB5LCB6KSkgbWlkZGxlIHRsXG4gIHwgRGVlcCAobiwgVGhyZWUgKHksIHosIHonKSwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIF9kZWVwIChuICsgMSkgKFR3byAoeCwgeSkpIChsYXp5IChjb25zICh6LCB6JykgcScpKSB0YWlsXG5cbmxldCByZWMgc25vYyA6IHR5cGUgYS4gYSB0IC0+IGEgLT4gYSB0ID1cbiBmdW4gcSB4IC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiBfc2luZ2xlIHhcbiAgfCBTaGFsbG93IChPbmUgeSkgLT4gU2hhbGxvdyAoVHdvICh5LCB4KSlcbiAgfCBTaGFsbG93IChUd28gKHksIHopKSAtPiBTaGFsbG93IChUaHJlZSAoeSwgeiwgeCkpXG4gIHwgU2hhbGxvdyAoVGhyZWUgKHksIHosIHonKSkgLT5cbiAgICBfZGVlcCA0IChUd28gKHksIHopKSAobGF6eSBfZW1wdHkpIChUd28gKHonLCB4KSlcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBPbmUgeSkgLT4gX2RlZXAgKG4gKyAxKSBoZCBtaWRkbGUgKFR3byAoeSwgeCkpXG4gIHwgRGVlcCAobiwgaGQsIG1pZGRsZSwgVHdvICh5LCB6KSkgLT5cbiAgICBfZGVlcCAobiArIDEpIGhkIG1pZGRsZSAoVGhyZWUgKHksIHosIHgpKVxuICB8IERlZXAgKG4sIGhkLCAobGF6eSBxJyksIFRocmVlICh5LCB6LCB6JykpIC0+XG4gICAgX2RlZXAgKG4gKyAxKSBoZCAobGF6eSAoc25vYyBxJyAoeSwgeikpKSAoVHdvICh6JywgeCkpXG5cbmxldCByZWMgdGFrZV9mcm9udF9leG4gOiAnYS4gJ2EgdCAtPiAnYSAqICdhIHQgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiByYWlzZSBFbXB0eVxuICB8IFNoYWxsb3cgKE9uZSB4KSAtPiB4LCBlbXB0eVxuICB8IFNoYWxsb3cgKFR3byAoeCwgeSkpIC0+IHgsIFNoYWxsb3cgKE9uZSB5KVxuICB8IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSkgLT4geCwgU2hhbGxvdyAoVHdvICh5LCB6KSlcbiAgfCBEZWVwIChuLCBPbmUgeCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIGlmIGlzX2VtcHR5IHEnIHRoZW5cbiAgICAgIHgsIFNoYWxsb3cgdGFpbFxuICAgIGVsc2UgKFxuICAgICAgbGV0ICh5LCB6KSwgcScgPSB0YWtlX2Zyb250X2V4biBxJyBpblxuICAgICAgeCwgX2RlZXAgKG4gLSAxKSAoVHdvICh5LCB6KSkgKExhenkuZnJvbV92YWwgcScpIHRhaWxcbiAgICApXG4gIHwgRGVlcCAobiwgVHdvICh4LCB5KSwgbWlkZGxlLCB0YWlsKSAtPiB4LCBfZGVlcCAobiAtIDEpIChPbmUgeSkgbWlkZGxlIHRhaWxcbiAgfCBEZWVwIChuLCBUaHJlZSAoeCwgeSwgeiksIG1pZGRsZSwgdGFpbCkgLT5cbiAgICB4LCBfZGVlcCAobiAtIDEpIChUd28gKHksIHopKSBtaWRkbGUgdGFpbFxuXG5sZXQgdGFrZV9mcm9udCBxID0gdHJ5IFNvbWUgKHRha2VfZnJvbnRfZXhuIHEpIHdpdGggRW1wdHkgLT4gTm9uZVxuXG5sZXQgdGFrZV9mcm9udF9sIG4gcSA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInRha2VfYmFja19sOiBjYW5ub3QgdGFrZSBuZWdhdGl2ZSBudW1iZXIgb2YgYXJndW1lbnRzXCI7XG4gIGxldCByZWMgYXV4IGFjYyBxIG4gPVxuICAgIGlmIG4gPSAwIHx8IGlzX2VtcHR5IHEgdGhlblxuICAgICAgTGlzdC5yZXYgYWNjLCBxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgeCwgcScgPSB0YWtlX2Zyb250X2V4biBxIGluXG4gICAgICBhdXggKHggOjogYWNjKSBxJyAobiAtIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gcSBuXG5cbmxldCB0YWtlX2Zyb250X3doaWxlIHAgcSA9XG4gIGxldCByZWMgYXV4IGFjYyBxID1cbiAgICBpZiBpc19lbXB0eSBxIHRoZW5cbiAgICAgIExpc3QucmV2IGFjYywgcVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHgsIHEnID0gdGFrZV9mcm9udF9leG4gcSBpblxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgYXV4ICh4IDo6IGFjYykgcSdcbiAgICAgIGVsc2VcbiAgICAgICAgTGlzdC5yZXYgYWNjLCBxXG4gICAgKVxuICBpblxuICBhdXggW10gcVxuXG5sZXQgcmVjIHRha2VfYmFja19leG4gOiAnYS4gJ2EgdCAtPiAnYSB0ICogJ2EgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgWmVybyAtPiByYWlzZSBFbXB0eVxuICB8IFNoYWxsb3cgKE9uZSB4KSAtPiBlbXB0eSwgeFxuICB8IFNoYWxsb3cgKFR3byAoeCwgeSkpIC0+IF9zaW5nbGUgeCwgeVxuICB8IFNoYWxsb3cgKFRocmVlICh4LCB5LCB6KSkgLT4gU2hhbGxvdyAoVHdvICh4LCB5KSksIHpcbiAgfCBEZWVwIChuLCBoZCwgKGxhenkgcScpLCBPbmUgeCkgLT5cbiAgICBpZiBpc19lbXB0eSBxJyB0aGVuXG4gICAgICBTaGFsbG93IGhkLCB4XG4gICAgZWxzZSAoXG4gICAgICBsZXQgcScnLCAoeSwgeikgPSB0YWtlX2JhY2tfZXhuIHEnIGluXG4gICAgICBfZGVlcCAobiAtIDEpIGhkIChMYXp5LmZyb21fdmFsIHEnJykgKFR3byAoeSwgeikpLCB4XG4gICAgKVxuICB8IERlZXAgKG4sIGhkLCBtaWRkbGUsIFR3byAoeCwgeSkpIC0+IF9kZWVwIChuIC0gMSkgaGQgbWlkZGxlIChPbmUgeCksIHlcbiAgfCBEZWVwIChuLCBoZCwgbWlkZGxlLCBUaHJlZSAoeCwgeSwgeikpIC0+XG4gICAgX2RlZXAgKG4gLSAxKSBoZCBtaWRkbGUgKFR3byAoeCwgeSkpLCB6XG5cbmxldCB0YWtlX2JhY2sgcSA9IHRyeSBTb21lICh0YWtlX2JhY2tfZXhuIHEpIHdpdGggRW1wdHkgLT4gTm9uZVxuXG5sZXQgdGFrZV9iYWNrX2wgbiBxID1cbiAgaWYgbiA8IDAgdGhlblxuICAgIGludmFsaWRfYXJnIFwidGFrZV9iYWNrX2w6IGNhbm5vdCB0YWtlIG5lZ2F0aXZlIG51bWJlciBvZiBhcmd1bWVudHNcIjtcbiAgbGV0IHJlYyBhdXggYWNjIHEgbiA9XG4gICAgaWYgbiA9IDAgfHwgaXNfZW1wdHkgcSB0aGVuXG4gICAgICBxLCBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCBxJywgeCA9IHRha2VfYmFja19leG4gcSBpblxuICAgICAgYXV4ICh4IDo6IGFjYykgcScgKG4gLSAxKVxuICAgIClcbiAgaW5cbiAgYXV4IFtdIHEgblxuXG5sZXQgdGFrZV9iYWNrX3doaWxlIHAgcSA9XG4gIGxldCByZWMgYXV4IGFjYyBxID1cbiAgICBpZiBpc19lbXB0eSBxIHRoZW5cbiAgICAgIHEsIGFjY1xuICAgIGVsc2UgKFxuICAgICAgbGV0IHEnLCB4ID0gdGFrZV9iYWNrX2V4biBxIGluXG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBhdXggKHggOjogYWNjKSBxJ1xuICAgICAgZWxzZVxuICAgICAgICBxLCBhY2NcbiAgICApXG4gIGluXG4gIGF1eCBbXSBxXG5cbigqKiB7MiBJbmRpdmlkdWFsIGV4dHJhY3Rpb259ICopXG5cbmxldCBmaXJzdCBxID0gdHJ5IFNvbWUgKGZzdCAodGFrZV9mcm9udF9leG4gcSkpIHdpdGggRW1wdHkgLT4gTm9uZVxubGV0IGZpcnN0X2V4biBxID0gZnN0ICh0YWtlX2Zyb250X2V4biBxKVxubGV0IGxhc3QgcSA9IHRyeSBTb21lIChzbmQgKHRha2VfYmFja19leG4gcSkpIHdpdGggRW1wdHkgLT4gTm9uZVxubGV0IGxhc3RfZXhuIHEgPSBzbmQgKHRha2VfYmFja19leG4gcSlcblxubGV0IF9zaXplX2RpZ2l0IDogdHlwZSBsLiAoJ2EsIGwpIGRpZ2l0IC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgWmVybyAtPiAwXG4gIHwgT25lIF8gLT4gMVxuICB8IFR3byBfIC0+IDJcbiAgfCBUaHJlZSBfIC0+IDNcblxubGV0IHNpemUgOiAnYS4gJ2EgdCAtPiBpbnQgPSBmdW5jdGlvblxuICB8IFNoYWxsb3cgZCAtPiBfc2l6ZV9kaWdpdCBkXG4gIHwgRGVlcCAobiwgXywgXywgXykgLT4gblxuXG5sZXQgX250aF9kaWdpdCA6IHR5cGUgbC4gaW50IC0+ICgnYSwgbCkgZGlnaXQgLT4gJ2EgPVxuIGZ1biBpIGQgLT5cbiAgbWF0Y2ggaSwgZCB3aXRoXG4gIHwgXywgWmVybyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAwLCBPbmUgeCAtPiB4XG4gIHwgMCwgVHdvICh4LCBfKSAtPiB4XG4gIHwgMSwgVHdvIChfLCB4KSAtPiB4XG4gIHwgMCwgVGhyZWUgKHgsIF8sIF8pIC0+IHhcbiAgfCAxLCBUaHJlZSAoXywgeCwgXykgLT4geFxuICB8IDIsIFRocmVlIChfLCBfLCB4KSAtPiB4XG4gIHwgXywgXyAtPiByYWlzZSBOb3RfZm91bmRcblxubGV0IHJlYyBudGhfZXhuIDogJ2EuIGludCAtPiAnYSB0IC0+ICdhID1cbiBmdW4gaSBxIC0+XG4gIG1hdGNoIGksIHEgd2l0aFxuICB8IF8sIFNoYWxsb3cgWmVybyAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAwLCBTaGFsbG93IChPbmUgeCkgLT4geFxuICB8IDAsIFNoYWxsb3cgKFR3byAoeCwgXykpIC0+IHhcbiAgfCAxLCBTaGFsbG93IChUd28gKF8sIHgpKSAtPiB4XG4gIHwgMCwgU2hhbGxvdyAoVGhyZWUgKHgsIF8sIF8pKSAtPiB4XG4gIHwgMSwgU2hhbGxvdyAoVGhyZWUgKF8sIHgsIF8pKSAtPiB4XG4gIHwgMiwgU2hhbGxvdyAoVGhyZWUgKF8sIF8sIHgpKSAtPiB4XG4gIHwgXywgU2hhbGxvdyBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IF8sIERlZXAgKF8sIGwsIHEsIHIpIC0+XG4gICAgaWYgaSA8IF9zaXplX2RpZ2l0IGwgdGhlblxuICAgICAgX250aF9kaWdpdCBpIGxcbiAgICBlbHNlIChcbiAgICAgIGxldCBpJyA9IGkgLSBfc2l6ZV9kaWdpdCBsIGluXG4gICAgICBsZXQgcScgPSBMYXp5LmZvcmNlIHEgaW5cbiAgICAgIGlmIGknIDwgMiAqIHNpemUgcScgdGhlbiAoXG4gICAgICAgIGxldCB4LCB5ID0gbnRoX2V4biAoaScgLyAyKSBxJyBpblxuICAgICAgICBpZiBpJyBtb2QgMiA9IDAgdGhlblxuICAgICAgICAgIHhcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHlcbiAgICAgICkgZWxzZVxuICAgICAgICBfbnRoX2RpZ2l0IChpJyAtICgyICogc2l6ZSBxJykpIHJcbiAgICApXG5cbmxldCBudGggaSBxID0gdHJ5IFNvbWUgKG50aF9leG4gaSBxKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5sZXQgaW5pdCBxID0gdHJ5IGZzdCAodGFrZV9iYWNrX2V4biBxKSB3aXRoIEVtcHR5IC0+IHFcbmxldCB0YWlsIHEgPSB0cnkgc25kICh0YWtlX2Zyb250X2V4biBxKSB3aXRoIEVtcHR5IC0+IHFcblxubGV0IGFkZF9pdGVyX2Zyb250IHNlcSBxID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgKCogcmV2ZXJzZWQgc2VxICopXG4gIHNlcSAoZnVuIHggLT4gbCA6PSB4IDo6ICFsKTtcbiAgTGlzdC5mb2xkX2xlZnQgKGZ1biBxIHggLT4gY29ucyB4IHEpIHEgIWxcblxubGV0IGFkZF9pdGVyX2JhY2sgcSBzZXEgPVxuICBsZXQgcSA9IHJlZiBxIGluXG4gIHNlcSAoZnVuIHggLT4gcSA6PSBzbm9jICFxIHgpO1xuICAhcVxuXG5sZXQgX2RpZ2l0X3RvX2l0ZXIgOiB0eXBlIGwuICgnYSwgbCkgZGlnaXQgLT4gJ2EgaXRlciA9XG4gZnVuIGQgayAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+ICgpXG4gIHwgT25lIHggLT4gayB4XG4gIHwgVHdvICh4LCB5KSAtPlxuICAgIGsgeDtcbiAgICBrIHlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT5cbiAgICBrIHg7XG4gICAgayB5O1xuICAgIGsgelxuXG5sZXQgcmVjIHRvX2l0ZXIgOiAnYS4gJ2EgdCAtPiAnYSBpdGVyID1cbiBmdW4gcSBrIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBfZGlnaXRfdG9faXRlciBkIGtcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIF9kaWdpdF90b19pdGVyIGhkIGs7XG4gICAgdG9faXRlciBxJyAoZnVuICh4LCB5KSAtPlxuICAgICAgICBrIHg7XG4gICAgICAgIGsgeSk7XG4gICAgX2RpZ2l0X3RvX2l0ZXIgdGFpbCBrXG5cbmxldCBhcHBlbmQgcTEgcTIgPVxuICBtYXRjaCBxMSwgcTIgd2l0aFxuICB8IFNoYWxsb3cgWmVybywgXyAtPiBxMlxuICB8IF8sIFNoYWxsb3cgWmVybyAtPiBxMVxuICB8IF8gLT4gYWRkX2l0ZXJfYmFjayBxMSAodG9faXRlciBxMilcblxubGV0IGFkZF9zZXFfZnJvbnQgc2VxIHEgPVxuICAoKiByZXZlcnNlZCBzZXEgKilcbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gbCBlbHQgLT4gZWx0IDo6IGwpIFtdIHNlcSBpblxuICBMaXN0LmZvbGRfbGVmdCAoZnVuIHEgeCAtPiBjb25zIHggcSkgcSBsXG5cbmxldCBhZGRfc2VxX2JhY2sgcSBzZXEgPSBTZXEuZm9sZF9sZWZ0IChmdW4gcSB4IC0+IHNub2MgcSB4KSBxIHNlcVxuXG5sZXQgX2RpZ2l0X3RvX3NlcSA6IHR5cGUgbC4gKCdhLCBsKSBkaWdpdCAtPiAnYSBTZXEudCA9XG4gZnVuIGQgKCkgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBTZXEuTmlsXG4gIHwgT25lIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcbiAgfCBUd28gKHgsIHkpIC0+IFNlcS5Db25zICh4LCBTZXEucmV0dXJuIHkpXG4gIHwgVGhyZWUgKHgsIHksIHopIC0+IFNlcS5Db25zICh4LCBmdW4gKCkgLT4gU2VxLkNvbnMgKHksIFNlcS5yZXR1cm4geikpXG5cbmxldCByZWMgdG9fc2VxIDogJ2EuICdhIHQgLT4gJ2EgU2VxLnQgPVxuIGZ1biBxIC0+XG4gIG1hdGNoIHEgd2l0aFxuICB8IFNoYWxsb3cgZCAtPiBfZGlnaXRfdG9fc2VxIGRcbiAgfCBEZWVwIChfLCBoZCwgKGxhenkgcScpLCB0YWlsKSAtPlxuICAgIENDU2VxLmFwcGVuZCAoX2RpZ2l0X3RvX3NlcSBoZClcbiAgICAgIChDQ1NlcS5hcHBlbmRcbiAgICAgICAgIChTZXEuZmxhdF9tYXBcbiAgICAgICAgICAgIChmdW4gKHgsIHkpICgpIC0+IFNlcS5Db25zICh4LCBTZXEucmV0dXJuIHkpKVxuICAgICAgICAgICAgKHRvX3NlcSBxJykpXG4gICAgICAgICAoX2RpZ2l0X3RvX3NlcSB0YWlsKSlcblxubGV0IG9mX3NlcSBzZXEgPSBhZGRfc2VxX2Zyb250IHNlcSBlbXB0eVxuXG5sZXQgX21hcF9kaWdpdCA6IHR5cGUgbC4gKCdhIC0+ICdiKSAtPiAoJ2EsIGwpIGRpZ2l0IC0+ICgnYiwgbCkgZGlnaXQgPVxuIGZ1biBmIGQgLT5cbiAgbWF0Y2ggZCB3aXRoXG4gIHwgWmVybyAtPiBaZXJvXG4gIHwgT25lIHggLT4gT25lIChmIHgpXG4gIHwgVHdvICh4LCB5KSAtPiBUd28gKGYgeCwgZiB5KVxuICB8IFRocmVlICh4LCB5LCB6KSAtPiBUaHJlZSAoZiB4LCBmIHksIGYgeilcblxubGV0IHJlYyBtYXAgOiAnYSAnYi4gKCdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHQgPVxuIGZ1biBmIHEgLT5cbiAgbWF0Y2ggcSB3aXRoXG4gIHwgU2hhbGxvdyBkIC0+IFNoYWxsb3cgKF9tYXBfZGlnaXQgZiBkKVxuICB8IERlZXAgKHNpemUsIGhkLCAobGF6eSBxJyksIHRsKSAtPlxuICAgIGxldCBxJycgPSBtYXAgKGZ1biAoeCwgeSkgLT4gZiB4LCBmIHkpIHEnIGluXG4gICAgX2RlZXAgc2l6ZSAoX21hcF9kaWdpdCBmIGhkKSAoTGF6eS5mcm9tX3ZhbCBxJycpIChfbWFwX2RpZ2l0IGYgdGwpXG5cbmxldCAoID58PSApIHEgZiA9IG1hcCBmIHFcblxubGV0IF9mb2xkX2RpZ2l0IDogdHlwZSBsLiAoJ2FjYyAtPiAnYSAtPiAnYWNjKSAtPiAnYWNjIC0+ICgnYSwgbCkgZGlnaXQgLT4gJ2FjY1xuICAgID1cbiBmdW4gZiBhY2MgZCAtPlxuICBtYXRjaCBkIHdpdGhcbiAgfCBaZXJvIC0+IGFjY1xuICB8IE9uZSB4IC0+IGYgYWNjIHhcbiAgfCBUd28gKHgsIHkpIC0+IGYgKGYgYWNjIHgpIHlcbiAgfCBUaHJlZSAoeCwgeSwgeikgLT4gZiAoZiAoZiBhY2MgeCkgeSkgelxuXG5sZXQgcmVjIGZvbGQgOiAnYSAnYi4gKCdiIC0+ICdhIC0+ICdiKSAtPiAnYiAtPiAnYSB0IC0+ICdiID1cbiBmdW4gZiBhY2MgcSAtPlxuICBtYXRjaCBxIHdpdGhcbiAgfCBTaGFsbG93IGQgLT4gX2ZvbGRfZGlnaXQgZiBhY2MgZFxuICB8IERlZXAgKF8sIGhkLCAobGF6eSBxJyksIHRsKSAtPlxuICAgIGxldCBhY2MgPSBfZm9sZF9kaWdpdCBmIGFjYyBoZCBpblxuICAgIGxldCBhY2MgPSBmb2xkIChmdW4gYWNjICh4LCB5KSAtPiBmIChmIGFjYyB4KSB5KSBhY2MgcScgaW5cbiAgICBfZm9sZF9kaWdpdCBmIGFjYyB0bFxuXG5sZXQgaXRlciBmIHEgPSB0b19pdGVyIHEgZlxubGV0IG9mX2xpc3QgbCA9IExpc3QuZm9sZF9sZWZ0IHNub2MgZW1wdHkgbFxuXG5sZXQgdG9fbGlzdCBxID1cbiAgbGV0IGwgPSByZWYgW10gaW5cbiAgdG9faXRlciBxIChmdW4geCAtPiBsIDo9IHggOjogIWwpO1xuICBMaXN0LnJldiAhbFxuXG5sZXQgb2ZfaXRlciBzZXEgPSBhZGRfaXRlcl9mcm9udCBzZXEgZW1wdHlcblxubGV0IHJldiBxID1cbiAgbGV0IHEnID0gcmVmIGVtcHR5IGluXG4gIGl0ZXIgKGZ1biB4IC0+IHEnIDo9IGNvbnMgeCAhcScpIHE7XG4gICFxJ1xuXG5sZXQgcmVjIF9lcXVhbF9zZXEgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSAoKSwgbDIgKCkgd2l0aFxuICB8IFNlcS5OaWwsIFNlcS5OaWwgLT4gdHJ1ZVxuICB8IFNlcS5OaWwsIF8gfCBfLCBTZXEuTmlsIC0+IGZhbHNlXG4gIHwgU2VxLkNvbnMgKHgxLCBsMScpLCBTZXEuQ29ucyAoeDIsIGwyJykgLT4gZXEgeDEgeDIgJiYgX2VxdWFsX3NlcSBlcSBsMScgbDInXG5cbmxldCBlcXVhbCBlcSBxMSBxMiA9IF9lcXVhbF9zZXEgZXEgKHRvX3NlcSBxMSkgKHRvX3NlcSBxMilcblxubGV0ICggLS0gKSBhIGIgPVxuICBsZXQgcmVjIHVwX3RvIHEgYSBiID1cbiAgICBpZiBhID0gYiB0aGVuXG4gICAgICBzbm9jIHEgYVxuICAgIGVsc2VcbiAgICAgIHVwX3RvIChzbm9jIHEgYSkgKGEgKyAxKSBiXG4gIGFuZCBkb3duX3RvIHEgYSBiID1cbiAgICBpZiBhID0gYiB0aGVuXG4gICAgICBzbm9jIHEgYVxuICAgIGVsc2VcbiAgICAgIGRvd25fdG8gKHNub2MgcSBhKSAoYSAtIDEpIGJcbiAgaW5cbiAgaWYgYSA8PSBiIHRoZW5cbiAgICB1cF90byBlbXB0eSBhIGJcbiAgZWxzZVxuICAgIGRvd25fdG8gZW1wdHkgYSBiXG5cbmxldCAoIC0tXiApIGEgYiA9XG4gIGlmIGEgPSBiIHRoZW5cbiAgICBlbXB0eVxuICBlbHNlIGlmIGEgPCBiIHRoZW5cbiAgICBhIC0tIChiIC0gMSlcbiAgZWxzZVxuICAgIGEgLS0gKGIgKyAxKVxuXG5sZXQgcHAgcHBfeCBvdXQgZCA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGhvdjI+cXVldWUge1wiO1xuICBpdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI7QCBcIjtcbiAgICAgIHBwX3ggb3V0IHgpXG4gICAgZDtcbiAgRm9ybWF0LmZwcmludGYgb3V0IFwifUBdXCJcbiIsIiMgMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIG1vZHVsZSBMZXhpbmcgPSBzdHJ1Y3RcbiAgICAoKiBPdmVycmlkZSB0aGUgTGV4aW5nLmVuZ2luZSB0byBhdm9pZCBjcmVhdGluZyBhIG5ldyBwb3NpdGlvbiByZWNvcmRcbiAgICAgICBlYWNoIHRpbWUgYSBydWxlIGlzIG1hdGNoZWQuIFJlZHVjZXMgdG90YWwgcGFyc2UgdGltZSBieSBhcm91bmQgMzAlLlxuICAgICAgIElkZWEgc3RvbGVuIGZyb20geW9qc29uICopXG5cbiAgICBpbmNsdWRlIExleGluZ1xuXG4gICAgZXh0ZXJuYWwgY19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50ID0gXCJjYW1sX2xleF9lbmdpbmVcIlxuXG4gICAgbGV0IGVuZ2luZSB0Ymwgc3RhdGUgYnVmID1cbiAgICAgIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gICAgICAoKlxuICAgICAgaWYgcmVzdWx0ID49IDAgdGhlbiBiZWdpblxuICAgICAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICAgICAgZW5kO1xuICAgICAgKilcbiAgICAgIHJlc3VsdFxuICBlbmRcbiAgb3BlbiBUb2tlbnNcblxuXG4gIG1vZHVsZSB0eXBlIExleCA9IHNpZ1xuICAgIHZhbCByZWFkIDogTGV4aW5nLmxleGJ1ZiAtPiBUb2tlbnMudG9rZW5cbiAgZW5kXG5cbiAgbW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogTGV4ID0gc3RydWN0XG5cbiMgMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5sZXQgX19vY2FtbF9sZXhfdGFibGVzID0ge1xuICBMZXhpbmcubGV4X2Jhc2UgPVxuICAgXCJcXDAwMFxcMDAwXFwyMjlcXDI1NVxcMDE3XFwwMDBcXDIzMlxcMjU1XFwwMDNcXDAwMFxcMjM0XFwyNTVcXDEyNlxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwxMTNcXDAwMFxcMDAwXFwwMDBcXDAwMVxcMDAwXFwwMDFcXDAwMFxcMDAyXFwwMDBcXDEyM1xcMDAwXFwyNDNcXDI1NVxcMjQ0XFwyNTVcXFxuICAgIFxcMjQ1XFwyNTVcXDI0NlxcMjU1XFwyNDdcXDI1NVxcMjQ4XFwyNTVcXDI0OVxcMjU1XFwyNTBcXDI1NVxcMjUxXFwyNTVcXDI1MlxcMjU1XFxcbiAgICBcXDAwMVxcMDAwXFwwMDJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDNcXDAwMFxcMjU0XFwyNTVcXDAwM1xcMDAwXFwwMDFcXDAwMFxcMDExXFwwMDBcXDI1M1xcMjU1XFwyMzlcXDI1NVxcMDAzXFwwMDBcXFxuICAgIFxcMDEwXFwwMDBcXDAxMVxcMDAwXFwwMDVcXDAwMFxcMjQyXFwyNTVcXDAyMFxcMDAwXFwwMTlcXDAwMFxcMDQ4XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA2N1xcMDAwXFwwNjNcXDAwMFxcMDc1XFwwMDBcXDA4NFxcMDAwXFwyNDFcXDI1NVxcMDg1XFwwMDBcXDA4M1xcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDc1XFwwMDBcXDA3MVxcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA5M1xcMDAwXFwyNDBcXDI1NVxcMDk1XFwwMDBcXFxuICAgIFxcMDkzXFwwMDBcXDA4OVxcMDAwXFwwOTVcXDAwMFxcMDg1XFwwMDBcXDA4MVxcMDAwXFwwMDFcXDAwMFxcMDMyXFwwMDBcXDE1NVxcMDAwXFxcbiAgICBcXDE4NlxcMDAwXFwyMDlcXDAwMFxcMjE5XFwwMDBcXDIyOVxcMDAwXFwyNDBcXDAwMFxcMjUwXFwwMDBcXDAxOFxcMDAxXFwwNjZcXDAwMVxcXG4gICAgXFwyMzZcXDI1NVxcMjM1XFwyNTVcXDA5NFxcMDAxXFwxMTdcXDAwMVxcMTU1XFwwMDFcXDE3OFxcMDAxXFwwNTNcXDAwMFxcMjMxXFwyNTVcXFxuICAgIFxcMDg4XFwwMDFcXDI1MlxcMjU1XFwyNTNcXDI1NVxcMjU0XFwyNTVcXDAxNFxcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2JhY2t0cmsgPVxuICAgXCJcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDI2XFwwMDBcXDI1NVxcMjU1XFwwMjJcXDAwMFxcMjU1XFwyNTVcXDAyNlxcMDAwXFwwMTdcXDAwMFxcXG4gICAgXFwwMTdcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDAyNlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAyNlxcMDAwXFwwMjZcXDAwMFxcMDI2XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAxOFxcMDAwXFwyNTVcXDI1NVxcMDE4XFwwMDBcXDI1NVxcMjU1XFwwMThcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMjVcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwM1xcMDAwXFwyNTVcXDI1NVwiO1xuICBMZXhpbmcubGV4X2RlZmF1bHQgPVxuICAgXCJcXDAwMVxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODZcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDg5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFwiO1xuICBMZXhpbmcubGV4X3RyYW5zID1cbiAgIFwiXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDNcXDAwMFxcMDAwXFwwMDBcXDAwNFxcMDAwXFwwMDRcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwNFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDZcXDAwMFxcMDA0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAxOVxcMDAwXFwwMThcXDAwMFxcMDAwXFwwMDBcXDAxMFxcMDAwXFwwMTVcXDAwMFxcMDEzXFwwMDBcXDA3MVxcMDAwXFwwMDJcXDAwMFxcXG4gICAgXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMTRcXDAwMFxcMDg3XFwwMDBcXDAxN1xcMDAwXFwwOTNcXDAwMFxcMDE2XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDA4NlxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDcwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDExXFwwMDBcXDA1OVxcMDAwXFwwNzdcXDAwMFxcMDAwXFwwMDBcXDA3N1xcMDAwXFwwMDlcXDAwMFxcMDM4XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDAwXFwwMDBcXDAyMVxcMDAwXFwwMDBcXDAwMFxcMDIwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDY5XFwwMDBcXDAzNFxcMDAwXFwwMzBcXDAwMFxcMDUwXFwwMDBcXDA3MFxcMDAwXFwwMjVcXDAwMFxcMDI5XFwwMDBcXFxuICAgIFxcMDMzXFwwMDBcXDAxMlxcMDAwXFwwNjBcXDAwMFxcMDQzXFwwMDBcXDAzMVxcMDAwXFwwMzZcXDAwMFxcMDI0XFwwMDBcXDA1M1xcMDAwXFxcbiAgICBcXDA1MVxcMDAwXFwwMzhcXDAwMFxcMDI3XFwwMDBcXDAzMlxcMDAwXFwwMjZcXDAwMFxcMDI4XFwwMDBcXDAzNVxcMDAwXFwwMzdcXDAwMFxcXG4gICAgXFwwNDRcXDAwMFxcMDQyXFwwMDBcXDA0NVxcMDAwXFwwMjNcXDAwMFxcMDQ2XFwwMDBcXDAyMlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDQ3XFwwMDBcXDA3MVxcMDAwXFxcbiAgICBcXDA4MFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDdcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcMDcwXFwwMDBcXDA0OVxcMDAwXFxcbiAgICBcXDA0M1xcMDAwXFwwMzhcXDAwMFxcMDUyXFwwMDBcXDA1NFxcMDAwXFwwNTVcXDAwMFxcMDU2XFwwMDBcXDA1N1xcMDAwXFwwNThcXDAwMFxcXG4gICAgXFwwNTJcXDAwMFxcMDYzXFwwMDBcXDA2MVxcMDAwXFwwNjJcXDAwMFxcMDQwXFwwMDBcXDA2NFxcMDAwXFwwNjVcXDAwMFxcMDY2XFwwMDBcXFxuICAgIFxcMDY3XFwwMDBcXDA2OFxcMDAwXFwwNjJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFxcbiAgICBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDA3MFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA0MVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMzlcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3NVxcMDAwXFwwMDBcXDAwMFxcMDc1XFwwMDBcXDA3M1xcMDAwXFxcbiAgICBcXDAwNVxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcXG4gICAgXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXFxuICAgIFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzNcXDAwMFxcXG4gICAgXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzlcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDkxXFwwMDBcXDAwMFxcMDAwXFwwODFcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDA5MlxcMDAwXFwwMDBcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzhcXDAwMFxcMDgzXFwwMDBcXFxuICAgIFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcXG4gICAgXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwOTBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcIjtcbiAgTGV4aW5nLmxleF9jaGVjayA9XG4gICBcIlxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDRcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMDAwXFwwMDBcXDAwNFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXFxuICAgIFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFxcbiAgICBcXDAwMFxcMDAwXFwwMDBcXDAwMFxcMDAwXFwwMDBcXDAwMlxcMDAwXFwwMDBcXDAwMFxcMDkyXFwwMDBcXDAwMFxcMDAwXFwwODZcXDAwMFxcXG4gICAgXFwwMDJcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDAwN1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwwMTBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwNzBcXDAwMFxcMDAwXFwwMDBcXDA2OVxcMDAwXFxcbiAgICBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDA3MFxcMDAwXFwwNzBcXDAwMFxcXG4gICAgXFwwNzBcXDAwMFxcMDcwXFwwMDBcXDI1NVxcMjU1XFwwMDBcXDAwMFxcMjU1XFwyNTVcXDAwMFxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDAwOVxcMDAwXFwwMjRcXDAwMFxcMDI1XFwwMDBcXDAzOVxcMDAwXFwwMDdcXDAwMFxcMDAwXFwwMDBcXDAyOFxcMDAwXFxcbiAgICBcXDAzMlxcMDAwXFwwMDBcXDAwMFxcMDEwXFwwMDBcXDA0MlxcMDAwXFwwMzBcXDAwMFxcMDM1XFwwMDBcXDAwMFxcMDAwXFwwMTFcXDAwMFxcXG4gICAgXFwwMTJcXDAwMFxcMDM0XFwwMDBcXDAyNlxcMDAwXFwwMzFcXDAwMFxcMDAwXFwwMDBcXDAyN1xcMDAwXFwwMjRcXDAwMFxcMDM2XFwwMDBcXFxuICAgIFxcMDQwXFwwMDBcXDA0MVxcMDAwXFwwNDRcXDAwMFxcMDAwXFwwMDBcXDA0NVxcMDAwXFwwMDBcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXFxuICAgIFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFxcbiAgICBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDAwNlxcMDAwXFwwMDZcXDAwMFxcMDA2XFwwMDBcXDA0NlxcMDAwXFwwMDhcXDAwMFxcXG4gICAgXFwwMDZcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDA4XFwwMDBcXFxuICAgIFxcMDA4XFwwMDBcXDAwOFxcMDAwXFwwMDhcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFxcbiAgICBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDEzXFwwMDBcXDAxM1xcMDAwXFwwMTNcXDAwMFxcMDQ3XFwwMDBcXDAwOFxcMDAwXFwwNDhcXDAwMFxcXG4gICAgXFwwNDlcXDAwMFxcMDUwXFwwMDBcXDA1MVxcMDAwXFwwNTNcXDAwMFxcMDU0XFwwMDBcXDA1NVxcMDAwXFwwNTZcXDAwMFxcMDU3XFwwMDBcXFxuICAgIFxcMDU4XFwwMDBcXDA1OVxcMDAwXFwwNjBcXDAwMFxcMDYxXFwwMDBcXDAxM1xcMDAwXFwwNjNcXDAwMFxcMDY0XFwwMDBcXDA2NVxcMDAwXFxcbiAgICBcXDA2NlxcMDAwXFwwNjdcXDAwMFxcMDY4XFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcXG4gICAgXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDA3MVxcMDAwXFwwNzFcXDAwMFxcMDcxXFwwMDBcXDI1NVxcMjU1XFwwMDhcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMTNcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMDEzXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDcyXFwwMDBcXDA3MlxcMDAwXFwwNzJcXDAwMFxcMDcyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzNcXDAwMFxcMjU1XFwyNTVcXDA3M1xcMDAwXFwwNzJcXDAwMFxcXG4gICAgXFwwMDBcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDczXFwwMDBcXFxuICAgIFxcMDczXFwwMDBcXDA3M1xcMDAwXFwwNzNcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFxcbiAgICBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc0XFwwMDBcXDA3NFxcMDAwXFwwNzRcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcXG4gICAgXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDc1XFwwMDBcXDA3NVxcMDAwXFwwNzVcXDAwMFxcMDcyXFwwMDBcXFxuICAgIFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc2XFwwMDBcXDA3NlxcMDAwXFxcbiAgICBcXDA3NlxcMDAwXFwwNzZcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcXG4gICAgXFwwNzdcXDAwMFxcMDc3XFwwMDBcXDA3N1xcMDAwXFwwNzdcXDAwMFxcMDc4XFwwMDBcXDA4NlxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXFxuICAgIFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFxcbiAgICBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA3OVxcMDAwXFwwNzlcXDAwMFxcXG4gICAgXFwwNzlcXDAwMFxcMDc5XFwwMDBcXDA4OFxcMDAwXFwyNTVcXDI1NVxcMDc5XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc4XFwwMDBcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwwNzhcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwMDZcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMDc4XFwwMDBcXDI1NVxcMjU1XFwwODhcXDAwMFxcMjU1XFwyNTVcXDA3OFxcMDAwXFwyNTVcXDI1NVxcMDc4XFwwMDBcXDA3OFxcMDAwXFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4MlxcMDAwXFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDc5XFwwMDBcXDA4MlxcMDAwXFxcbiAgICBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDgzXFwwMDBcXDA4M1xcMDAwXFxcbiAgICBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODJcXDAwMFxcXG4gICAgXFwwODJcXDAwMFxcMDgyXFwwMDBcXDA4MlxcMDAwXFwwODJcXDAwMFxcMDgyXFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDA4M1xcMDAwXFwwODNcXDAwMFxcXG4gICAgXFwwODNcXDAwMFxcMDgzXFwwMDBcXDA4M1xcMDAwXFwwODNcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXFxuICAgIFxcMDg0XFwwMDBcXDA4NFxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXFxuICAgIFxcMDg1XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDA4NFxcMDAwXFwwODRcXDAwMFxcMDg0XFwwMDBcXDA4NFxcMDAwXFxcbiAgICBcXDA4NFxcMDAwXFwwODRcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMDg1XFwwMDBcXDA4NVxcMDAwXFwwODVcXDAwMFxcMDg1XFwwMDBcXDA4NVxcMDAwXFxcbiAgICBcXDA4NVxcMDAwXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwwNzlcXDAwMFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMDg4XFwwMDBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXFxuICAgIFxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFxcbiAgICBcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcXG4gICAgXFwyNTVcXDI1NVxcMjU1XFwyNTVcXDI1NVxcMjU1XCI7XG4gIExleGluZy5sZXhfYmFzZV9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfYmFja3Rya19jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfZGVmYXVsdF9jb2RlID1cbiAgIFwiXCI7XG4gIExleGluZy5sZXhfdHJhbnNfY29kZSA9XG4gICBcIlwiO1xuICBMZXhpbmcubGV4X2NoZWNrX2NvZGUgPVxuICAgXCJcIjtcbiAgTGV4aW5nLmxleF9jb2RlID1cbiAgIFwiXCI7XG59XG5cbmxldCByZWMgcmVhZCBsZXhidWYgPVxuICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIDBcbmFuZCBfX29jYW1sX2xleF9yZWFkX3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDU3IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIEJPT0wgdHJ1ZSApXG4jIDI3MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgNTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQk9PTCBmYWxzZSApXG4jIDI3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgNjEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTlVMTCApXG4jIDI4MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDMgLT5cbiMgNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggT1MgKVxuIyAyODYgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA0IC0+XG4jIDY1IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIE9FIClcbiMgMjkxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgNSAtPlxuIyA2NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBBUyApXG4jIDI5NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDYgLT5cbiMgNjkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQUUgKVxuIyAzMDEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCA3IC0+XG4jIDcxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF90dXBsZSBUUyB0aGVuIFRTXG4gICAgICBlbHNlIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKVxuICAgIClcbiMgMzA5IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgOCAtPlxuIyA3NiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgaWYgQ29tcGxpYW5jZS5sZXhfdHVwbGUgVEUgdGhlbiBURVxuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDkgLT5cbiMgODEgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIGlmIENvbXBsaWFuY2UubGV4X3ZhcmlhbnQgVlMgdGhlbiBWU1xuICAgICAgZWxzZSBMZXh4ZXJfdXRpbHMubGV4X2Vycm9yIChcInVuZXhwZWN0ZWQgY2hhcmFjdGVyICdcIiBeIChMZXhpbmcubGV4ZW1lIGxleGJ1ZikgXiBcIidcIilcbiAgICApXG4jIDMyNSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEwIC0+XG4jIDg2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoXG4gICAgICBpZiBDb21wbGlhbmNlLmxleF92YXJpYW50IFZFIHRoZW4gVkVcbiAgICAgIGVsc2UgTGV4eGVyX3V0aWxzLmxleF9lcnJvciAoXCJ1bmV4cGVjdGVkIGNoYXJhY3RlciAnXCIgXiAoTGV4aW5nLmxleGVtZSBsZXhidWYpIF4gXCInXCIpXG4gICAgKVxuIyAzMzMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxMSAtPlxuIyA5MSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDT01NQSApXG4jIDMzOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEyIC0+XG4jIDkzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENPTE9OIClcbiMgMzQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTMgLT5cbiMgOTUgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIE5FR0lORklOSVRZIClcbiMgMzQ4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTQgLT5cbiMgOTcgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzUzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTUgLT5cbiMgOTkgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggQ29tcGxpYW5jZS5sZXhfbnVtYmVyIElORklOSVRZIClcbiMgMzU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTYgLT5cbiMgMTAxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIENvbXBsaWFuY2UubGV4X251bWJlciBOQU4gKVxuIyAzNjMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAxNyAtPlxuIyAxMDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIExleHhlcl91dGlscy5zdHJpbmcybnVtIChMZXhpbmcubGV4ZW1lIGxleGJ1Zikgd2l0aFxuICAgICAgfCBJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfaW50ZWdlciB0b2tcbiAgICAgIHwgTEFSR0VJTlQgXyBhcyB0b2sgLT4gQ29tcGxpYW5jZS5sZXhfbGFyZ2VpbnQgdG9rXG4gICAgICB8IHRvayAtPiB0b2tcbiAgICApXG4jIDM3MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDE4IC0+XG4jIDExMCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBDb21wbGlhbmNlLmxleF9udW1iZXIgKEZMT0FUIChmbG9hdF9vZl9zdHJpbmcgKExleGluZy5sZXhlbWUgbGV4YnVmKSkpIClcbiMgMzc4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMTkgLT5cbiMgMTEyIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyBcIlwiIClcbiMgMzgzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjAgLT5cbmxldFxuIyAxMTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzXG4jIDM4OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbj0gTGV4aW5nLnN1Yl9sZXhlbWUgbGV4YnVmIChsZXhidWYuTGV4aW5nLmxleF9zdGFydF9wb3MgKyAxKSAobGV4YnVmLkxleGluZy5sZXhfY3Vycl9wb3MgKyAtMSkgaW5cbiMgMTE0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIFNUUklORyAoTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzKSApXG4jIDM5MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIxIC0+XG4jIDExNiBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCBFT0YgKVxuIyAzOTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMiAtPlxuIyAxMTggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggcmVhZCBsZXhidWYgKVxuIyA0MDMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyMyAtPlxuIyAxMjAgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgICggTGV4eGVyX3V0aWxzLnVwZGF0ZV9wb3MgbGV4YnVmOyByZWFkIGxleGJ1ZjsgKVxuIyA0MDggXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAyNCAtPlxuIyAxMjIgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbGxcIlxuICAgIChcbiAgICAgIG1hdGNoIENvbXBsaWFuY2UuY29tbWVudF9jaGVjayAoKSB3aXRoXG4gICAgICB8IE9rICgpIC0+IHJlYWRfY29tbWVudCBsZXhidWY7IHJlYWQgbGV4YnVmXG4gICAgICB8IEVycm9yIGVyciAtPiAgQ09NUExJQU5DRV9FUlJPUiBlcnJcbiAgICApXG4jIDQxNyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDI1IC0+XG4jIDEyOCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKFxuICAgICAgbWF0Y2ggQ29tcGxpYW5jZS5jb21tZW50X2NoZWNrICgpIHdpdGhcbiAgICAgIHwgT2sgKCkgLT4gcmVhZCBsZXhidWZcbiAgICAgIHwgRXJyb3IgZXJyIC0+ICBDT01QTElBTkNFX0VSUk9SIGVyclxuICAgIClcbiMgNDI2IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgMjYgLT5cbiMgMTM0IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgKFwidW5leHBlY3RlZCBjaGFyYWN0ZXIgJ1wiIF4gKExleGluZy5sZXhlbWUgbGV4YnVmKSBeIFwiJ1wiKSApXG4jIDQzMSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IF9fb2NhbWxfbGV4X3N0YXRlIC0+IGxleGJ1Zi5MZXhpbmcucmVmaWxsX2J1ZmYgbGV4YnVmO1xuICAgICAgX19vY2FtbF9sZXhfcmVhZF9yZWMgbGV4YnVmIF9fb2NhbWxfbGV4X3N0YXRlXG5cbmFuZCByZWFkX2NvbW1lbnQgbGV4YnVmID1cbiAgIF9fb2NhbWxfbGV4X3JlYWRfY29tbWVudF9yZWMgbGV4YnVmIDg4XG5hbmQgX19vY2FtbF9sZXhfcmVhZF9jb21tZW50X3JlYyBsZXhidWYgX19vY2FtbF9sZXhfc3RhdGUgPVxuICBtYXRjaCBMZXhpbmcuZW5naW5lIF9fb2NhbWxfbGV4X3RhYmxlcyBfX29jYW1sX2xleF9zdGF0ZSBsZXhidWYgd2l0aFxuICAgICAgfCAwIC0+XG4jIDEzOSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCAoKSApXG4jIDQ0MyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDEgLT5cbiMgMTQxIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy51cGRhdGVfcG9zIGxleGJ1ZjsgcmVhZF9jb21tZW50IGxleGJ1ZiApXG4jIDQ0OCBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcblxuICB8IDIgLT5cbiMgMTQzIFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxsXCJcbiAgICAoIExleHhlcl91dGlscy5sZXhfZXJyb3IgXCJ1bmV4cGVjdGVkIEVPRiBpbiBjb21tZW50XCIgKVxuIyA0NTMgXCJsaWIvY29tcGxpYW50X2xleHhlci5tbFwiXG5cbiAgfCAzIC0+XG4jIDE0NSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gICAgKCByZWFkX2NvbW1lbnQgbGV4YnVmIClcbiMgNDU4IFwibGliL2NvbXBsaWFudF9sZXh4ZXIubWxcIlxuXG4gIHwgX19vY2FtbF9sZXhfc3RhdGUgLT4gbGV4YnVmLkxleGluZy5yZWZpbGxfYnVmZiBsZXhidWY7XG4gICAgICBfX29jYW1sX2xleF9yZWFkX2NvbW1lbnRfcmVjIGxleGJ1ZiBfX29jYW1sX2xleF9zdGF0ZVxuXG47O1xuXG4jIDE0NyBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sbFwiXG4gXG4gIGVuZFxuXG4jIDQ2OSBcImxpYi9jb21wbGlhbnRfbGV4eGVyLm1sXCJcbiIsIm1vZHVsZSBZb2pzb24gPSBTdGQuWW9qc29uXG5vcGVuIEJyclxuXG50eXBlIG1ldGhvZCcgPSBHZXQgfCBQb3N0XG5cbmxldCBqc3RyX29mX21ldGhvZCA9IGZ1bmN0aW9uIEdldCAtPiBKc3RyLnYgXCJHRVRcIiB8IFBvc3QgLT4gSnN0ci52IFwiUE9TVFwiXG5cbm1vZHVsZSBUeXBlcyA9IHN0cnVjdFxuICB0eXBlIG9yZGVyID0gQXNjZW5kaW5nIHwgRGVzY2VuZGluZyBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBzb3J0ID1cbiAgICB8IEFsYnVtXG4gICAgfCBBbGJ1bUFydGlzdFxuICAgIHwgQXJ0aXN0XG4gICAgfCBCdWRnZXRcbiAgICB8IENvbW11bml0eVJhdGluZ1xuICAgIHwgQ3JpdGljUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZVBsYXllZFxuICAgIHwgUGxheUNvdW50XG4gICAgfCBQcmVtaWVyZURhdGVcbiAgICB8IFByb2R1Y3Rpb25ZZWFyXG4gICAgfCBTb3J0TmFtZVxuICAgIHwgUmFuZG9tXG4gICAgfCBSZXZlbnVlXG4gICAgfCBSdW50aW1lXG4gIFtAQGRlcml2aW5nIHlvanNvbl1cbmVuZFxuXG50eXBlIHVzZXIgPSB7XG4gIG5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiTmFtZVwiXVxuICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgc2VydmVyX25hbWUgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJTZXJ2ZXJOYW1lXCJdXG4gIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG59XG5bQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbm1vZHVsZSB0eXBlIFF1ZXJ5ID0gc2lnXG4gIHR5cGUgcGF0aF9wYXJhbXNcbiAgdHlwZSBwYXJhbXMgW0BAZGVyaXZpbmcgeW9qc29uXVxuICB0eXBlIHJlc3BvbnNlIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB2YWwgbWV0aG9kJyA6IG1ldGhvZCdcbiAgdmFsIGVuZHBvaW50IDogcGF0aF9wYXJhbXMgLT4gc3RyaW5nIGxpc3RcbmVuZFxuXG5tb2R1bGUgQXV0aGVudGljYXRlX2J5X25hbWUgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHsgdXNlcm5hbWUgOiBzdHJpbmc7IFtAa2V5IFwiVXNlcm5hbWVcIl0gcHcgOiBzdHJpbmcgW0BrZXkgXCJQd1wiXSB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIHVzZXIgOiB1c2VyOyBbQGtleSBcIlVzZXJcIl1cbiAgICBhY2Nlc3NfdG9rZW4gOiBzdHJpbmc7IFtAa2V5IFwiQWNjZXNzVG9rZW5cIl1cbiAgICBzZXJ2ZXJfaWQgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVySWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBQb3N0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIlVzZXJzXCI7IFwiQXV0aGVudGljYXRlQnlOYW1lXCIgXVxuZW5kXG5cbm1vZHVsZSBJdGVtID0gc3RydWN0XG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoID0gKHN0cmluZyAqIHN0cmluZykgbGlzdFxuXG4gIGxldCBpbWFnZV9ibHVyX2hhc2hfb2ZfeW9qc29uIHkgPVxuICAgIGxldCBhc3NvYyA9IFlvanNvbi5TYWZlLlV0aWwudG9fYXNzb2MgeSBpblxuICAgIExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgdikpIGFzc29jXG5cbiAgbGV0IHlvanNvbl9vZl9pbWFnZV9ibHVyX2hhc2ggaSA6IFlvanNvbi5TYWZlLnQgPVxuICAgIGxldCBhc3NvYyA9IExpc3QubWFwIChmdW4gKGtleSwgdikgLT4gKGtleSwgYFN0cmluZyB2KSkgaSBpblxuICAgIGBBc3NvYyBhc3NvY1xuXG4gIHR5cGUgaW1hZ2VfYmx1cl9oYXNoZXMgPSB7XG4gICAgcHJpbWFyeSA6IGltYWdlX2JsdXJfaGFzaCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJQcmltYXJ5XCJdXG4gIH1cbiAgW0BAZGVyaXZpbmcgeW9qc29uXSBbQEB5b2pzb24uYWxsb3dfZXh0cmFfZmllbGRzXVxuXG4gIHR5cGUgdHlwZV8gPVxuICAgIHwgQWdncmVnYXRlRm9sZGVyXG4gICAgfCBBdWRpb1xuICAgIHwgQXVkaW9Cb29rXG4gICAgfCBCYXNlUGx1Z2luRm9sZGVyXG4gICAgfCBCb29rXG4gICAgfCBCb3hTZXRcbiAgICB8IENoYW5uZWxcbiAgICB8IENoYW5uZWxGb2xkZXJJdGVtXG4gICAgfCBDb2xsZWN0aW9uRm9sZGVyXG4gICAgfCBFcGlzb2RlXG4gICAgfCBGb2xkZXJcbiAgICB8IEdlbnJlXG4gICAgfCBMaXZlVHZDaGFubmVsXG4gICAgfCBMaXZlVHZQcm9ncmFtXG4gICAgfCBNYW51YWxQbGF5bGlzdHNGb2xkZXJcbiAgICB8IE1vdmllXG4gICAgfCBNdXNpY0FsYnVtXG4gICAgfCBNdXNpY0FydGlzdFxuICAgIHwgTXVzaWNHZW5yZVxuICAgIHwgTXVzaWNWaWRlb1xuICAgIHwgUGVyc29uXG4gICAgfCBQaG90b1xuICAgIHwgUGhvdG9BbGJ1bVxuICAgIHwgUGxheWxpc3RcbiAgICB8IFBsYXlsaXN0c0ZvbGRlclxuICAgIHwgUHJvZ3JhbVxuICAgIHwgUmVjb3JkaW5nXG4gICAgfCBTZWFzb25cbiAgICB8IFNlcmllc1xuICAgIHwgU3R1ZGlvXG4gICAgfCBUcmFpbGVyXG4gICAgfCBUdkNoYW5uZWxcbiAgICB8IFR2UHJvZ3JhbVxuICAgIHwgVXNlclJvb3RGb2xkZXJcbiAgICB8IFVzZXJWaWV3XG4gICAgfCBWaWRlb1xuICAgIHwgWWVhclxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSBmaWVsZCA9XG4gICAgfCBBaXJUaW1lXG4gICAgfCBCYXNpY1N5bmNJbmZvXG4gICAgfCBDYW5EZWxldGVcbiAgICB8IENhbkRvd25sb2FkXG4gICAgfCBDaGFubmVsSW1hZ2VcbiAgICB8IENoYW5uZWxJbmZvXG4gICAgfCBDaGFwdGVyc1xuICAgIHwgQ2hpbGRDb3VudFxuICAgIHwgQ3VtdWxhdGl2ZVJ1blRpbWVUaWNrc1xuICAgIHwgQ3VzdG9tUmF0aW5nXG4gICAgfCBEYXRlQ3JlYXRlZFxuICAgIHwgRGF0ZUxhc3RNZWRpYUFkZGVkXG4gICAgfCBEYXRlTGFzdFJlZnJlc2hlZFxuICAgIHwgRGF0ZUxhc3RTYXZlZFxuICAgIHwgRGlzcGxheVByZWZlcmVuY2VzSWRcbiAgICB8IEVuYWJsZU1lZGlhU291cmNlRGlzcGxheVxuICAgIHwgRXRhZ1xuICAgIHwgRXh0ZXJuYWxFdGFnXG4gICAgfCBFeHRlcm5hbFNlcmllc0lkXG4gICAgfCBFeHRlcm5hbFVybHNcbiAgICB8IEV4dHJhSWRzXG4gICAgfCBHZW5yZXNcbiAgICB8IEhlaWdodFxuICAgIHwgSG9tZVBhZ2VVcmxcbiAgICB8IEluaGVyaXRlZFBhcmVudGFsUmF0aW5nVmFsdWVcbiAgICB8IElzSERcbiAgICB8IEl0ZW1Db3VudHNcbiAgICB8IExvY2FsVHJhaWxlckNvdW50XG4gICAgfCBNZWRpYVNvdXJjZUNvdW50XG4gICAgfCBNZWRpYVNvdXJjZXNcbiAgICB8IE1lZGlhU3RyZWFtc1xuICAgIHwgT3JpZ2luYWxUaXRsZVxuICAgIHwgT3ZlcnZpZXdcbiAgICB8IFBhcmVudElkXG4gICAgfCBQYXRoXG4gICAgfCBQZW9wbGVcbiAgICB8IFBsYXlBY2Nlc3NcbiAgICB8IFByZXNlbnRhdGlvblVuaXF1ZUtleVxuICAgIHwgUHJpbWFyeUltYWdlQXNwZWN0UmF0aW9cbiAgICB8IFByb2R1Y3Rpb25Mb2NhdGlvbnNcbiAgICB8IFByb3ZpZGVySWRzXG4gICAgfCBSZWN1cnNpdmVJdGVtQ291bnRcbiAgICB8IFJlZnJlc2hTdGF0ZVxuICAgIHwgUmVtb3RlVHJhaWxlcnNcbiAgICB8IFNjcmVlbnNob3RJbWFnZVRhZ3NcbiAgICB8IFNlYXNvblVzZXJEYXRhXG4gICAgfCBTZXJpZXNQcmVzZW50YXRpb25VbmlxdWVLZXlcbiAgICB8IFNlcmllc1ByaW1hcnlJbWFnZVxuICAgIHwgU2VyaWVzU3R1ZGlvXG4gICAgfCBTZXJ2aWNlTmFtZVxuICAgIHwgU2V0dGluZ3NcbiAgICB8IFNvcnROYW1lXG4gICAgfCBTcGVjaWFsRXBpc29kZU51bWJlcnNcbiAgICB8IFNwZWNpYWxGZWF0dXJlQ291bnRcbiAgICB8IFN0dWRpb3NcbiAgICB8IFN5bmNJbmZvXG4gICAgfCBUYWdsaW5lc1xuICAgIHwgVGFnc1xuICAgIHwgVGhlbWVTb25nSWRzXG4gICAgfCBUaGVtZVZpZGVvSWRzXG4gICAgfCBXaWR0aFxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgKCogVGhlIFtUeXBlXSBmaWVsZCBpcyBhY3R1YWxseSBhIGpzb24gc3RyaW5nIGJ1dCB3ZSB3YW50IHRvIHNlZSBpdCBhcyBhXG4gICAgIHZhcmlhbnQgKHdoaWNoIGlzIGEgbGlzdCBvZiBvbmUgc3RyaW5nKSAqKVxuICB0eXBlIHR5cGVfc3RyID0gdHlwZV9cblxuICBsZXQgdHlwZV9zdHJfb2ZfeW9qc29uIGogPVxuICAgIGxldCBzID0gWW9qc29uLlNhZmUuVXRpbC50b19zdHJpbmcgaiBpblxuICAgIHR5cGVfX29mX3lvanNvbiAoYExpc3QgWyBgU3RyaW5nIHMgXSlcblxuICBsZXQgeW9qc29uX29mX3R5cGVfc3RyIHRzID1cbiAgICBtYXRjaCB5b2pzb25fb2ZfdHlwZV8gdHMgd2l0aCBgTGlzdCBbIGpzb24gXSAtPiBqc29uIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB0eXBlIHQgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgc29ydF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlNvcnROYW1lXCJdXG4gICAgaWQgOiBzdHJpbmc7IFtAa2V5IFwiSWRcIl1cbiAgICBwYXRoIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcIlBhdGhcIl1cbiAgICBhbGJ1bV9pZCA6IHN0cmluZyBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJBbGJ1bUlkXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbiBvcHRpb247XG4gICAgICAgICgqIFtQYXJlbnRJZF0gbWlnaHQgYWJzZW50LCBbbnVsbF0sIG9yIGEgc3RyaW5nICopXG4gICAgICAgIFtAeW9qc29uLm9wdGlvbl1cbiAgICAgICAgW0BrZXkgXCJQYXJlbnRJZFwiXVxuICAgIHNlcnZlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJTZXJ2ZXJJZFwiXVxuICAgIGltYWdlX2JsdXJfaGFzaGVzIDogaW1hZ2VfYmx1cl9oYXNoZXM7IFtAa2V5IFwiSW1hZ2VCbHVySGFzaGVzXCJdXG4gICAgdHlwZV8gOiB0eXBlX3N0cjsgW0BrZXkgXCJUeXBlXCJdXG4gICAgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nIG9wdGlvbjtcbiAgICAgICAgW0BkZWZhdWx0IE5vbmVdIFtAeW9qc29uX2Ryb3BfZGVmYXVsdCAoID0gKV0gW0BrZXkgXCJDb2xsZWN0aW9uVHlwZVwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcblxuICB0eXBlIHBhcmFtcyA9IHtcbiAgICBpZHMgOiBzdHJpbmcgbGlzdDsgW0BkZWZhdWx0IFtdXSBbQHlvanNvbl9kcm9wX2RlZmF1bHQgKCA9ICldIFtAa2V5IFwiaWRzXCJdXG4gICAgcGFyZW50X2lkIDogc3RyaW5nIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInBhcmVudElkXCJdXG4gICAgdXNlcl9pZCA6IHN0cmluZzsgW0BrZXkgXCJ1c2VySWRcIl1cbiAgICBmaWVsZHMgOiBJdGVtLmZpZWxkIGxpc3Q7XG4gICAgaW5jbHVkZV9pdGVtX3R5cGVzIDogSXRlbS50eXBlXyBsaXN0OyBbQGtleSBcImluY2x1ZGVJdGVtVHlwZXNcIl1cbiAgICBzdGFydF9pbmRleCA6IGludCBvcHRpb247IFtAeW9qc29uLm9wdGlvbl0gW0BrZXkgXCJzdGFydEluZGV4XCJdXG4gICAgbGltaXQgOiBpbnQgb3B0aW9uOyBbQHlvanNvbi5vcHRpb25dXG4gICAgc29ydF9vcmRlciA6IFR5cGVzLm9yZGVyIG9wdGlvbjsgW0B5b2pzb24ub3B0aW9uXSBbQGtleSBcInNvcnRPcmRlclwiXVxuICAgIHNvcnRfYnkgOiBUeXBlcy5zb3J0IGxpc3Q7IFtAa2V5IFwic29ydEJ5XCJdXG4gICAgcmVjdXJzaXZlIDogYm9vbDtcbiAgICBlbmFibGVfdXNlcl9kYXRhIDogYm9vbDsgW0BrZXkgXCJlbmFibGVVc2VyRGF0YVwiXVxuICAgIGVuYWJsZV9pbWFnZXMgOiBib29sOyBbQGtleSBcImVuYWJsZUltYWdlc1wiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IF8gPSBbIFwiSXRlbXNcIiBdXG5lbmRcblxubW9kdWxlIFZpZXdzID0gc3RydWN0XG4gIHR5cGUgcGF0aF9wYXJhbXMgPSB7IHVzZXJfaWQgOiBzdHJpbmcgfVxuXG4gIHR5cGUgcGFyYW1zID0ge1xuICAgIGluY2x1ZGVfZXh0ZXJuYWxfY29udGVudCA6IGJvb2w7IFtAa2V5IFwiaW5jbHVkZUV4dGVybmFsQ29udGVudFwiXVxuICB9XG4gIFtAQGRlcml2aW5nIHlvanNvbl1cblxuICB0eXBlIHJlc3BvbnNlID0ge1xuICAgIGl0ZW1zIDogSXRlbS50IGxpc3Q7IFtAa2V5IFwiSXRlbXNcIl1cbiAgICB0b3RhbF9yZWNvcmRfY291bnQgOiBpbnQ7IFtAa2V5IFwiVG90YWxSZWNvcmRDb3VudFwiXVxuICAgIHN0YXJ0X2luZGV4IDogaW50OyBbQGtleSBcIlN0YXJ0SW5kZXhcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgbGV0IG1ldGhvZCcgPSBHZXRcbiAgbGV0IGVuZHBvaW50IHBwID0gWyBcIlVzZXJzXCI7IHBwLnVzZXJfaWQ7IFwiVmlld3NcIiBdXG5lbmRcblxubW9kdWxlIFZpcnR1YWxfZm9sZGVycyA9IHN0cnVjdFxuICB0eXBlIHBhdGhfcGFyYW1zID0gdW5pdFxuICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIHR5cGUgdmlydHVhbF9mb2xkZXIgPSB7XG4gICAgbmFtZSA6IHN0cmluZzsgW0BrZXkgXCJOYW1lXCJdXG4gICAgbG9jYXRpb25zIDogc3RyaW5nIGxpc3Q7IFtAa2V5IFwiTG9jYXRpb25zXCJdXG4gICAgaXRlbV9pZCA6IHN0cmluZzsgW0BrZXkgXCJJdGVtSWRcIl1cbiAgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dIFtAQHlvanNvbi5hbGxvd19leHRyYV9maWVsZHNdXG5cbiAgdHlwZSByZXNwb25zZSA9IHZpcnR1YWxfZm9sZGVyIGxpc3QgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBtZXRob2QnID0gR2V0XG4gIGxldCBlbmRwb2ludCBfID0gWyBcIkxpYnJhcnlcIjsgXCJWaXJ0dWFsRm9sZGVyc1wiIF1cbmVuZFxuXG5tb2R1bGUgU3lzdGVtID0gc3RydWN0XG4gIG1vZHVsZSBJbmZvID0gc3RydWN0XG4gICAgdHlwZSBwYXRoX3BhcmFtcyA9IHVuaXRcbiAgICB0eXBlIHBhcmFtcyA9IHVuaXQgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gICAgdHlwZSByZXNwb25zZSA9IHtcbiAgICAgIGxvY2FsX2FkZHJlc3MgOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJMb2NhbEFkcmVzc1wiXVxuICAgICAgc2VydmVyX25hbWUgOiBzdHJpbmc7IFtAa2V5IFwiU2VydmVyTmFtZVwiXVxuICAgICAgcHJvZHVjdF9uYW1lIDogc3RyaW5nIG9wdGlvbjsgW0BkZWZhdWx0IE5vbmVdIFtAa2V5IFwiUHJvZHVjdE5hbWVcIl1cbiAgICAgIG9wZXJhdGluZ19zeXN0ZW0gOiBzdHJpbmcgb3B0aW9uOyBbQGRlZmF1bHQgTm9uZV0gW0BrZXkgXCJPcGVyYXRpbmdTeXN0ZW1cIl1cbiAgICAgIGlkIDogc3RyaW5nOyBbQGtleSBcIklkXCJdXG4gICAgfVxuICAgIFtAQGRlcml2aW5nIHlvanNvbl0gW0BAeW9qc29uLmFsbG93X2V4dHJhX2ZpZWxkc11cblxuICAgIGxldCBtZXRob2QnID0gR2V0XG4gICAgbGV0IGVuZHBvaW50IF8gPSBbIFwiU3lzdGVtXCI7IFwiSW5mb1wiIF1cbiAgZW5kXG5lbmRcblxuKCogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBiZSBmaWxsZWQgYnkgdGhlIGFwcCAqKVxubGV0IHNlc3Npb25fdXVpZCA9IHJlZiBOb25lXG5sZXQgc2V0X3Nlc3Npb25fdXVpZCBzID0gc2Vzc2lvbl91dWlkIDo9IFNvbWUgc1xuXG5sZXQgYXV0aG9yaXphdGlvbiA/dG9rZW4gKCkgPVxuICBsZXQgdG9rZW4gPVxuICAgIG1hdGNoIHRva2VuIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSB0IC0+IFByaW50Zi5zcHJpbnRmIFwiLCBUb2tlbj0lU1wiIHRcbiAgaW5cbiAgbGV0IHNlc3Npb25fdXVpZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiICFzZXNzaW9uX3V1aWQgaW5cbiAgUHJpbnRmLnNwcmludGZcbiAgICBcIk1lZGlhQnJvd3NlciBDbGllbnQ9XFxcIk9jYW1peFxcXCIsIERldmljZT1cXFwiRmlyZWZveFxcXCIsIERldmljZUlkPVxcXCIlc1xcXCIsIFxcXG4gICAgIFZlcnNpb249XFxcIjAuMVxcXCIlc1wiXG4gICAgc2Vzc2lvbl91dWlkIHRva2VuXG5cbmxldCByZXF1ZXN0ICh0eXBlIHBwIHAgcikgfmJhc2VfdXJsID90b2tlbiA/aGVhZGVyc1xuICAgIChtb2R1bGUgUSA6IFF1ZXJ5XG4gICAgICB3aXRoIHR5cGUgcGF0aF9wYXJhbXMgPSBwcFxuICAgICAgIGFuZCB0eXBlIHBhcmFtcyA9IHBcbiAgICAgICBhbmQgdHlwZSByZXNwb25zZSA9IHIpIChwYXJhbXMgOiBwKSAocGF0aF9wYXJhbXMgOiBwcCkgOiByIEZ1dC5vcl9lcnJvciA9XG4gIGxldCBvcGVuIEJycl9pby5GZXRjaCBpblxuICBsZXQgYmFzZV91cmkgPSBVcmkudiAoSnN0ci52IGJhc2VfdXJsKSBpblxuICBsZXQgYmFzZV9wYXRoX3NlZ21lbnRzID0gUmVzdWx0LmdldF9vayBAQCBVcmkucGF0aF9zZWdtZW50cyBiYXNlX3VyaSBpblxuICBsZXQgZW5kcG9pbnRfcGF0aF9zZWdtZW50cyA9IExpc3QubWFwIEpzdHIudiAoUS5lbmRwb2ludCBwYXRoX3BhcmFtcykgaW5cbiAgbGV0IHBhdGhfc2VnbWVudHMgPVxuICAgIGlmIGJhc2VfcGF0aF9zZWdtZW50cyA9IFsgSnN0ci5lbXB0eSBdIHRoZW4gZW5kcG9pbnRfcGF0aF9zZWdtZW50c1xuICAgIGVsc2UgTGlzdC5jb25jYXQgWyBiYXNlX3BhdGhfc2VnbWVudHM7IGVuZHBvaW50X3BhdGhfc2VnbWVudHMgXVxuICBpblxuICBsZXQgdXJpID0gVXJpLndpdGhfcGF0aF9zZWdtZW50cyBiYXNlX3VyaSBwYXRoX3NlZ21lbnRzIGluXG4gIGxldCB1cmkgPSBSZXN1bHQuZ2V0X29rIHVyaSBpblxuICBsZXQgYXV0aG9yaXphdGlvbiA9IGF1dGhvcml6YXRpb24gP3Rva2VuICgpIGluXG4gIGxldCBoZWFkZXJzID1cbiAgICBIZWFkZXJzLm9mX2Fzc29jID9pbml0OmhlYWRlcnNcbiAgICAgIEpzdHIuXG4gICAgICAgIFtcbiAgICAgICAgICAodiBcImNvbnRlbnQtdHlwZVwiLCB2IFwidGV4dC9qc29uXCIpO1xuICAgICAgICAgICh2IFwiWC1FbWJ5LUF1dGhvcml6YXRpb25cIiwgdiBhdXRob3JpemF0aW9uKTtcbiAgICAgICAgXVxuICBpblxuICBsZXQgbWV0aG9kJyA9IGpzdHJfb2ZfbWV0aG9kIFEubWV0aG9kJyBpblxuICBsZXQgaW5pdCwgdXJsID1cbiAgICBtYXRjaCBRLm1ldGhvZCcgd2l0aFxuICAgIHwgR2V0IC0+XG4gICAgICAgIGxldCBwYXJhbXMgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEpzb24uZGVjb2RlIHw+IFJlc3VsdC5nZXRfb2sgfD4gVXJpLlBhcmFtcy5vZl9vYmpcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVyaV93aXRoX3BhcmFtcyA9IFVyaS53aXRoX3F1ZXJ5X3BhcmFtcyB1cmkgcGFyYW1zIGluXG4gICAgICAgIChSZXF1ZXN0LmluaXQgfmhlYWRlcnMgfm1ldGhvZCcgKCksIFVyaS50b19qc3RyIHVyaV93aXRoX3BhcmFtcylcbiAgICB8IFBvc3QgLT5cbiAgICAgICAgbGV0IGJvZHkgPVxuICAgICAgICAgIHBhcmFtcyB8PiBRLnlvanNvbl9vZl9wYXJhbXMgfD4gWW9qc29uLlNhZmUudG9fc3RyaW5nIHw+IEpzdHIudlxuICAgICAgICAgIHw+IEJvZHkub2ZfanN0clxuICAgICAgICBpblxuICAgICAgICAoUmVxdWVzdC5pbml0IH5oZWFkZXJzIH5tZXRob2QnIH5ib2R5ICgpLCBVcmkudG9fanN0ciB1cmkpXG4gIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCogcmVzID0gcmVxdWVzdCBAQCBSZXF1ZXN0LnYgfmluaXQgdXJsIGluXG4gIGxldCsganNvbiA9IFJlc3BvbnNlLmFzX2JvZHkgcmVzIHw+IEJvZHkudGV4dCBpblxuICBsZXQgeW9qc29uID0gWW9qc29uLlNhZmUuZnJvbV9zdHJpbmcgKEpzdHIudG9fc3RyaW5nIGpzb24pIGluXG4gIHRyeSBRLnJlc3BvbnNlX29mX3lvanNvbiB5b2pzb25cbiAgd2l0aCBlIC0+XG4gICAgQ29uc29sZS5sb2cgWyBcIkFuIGVycm9yIG9jY3VyZWQgd2hpbGUgZGVjb2RpbmcgcmVzcG9uc2U6IFwiOyBqc29uIF07XG4gICAgQ29uc29sZS5sb2cgWyBlIF07XG4gICAgcmFpc2UgZVxuIiwib3BlbiEgU3RkXG5vcGVuIEJycmVyXG5vcGVuIEJycl9pb1xubW9kdWxlIEFwaSA9IERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4oKiBQcm9wb3NpdGlvbjpcbiAgIC0gVXNlIHByaW1hcnkga2V5IHRvIHByb3ZpZGUgZmlsdGVyaW5nXG4gICAtIFVzZSBpbmRleCBrZXlzIHRvIHByb3ZpZGUgc29ydHNcblxuICAgQmlnIHByaW1hcnkga2V5cyBkcml2ZSB0aGUgY29zdCBvZiBbZ2V0X2FsbF9rZXlzXSB1cC5cbiAgIFdlIGNvdWxkIGRlbGVnYXRlIHNvbWUgZmlsdGVyaW5nIHRvIHRoZSBpbmRleCBrZXlzIGlmIG5lY2Vzc2FyeS5cblxuICAgIFdlIGNvdWxkIGFsc28gdHJpZWQgdG8gcHJlLXByb2Nlc3Mgb3IgY29tcHJlc3MgdGhlIGtleXMgKilcblxubGV0IHRfdG9fanYgZW5jb2RlciB0ID1cbiAgZW5jb2RlciB0IHw+IFlvanNvbi5TYWZlLnRvX3N0cmluZyB8PiBKc3RyLm9mX3N0cmluZyB8PiBCcnIuSnNvbi5kZWNvZGVcbiAgfD4gUmVzdWx0LmdldF9leG5cblxubGV0IGp2X3RvX3QgZGVjb2RlciBqID1cbiAgbGV0IGpzb24gPSBCcnIuSnNvbi5lbmNvZGUgaiBpblxuICBPayAoSnN0ci50b19zdHJpbmcganNvbiB8PiBZb2pzb24uU2FmZS5mcm9tX3N0cmluZyB8PiBkZWNvZGVyKVxuXG5tb2R1bGUgT3JkZXJyZWRfaXRlbXMgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0geyBpZCA6IGludDsgaXRlbSA6IHN0cmluZyBvcHRpb24gfSBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgbW9kdWxlIEtleSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IGludFxuXG4gICAgbGV0IHRvX2p2IGsgPSBKdi5vZl9pbnQga1xuICAgIGxldCBvZl9qdiBqID0gSnYudG9faW50IGpcbiAgICBsZXQgcGF0aCA9IEluZGV4ZWRfZGIuS2V5X3BhdGguSWQgXCJpZFwiXG4gIGVuZFxuXG4gIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgbGV0IHRvX2p2IHQgPSB0X3RvX2p2IHlvanNvbl9vZl90IHRcbiAgbGV0IG9mX2p2IGogPSBqdl90b190IHRfb2ZfeW9qc29uIGogfD4gUmVzdWx0LmdldF9leG5cbiAgbGV0IGdldF9rZXkgdCA9IHQuaWRcbmVuZFxuXG5tb2R1bGUgSXRlbXMgPSBzdHJ1Y3RcbiAgb3BlbiBEYXRhX3NvdXJjZS5KZWxseWZpbi5BcGlcblxuICB0eXBlIHNvcnRzID0geyBkYXRlX2FkZGVkIDogaW50OyB2aWV3cyA6IHN0cmluZyBsaXN0OyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuICBbQEBkZXJpdmluZyB5b2pzb25dXG5cbiAgdHlwZSB0ID0geyBzb3J0cyA6IHNvcnRzOyBpdGVtIDogSXRlbS50IH0gW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIGxldCBjb21wYXJlIHQgdCcgPSBTdHJpbmcuY29tcGFyZSB0LnNvcnRzLnNvcnRfbmFtZSB0Jy5zb3J0cy5zb3J0X25hbWVcblxuICBtb2R1bGUgS2V5ID0gc3RydWN0XG4gICAgdHlwZSB0ID0geyBpZCA6IHN0cmluZzsgc29ydF9uYW1lIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiB7IGlkOyBzb3J0X25hbWU7IHZpZXdzIH0gPVxuICAgICAgbGV0IGlkID0gSnYub2Zfc3RyaW5nIGlkIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gSnYub2Zfc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgbGV0IHZpZXdzID0gSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgdmlld3MgaW5cbiAgICAgIEp2Lm9mX2p2X2FycmF5IFt8IGlkOyBzb3J0X25hbWU7IHZpZXdzIHxdXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi50b19qdl9hcnJheSBqIHdpdGhcbiAgICAgIHwgW3wgaWQ7IHNvcnRfbmFtZTsgdmlld3MgfF0gLT5cbiAgICAgICAgICBsZXQgaWQgPSBKdi50b19zdHJpbmcgaWQgaW5cbiAgICAgICAgICBsZXQgc29ydF9uYW1lID0gSnYudG9fc3RyaW5nIHNvcnRfbmFtZSBpblxuICAgICAgICAgIGxldCB2aWV3cyA9IEp2LnRvX2xpc3QgSnYudG9fc3RyaW5nIHZpZXdzIGluXG4gICAgICAgICAgeyBpZDsgc29ydF9uYW1lOyB2aWV3cyB9XG4gICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgcGF0aCA9XG4gICAgICBJbmRleGVkX2RiLktleV9wYXRoLihcbiAgICAgICAgUyBbfCBJZCBcIml0ZW0uSWRcIjsgSWQgXCJpdGVtLk5hbWVcIjsgSWQgXCJzb3J0cy52aWV3c1wiIHxdKVxuICBlbmRcblxuICBtb2R1bGUgS2V5X2RhdGVfYWRkZWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBpbnRcblxuICAgIGxldCB0b19qdiBrID0gSnYub2ZfaW50IGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX2ludCBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwic29ydHMuZGF0ZV9hZGRlZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfaWQgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiaXRlbS5JZFwiXG4gIGVuZFxuXG4gIG1vZHVsZSBLZXlfdmlld19raW5kID0gc3RydWN0XG4gICAgKCogdG9kbzogdXNlIGEgZW51bSBmb3Iga2luZHMgKilcbiAgICB0eXBlIHQgPSB7IHR5cGUnIDogc3RyaW5nOyB2aWV3cyA6IHN0cmluZyBsaXN0IH1cblxuICAgIGxldCB0b19qdiBfayA9IGFzc2VydCBmYWxzZVxuXG4gICAgbGV0IG9mX2p2IGogPVxuICAgICAgbWF0Y2ggSnYuKHRvX2p2X2FycmF5IGopIHdpdGhcbiAgICAgIHwgW3wgdHlwZSc7IHZpZXdzIHxdIC0+XG4gICAgICAgICAgeyB0eXBlJyA9IEp2LnRvX3N0cmluZyB0eXBlJzsgdmlld3MgPSBKdi4odG9fbGlzdCB0b19zdHJpbmcgdmlld3MpIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID0gSW5kZXhlZF9kYi5LZXlfcGF0aC5TIFt8IElkIFwiaXRlbS5UeXBlXCI7IElkIFwic29ydHMudmlld3NcIiB8XVxuICBlbmRcblxuICBtb2R1bGUgS2V5X3R5cGVfbmFtZSA9IHN0cnVjdFxuICAgIHR5cGUgdCA9IHsgY29sbGVjdGlvbl90eXBlIDogc3RyaW5nOyBzb3J0X25hbWUgOiBzdHJpbmcgfVxuXG4gICAgbGV0IHRvX2p2IF90ID0gYXNzZXJ0IGZhbHNlXG5cbiAgICBsZXQgb2ZfanYgaiA9XG4gICAgICBtYXRjaCBKdi4odG9fanZfYXJyYXkgaikgd2l0aFxuICAgICAgfCBbfCBjb2xsZWN0aW9uX3R5cGU7IHNvcnRfbmFtZSB8XSAtPlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25fdHlwZSA9IEp2LnRvX3N0cmluZyBjb2xsZWN0aW9uX3R5cGU7XG4gICAgICAgICAgICBzb3J0X25hbWUgPSBKdi50b19zdHJpbmcgc29ydF9uYW1lO1xuICAgICAgICAgIH1cbiAgICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAgIGxldCBwYXRoID1cbiAgICAgIEluZGV4ZWRfZGIuS2V5X3BhdGguUyBbfCBJZCBcIml0ZW0uQ29sbGVjdGlvblR5cGVcIjsgSWQgXCJzb3J0cy5zb3J0X25hbWVcIiB8XVxuICBlbmRcblxuICBsZXQgbmFtZSA9IFwiaXRlbXNcIlxuICBsZXQgdG9fanYgdCA9IHRfdG9fanYgeW9qc29uX29mX3QgdFxuICBsZXQgb2ZfanYgaiA9IGp2X3RvX3QgdF9vZl95b2pzb24gaiB8PiBSZXN1bHQuZ2V0X2V4blxuXG4gIGxldCBnZXRfa2V5IHQgPVxuICAgIHtcbiAgICAgIEtleS5zb3J0X25hbWUgPSB0LnNvcnRzLnNvcnRfbmFtZTtcbiAgICAgIGlkID0gdC5pdGVtLkl0ZW0uaWQ7XG4gICAgICB2aWV3cyA9IHQuc29ydHMudmlld3M7XG4gICAgfVxuZW5kXG5cbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlciA9IHN0cnVjdFxuICBvcGVuIERhdGFfc291cmNlLkplbGx5ZmluX2FwaVxuXG4gICgqIHRvZG86IG11bHRpc2VydmVyOiB3ZSBzaG91bGQgYWRkIGEgc2VydmVyX2lkIGtleSAqKVxuICB0eXBlIHQgPSBWaXJ0dWFsX2ZvbGRlcnMudmlydHVhbF9mb2xkZXIgW0BAZGVyaXZpbmcgeW9qc29uXVxuXG4gIG1vZHVsZSBLZXkgPSBzdHJ1Y3RcbiAgICB0eXBlIHQgPSBzdHJpbmdcblxuICAgIGxldCB0b19qdiBrID0gSnYub2Zfc3RyaW5nIGtcbiAgICBsZXQgb2ZfanYgaiA9IEp2LnRvX3N0cmluZyBqXG4gICAgbGV0IHBhdGggPSBJbmRleGVkX2RiLktleV9wYXRoLklkIFwiSXRlbUlkXCJcbiAgZW5kXG5cbiAgbGV0IG5hbWUgPSBcInZpcnR1YWxfZm9sZGVyc1wiXG4gIGxldCB0b19qdiB0ID0gdF90b19qdiB5b2pzb25fb2ZfdCB0XG4gIGxldCBvZl9qdiBqID0ganZfdG9fdCB0X29mX3lvanNvbiBqIHw+IFJlc3VsdC5nZXRfZXhuXG4gIGxldCBnZXRfa2V5IHQgPSB0LlZpcnR1YWxfZm9sZGVycy5pdGVtX2lkXG5lbmRcblxubW9kdWxlIE9yZGVycmVkX2l0ZW1zX3N0b3JlID0gSW5kZXhlZF9kYi5NYWtlX29iamVjdF9zdG9yZSAoT3JkZXJyZWRfaXRlbXMpXG5tb2R1bGUgSXRlbXNfc3RvcmUgPSBJbmRleGVkX2RiLk1ha2Vfb2JqZWN0X3N0b3JlIChJdGVtcylcbm1vZHVsZSBWaXJ0dWFsX2ZvbGRlcl9zdG9yZSA9IEluZGV4ZWRfZGIuTWFrZV9vYmplY3Rfc3RvcmUgKFZpcnR1YWxfZm9sZGVyKVxuXG5tb2R1bGUgSXRlbXNCeURhdGVBZGRlZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV9kYXRlX2FkZGVkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfZGF0ZV9hZGRlZClcblxubW9kdWxlIEl0ZW1zQnlWaWV3QW5kS2luZCA9XG4gIEluZGV4ZWRfZGIuTWFrZV9pbmRleFxuICAgIChzdHJ1Y3RcbiAgICAgIGxldCBuYW1lID0gXCJpdGVtc19ieV92aWV3X2FuZF9raW5kXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfdmlld19raW5kKVxuXG5tb2R1bGUgSXRlbXNCeUlkID1cbiAgSW5kZXhlZF9kYi5NYWtlX2luZGV4XG4gICAgKHN0cnVjdFxuICAgICAgbGV0IG5hbWUgPSBcIml0ZW1zX2J5X2lkXCJcbiAgICBlbmQpXG4gICAgKEl0ZW1zKVxuICAgIChJdGVtcy5LZXlfaWQpXG5cbm1vZHVsZSBJdGVtc0J5VHlwZUFuZE5hbWUgPVxuICBJbmRleGVkX2RiLk1ha2VfaW5kZXhcbiAgICAoc3RydWN0XG4gICAgICBsZXQgbmFtZSA9IFwiaXRlbXNfYnlfdHlwZV9hbmRfbmFtZVwiXG4gICAgZW5kKVxuICAgIChJdGVtcylcbiAgICAoSXRlbXMuS2V5X3R5cGVfbmFtZSlcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2lvLkluZGV4ZWRfZGJcbm1vZHVsZSBTb3VyY2UgPSBEYXRhX3NvdXJjZS5KZWxseWZpblxubW9kdWxlIE9JID0gU3RvcmVzLk9yZGVycmVkX2l0ZW1zX3N0b3JlXG5tb2R1bGUgSSA9IFN0b3Jlcy5JdGVtc19zdG9yZVxubW9kdWxlIFZGID0gU3RvcmVzLlZpcnR1YWxfZm9sZGVyX3N0b3JlXG5vcGVuIFNvdXJjZS5BcGlcblxuKCogSXRlbXMgSGllcmFyY2h5XG5cbiAgIFVzZXJSb290Rm9sZGVyIChcIk1lZGlhIEZvbGRlcnNcIiBcImU5ZDUwNzVhNTU1YzFjYmMzOTRlZWM0Y2VmMjk1Mjc0XCIpXG4gICAgICAgICAgICAgICAgICAoR2V0cyB0aGUgcm9vdCBmb2xkZXIgZnJvbSBhIHVzZXIncyBsaWJyYXJ5LiApXG4gICBeIENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIEFnZ3JlZ2F0ZUZvbGRlciAoXCJyb290XCIgXCJmMjdjYWEzN2U1MTQyMjI1Y2NlZGVkNDhmNjU1MzUwMlwiKVxuICAgXiBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpXG4gICBeIEZvbGRlcisgPC0gTXVzaWNBcnRpc3QgPC0gTXVzaWNBbGJ1bSA8LSBBdWRpb1xuXG4gICBKZWxseWZpbiBjb25zaWRlcnMgdGhhdCBGb2xkZXIgKFwibWVkaWFcIiBcIjkyZmRlNzFkMGVjNTc3YjUzMWU3YjM0MjdiMjIzYmVkXCIpID09IENvbGxlY3Rpb25Gb2xkZXIgKFwiTXVzaWNMaWJcIiBcIjE1MDg0OGNkNGY0NGI5YWUzMmVjNWE3OTM0ZGUzOWNlXCIpXG5cbiAgIFRoaXMgZXF1YWxpdHkgY2FuIGJlIHJldHJpdmVkIGJ5IHF1ZXJ5aW5nIHRoZSBcIlZpcnR1YWxGb2xkZXJzXCIgYW5kIGxvb2sgYXRcbiAgIHRoZSBsb2NhdGlvbnMnIHBhdGhzLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgbm90IGFjY2Vzc2libGUgdG8gdW5wcml2aWxlZGdlZCB1c2Vycy4uLlxuXG4gICBUbyBhY3R1YWxseSBrbm93IHdoaWNoIGZvbGRlcnMgYXJlIHBhcnQgb2YgYSB1c2VyIHZpZXcgd2UgbmVlZCB0byBxdWVyeSB0aGVcbiAgIGl0ZW1zIHRoYXQgaGF2ZSB0aGlzIHZpZXcncyBpZCBhcyBhIFtwYXJlbnRJZF0uIFRoZSBhY3R1YWwgW3BhcmVudElkXSBvZlxuICAgdGhlc2UgaXRlbXMgd2lsbCBiZSBkaWZmZXJlbnQgYW5kIGFyZSB0aGUgaWRzIGFjdHVhbCBmb2xkZXJzIHRoYXRcbiAgIGNvbnN0aXR1dGUgdGhpcyB2aWV3LlxuXG4gICBGb3Igc2ltcGxpY2l0eSAoPykgd2UgY29uc2lkZXIgdGhhdCBhbiBpdGVtIGlzIHBhcnQgb2YgYSB2aWV3IGlmIGl0cyBwYXRoIGlzXG4gICBwcmVmaXhlZCBieSBvbmUgb2YgdGhlIHZpZXcncyB2aXJ0dWFsIGZvbGRlciBsb2NhdGlvbnMuXG4qKVxuXG5sZXQgY2h1bmtfc2l6ZSA9IDUwMFxubGV0IGluY2x1ZGVfaXRlbV90eXBlcyA9IFsgU291cmNlLkFwaS5JdGVtLk11c2ljQXJ0aXN0OyBNdXNpY0FsYnVtOyBBdWRpbyBdXG5cbmxldCBmZXRjaF90b3RhbF9pdGVtX2NvdW50IHNvdXJjZSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgcmVzID1cbiAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAobW9kdWxlIFNvdXJjZS5BcGkuSXRlbXMpXG4gICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICB7XG4gICAgICAgICAgKCogdG9kbyBtYWtlIHNvcnQgZXhwbGljaXQgKGJ5IGRhdGUgYWRkZWQgZGF0ZSkqKVxuICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgdXNlcl9pZCA9IHNvdXJjZS5hdXRoX3Jlc3BvbnNlLnVzZXIuaWQ7XG4gICAgICAgICAgZmllbGRzID0gW107XG4gICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzO1xuICAgICAgICAgIHN0YXJ0X2luZGV4ID0gTm9uZTtcbiAgICAgICAgICBsaW1pdCA9IFNvbWUgMDtcbiAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgc29ydF9ieSA9IFsgRGF0ZUNyZWF0ZWQgXTtcbiAgICAgICAgICByZWN1cnNpdmUgPSB0cnVlO1xuICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICBlbmFibGVfaW1hZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICgpXG4gIGluXG4gIHJlcy50b3RhbF9yZWNvcmRfY291bnRcblxudHlwZSBkYl9pbmZvcyA9IHtcbiAgbGFzdF9rZXkgOiBpbnQgb3B0aW9uO1xuICBsYXN0X3ZhbHVlIDogU3RvcmVzLk9yZGVycmVkX2l0ZW1zLnQgb3B0aW9uO1xufVxuXG5sZXQgZ2V0X2RiX2luZm9zIGlkYiA9XG4gIGxldCBpbmZvcywgc2V0X2luZm9zID0gRnV0LmNyZWF0ZSAoKSBpblxuICBsZXQgdHJhbnNhY3Rpb24gPSBEYXRhYmFzZS50cmFuc2FjdGlvbiBbIChtb2R1bGUgT0kpIF0gfm1vZGU6UmVhZG9ubHkgaWRiIGluXG4gIGxldCBzdG9yZSA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIE9JKSB0cmFuc2FjdGlvbiBpblxuICBsZXQgcmVxID0gT0kub3Blbl9jdXJzb3IgfmRpcmVjdGlvbjpQcmV2IHN0b3JlIGluXG4gIGxldCBsYXN0X2tleSA9IHJlZiBOb25lIGluXG4gIGxldCBfID1cbiAgICBSZXF1ZXN0Lm9uX3N1Y2Nlc3MgcmVxIH5mOihmdW4gXyBxIC0+XG4gICAgICAgIG1hdGNoIFJlcXVlc3QucmVzdWx0IHEgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gc2V0X2luZm9zIHsgbGFzdF9rZXkgPSAhbGFzdF9rZXk7IGxhc3RfdmFsdWUgPSBOb25lIH1cbiAgICAgICAgfCBTb21lIGN1cnNvciAtPiAoXG4gICAgICAgICAgICBpZiBPcHRpb24uaXNfbm9uZSAhbGFzdF9rZXkgdGhlblxuICAgICAgICAgICAgICBsYXN0X2tleSA6PSBPSS5DdXJzb3Jfd2l0aF92YWx1ZS5rZXkgY3Vyc29yO1xuICAgICAgICAgICAgbWF0Y2ggT0kuQ3Vyc29yX3dpdGhfdmFsdWUudmFsdWUgY3Vyc29yIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSAoeyBpdGVtID0gU29tZSBfOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgICBzZXRfaW5mb3MgeyBsYXN0X2tleSA9ICFsYXN0X2tleTsgbGFzdF92YWx1ZSA9IFNvbWUgaXRlbSB9XG4gICAgICAgICAgICB8IF8gLT4gT0kuQ3Vyc29yX3dpdGhfdmFsdWUuY29udGludWUgY3Vyc29yKSlcbiAgaW5cbiAgaW5mb3NcblxubGV0IGlzX2RiX2NvbnNpc3RlbnQgfnNvdXJjZTpfIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9zeW5jX2luZm9zID1cbiAgbGV0IGxhc3Rfa2V5ID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OigtMSkgZGJfc3luY19pbmZvcy5sYXN0X2tleSBpblxuICBpZiBsYXN0X2tleSA+IGxhc3Rfc291cmNlX2l0ZW1fa2V5IHRoZW5cbiAgICAoKiBUaGVyZSBhcmUgZmV3ZXIgaXRlbXMgaW4gdGhlIHNvdXJjZSB0aGFuIGV4cGVjdGVkICopXG4gICAgZmFsc2VcbiAgZWxzZVxuICAgICgqIFRvZG86IGNoZWNrIHRoYXQgdGhlIGxhc3Qga25vd24gaXRlbSBpcyB0aGUgc2FtZSB0aGFuIGluIHRoZSBzb3VyY2UgKilcbiAgICB0cnVlXG5cbnR5cGUgc3RhdHVzID1cbiAgfCBVbmtub3duXG4gIHwgSW5fc3luY1xuICB8IEluY29uc2lzdGVudFxuICB8IE5ld19pdGVtcyBvZiB7XG4gICAgICBmaXJzdF9taXNzaW5nX2tleSA6IGludDtcbiAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7XG4gICAgICBsYXN0X3NvdXJjZV9pdGVtX2tleSA6IGludDtcbiAgICB9XG4gIHwgUGFydGlhbF9mZXRjaCBvZiB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgOiBpbnQ7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IDogaW50IH1cblxudHlwZSBwcm9ncmVzcyA9IHsgdG90YWwgOiBpbnQ7IHJlbWFpbmluZyA6IGludCB9XG50eXBlIHJlcG9ydCA9IHsgc3RhdHVzIDogc3RhdHVzOyBzeW5jX3Byb2dyZXNzIDogcHJvZ3Jlc3Mgb3B0aW9uIH1cblxubGV0IGluaXRpYWxfcmVwb3J0ID0geyBzdGF0dXMgPSBVbmtub3duOyBzeW5jX3Byb2dyZXNzID0gTm9uZSB9XG5cbmxldCBzdGF0dXNfdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgfCBVbmtub3duIC0+IFwiVW5rbm93blwiXG4gIHwgSW5fc3luYyAtPiBcIlN5bmNocm9uaXplZFwiXG4gIHwgSW5jb25zaXN0ZW50IC0+IFwiSW5jb25zaXN0ZW50XCJcbiAgfCBOZXdfaXRlbXMgeyBmaXJzdF9taXNzaW5nX2tleTsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfVxuICAgIC0+XG4gICAgICBGb3JtYXQuc3ByaW50ZiBcIk5ldyBpdGVtczogbGFzdDogJWkgbWlzc2luZzogJWkgdW5mZXRjaGVkOiAlaVwiXG4gICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IGZpcnN0X21pc3Npbmdfa2V5IGZpcnN0X3VuZmV0Y2hlZF9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgRm9ybWF0LnNwcmludGYgXCJQYXJ0aWFsOiBsYXN0OiAlaSB1bmZldGNoZWQ6ICVpXCIgZmlyc3RfdW5mZXRjaGVkX2tleVxuICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5XG5cbmxldCBwcF9wcm9ncmVzcyBmbXQgeyB0b3RhbDsgcmVtYWluaW5nIH0gPVxuICBGb3JtYXQuZnByaW50ZiBmbXQgXCIoJWkvJWkpXCIgcmVtYWluaW5nIHRvdGFsXG5cbmxldCBwcF9yZXBvcnQgZm10IHsgc3RhdHVzOyBzeW5jX3Byb2dyZXNzIH0gPVxuICBsZXQgc3RhdHVzID0gc3RhdHVzX3RvX3N0cmluZyBzdGF0dXMgaW5cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJXMlYVwiIHN0YXR1c1xuICAgIChGb3JtYXQucHBfcHJpbnRfb3B0aW9uIHBwX3Byb2dyZXNzKVxuICAgIHN5bmNfcHJvZ3Jlc3NcblxubGV0IGxvZ19zdGF0dXMgPSBmdW5jdGlvblxuICB8IFVua25vd24gLT4gQ29uc29sZS5pbmZvIFsgXCJEYXRhYmFzZSBzdGF0dXMgaXMgdW5rbm93blwiIF1cbiAgfCBJbl9zeW5jIC0+IENvbnNvbGUuaW5mbyBbIFwiRGF0YWJhc2UgaXMgc3luY2hyb25pemVkXCIgXVxuICB8IEluY29uc2lzdGVudCAtPiBDb25zb2xlLndhcm4gWyBcIkRhdGFiYXNlIGlzIG91dC1vZi1zeW5jXCIgXVxuICB8IE5ld19pdGVtcyB7IGZpcnN0X21pc3Npbmdfa2V5OyBmaXJzdF91bmZldGNoZWRfa2V5OyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJOZXcgaXRlbXMgd2VyZSBhZGRlZCB0byB0aGUgc291cmNlLlwiO1xuICAgICAgICAgIGxhc3Rfc291cmNlX2l0ZW1fa2V5IC0gZmlyc3RfbWlzc2luZ19rZXkgKyAxO1xuICAgICAgICAgIFwibmV3IGl0ZW1zXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG4gIHwgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH0gLT5cbiAgICAgIENvbnNvbGUuaW5mb1xuICAgICAgICBbXG4gICAgICAgICAgXCJTb21lIGl0ZW1zIGhhdmUgbm90IGJlZW4gZmV0Y2hlZCB5ZXQuXCI7XG4gICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXkgLSBmaXJzdF91bmZldGNoZWRfa2V5ICsgMTtcbiAgICAgICAgICBcInVuZmV0Y2hlZCBpdGVtc1wiO1xuICAgICAgICBdXG5cbmxldCBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgPVxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCogZGJfaW5mb3MgPSBnZXRfZGJfaW5mb3MgaWRiIGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgdG90YWxfaXRlbV9jb3VudCA9IGZldGNoX3RvdGFsX2l0ZW1fY291bnQgc291cmNlIGluXG4gICgqIEtleXMgc3RhcnQgYXQgMCwgaXQncyBuYXR1cmFsIHRvIGNvdW50IGl0ZW0gYnkgc3RhcnRpbmcgd2l0aCAwICopXG4gIGxldCBsYXN0X3NvdXJjZV9pdGVtX2tleSA9IHRvdGFsX2l0ZW1fY291bnQgLSAxIGluXG4gIGlmIG5vdCAoaXNfZGJfY29uc2lzdGVudCB+c291cmNlIH5sYXN0X3NvdXJjZV9pdGVtX2tleSBkYl9pbmZvcykgdGhlblxuICAgIEluY29uc2lzdGVudFxuICBlbHNlXG4gICAgbWF0Y2ggZGJfaW5mb3Mgd2l0aFxuICAgIHwgeyBsYXN0X2tleSA9IE5vbmU7IGxhc3RfdmFsdWUgPSBOb25lIH0gLT5cbiAgICAgICAgKCogVGhlIGRiIGhhcyBub3QgeWV0IGJlZW4gcG9wdWxhdGVkIHdpdGggcGxhY2Vob2xkZXJzICopXG4gICAgICAgIE5ld19pdGVtc1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpcnN0X21pc3Npbmdfa2V5ID0gMDtcbiAgICAgICAgICAgIGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwO1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5IDwgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+XG4gICAgICAgICgqIE5ldyBpdGVtcyB3ZXJlIGFkZGVkIHRvIHRoZSBzb3VyY2Ugc2luY2UgdGhlIGxhc3Qgc3luYyAqKVxuICAgICAgICBsZXQgZmlyc3RfdW5mZXRjaGVkX2tleSA9XG4gICAgICAgICAgbWF0Y2ggaXRlbSB3aXRoIE5vbmUgLT4gMCB8IFNvbWUgeyBpZDsgXyB9IC0+IGlkICsgMVxuICAgICAgICBpblxuICAgICAgICBOZXdfaXRlbXNcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaXJzdF9taXNzaW5nX2tleSA9IGtleSArIDE7XG4gICAgICAgICAgICBmaXJzdF91bmZldGNoZWRfa2V5O1xuICAgICAgICAgICAgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICAgICAgfVxuICAgIHwgeyBsYXN0X2tleSA9IFNvbWUga2V5OyBsYXN0X3ZhbHVlID0gaXRlbSB9IHdoZW4ga2V5ID0gbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgICAgIC0+IChcbiAgICAgICAgbWF0Y2ggaXRlbSB3aXRoXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gd2hlbiBpZCA9IGtleSAtPiBJbl9zeW5jXG4gICAgICAgIHwgU29tZSB7IGlkOyBfIH0gLT5cbiAgICAgICAgICAgIFBhcnRpYWxfZmV0Y2ggeyBmaXJzdF91bmZldGNoZWRfa2V5ID0gaWQgKyAxOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9XG4gICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgUGFydGlhbF9mZXRjaCB7IGZpcnN0X3VuZmV0Y2hlZF9rZXkgPSAwOyBsYXN0X3NvdXJjZV9pdGVtX2tleSB9KVxuICAgIHwgXyAtPiBJbmNvbnNpc3RlbnRcblxubGV0IHVwZGF0ZV92aWV3cyBzb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyB2aWV3cyA9XG4gICAgU291cmNlLnF1ZXJ5IHNvdXJjZVxuICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLlZpZXdzKVxuICAgICAgeyBpbmNsdWRlX2V4dGVybmFsX2NvbnRlbnQgPSBmYWxzZSB9XG4gICAgICB7IHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkIH1cbiAgaW5cbiAgTGlzdC5pdGVyIHZpZXdzLml0ZW1zIH5mOihmdW4gKGl0ZW0gOiBJdGVtLnQpIC0+XG4gICAgICBsZXQgb3BlbiBCcnJfaW8uSW5kZXhlZF9kYiBpblxuICAgICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgIGluXG4gICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICBsZXQgc29ydF9uYW1lID0gT3B0aW9uLnZhbHVlIGl0ZW0uc29ydF9uYW1lIH5kZWZhdWx0Oml0ZW0ubmFtZSBpblxuICAgICAgSS5wdXQgeyBzb3J0cyA9IHsgZGF0ZV9hZGRlZCA9IC0xOyB2aWV3cyA9IFtdOyBzb3J0X25hbWUgfTsgaXRlbSB9IHNfaXRlbXNcbiAgICAgIHw+IGlnbm9yZSk7XG4gIHZpZXdzXG5cbmxldCBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlICh2aWV3cyA6IFZpZXdzLnJlc3BvbnNlKSA9XG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4geyBJdGVtLmlkOyBfIH0gPVxuICAgIGxldCsgcmVzID1cbiAgICAgIFNvdXJjZS5xdWVyeSBzb3VyY2VcbiAgICAgICAgKG1vZHVsZSBTb3VyY2UuQXBpLkl0ZW1zKVxuICAgICAgICBTb3VyY2UuQXBpLkl0ZW1zLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgcGFyZW50X2lkID0gU29tZSBpZDtcbiAgICAgICAgICAgIHVzZXJfaWQgPSBzb3VyY2UuYXV0aF9yZXNwb25zZS51c2VyLmlkO1xuICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZm9sZF9sZWZ0IH5pbml0OlN0cmluZy5TZXQuZW1wdHkgcmVzLml0ZW1zXG4gICAgICB+ZjooZnVuIHNldCB7IEl0ZW0ucGFyZW50X2lkOyBfIH0gLT5cbiAgICAgICAgbWF0Y2ggcGFyZW50X2lkIHdpdGhcbiAgICAgICAgfCBOb25lIHwgU29tZSBOb25lIC0+IHNldFxuICAgICAgICB8IFNvbWUgKFNvbWUgcGlkKSAtPiBTdHJpbmcuU2V0LmFkZCBwaWQgc2V0KVxuICBpblxuICBsZXQgcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzID1cbiAgICBsZXQrIHJlcyA9XG4gICAgICBTb3VyY2UucXVlcnkgc291cmNlXG4gICAgICAgIChtb2R1bGUgU291cmNlLkFwaS5JdGVtcylcbiAgICAgICAgU291cmNlLkFwaS5JdGVtcy5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZHMgPSBTdHJpbmcuU2V0LnRvX2xpc3QgcGFyZW50cztcbiAgICAgICAgICAgIHBhcmVudF9pZCA9IE5vbmU7XG4gICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgIGZpZWxkcyA9IFsgUGF0aCBdO1xuICAgICAgICAgICAgaW5jbHVkZV9pdGVtX3R5cGVzID0gW107XG4gICAgICAgICAgICBzdGFydF9pbmRleCA9IE5vbmU7XG4gICAgICAgICAgICBsaW1pdCA9IE5vbmU7XG4gICAgICAgICAgICBzb3J0X29yZGVyID0gTm9uZTtcbiAgICAgICAgICAgIHNvcnRfYnkgPSBbXTtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX3VzZXJfZGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgKClcbiAgICBpblxuICAgIExpc3QuZmlsdGVyX21hcCByZXMuaXRlbXMgfmY6KGZ1biB7IEl0ZW0uaWQ7IHBhdGg7IF8gfSAtPlxuICAgICAgICBPcHRpb24ubWFwIChmdW4gcGF0aCAtPiAoaWQsIHBhdGgpKSBwYXRoKVxuICBpblxuICBsZXQgb3BlbiBGdXQuU3ludGF4IGluXG4gIGxldCsgcmVzdWx0ID1cbiAgICBMaXN0Lm1hcCB2aWV3cy5pdGVtcyB+ZjooZnVuICh7IEl0ZW0uaWQ7IF8gfSBhcyB2aWV3KSAtPlxuICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICBsZXQqIHBhcmVudHMgPSBwYXJlbnRfaWRzX29mX3ZpZXdfY2hpbGRyZW4gdmlldyBpblxuICAgICAgICBsZXQrIHBhdGhzID0gcGF0aHNfb2ZfcGFyZW50cyBwYXJlbnRzIGluXG4gICAgICAgIChpZCwgcGF0aHMpKVxuICAgIHw+IEZ1dC5vZl9saXN0XG4gIGluXG4gIFJlc3VsdC5mbGF0dGVuX2wgcmVzdWx0XG5cbmxldCB2aWV3c19vZl9wYXRoICh2Zm9sZGVycyA6IChzdHJpbmcgKiAoc3RyaW5nICogc3RyaW5nKSBsaXN0KSBsaXN0KSBwYXRoID1cbiAgKCogV2UgbG9vayBhdCB0aGUgcHJlZml4IG9mIGEgcGF0aCB0byBkZXRlcm1pbmUgd2hpY2ggdmlydHVhbF9mb2xkZXIgKGFuZCB0aHVzXG4gICAgIHZpZXcpIGl0J3MgYSBwYXJ0IG9mLiAqKVxuICBMaXN0LmZpbHRlcl9tYXAgdmZvbGRlcnMgfmY6KGZ1biAodmlld19pZCwgbG9jYXRpb25zKSAtPlxuICAgICAgaWYgTGlzdC5leGlzdHMgbG9jYXRpb25zIH5mOihmdW4gKF8sIHByZSkgLT4gU3RyaW5nLnByZWZpeCB+cHJlIHBhdGgpIHRoZW5cbiAgICAgICAgU29tZSB2aWV3X2lkXG4gICAgICBlbHNlIE5vbmUpXG5cbmxldCBzeW5jID8ocmVwb3J0ID0gZnVuIF8gLT4gKCkpIH4oc291cmNlIDogU291cmNlLmNvbm5leGlvbikgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0IG1ha2VfcGxhY2Vob2xkZXJzIGZpcnN0IGxhc3QgPVxuICAgICgqIHRvZG86IGVycm9yIGhhbmRsaW5nICopXG4gICAgbGV0IHRyYW5zYWN0aW9uID1cbiAgICAgIERhdGFiYXNlLnRyYW5zYWN0aW9uIFsgKG1vZHVsZSBPSSkgXSB+bW9kZTpSZWFkd3JpdGUgaWRiXG4gICAgaW5cbiAgICBsZXQgc3RvcmUgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICBmb3IgaSA9IGZpcnN0IHRvIGxhc3QgZG9cbiAgICAgIGlnbm9yZSBAQCBPSS5wdXQgeyBpZCA9IGk7IGl0ZW0gPSBOb25lIH0gc3RvcmVcbiAgICBkb25lXG4gIGluXG4gIGxldCBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0IGxhc3QgPVxuICAgIGxldCBvcGVuIFNvdXJjZSBpblxuICAgIGxldCogdmlld3MgPSB1cGRhdGVfdmlld3Mgc291cmNlIGlkYiBpblxuICAgIGxldCogdmZvbGRlcnMgPSBkZWR1Y2VfdmlydHVhbF9mb2xkZXJzX2Zyb21fdmlld3Mgc291cmNlIHZpZXdzIGluXG4gICAgbGV0ICgpID0gQ29uc29sZS5pbmZvIFsgXCJGZXRjaGluZyBpdGVtc1wiOyBmaXJzdDsgXCJ0b1wiOyBsYXN0OyBcIjpcIiBdIGluXG4gICAgbGV0IGZldGNoX3F1ZXVlID0gUXVldWUuY3JlYXRlICgpIGluXG4gICAgbGV0IHRvdGFsID0gbGFzdCAtIGZpcnN0ICsgMSBpblxuICAgIGxldCByZWMgZW5xdWV1ZSB+c3RhcnRfaW5kZXggdG9kbyA9XG4gICAgICBpZiB0b2RvID4gMCB0aGVuIChcbiAgICAgICAgbGV0IGxpbWl0ID0gbWluIHRvZG8gY2h1bmtfc2l6ZSBpblxuICAgICAgICBsZXQgcmVxID1cbiAgICAgICAgICBBcGkuSXRlbXMuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICgqIHRvZG8gbWFrZSBzb3J0IGV4cGxpY2l0IChieSBkYXRlIGFkZGVkIGRhdGUpICopXG4gICAgICAgICAgICAgIGlkcyA9IFtdO1xuICAgICAgICAgICAgICBwYXJlbnRfaWQgPSBOb25lO1xuICAgICAgICAgICAgICB1c2VyX2lkID0gc291cmNlLmF1dGhfcmVzcG9uc2UudXNlci5pZDtcbiAgICAgICAgICAgICAgZmllbGRzID0gWyBQYXJlbnRJZDsgUGF0aCBdO1xuICAgICAgICAgICAgICBpbmNsdWRlX2l0ZW1fdHlwZXM7XG4gICAgICAgICAgICAgIHN0YXJ0X2luZGV4ID0gU29tZSBzdGFydF9pbmRleDtcbiAgICAgICAgICAgICAgbGltaXQgPSBTb21lIGxpbWl0O1xuICAgICAgICAgICAgICBzb3J0X29yZGVyID0gU29tZSBBc2NlbmRpbmc7XG4gICAgICAgICAgICAgIHNvcnRfYnkgPSBbIERhdGVDcmVhdGVkIF07XG4gICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIGVuYWJsZV91c2VyX2RhdGEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZW5hYmxlX2ltYWdlcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIGluXG4gICAgICAgIFF1ZXVlLmFkZCByZXEgZmV0Y2hfcXVldWU7XG4gICAgICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OihzdGFydF9pbmRleCArIGxpbWl0KSAodG9kbyAtIGxpbWl0KSlcbiAgICBpblxuICAgIGVucXVldWUgfnN0YXJ0X2luZGV4OmZpcnN0IHRvdGFsO1xuICAgIGxldCB0b3RhbF9xdWVyaWVzID0gUXVldWUubGVuZ3RoIGZldGNoX3F1ZXVlIGluXG4gICAgbGV0IHJlYyBydW5fcXVldWUgPyh0aHJlYWRzID0gMSkgcSA9XG4gICAgICBhc3NlcnQgKHRocmVhZHMgPiAwKTtcbiAgICAgIGxldCByZWMgdGFrZV9uIGFjYyBuID1cbiAgICAgICAgaWYgbiA9IDAgdGhlbiBMaXN0LnJldiBhY2NcbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIFF1ZXVlLnRha2Vfb3B0IHEgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICAgICAgICB8IFNvbWUgZWx0IC0+IHRha2VfbiAoZWx0IDo6IGFjYykgKG4gLSAxKVxuICAgICAgaW5cbiAgICAgIGxldCBmIHJlcSA9XG4gICAgICAgIGxldCsgeyBBcGkuSXRlbXMuc3RhcnRfaW5kZXg7IGl0ZW1zOyBfIH0gPVxuICAgICAgICAgIHF1ZXJ5IHNvdXJjZSAobW9kdWxlIEFwaS5JdGVtcykgcmVxICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCAoKSA9XG4gICAgICAgICAgcmVwb3J0XG4gICAgICAgICAgQEAgU29tZVxuICAgICAgICAgICAgICAgeyB0b3RhbCA9IHRvdGFsX3F1ZXJpZXM7IHJlbWFpbmluZyA9IFF1ZXVlLmxlbmd0aCBmZXRjaF9xdWV1ZSB9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBpZGJfcHV0IH5zdGFydF9pbmRleCBpdGVtcyA9XG4gICAgICAgICAgbGV0IG9wZW4gQnJyX2lvLkluZGV4ZWRfZGIgaW5cbiAgICAgICAgICBsZXQgdHJhbnNhY3Rpb24gPVxuICAgICAgICAgICAgRGF0YWJhc2UudHJhbnNhY3Rpb24gWyAobW9kdWxlIE9JKTsgKG1vZHVsZSBJKSBdIH5tb2RlOlJlYWR3cml0ZSBpZGJcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBzX2xpc3QgPSBUcmFuc2FjdGlvbi5vYmplY3Rfc3RvcmUgKG1vZHVsZSBPSSkgdHJhbnNhY3Rpb24gaW5cbiAgICAgICAgICBsZXQgc19pdGVtcyA9IFRyYW5zYWN0aW9uLm9iamVjdF9zdG9yZSAobW9kdWxlIEkpIHRyYW5zYWN0aW9uIGluXG4gICAgICAgICAgTGlzdC5pdGVyaSBpdGVtcyB+ZjooZnVuIGluZGV4ICh7IEFwaS5JdGVtLmlkOyBwYXRoOyBfIH0gYXMgaXRlbSkgLT5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gc3RhcnRfaW5kZXggKyBpbmRleCBpblxuICAgICAgICAgICAgICBsZXQgcGF0aCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDpcIlwiIHBhdGggaW5cbiAgICAgICAgICAgICAgbGV0IHZpZXdzID0gdmlld3Nfb2ZfcGF0aCB2Zm9sZGVycyBwYXRoIGluXG4gICAgICAgICAgICAgIGxldCBzb3J0X25hbWUgPSBPcHRpb24udmFsdWUgaXRlbS5zb3J0X25hbWUgfmRlZmF1bHQ6aXRlbS5uYW1lIGluXG4gICAgICAgICAgICAgIGlnbm9yZSAoT0kucHV0IHsgaWQgPSBpbmRleDsgaXRlbSA9IFNvbWUgaWQgfSBzX2xpc3QpO1xuICAgICAgICAgICAgICBpZ25vcmVcbiAgICAgICAgICAgICAgICAoSS5wdXRcbiAgICAgICAgICAgICAgICAgICB7IHNvcnRzID0geyBkYXRlX2FkZGVkID0gaW5kZXg7IHZpZXdzOyBzb3J0X25hbWUgfTsgaXRlbSB9XG4gICAgICAgICAgICAgICAgICAgc19pdGVtcykpXG4gICAgICAgIGluXG4gICAgICAgIGlkYl9wdXQgfnN0YXJ0X2luZGV4IGl0ZW1zXG4gICAgICBpblxuICAgICAgbGV0IHJlcXMgPSB0YWtlX24gW10gdGhyZWFkcyBpblxuICAgICAgbGV0IG9wZW4gRnV0LlN5bnRheCBpblxuICAgICAgbGV0KiByZXFzID0gRnV0Lm9mX2xpc3QgKExpc3QubWFwIH5mIHJlcXMpIGluXG4gICAgICBpZiBMaXN0LmlzX2VtcHR5IHJlcXMgdGhlbiBGdXQub2sgKCkgZWxzZSBydW5fcXVldWUgcVxuICAgIGluXG4gICAgcnVuX3F1ZXVlIGZldGNoX3F1ZXVlXG4gIGluXG4gIGZ1bmN0aW9uXG4gIHwgTmV3X2l0ZW1zIHsgZmlyc3RfbWlzc2luZ19rZXk7IGZpcnN0X3VuZmV0Y2hlZF9rZXk7IGxhc3Rfc291cmNlX2l0ZW1fa2V5IH1cbiAgICAtPlxuICAgICAgbWFrZV9wbGFjZWhvbGRlcnMgZmlyc3RfbWlzc2luZ19rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXk7XG4gICAgICBmZXRjaF9taXNzaW5nX2l0ZW1zIGZpcnN0X3VuZmV0Y2hlZF9rZXkgbGFzdF9zb3VyY2VfaXRlbV9rZXlcbiAgfCBQYXJ0aWFsX2ZldGNoIHsgZmlyc3RfdW5mZXRjaGVkX2tleTsgbGFzdF9zb3VyY2VfaXRlbV9rZXkgfSAtPlxuICAgICAgZmV0Y2hfbWlzc2luZ19pdGVtcyBmaXJzdF91bmZldGNoZWRfa2V5IGxhc3Rfc291cmNlX2l0ZW1fa2V5XG4gIHwgSW5jb25zaXN0ZW50IC0+IEZ1dC5vayAoKVxuICB8IF8gLT4gRnV0Lm9rICgpXG5cbmxldCBjaGVja19hbmRfc3luYyA/cmVwb3J0IH5zb3VyY2UgaWRiID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KiBzdGF0dXMgPSBjaGVja19zdGF0dXMgfnNvdXJjZSBpZGIgaW5cbiAgbGV0IGluaXRpYWwgPSB7IGluaXRpYWxfcmVwb3J0IHdpdGggc3RhdHVzIH0gaW5cbiAgbGV0IHJlcG9ydCcgPVxuICAgIE9wdGlvbi5tYXBcbiAgICAgIChmdW4gcmVwb3J0IC0+XG4gICAgICAgIGxldCAoKSA9ICgqIFNlbmQgYSBmaXJzdCByZXBvcnQgKikgcmVwb3J0IGluaXRpYWwgaW5cbiAgICAgICAgZnVuIHN5bmNfcHJvZ3Jlc3MgLT4gcmVwb3J0IHsgaW5pdGlhbCB3aXRoIHN5bmNfcHJvZ3Jlc3MgfSlcbiAgICAgIHJlcG9ydFxuICBpblxuICBsZXQrICgpID0gc3luYyA/cmVwb3J0OnJlcG9ydCcgfnNvdXJjZSBpZGIgc3RhdHVzIGluXG4gIE9wdGlvbi5pdGVyXG4gICAgKGZ1biByZXBvcnQgLT4gcmVwb3J0IHsgc3RhdHVzID0gSW5fc3luYzsgc3luY19wcm9ncmVzcyA9IE5vbmUgfSlcbiAgICByZXBvcnRcbiIsInR5cGUgbGFuZycgPSBGciB8IEVuXG5cbm1vZHVsZSBDb25maWcgOiBCcnJfbHdkX3VpLlRyYW5zbGF0ZWQuQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gbGFuZycgPSBzdHJ1Y3RcbiAgdHlwZSBsYW5nID0gbGFuZydcblxuICBsZXQgc3RyaW5ncyA9XG4gICAgW1xuICAgICAgKChGciwgXCJjbGlja1wiKSwgXCJDbGlxdWV6IHN1ciBsZSBib3V0b24gIVwiKTtcbiAgICAgICgoRW4sIFwiY2xpY2tcIiksIFwiQ2xpY2sgb24gdGhlIEJ1dHRvbiAhXCIpO1xuICAgIF1cblxuICBsZXQgYWN0aXZlID0gTHdkLnZhciBGclxuXG4gIGxldCBnZXQgbGFuZyBzdHJpbmcgPVxuICAgIExpc3QuYXNzb2Nfb3B0IChsYW5nLCBzdHJpbmcpIHN0cmluZ3MgfD4gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OnN0cmluZ1xuZW5kXG5cbmxldCBzZXQsIF9zID0gQnJyX2x3ZF91aS5UcmFuc2xhdGVkLm1ha2UgKG1vZHVsZSBDb25maWcpXG5sZXQgX3MgcyBmID0gTHdkLm1hcCAoX3MgcykgfmZcbiIsIm9wZW4gSW1wb3J0XG5vcGVuIEJyclxuXG5pbmNsdWRlIERiLldvcmtlcl9hcGkuU3RhcnRfY2xpZW50IChzdHJ1Y3RcbiAgbGV0IHVybCA9IFwiLi9kYl93b3JrZXIuYmMuanNcIlxuZW5kKVxuXG5sZXQgc2VydmVyc19zdGF0dXMgPVxuICBsZXQgdmFyID0gTHdkLnZhciAoXCJcIiwgRGIuU3luYy5pbml0aWFsX3JlcG9ydCkgaW5cbiAgbGV0IF8gPVxuICAgIGxpc3RlbiBTZXJ2ZXJzX3N0YXR1c191cGRhdGUgfmY6KGZ1biAoaWQsIHJlcG9ydCkgLT5cbiAgICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgICBbIEZvcm1hdC5hc3ByaW50ZiBcIlNlcnZlciAlczogJWFcIiBpZCBEYi5TeW5jLnBwX3JlcG9ydCByZXBvcnQgXTtcbiAgICAgICAgTHdkLnNldCB2YXIgKGlkLCByZXBvcnQpKVxuICBpblxuICB2YXJcblxubGV0IGNyZWF0ZV92aWV3IHYgPVxuICBsZXQgdmFyID0gTHdkLnZhciBOb25lIGluXG4gIEZ1dC5hd2FpdCAocXVlcnkgKENyZWF0ZV92aWV3IHYpKSAoZnVuIHYgLT4gTHdkLnNldCB2YXIgKFNvbWUgdikpO1xuICBMd2QuZ2V0IHZhclxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbnR5cGUgc2VydmVyID0ge1xuICBjb25uZXhpb24gOiBEUy5jb25uZXhpb247XG4gIHN0YXR1cyA6IERiLlN5bmMucmVwb3J0IEx3ZC52YXI7XG4gIHJlZnJlc2ggOiB1bml0IEx3ZC52YXI7XG59XG5cbmxldCBjb25uZXhpb25zIDogKHN0cmluZyAqIERTLmNvbm5leGlvbikgTHdkX3NlcS50IEx3ZC52YXIgPVxuICBCcnJfbHdkX3VpLlBlcnNpc3RlbnQudmFyIH5rZXk6XCJ1aV9zZXJ2ZXJzXCIgTHdkX3NlcS5lbXB0eVxuXG5sZXQgY29ubmVjdCAoc2VydmVyX2lkLCB7IGNvbm5leGlvbjsgc3RhdHVzOyByZWZyZXNoIH0pID1cbiAgbGV0IF8gPVxuICAgIFdvcmtlcl9jbGllbnQubGlzdGVuIFNlcnZlcnNfc3RhdHVzX3VwZGF0ZSB+ZjooZnVuIChpZCwgcmVwb3J0KSAtPlxuICAgICAgICAoKiBUT0RPOiBzdWJzY3JpYmUgdG8gYSBzcGVjaWZpYyBzZXJ2ZXIncyB1cGRhdGVzICopXG4gICAgICAgIGxldCBwcmV2aW91c19zdGF0dXMgPSBMd2QucGVlayBzdGF0dXMgaW5cbiAgICAgICAgaWYgU3RyaW5nLmVxdWFsIHNlcnZlcl9pZCBpZCB0aGVuIChcbiAgICAgICAgICBMd2Quc2V0IHN0YXR1cyByZXBvcnQ7XG4gICAgICAgICAgbWF0Y2ggKHByZXZpb3VzX3N0YXR1cy5zeW5jX3Byb2dyZXNzLCByZXBvcnQuc3luY19wcm9ncmVzcykgd2l0aFxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBTb21lIHsgcmVtYWluaW5nID0gcmVtYWluaW5nJzsgXyB9XG4gICAgICAgICAgICB3aGVuIHJlbWFpbmluZyA8PiByZW1haW5pbmcnIC0+XG4gICAgICAgICAgICAgIEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgU29tZSB7IHJlbWFpbmluZzsgXyB9LCBOb25lIC0+IEx3ZC5zZXQgcmVmcmVzaCAoKVxuICAgICAgICAgIHwgXyAtPiAoKSkpXG4gIGluXG4gIGlnbm9yZSAoV29ya2VyX2NsaWVudC5xdWVyeSBAQCBBZGRfc2VydmVycyBbIChzZXJ2ZXJfaWQsIGNvbm5leGlvbikgXSlcblxubGV0IHNlcnZlcnNfd2l0aF9zdGF0dXMgPVxuICBMd2Rfc2VxLm1hcFxuICAgIChmdW4gKGlkLCBjb25uZXhpb24pIC0+XG4gICAgICBsZXQgc3RhdHVzID0gTHdkLnZhciBEYi5TeW5jLmluaXRpYWxfcmVwb3J0IGluXG4gICAgICBsZXQgcmVmcmVzaCA9IEx3ZC52YXIgKCkgaW5cbiAgICAgIGxldCBzZXJ2ZXIgPSAoaWQsIHsgY29ubmV4aW9uOyBzdGF0dXM7IHJlZnJlc2ggfSkgaW5cbiAgICAgIGNvbm5lY3Qgc2VydmVyO1xuICAgICAgc2VydmVyKVxuICAgIChMd2QuZ2V0IGNvbm5leGlvbnMpXG5cbmxldCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybCB+dXNlcm5hbWUgfnBhc3N3b3JkID1cbiAgbGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgbGV0KyBjb25uZXhpb24gPSBEUy5jb25uZWN0IHsgYmFzZV91cmw7IHVzZXJuYW1lOyBwYXNzd29yZCB9IGluXG4gIGxldCBzZXJ2ZXJfaWQgPSBjb25uZXhpb24uYXV0aF9yZXNwb25zZS5zZXJ2ZXJfaWQgaW5cbiAgKCogVE9ETyBDSEVDSyBTRVJWRVIgSUQgKilcbiAgTHdkLnVwZGF0ZVxuICAgIChmdW4gc2VydmVycyAtPiBMd2Rfc2VxLihjb25jYXQgc2VydmVycyAoZWxlbWVudCAoc2VydmVyX2lkLCBjb25uZXhpb24pKSkpXG4gICAgY29ubmV4aW9uc1xuXG5tb2R1bGUgQ29ubmVjdF9mb3JtID0gc3RydWN0XG4gIG9wZW4gQnJyX2x3ZF91aS5Gb3JtXG5cbiAgdHlwZSB0ID0ge1xuICAgIHVybCA6IHN0cmluZyBGaWVsZC52YWxpZGF0aW9uO1xuICAgIHVzZXJuYW1lIDogc3RyaW5nIEZpZWxkLnZhbGlkYXRpb247XG4gICAgcGFzc3dvcmQgOiBzdHJpbmcgRmllbGQudmFsaWRhdGlvbjtcbiAgfVxuXG4gIGxldCBkZWZhdWx0ID0geyB1cmwgPSBFbXB0eTsgdXNlcm5hbWUgPSBFbXB0eTsgcGFzc3dvcmQgPSBFbXB0eSB9XG5cbiAgbGV0IGZpZWxkcyA9XG4gICAgbGV0IHVybF9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmVcbiAgICAgICAgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZVxuICAgICAgICAgICAgIChTb21lIFwiaHR0cHM6Ly9kZW1vLmplbGx5ZmluLm9yZy9zdGFibGVcIikpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVybCA9IHYgfSlcbiAgICBpblxuICAgIGxldCB1c2VybmFtZV9maWVsZCA9XG4gICAgICBmaWVsZFxuICAgICAgICAoTHdkLnB1cmUgQEAgRmllbGQudGV4dF9pbnB1dCB+cmVxdWlyZWQ6dHJ1ZSAoU29tZSBcImRlbW9cIikpXG4gICAgICAgIChmdW4gdCB2IC0+IHsgdCB3aXRoIHVzZXJuYW1lID0gdiB9KVxuICAgIGluXG4gICAgbGV0IHBhc3N3b3JkX2ZpZWxkID1cbiAgICAgIGZpZWxkXG4gICAgICAgIChMd2QucHVyZSBAQCBGaWVsZC5wYXNzd29yZF9pbnB1dCB+cmVxdWlyZWQ6ZmFsc2UgTm9uZSlcbiAgICAgICAgKGZ1biB0IHYgLT4geyB0IHdpdGggcGFzc3dvcmQgPSB2IH0pXG4gICAgaW5cbiAgICBsZXQgc3VibWl0ID1cbiAgICAgIGZpZWxkIChMd2QucHVyZSBAQCBGaWVsZC5zdWJtaXQgKGBQIFwiQ29ubmVjdFwiKSkgKGZ1biB0IF92IC0+IHQpXG4gICAgaW5cbiAgICBMd2QucmV0dXJuXG4gICAgICAoTHdkX3NlcS5vZl9saXN0IFsgdXJsX2ZpZWxkOyB1c2VybmFtZV9maWVsZDsgcGFzc3dvcmRfZmllbGQ7IHN1Ym1pdCBdKVxuZW5kXG5cbmxldCB1aV9mb3JtICgpID1cbiAgbGV0IG9wZW4gQnJyX2x3ZF91aS5Gb3JtIGluXG4gIGNyZWF0ZVxuICAgIChtb2R1bGUgQ29ubmVjdF9mb3JtKVxuICAgIChmdW4gdCAtPlxuICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB0IF07XG4gICAgICBtYXRjaCB0IHdpdGhcbiAgICAgICgqIEZJWE1FOiB2YWxpZGF0aW9uIGFscmVhZHkgaGFwcGVuZWQsIGl0J3MgcmVkdW5kYW50IHRvIGhhdmUgdG8gbWF0Y2ggKilcbiAgICAgIHwgeyB1cmwgPSBPayB1cmw7IHVzZXJuYW1lID0gT2sgdXNlcm5hbWU7IHBhc3N3b3JkID0gT2sgcGFzc3dvcmQgfSAtPlxuICAgICAgICAgIENvbnNvbGUubG9nIFsgXCJGb3JtIHN1Ym1pdHRlZDpcIjsgdXJsOyB1c2VybmFtZSBdO1xuICAgICAgICAgIGlnbm9yZSBAQCBuZXdfY29ubmV4aW9uIH5iYXNlX3VybDp1cmwgfnVzZXJuYW1lIH5wYXNzd29yZFxuICAgICAgfCB7IHVybCA9IE9rIHVybDsgdXNlcm5hbWUgPSBPayB1c2VybmFtZTsgXyB9IC0+XG4gICAgICAgICAgQ29uc29sZS5sb2cgWyBcIkZvcm0gc3VibWl0dGVkOlwiOyB1cmw7IHVzZXJuYW1lIF07XG4gICAgICAgICAgaWdub3JlIEBAIG5ld19jb25uZXhpb24gfmJhc2VfdXJsOnVybCB+dXNlcm5hbWUgfnBhc3N3b3JkOlwiXCJcbiAgICAgIHwgXyAtPiAoKSlcblxubGV0IHVpX3N0YXR1cyBzZXJ2ZXIgPVxuICBsZXQgc3RhdHVzID1cbiAgICBMd2QubWFwIChMd2QuZ2V0IHNlcnZlci5zdGF0dXMpIH5mOihmdW4geyBzdGF0dXM7IHN5bmNfcHJvZ3Jlc3MgfSAtPlxuICAgICAgICBtYXRjaCAoc3RhdHVzLCBzeW5jX3Byb2dyZXNzKSB3aXRoXG4gICAgICAgIHwgSW5fc3luYywgTm9uZSAtPiBFbC50eHQnIFwiU3luY2hyb25pemVkXCJcbiAgICAgICAgfCBfLCBTb21lIHsgRGIuU3luYy50b3RhbDsgcmVtYWluaW5nIH0gLT5cbiAgICAgICAgICAgIEVsLnR4dCdcbiAgICAgICAgICAgIEBAIFByaW50Zi5zcHJpbnRmIFwiU3luYyBpbiBwcm9ncmVzczogJWkvJWlcIiAodG90YWwgLSByZW1haW5pbmcpXG4gICAgICAgICAgICAgICAgIHRvdGFsXG4gICAgICAgIHwgXyAtPiBFbC50eHQnIFwiRGVzeW5jaHJvbml6ZWRcIilcbiAgaW5cbiAgc3RhdHVzXG5cbmxldCBmdXRfdG9fbHdkIH5pbml0IGYgPVxuICBsZXQgdiA9IEx3ZC52YXIgaW5pdCBpblxuICBsZXQgKCkgPSBGdXQuYXdhaXQgZiAoTHdkLnNldCB2KSBpblxuICBMd2QuZ2V0IHZcblxubGV0IHNlcV9zaGFyZSB+Y21wIH5wcmV2IG5leHQgPVxuICBsZXQgcmVjIGF1eCBwcmV2IG5leHQgPVxuICAgIG1hdGNoIChMd2Rfc2VxLnZpZXcgcHJldiwgTHdkX3NlcS52aWV3IG5leHQpIHdpdGhcbiAgICB8IEVtcHR5LCBFbXB0eSAtPiAocHJldiwgdHJ1ZSlcbiAgICB8IEVsZW1lbnQgaSwgRWxlbWVudCBpJyB3aGVuIGNtcCBpIGknIC0+IChwcmV2LCB0cnVlKVxuICAgIHwgQ29uY2F0IChsLCByKSwgQ29uY2F0IChsJywgcicpIC0+XG4gICAgICAgIGxldCBsLCBsX3NhbWUgPSBhdXggbCBsJyBpblxuICAgICAgICBsZXQgciwgcl9zYW1lID0gYXV4IHIgcicgaW5cbiAgICAgICAgaWYgbF9zYW1lICYmIHJfc2FtZSB0aGVuIChwcmV2LCB0cnVlKSBlbHNlIChMd2Rfc2VxLmNvbmNhdCBsIHIsIGZhbHNlKVxuICAgIHwgXywgXyAtPiAobmV4dCwgZmFsc2UpXG4gIGluXG4gIGZzdCBAQCBhdXggcHJldiBuZXh0XG5cbmxldCBzZXJ2ZXJzX2xpYnJhcmllcyA9XG4gIGxldCByZWMgbGliX2RpZmYgfnByZXYgbmV4dCA9XG4gICAgbGV0IG9wZW4gRGIuU3RvcmVzLkl0ZW1zIGluXG4gICAgc2VxX3NoYXJlIH5jbXA6KGZ1biBpIGknIC0+IFN0cmluZy4oaS5pdGVtLmlkID0gaScuaXRlbS5pZCkpIH5wcmV2IG5leHRcbiAgaW5cbiAgTHdkX3NlcS5tYXBcbiAgICAoZnVuIChzZXJ2ZXJfaWQsIHsgcmVmcmVzaDsgXyB9KSAtPlxuICAgICAgbGV0IHZpZXdzID1cbiAgICAgICAgQ29uc29sZS5sb2cgWyBcIk5FVyBSRUZcIiBdO1xuICAgICAgICBsZXQgcHJldmlvdXNfdmFsdWUgPSByZWYgTm9uZSBpblxuICAgICAgICBMd2QubWFwIH5mOihmdW4gdiAtPlxuICAgICAgICAgICAgbGV0IG5ld192YWx1ZSA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6dlxuICAgICAgICAgICAgICAgIChmdW4gcHJldiAtPiBsaWJfZGlmZiB+cHJldiB2KVxuICAgICAgICAgICAgICAgICFwcmV2aW91c192YWx1ZVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIHByZXZpb3VzX3ZhbHVlIDo9IFNvbWUgbmV3X3ZhbHVlO1xuICAgICAgICAgICAgbmV3X3ZhbHVlKVxuICAgICAgICBAQCBMd2QuYmluZCAoTHdkLmdldCByZWZyZXNoKSB+ZjooZnVuICgpIC0+XG4gICAgICAgICAgICAgICBXb3JrZXJfY2xpZW50LnF1ZXJ5IChHZXRfc2VydmVyX2xpYnJhcmllcyBzZXJ2ZXJfaWQpXG4gICAgICAgICAgICAgICB8PiBGdXQubWFwIChSZXN1bHQuZ2V0X29yIH5kZWZhdWx0OltdKVxuICAgICAgICAgICAgICAgfD4gRnV0Lm1hcCAoZnVuIGwgLT5cbiAgICAgICAgICAgICAgICAgICAgICBDb25zb2xlLmxvZyBbIFwiR09UIEw9XCI7IGwgXTtcbiAgICAgICAgICAgICAgICAgICAgICBsKVxuICAgICAgICAgICAgICAgfD4gRnV0Lm1hcCBMd2Rfc2VxLm9mX2xpc3RcbiAgICAgICAgICAgICAgICgqIEZJWE1FOiBUaGlzIGlzIGJhZDogd2UgY3JlYXRlIGEgbHdkIHZhciBlYWNoIHRpbWUgd2UgcmVmcmVzaFxuICAgICAgICAgICAgICAgICAgYW5kIHRoaXEgdmFyIGhhZCBhbiBlbXB0eSBzZXEgdmFsdWUuIFRoaXMgY2F1c2VkIGZsaWNrZXJpbmdcbiAgICAgICAgICAgICAgICAgIHdoZW4gc3luY2luZy4gSGF2aW5nIHRoZSBjb3JyZWN0IGluaXRpYWwgdmFsdWUgaXMgbm90IGEgbXVjaFxuICAgICAgICAgICAgICAgICAgYmV0dGVyIG9wdGlvbiBzaW5jZSB0aGVyZSBhcmUgc3RpbGwgdG8gbHdkIHVwZGF0ZXMgaW5zdGVhZCBvZlxuICAgICAgICAgICAgICAgICAgb25lLiBXZSBwcm9iYWJseSBuZWVkIHByb3BlciBwb2xsaW5nIGFuZCBhIHJvb3QuICopXG4gICAgICAgICAgICAgICB8PiBmdXRfdG9fbHdkXG4gICAgICAgICAgICAgICAgICAgIH5pbml0OihPcHRpb24udmFsdWUgfmRlZmF1bHQ6THdkX3NlcS5lbXB0eSAhcHJldmlvdXNfdmFsdWUpKVxuICAgICAgaW5cbiAgICAgIChzZXJ2ZXJfaWQsIHZpZXdzKSlcbiAgICBzZXJ2ZXJzX3dpdGhfc3RhdHVzXG5cbmxldCB1aSAoKSA9XG4gIGxldCBzdGF0dXNlcyA9XG4gICAgTHdkX3NlcS5tYXAgKGZ1biAoXywgc2VydmVyKSAtPiB1aV9zdGF0dXMgc2VydmVyKSBzZXJ2ZXJzX3dpdGhfc3RhdHVzXG4gIGluXG4gIGxldCB1aV9mb3JtID1cbiAgICBMd2QubWFwIHNlcnZlcnNfd2l0aF9zdGF0dXMgfmY6KGZ1biBzIC0+XG4gICAgICAgIG1hdGNoIEx3ZF9zZXEudmlldyBzIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBMd2Rfc2VxLmVsZW1lbnQgQEAgRWx3ZC5kaXYgWyBgUiAodWlfZm9ybSAoKSkgXVxuICAgICAgICB8IF8gLT4gTHdkX3NlcS5lbXB0eSlcbiAgaW5cbiAgRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IHVpX2Zvcm0pOyBgUyAoTHdkX3NlcS5saWZ0IHN0YXR1c2VzKSBdXG4iLCJvcGVuISBJbXBvcnRcbm9wZW4gQnJyXG5vcGVuIEJycl9sd2RcblxudHlwZSBwbGF5c3RhdGUgPSB7XG4gIHBsYXlsaXN0IDogRGIuVmlldy5yYW5nZWQgb3B0aW9uIEx3ZC52YXI7XG4gIGN1cnJlbnRfaW5kZXggOiBpbnQgTHdkLnZhcjtcbn1cblxudHlwZSB0ID0gRWx3ZC50IEx3ZC50XG5cbmxldCBwbGF5c3RhdGUgPSB7IHBsYXlsaXN0ID0gTHdkLnZhciBOb25lOyBjdXJyZW50X2luZGV4ID0gTHdkLnZhciAwIH1cblxudHlwZSBub3dfcGxheWluZyA9IHsgaXRlbSA6IERTLkFwaS5JdGVtLnQ7IHVybCA6IHN0cmluZyB9XG5cbmxldCBub3dfcGxheWluZyA9IEx3ZC52YXIgTm9uZVxuXG4oKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2plbGx5ZmluL2plbGx5ZmluL2Jsb2IvNDc4NjkwMWJiNzk2YzNlOTEyZjEzYjY4NjU3MWZkZThkMTZmNDljNS90ZXN0cy9KZWxseWZpbi5Nb2RlbC5UZXN0cy9UZXN0JTIwRGF0YS9EZXZpY2VQcm9maWxlLUZpcmVmb3guanNvbiAqKVxuXG4oKiogUGxheWJhY2sgaXNzdWUgd2l0aCBhbGFjIGZpbGVzIChhbmQgcHJvYmFibHkgYWxsIGNvZGVjcyBub24tbmF0aXZlbHlcbiAgICAgIHN1cHBvcnRlZCBieSB0aGUgYnJvd3NlcilcbiAgICAtIFNvbWUgY2xpZW50cyAoc29uaXhkKSBnaXZlIHVwLCBtcHYgYmFzZWQgcGxheWVycyB3b3JrLlxuICAgIC0gVGhlIG9mZmljaWFsIGNsaWVudCBtYW5hZ2UgdG8gcGxheSB0aGUgZmlsZSBidXQgZ2l2ZXMgYSBibG9iIHRvIHRoZSBhdWRpb1xuICAgICAgcGxheWVyIGluc3RlYWQgb2YgYSBobHMgdXJsIGFzIGl0IGRvZXMgZm9yIG90aGVyIGZpbGVzLlxuICAgIC0gSmVsbHlmaW4gc2hvdWxkIHVzZSB0aGUgZGV2aWNlIGlkIGFuZCBhc3NvY2lhdGVkIGNhcGFiaWxpdGllcyB0b1xuICAgICAgYXV0b21hdGljYWxseSB0cmFuc2NvZGUsIHNob3VsZG4ndCBpdCA/XG5cbiopXG5sZXQgYXVkaW9fdXJsIChzZXJ2ZXIgOiBEUy5jb25uZXhpb24pIGl0ZW1faWQgPVxuICBQcmludGYuc3ByaW50ZlxuICAgIFwiJXMvQXVkaW8vJXMvdW5pdmVyc2FsP2FwaV9rZXk9JXMmYXVkaW9Db2RlYz1hYWMmY29udGFpbmVyPW9wdXMsbXAzLGFhYyxtNGEsbTRiLGZsYWMsd2F2LG9nZyZ0cmFuc2NvZGluZ0NvbnRhaW5lcj10cyZ0cmFuc2NvZGluZ1Byb3RvY29sPWhsc1wiXG4gICAgc2VydmVyLmJhc2VfdXJsIGl0ZW1faWQgc2VydmVyLmF1dGhfcmVzcG9uc2UuYWNjZXNzX3Rva2VuXG5cbm1vZHVsZSBQbGF5YmFja19jb250cm9sbGVyIChQIDogc2lnXG4gIHZhbCBmZXRjaCA6XG4gICAgRGIuVmlldy5yYW5nZWQgLT5cbiAgICBpbnQgYXJyYXkgLT5cbiAgICAoRGIuU3RvcmVzLkl0ZW1zLnQgb3B0aW9uIGFycmF5LCBEYi5Xb3JrZXJfYXBpLmVycm9yKSBGdXQucmVzdWx0XG5lbmQpID1cbnN0cnVjdFxuICBsZXQgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IGN1cnJlbnRfaW5kZXggPVxuICAgIG1hdGNoIHBsYXlsaXN0IHdpdGhcbiAgICB8IE5vbmUgLT4gRnV0Lm9rICgpXG4gICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgIGxldCsgaXRlbSA9XG4gICAgICAgICAgbGV0KyByZXN1bHQgPSBQLmZldGNoIHBsYXlsaXN0IFt8IGN1cnJlbnRfaW5kZXggfF0gaW5cbiAgICAgICAgICBtYXRjaCByZXN1bHQgd2l0aFxuICAgICAgICAgIHwgW3wgU29tZSB7IERiLlN0b3Jlcy5JdGVtcy5pdGVtOyBfIH0gfF0gLT5cbiAgICAgICAgICAgICAgbGV0IHsgRFMuQXBpLkl0ZW0uc2VydmVyX2lkOyBpZDsgYWxidW1faWQ7IG5hbWU7IF8gfSA9IGl0ZW0gaW5cbiAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucykgaW5cbiAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbiA6IERTLmNvbm5leGlvbiA9IExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVycyBpblxuICAgICAgICAgICAgICBsZXQgdXJsID0gYXVkaW9fdXJsIGNvbm5leGlvbiBpZCBpblxuICAgICAgICAgICAgICBsZXQgKCkgPSBDb25zb2xlLmxvZyBbIFwiTm93IHBsYXlpbmc6XCI7IG5hbWU7IEp2Lm9mX3N0cmluZyB1cmwgXSBpblxuICAgICAgICAgICAgICBsZXQgKCkgPVxuICAgICAgICAgICAgICAgIGxldCBvcGVuIEJycl9pby5NZWRpYS5TZXNzaW9uIGluXG4gICAgICAgICAgICAgICAgbGV0IHNlc3Npb24gPSBvZl9uYXZpZ2F0b3IgRy5uYXZpZ2F0b3IgaW5cbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2VfaWQgPSBPcHRpb24udmFsdWUgfmRlZmF1bHQ6aWQgYWxidW1faWQgaW5cbiAgICAgICAgICAgICAgICBsZXQgaW1nX3NyYyA9XG4gICAgICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICAgICAgICBcIiVzL0l0ZW1zLyVzL0ltYWdlcy9QcmltYXJ5P3dpZHRoPTUwMCZmb3JtYXQ9SnBnXCJcbiAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBuYW1lIGluXG4gICAgICAgICAgICAgICAgbGV0IGFsYnVtID0gXCJcIiBpblxuICAgICAgICAgICAgICAgIGxldCBhcnRpc3QgPSBcIlwiIGluXG4gICAgICAgICAgICAgICAgbGV0IGFydHdvcmsgPVxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgTWVkaWFfbWV0YWRhdGEuc3JjID0gaW1nX3NyYztcbiAgICAgICAgICAgICAgICAgICAgICBzaXplcyA9IFwiNTAweDUwMFwiO1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGUnID0gXCJpbWFnZS9qcGVnXCI7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICBzZXRfbWV0YWRhdGEgc2Vzc2lvbiB7IHRpdGxlOyBhcnRpc3Q7IGFsYnVtOyBhcnR3b3JrIH1cbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgeyBpdGVtOyB1cmwgfVxuICAgICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgaW5cbiAgICAgICAgTHdkLnNldCBub3dfcGxheWluZyAoU29tZSBpdGVtKVxuXG4gIGxldCByZXNldF9wbGF5bGlzdCBwbGF5bGlzdCA9XG4gICAgaWdub3JlIEBAIHNldF9wbGF5X3VybCAoU29tZSBwbGF5bGlzdCkgMDtcbiAgICBMd2Quc2V0IHBsYXlzdGF0ZS5wbGF5bGlzdCAoU29tZSBwbGF5bGlzdCk7XG4gICAgTHdkLnNldCBwbGF5c3RhdGUuY3VycmVudF9pbmRleCAwXG5cbiAgbGV0IG1ha2UgKCkgPVxuICAgIGxldCBhdWRpb19lbHQgPVxuICAgICAgRWwuYXVkaW9cbiAgICAgICAgfmF0OlxuICAgICAgICAgIFtcbiAgICAgICAgICAgIEF0LnYgKEpzdHIudiBcImNvbnRyb2xzXCIpIChKc3RyLnYgXCJ0cnVlXCIpO1xuICAgICAgICAgICAgQXQudiAoSnN0ci52IFwiYXV0b3BsYXlcIikgKEpzdHIudiBcInRydWVcIik7XG4gICAgICAgICAgICBBdC52IChKc3RyLnYgXCJwcmVsb2FkXCIpIChKc3RyLnYgXCJhdXRvXCIpO1xuICAgICAgICAgIF1cbiAgICAgICAgW11cbiAgICBpblxuICAgIGxldCBzZXRfc3JjIHVybCA9IEVsLnNldF9hdCAoSnN0ci52IFwic3JjXCIpIChTb21lIChKc3RyLnYgdXJsKSkgYXVkaW9fZWx0IGluXG4gICAgbGV0IF9hdXRvX3BsYXkgPVxuICAgICAgKCogV2UgY2Fubm90IHJlbHkgb24gdGhlIG1haW4gW0x3ZF0gb2JzZXJ2ZXIgZm9yIHBsYXliYWNrIGNvbnRyb2wgYmVjYXVzZVxuICAgICAgICAgaXQgaXMgdGllZCB0byB0aGUgW3JlcXVlc3RBbmltYXRpb25GcmFtZXNdIGNhbGxiYWNrLiBUaGlzIHByZXZlbnQgdGhlXG4gICAgICAgICBwbGF5ZXIgdG8gc3RhcnQgcGxheWluZyB0aGUgbmV4dCBzb25nIGlmIHRoZSB0YWIgaXMgaW4gdGhlIGJhY2tncm91bmQuXG4gICAgICAqKVxuICAgICAgbGV0IHJvb3QgPSBMd2Qub2JzZXJ2ZSAoTHdkLmdldCBub3dfcGxheWluZykgaW5cbiAgICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgICAgIG1hdGNoIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB3aXRoXG4gICAgICAgICAgfCBTb21lIHsgdXJsOyBfIH0gLT4gc2V0X3NyYyB1cmxcbiAgICAgICAgICB8IE5vbmUgLT4gKCkpO1xuICAgICAgTHdkLnF1aWNrX3NhbXBsZSByb290IHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgbGV0IHBsYXlsaXN0ID0gTHdkLnBlZWsgcGxheXN0YXRlLnBsYXlsaXN0IGluXG4gICAgICBsZXQgY3VycmVudF9pbmRleCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gICAgICBsZXQgbmV4dF9pbmRleCA9IGN1cnJlbnRfaW5kZXggKyAxIGluXG4gICAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IG5leHRfaW5kZXg7XG4gICAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IG5leHRfaW5kZXhcbiAgICBpblxuICAgIGxldCBwcmV2ICgpID1cbiAgICAgIGxldCBwbGF5bGlzdCA9IEx3ZC5wZWVrIHBsYXlzdGF0ZS5wbGF5bGlzdCBpblxuICAgICAgbGV0IGN1cnJlbnRfaW5kZXggPSBMd2QucGVlayBwbGF5c3RhdGUuY3VycmVudF9pbmRleCBpblxuICAgICAgbGV0IG5leHRfaW5kZXggPSBtYXggMCAoY3VycmVudF9pbmRleCAtIDEpIGluXG4gICAgICBpZ25vcmUgQEAgc2V0X3BsYXlfdXJsIHBsYXlsaXN0IG5leHRfaW5kZXg7XG4gICAgICBMd2Quc2V0IHBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IG5leHRfaW5kZXhcbiAgICBpblxuICAgIGxldCBzZXRfcG9zaXRpb25fc3RhdGUgPVxuICAgICAgKCogRW5hYmxlIGNvbnRyb2wgZnJvbSBPUyAqKVxuICAgICAgbGV0IG9wZW4gQnJyX2lvLk1lZGlhLlNlc3Npb24gaW5cbiAgICAgIGxldCBzZXNzaW9uID0gb2ZfbmF2aWdhdG9yIEcubmF2aWdhdG9yIGluXG4gICAgICBsZXQgc2V0X3Bvc2l0aW9uX3N0YXRlICgpID1cbiAgICAgICAgbGV0IGR1cmF0aW9uID0gRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwiZHVyYXRpb25cIikpIGF1ZGlvX2VsdCBpblxuICAgICAgICBpZiBub3QgKEZsb2F0LmlzX25hbiBkdXJhdGlvbikgdGhlblxuICAgICAgICAgIGxldCBwbGF5YmFja19yYXRlID1cbiAgICAgICAgICAgIEVsLnByb3AgKEVsLlByb3AuZmxvYXQgKEpzdHIudiBcInBsYXliYWNrUmF0ZVwiKSkgYXVkaW9fZWx0XG4gICAgICAgICAgaW5cbiAgICAgICAgICBsZXQgcG9zaXRpb24gPVxuICAgICAgICAgICAgRWwucHJvcCAoRWwuUHJvcC5mbG9hdCAoSnN0ci52IFwiY3VycmVudFRpbWVcIikpIGF1ZGlvX2VsdFxuICAgICAgICAgIGluXG4gICAgICAgICAgc2V0X3Bvc2l0aW9uX3N0YXRlIH5kdXJhdGlvbiB+cGxheWJhY2tfcmF0ZSB+cG9zaXRpb24gc2Vzc2lvblxuICAgICAgaW5cbiAgICAgIHNldF9hY3Rpb25faGFuZGxlciBzZXNzaW9uIEFjdGlvbi5uZXh0X3RyYWNrIG5leHQ7XG4gICAgICBzZXRfYWN0aW9uX2hhbmRsZXIgc2Vzc2lvbiBBY3Rpb24ucHJldmlvdXNfdHJhY2sgcHJldjtcbiAgICAgIHNldF9wb3NpdGlvbl9zdGF0ZVxuICAgIGluXG4gICAgbGV0IG9uX2Vycm9yIGV2ID1cbiAgICAgIEV2LnN0b3BfaW1tZWRpYXRlX3Byb3BhZ2F0aW9uIGV2O1xuICAgICAgRXYucHJldmVudF9kZWZhdWx0IGV2O1xuICAgICAgQ29uc29sZS5sb2dcbiAgICAgICAgW1xuICAgICAgICAgIFwiQSBwbGF5YmFjayBlcnJvciBoYXBwZW5lZC4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gYSBjb2RlYyBcXFxuICAgICAgICAgICB1bnN1cHBvcnRlZCBieSB0aGUgYnJvd3Nlci5cIjtcbiAgICAgICAgICBldjtcbiAgICAgICAgXTtcbiAgICAgIG5leHQgKClcbiAgICBpblxuICAgIGxldCBuZXh0IF8gPSBuZXh0ICgpIGluXG4gICAgbGV0ICgpID1cbiAgICAgIGxldCB0YXJnZXQgPSBFbC5hc190YXJnZXQgYXVkaW9fZWx0IGluXG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LmVuZGVkIG5leHQgdGFyZ2V0O1xuICAgICAgaWdub3JlIEBAIEV2Lmxpc3RlbiBFdi5lcnJvciBvbl9lcnJvciB0YXJnZXQ7XG4gICAgICBpZ25vcmUgQEAgRXYubGlzdGVuIEV2LnBsYXkgKGZ1biBfIC0+IHNldF9wb3NpdGlvbl9zdGF0ZSAoKSkgdGFyZ2V0XG4gICAgaW5cbiAgICBsZXQgYnRuX25leHQgPVxuICAgICAgQnJyX2x3ZF91aS5CdXR0b24udiB+ZXY6WyBgUCAoRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG5leHQpIF0gKGBQIFwiTkVYVFwiKVxuICAgIGluXG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aSBpblxuICAgIGxldCBub3dfcGxheWluZyA9XG4gICAgICBsZXQgdHJhY2tfY292ZXIgPVxuICAgICAgICBsZXQgc3R5bGUgPVxuICAgICAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgbm93X3BsYXlpbmcpIH5mOihmdW4gbnAgLT5cbiAgICAgICAgICAgICAgbGV0IHNyYyA9XG4gICAgICAgICAgICAgICAgbWF0Y2ggbnAgd2l0aFxuICAgICAgICAgICAgICAgIHwgTm9uZSAtPiBcInRyYWNrLnBuZ1wiXG4gICAgICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQ7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IC0+XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZV9pZCA9IE9wdGlvbi52YWx1ZSB+ZGVmYXVsdDppZCBhbGJ1bV9pZCBpblxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VydmVycyA9XG4gICAgICAgICAgICAgICAgICAgICAgTHdkX3NlcS50b19saXN0IChMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb24gOiBEUy5jb25uZXhpb24gPVxuICAgICAgICAgICAgICAgICAgICAgIExpc3QuYXNzcSBzZXJ2ZXJfaWQgc2VydmVyc1xuICAgICAgICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICAgICAgICAoKiB0b2RvOiB0aGlzIGlzIGRvbmUgaW4gbXVsdGlwbGUgcGxhY2VzLCB3ZSBzaG91bGQgZmFjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgIHRoYXQgb3V0LiAqKVxuICAgICAgICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZlxuICAgICAgICAgICAgICAgICAgICAgIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbi5iYXNlX3VybCBpbWFnZV9pZFxuICAgICAgICAgICAgICBpblxuICAgICAgICAgICAgICBQcmludGYuc3ByaW50ZiBcImJhY2tncm91bmQtaW1hZ2U6IHVybCglUylcIiBzcmMpXG4gICAgICAgIGluXG4gICAgICAgIGxldCBhdCA9XG4gICAgICAgICAgQXR0cnMuKFxuICAgICAgICAgICAgYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcIm5vdy1wbGF5aW5nLWNvdmVyXCIpIFtdXG4gICAgICAgICAgICB8PiBhZGQgQXQuTmFtZS5zdHlsZSAoYFIgc3R5bGUpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgb25fY2xpY2sgPVxuICAgICAgICAgIEVsd2QuaGFuZGxlciBFdi5jbGljayAoZnVuIF8gLT5cbiAgICAgICAgICAgICAgKG1hdGNoIEx3ZC5wZWVrIEFwcF9zdGF0ZS5hY3RpdmVfbGF5b3V0IHdpdGhcbiAgICAgICAgICAgICAgfCBLaW9zayAtPiBNYWluXG4gICAgICAgICAgICAgIHwgTWFpbiAtPiBLaW9zaylcbiAgICAgICAgICAgICAgfD4gTHdkLnNldCBBcHBfc3RhdGUuYWN0aXZlX2xheW91dClcbiAgICAgICAgaW5cbiAgICAgICAgRWx3ZC5kaXYgfmF0IH5ldjpbIGBQIG9uX2NsaWNrIF0gW11cbiAgICAgIGluXG4gICAgICBsZXQgdHJhY2tfZGV0YWlscyA9XG4gICAgICAgIGxldCBhdCA9IEF0dHJzLmFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJub3ctcGxheWluZy1kZXRhaWxzXCIpIFtdIGluXG4gICAgICAgIGxldCB0aXRsZSA9XG4gICAgICAgICAgbGV0IHR4dCA9XG4gICAgICAgICAgICBMd2QubWFwIChMd2QuZ2V0IG5vd19wbGF5aW5nKSB+ZjooZnVuY3Rpb25cbiAgICAgICAgICAgICAgfCBOb25lIC0+IEVsLnR4dCcgXCJOb3RoaW5nIHBsYXlpbmdcIlxuICAgICAgICAgICAgICB8IFNvbWUgeyBpdGVtID0geyBuYW1lOyBfIH07IF8gfSAtPiBFbC50eHQnIG5hbWUpXG4gICAgICAgICAgaW5cbiAgICAgICAgICBFbHdkLnNwYW4gWyBgUiB0eHQgXVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmRpdiB+YXQgWyBgUiB0aXRsZSBdXG4gICAgICBpblxuICAgICAgbGV0IGF0ID1cbiAgICAgICAgQXR0cnMuKFxuICAgICAgICAgIGFkZCBBdC5OYW1lLmNsYXNzJyAoYFAgXCJib3hcIikgW11cbiAgICAgICAgICB8PiBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwibm93LXBsYXlpbmctZGlzcGxheVwiKSlcbiAgICAgIGluXG4gICAgICBFbHdkLmRpdiB+YXQgWyBgUiB0cmFja19jb3ZlcjsgYFIgdHJhY2tfZGV0YWlscyBdXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgQXR0cnMuKFxuICAgICAgICBhZGQgQXQuTmFtZS5jbGFzcycgKGBQIFwicGxheWVyLXdyYXBwZXJcIikgW11cbiAgICAgICAgfD4gYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcImJveFwiKSlcbiAgICBpblxuICAgIEVsd2QuZGl2IH5hdCBbIGBSIG5vd19wbGF5aW5nOyBgUCBhdWRpb19lbHQ7IGBSIGJ0bl9uZXh0IF1cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG5pbmNsdWRlIEludFxuXG50eXBlIHQgPSBpbnRcbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmxldCB6ZXJvID0gMFxubGV0IG9uZSA9IDFcbmxldCBtaW51c19vbmUgPSAtMVxubGV0IGFkZCA9ICggKyApXG5sZXQgc3ViID0gKCAtIClcbmxldCBtdWwgPSAoICogKVxubGV0IGRpdiA9ICggLyApXG5sZXQgc3VjYyA9IHN1Y2NcbmxldCBwcmVkID0gcHJlZFxubGV0IGFicyA9IGFic1xubGV0IG1heF9pbnQgPSBtYXhfaW50XG5sZXQgbWluX2ludCA9IG1pbl9pbnRcbmxldCBlcXVhbCAoYSA6IGludCkgYiA9IFN0ZGxpYi4oID0gKSBhIGJcbmxldCBjb21wYXJlIChhIDogaW50KSBiID0gY29tcGFyZSBhIGJcblxuKCogdXNlIEZOVjpcbiAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Zvd2xlciVFMiU4MCU5M05vbGwlRTIlODAlOTNWb19oYXNoX2Z1bmN0aW9uICopXG5sZXQgaGFzaCAobiA6IGludCkgOiBpbnQgPVxuICBsZXQgb2Zmc2V0X2Jhc2lzID0gMHhjYmYyOWNlNDg0MjIyMzI1TCBpblxuICBsZXQgcHJpbWUgPSAweDEwMDAwMDAwMWIzTCBpblxuXG4gIGxldCBoID0gcmVmIG9mZnNldF9iYXNpcyBpblxuICBmb3IgayA9IDAgdG8gNyBkb1xuICAgIChoIDo9IEludDY0LihtdWwgIWggcHJpbWUpKTtcbiAgICAoKiBoIDo9IGggeG9yIChrLXRoIGJ5dGUgb2YgbikgKilcbiAgICBoIDo9IEludDY0Lihsb2d4b3IgIWggKG9mX2ludCAoKG4gbHNyIChrICogOCkpIGxhbmQgMHhmZikpKVxuICBkb25lO1xuICAoKiB0cnVuY2F0ZSBiYWNrIHRvIGludCBhbmQgcmVtb3ZlIHNpZ24gKilcbiAgSW50NjQudG9faW50ICFoIGxhbmQgbWF4X2ludFxuXG5sZXQgcmFuZ2UgaSBqIHlpZWxkID1cbiAgbGV0IHJlYyB1cCBpIGogeWllbGQgPVxuICAgIGlmIGkgPSBqIHRoZW5cbiAgICAgIHlpZWxkIGlcbiAgICBlbHNlIChcbiAgICAgIHlpZWxkIGk7XG4gICAgICB1cCAoaSArIDEpIGogeWllbGRcbiAgICApXG4gIGFuZCBkb3duIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIGRvd24gKGkgLSAxKSBqIHlpZWxkXG4gICAgKVxuICBpblxuICBpZiBpIDw9IGogdGhlblxuICAgIHVwIGkgaiB5aWVsZFxuICBlbHNlXG4gICAgZG93biBpIGogeWllbGRcblxubGV0IHJhbmdlJyBpIGogeWllbGQgPVxuICBpZiBpIDwgaiB0aGVuXG4gICAgcmFuZ2UgaSAoaiAtIDEpIHlpZWxkXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpIChqICsgMSkgeWllbGRcblxubGV0IHNpZ24gaSA9IGNvbXBhcmUgaSAwXG5sZXQgbmVnIGkgPSAtaVxuXG5sZXQgcG93IGEgYiA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCAxIC0+IGFjY1xuICAgIHwgbiAtPlxuICAgICAgaWYgbiBtb2QgMiA9IDAgdGhlblxuICAgICAgICBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICAgICAgZWxzZVxuICAgICAgICBhY2MgKiBhdXggKGFjYyAqIGFjYykgKG4gLyAyKVxuICBpblxuICBtYXRjaCBiIHdpdGhcbiAgfCAwIC0+XG4gICAgaWYgYSA9IDAgdGhlblxuICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IHVuZGVmaW5lZCB2YWx1ZSAwXjBcIilcbiAgICBlbHNlXG4gICAgICAxXG4gIHwgYiB3aGVuIGIgPCAwIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJwb3c6IGNhbid0IHJhaXNlIGludCB0byBuZWdhdGl2ZSBwb3dlclwiKVxuICB8IGIgLT4gYXV4IGEgYlxuXG5tb2R1bGUgSW5maXggOiBzaWdcbiAgdmFsICggPSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggPD4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDwgKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoID4gKSA6IHQgLT4gdCAtPiBib29sXG4gIHZhbCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbFxuICB2YWwgKCA+PSApIDogdCAtPiB0IC0+IGJvb2xcbiAgdmFsICggLS0gKSA6IHQgLT4gdCAtPiB0IGl0ZXJcbiAgdmFsICggLS1eICkgOiB0IC0+IHQgLT4gdCBpdGVyXG4gIHZhbCAoICsgKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIC0gKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIH4tICkgOiB0IC0+IHRcbiAgdmFsICggKiApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggLyApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggKiogKSA6IHQgLT4gdCAtPiB0XG4gIHZhbCAoIG1vZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbGFuZCApIDogdCAtPiB0IC0+IHRcbiAgdmFsICggbG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgKCBseG9yICkgOiB0IC0+IHQgLT4gdFxuICB2YWwgbG5vdCA6IHQgLT4gdFxuICB2YWwgKCBsc2wgKSA6IHQgLT4gaW50IC0+IHRcbiAgdmFsICggbHNyICkgOiB0IC0+IGludCAtPiB0XG4gIHZhbCAoIGFzciApIDogdCAtPiBpbnQgLT4gdFxuZW5kID0gc3RydWN0XG4gIGluY2x1ZGUgU3RkbGliXG5cbiAgbGV0ICggLS0gKSA9IHJhbmdlXG4gIGxldCAoIC0tXiApID0gcmFuZ2UnXG4gIGxldCAoICoqICkgPSBwb3dcbmVuZFxuXG5pbmNsdWRlIEluZml4XG5cbmxldCBtaW4gOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5taW5cbmxldCBtYXggOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi5tYXhcblxubGV0IGZsb29yX2RpdiBhIG4gPVxuICBpZiBhIDwgMCAmJiBuID49IDAgdGhlblxuICAgICgoYSArIDEpIC8gbikgLSAxXG4gIGVsc2UgaWYgYSA+IDAgJiYgbiA8IDAgdGhlblxuICAgICgoYSAtIDEpIC8gbikgLSAxXG4gIGVsc2VcbiAgICBhIC8gblxuXG5sZXQgYm9vbF9uZXEgKGEgOiBib29sKSBiID0gU3RkbGliLiggPD4gKSBhIGJcblxubGV0IHJlbSBhIG4gPVxuICBsZXQgeSA9IGEgbW9kIG4gaW5cbiAgaWYgYm9vbF9uZXEgKHkgPCAwKSAobiA8IDApICYmIHkgPD4gMCB0aGVuXG4gICAgeSArIG5cbiAgZWxzZVxuICAgIHlcblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcmFuZG9tIG4gc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IG5cbmxldCByYW5kb21fc21hbGwgPSByYW5kb20gMTAwXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKyByYW5kb20gKGogLSBpKSBzdFxubGV0IHBwIGZtdCA9IEZvcm1hdC5wcF9wcmludF9pbnQgZm10XG5sZXQgbW9zdF9zaWduaWZpY2FudF9iaXQgPSAtMSBseG9yICgtMSBsc3IgMSlcbmxldCB0b19zdHJpbmcgPSBzdHJpbmdfb2ZfaW50XG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5sZXQgb2Zfc3RyaW5nX2V4biA9IFN0ZGxpYi5pbnRfb2Zfc3RyaW5nXG5sZXQgdG9fZmxvYXQgPSBmbG9hdF9vZl9pbnRcbmxldCBvZl9mbG9hdCA9IGludF9vZl9mbG9hdFxuXG50eXBlIG91dHB1dCA9IGNoYXIgLT4gdW5pdFxuXG4oKiBhYnN0cmFjdCBwcmludGVyICopXG5sZXQgdG9fYmluYXJ5X2dlbiAob3V0IDogb3V0cHV0KSBuID1cbiAgbGV0IG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gKFxuICAgICAgb3V0ICctJztcbiAgICAgIC1uXG4gICAgKSBlbHNlXG4gICAgICBuXG4gIGluXG4gIG91dCAnMCc7XG4gIG91dCAnYic7XG4gIGxldCByZWMgbG9vcCBzdGFydGVkIGJpdCBuID1cbiAgICBpZiBiaXQgPSAwIHRoZW4gKFxuICAgICAgaWYgbm90IHN0YXJ0ZWQgdGhlbiBvdXQgJzAnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBiID0gbiBsYW5kIGJpdCBpblxuICAgICAgaWYgYiA9IDAgdGhlbiAoXG4gICAgICAgIGlmIHN0YXJ0ZWQgdGhlbiBvdXQgJzAnO1xuICAgICAgICBsb29wIHN0YXJ0ZWQgKGJpdCBsc3IgMSkgblxuICAgICAgKSBlbHNlIChcbiAgICAgICAgb3V0ICcxJztcbiAgICAgICAgbG9vcCB0cnVlIChiaXQgbHNyIDEpIG5cbiAgICAgIClcbiAgICApXG4gIGluXG4gIGxvb3AgZmFsc2UgbW9zdF9zaWduaWZpY2FudF9iaXQgblxuXG5sZXQgcHBfYmluYXJ5IG91dCBuID0gdG9fYmluYXJ5X2dlbiAoRm9ybWF0LnBwX3ByaW50X2NoYXIgb3V0KSBuXG5cbmxldCB0b19zdHJpbmdfYmluYXJ5IG4gPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICB0b19iaW5hcnlfZ2VuIChCdWZmZXIuYWRkX2NoYXIgYnVmKSBuO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCByYW5nZV9ieSB+c3RlcCBpIGogeWllbGQgPVxuICBsZXQgcmVjIHJhbmdlIGkgaiB5aWVsZCA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgeWllbGQgaVxuICAgIGVsc2UgKFxuICAgICAgeWllbGQgaTtcbiAgICAgIHJhbmdlIChpICsgc3RlcCkgaiB5aWVsZFxuICAgIClcbiAgaW5cbiAgaWYgc3RlcCA9IDAgdGhlblxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NJbnQucmFuZ2VfYnlcIilcbiAgZWxzZSBpZlxuICAgIGlmIHN0ZXAgPiAwIHRoZW5cbiAgICAgIGkgPiBqXG4gICAgZWxzZVxuICAgICAgaSA8IGpcbiAgdGhlblxuICAgICgpXG4gIGVsc2VcbiAgICByYW5nZSBpICgoKGogLSBpKSAvIHN0ZXAgKiBzdGVwKSArIGkpIHlpZWxkXG5cbigqXG4gIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGFtbWluZ193ZWlnaHRcblxuICAvL1RoaXMgdXNlcyBmZXdlciBhcml0aG1ldGljIG9wZXJhdGlvbnMgdGhhbiBhbnkgb3RoZXIga25vd25cbiAgLy9pbXBsZW1lbnRhdGlvbiBvbiBtYWNoaW5lcyB3aXRoIHNsb3cgbXVsdGlwbGljYXRpb24uXG4gIC8vSXQgdXNlcyAxNyBhcml0aG1ldGljIG9wZXJhdGlvbnMuXG4gIGludCBwb3Bjb3VudF8yKHVpbnQ2NF90IHgpIHtcbiAgICB4IC09ICh4ID4+IDEpICYgbTE7ICAgICAgICAgICAgIC8vcHV0IGNvdW50IG9mIGVhY2ggMiBiaXRzIGludG8gdGhvc2UgMiBiaXRzXG4gICAgeCA9ICh4ICYgbTIpICsgKCh4ID4+IDIpICYgbTIpOyAvL3B1dCBjb3VudCBvZiBlYWNoIDQgYml0cyBpbnRvIHRob3NlIDQgYml0c1xuICAgIHggPSAoeCArICh4ID4+IDQpKSAmIG00OyAgICAgICAgLy9wdXQgY291bnQgb2YgZWFjaCA4IGJpdHMgaW50byB0aG9zZSA4IGJpdHNcbiAgICB4ICs9IHggPj4gIDg7ICAvL3B1dCBjb3VudCBvZiBlYWNoIDE2IGJpdHMgaW50byB0aGVpciBsb3dlc3QgOCBiaXRzXG4gICAgeCArPSB4ID4+IDE2OyAgLy9wdXQgY291bnQgb2YgZWFjaCAzMiBiaXRzIGludG8gdGhlaXIgbG93ZXN0IDggYml0c1xuICAgIHggKz0geCA+PiAzMjsgIC8vcHV0IGNvdW50IG9mIGVhY2ggNjQgYml0cyBpbnRvIHRoZWlyIGxvd2VzdCA4IGJpdHNcbiAgICByZXR1cm4geCAmIDB4N2Y7XG4gIH1cblxuICAgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVcbiAgIG0yID0gMHgzMzMzMzMzMzMzMzMzMzMzXG4gICBtNCA9IDB4MGYwZjBmMGYwZjBmMGYwZlxuKilcbmxldCBwb3Bjb3VudCAoYiA6IGludCkgOiBpbnQgPVxuICBsZXQgbTEgPSAweDU1NTU1NTU1NTU1NTU1NTVMIGluXG4gIGxldCBtMiA9IDB4MzMzMzMzMzMzMzMzMzMzM0wgaW5cbiAgbGV0IG00ID0gMHgwZjBmMGYwZjBmMGYwZjBmTCBpblxuICBsZXQgb3BlbiBJbnQ2NCBpblxuICBsZXQgYiA9IG9mX2ludCBiIGluXG4gICgqIGludC0+aW50NjQgKilcbiAgbGV0IGIgPSBsb2dhbmQgYiAweDdmZmZmZmZmZmZmZmZmZmZMIGluXG5cbiAgKCogcmVtb3ZlIHNpZ24gYml0LCB3ZSBkZWFsIHdpdGggdWludDY0IGhlcmUgKilcbiAgbGV0IGIgPSBzdWIgYiAobG9nYW5kIChzaGlmdF9yaWdodF9sb2dpY2FsIGIgMSkgbTEpIGluXG4gIGxldCBiID0gYWRkIChsb2dhbmQgYiBtMikgKGxvZ2FuZCAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDIpIG0yKSBpblxuICBsZXQgYiA9IGxvZ2FuZCAoYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiA0KSkgbTQgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDgpIGluXG4gIGxldCBiID0gYWRkIGIgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgYiAxNikgaW5cbiAgbGV0IGIgPSBhZGQgYiAoc2hpZnRfcmlnaHRfbG9naWNhbCBiIDMyKSBpblxuICBsZXQgYiA9IGxvZ2FuZCBiIDB4N2ZMIGluXG4gIHRvX2ludCBiXG5cbmxldCBsb2dhbmQgPSAoIGxhbmQgKVxubGV0IGxvZ29yID0gKCBsb3IgKVxubGV0IGxvZ3hvciA9ICggbHhvciApXG5sZXQgbG9nbm90ID0gbG5vdFxubGV0IHNoaWZ0X2xlZnQgPSAoIGxzbCApXG5sZXQgc2hpZnRfcmlnaHQgPSAoIGFzciApXG5sZXQgc2hpZnRfcmlnaHRfbG9naWNhbCA9ICggbHNyIClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBPcGVyYXRpb25zIG9uIGludGVybmFsIHJlcHJlc2VudGF0aW9ucyBvZiB2YWx1ZXMgKilcblxudHlwZSB0XG5cbnR5cGUgcmF3X2RhdGEgPSBuYXRpdmVpbnRcblxuZXh0ZXJuYWwgcmVwciA6ICdhIC0+IHQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBvYmogOiB0IC0+ICdhID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgbWFnaWMgOiAnYSAtPiAnYiA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGlzX2ludCA6IHQgLT4gYm9vbCA9IFwiJW9ial9pc19pbnRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gaXNfYmxvY2sgYSA9IG5vdCAoaXNfaW50IGEpXG5leHRlcm5hbCB0YWcgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfdGFnXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHNldF90YWcgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial9zZXRfdGFnXCJcbmV4dGVybmFsIHNpemUgOiB0IC0+IGludCA9IFwiJW9ial9zaXplXCJcbmV4dGVybmFsIHJlYWNoYWJsZV93b3JkcyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial9yZWFjaGFibGVfd29yZHNcIlxuZXh0ZXJuYWwgZmllbGQgOiB0IC0+IGludCAtPiB0ID0gXCIlb2JqX2ZpZWxkXCJcbmV4dGVybmFsIHNldF9maWVsZCA6IHQgLT4gaW50IC0+IHQgLT4gdW5pdCA9IFwiJW9ial9zZXRfZmllbGRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9nZXQgOiBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdGFycmF5X2dldFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X3NldCA6XG4gICAgZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiY2FtbF9mbG9hdGFycmF5X3NldFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBkb3VibGVfZmllbGQgeCBpID0gZmxvYXRhcnJheV9nZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaVxubGV0IFtAaW5saW5lIGFsd2F5c10gc2V0X2RvdWJsZV9maWVsZCB4IGkgdiA9XG4gIGZsb2F0YXJyYXlfc2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGkgdlxuZXh0ZXJuYWwgcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgPSBcImNhbWxfb2JqX3Jhd19maWVsZFwiXG5leHRlcm5hbCBzZXRfcmF3X2ZpZWxkIDogdCAtPiBpbnQgLT4gcmF3X2RhdGEgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfb2JqX3NldF9yYXdfZmllbGRcIlxuXG5leHRlcm5hbCBuZXdfYmxvY2sgOiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfb2JqX2Jsb2NrXCJcbmV4dGVybmFsIGR1cCA6IHQgLT4gdCA9IFwiY2FtbF9vYmpfZHVwXCJcbmV4dGVybmFsIHRydW5jYXRlIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuZXh0ZXJuYWwgYWRkX29mZnNldCA6IHQgLT4gSW50MzIudCAtPiB0ID0gXCJjYW1sX29ial9hZGRfb2Zmc2V0XCJcbmV4dGVybmFsIHdpdGhfdGFnIDogaW50IC0+IHQgLT4gdCA9IFwiY2FtbF9vYmpfd2l0aF90YWdcIlxuXG5sZXQgZmlyc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDBcbmxldCBsYXN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl90YWcgPSAyNDVcblxubGV0IGxhenlfdGFnID0gMjQ2XG5sZXQgY2xvc3VyZV90YWcgPSAyNDdcbmxldCBvYmplY3RfdGFnID0gMjQ4XG5sZXQgaW5maXhfdGFnID0gMjQ5XG5sZXQgZm9yd2FyZF90YWcgPSAyNTBcblxubGV0IG5vX3NjYW5fdGFnID0gMjUxXG5cbmxldCBhYnN0cmFjdF90YWcgPSAyNTFcbmxldCBzdHJpbmdfdGFnID0gMjUyXG5sZXQgZG91YmxlX3RhZyA9IDI1M1xubGV0IGRvdWJsZV9hcnJheV90YWcgPSAyNTRcbmxldCBjdXN0b21fdGFnID0gMjU1XG5sZXQgZmluYWxfdGFnID0gY3VzdG9tX3RhZ1xuXG5cbmxldCBpbnRfdGFnID0gMTAwMFxubGV0IG91dF9vZl9oZWFwX3RhZyA9IDEwMDFcbmxldCB1bmFsaWduZWRfdGFnID0gMTAwMlxuXG5tb2R1bGUgQ2xvc3VyZSA9IHN0cnVjdFxuICB0eXBlIGluZm8gPSB7XG4gICAgYXJpdHk6IGludDtcbiAgICBzdGFydF9lbnY6IGludDtcbiAgfVxuXG4gIGxldCBpbmZvX29mX3JhdyAoaW5mbyA6IG5hdGl2ZWludCkgPVxuICAgIGxldCBvcGVuIE5hdGl2ZWludCBpblxuICAgIGxldCBhcml0eSA9XG4gICAgICAoKiBzaWduZWQ6IG5lZ2F0aXZlIGZvciB0dXBsZWQgZnVuY3Rpb25zICopXG4gICAgICBpZiBTeXMud29yZF9zaXplID0gNjQgdGhlblxuICAgICAgICB0b19pbnQgKHNoaWZ0X3JpZ2h0IGluZm8gNTYpXG4gICAgICBlbHNlXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyAyNClcbiAgICBpblxuICAgIGxldCBzdGFydF9lbnYgPVxuICAgICAgKCogc3RhcnRfZW52IGlzIHVuc2lnbmVkLCBidXQgd2Uga25vdyBpdCBjYW4gYWx3YXlzIGZpdCBhbiBPQ2FtbFxuICAgICAgICAgaW50ZWdlciBzbyB3ZSB1c2UgW3RvX2ludF0gaW5zdGVhZCBvZiBbdW5zaWduZWRfdG9faW50XS4gKilcbiAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHRfbG9naWNhbCAoc2hpZnRfbGVmdCBpbmZvIDgpIDkpIGluXG4gICAgeyBhcml0eTsgc3RhcnRfZW52IH1cblxuICAoKiBub3RlOiB3ZSBleHBlY3QgYSBjbG9zdXJlLCBub3QgYW4gaW5maXggcG9pbnRlciAqKVxuICBsZXQgaW5mbyAob2JqIDogdCkgPVxuICAgIGFzc2VydCAodGFnIG9iaiA9IGNsb3N1cmVfdGFnKTtcbiAgICBpbmZvX29mX3JhdyAocmF3X2ZpZWxkIG9iaiAxKVxuZW5kXG5cbm1vZHVsZSBFeHRlbnNpb25fY29uc3RydWN0b3IgPVxuc3RydWN0XG4gIHR5cGUgdCA9IGV4dGVuc2lvbl9jb25zdHJ1Y3RvclxuICBsZXQgb2ZfdmFsIHggPVxuICAgIGxldCB4ID0gcmVwciB4IGluXG4gICAgbGV0IHNsb3QgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHgpICYmICh0YWcgeCkgPD4gb2JqZWN0X3RhZyAmJiAoc2l6ZSB4KSA+PSAxIHRoZW4gZmllbGQgeCAwXG4gICAgICBlbHNlIHhcbiAgICBpblxuICAgIGxldCBuYW1lID1cbiAgICAgIGlmIChpc19ibG9jayBzbG90KSAmJiAodGFnIHNsb3QpID0gb2JqZWN0X3RhZyB0aGVuIGZpZWxkIHNsb3QgMFxuICAgICAgZWxzZSBpbnZhbGlkX2FyZyBcIk9iai5leHRlbnNpb25fY29uc3RydWN0b3JcIlxuICAgIGluXG4gICAgICBpZiAodGFnIG5hbWUpID0gc3RyaW5nX3RhZyB0aGVuIChvYmogc2xvdCA6IHQpXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG5cbiAgbGV0IFtAaW5saW5lIGFsd2F5c10gbmFtZSAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAwKSA6IHN0cmluZylcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBpZCAoc2xvdCA6IHQpID1cbiAgICAob2JqIChmaWVsZCAocmVwciBzbG90KSAxKSA6IGludClcbmVuZFxuXG5sZXQgZXh0ZW5zaW9uX2NvbnN0cnVjdG9yID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm9mX3ZhbFxubGV0IGV4dGVuc2lvbl9uYW1lID0gRXh0ZW5zaW9uX2NvbnN0cnVjdG9yLm5hbWVcbmxldCBleHRlbnNpb25faWQgPSBFeHRlbnNpb25fY29uc3RydWN0b3IuaWRcblxubW9kdWxlIEVwaGVtZXJvbiA9IHN0cnVjdFxuICB0eXBlIG9ial90ID0gdFxuXG4gIHR5cGUgdCAoKiogZXBoZW1lcm9uICopXG5cbiAgICgqKiBUbyBjaGFuZ2UgaW4gc3luYyB3aXRoIHdlYWsuaCAqKVxuICBsZXQgYWRkaXRpb25hbF92YWx1ZXMgPSAyXG4gIGxldCBtYXhfZXBoZV9sZW5ndGggPSBTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IHQgPSBcImNhbWxfZXBoZV9jcmVhdGVcIjs7XG4gIGxldCBjcmVhdGUgbCA9XG4gICAgaWYgbm90ICgwIDw9IGwgJiYgbCA8PSBtYXhfZXBoZV9sZW5ndGgpIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5jcmVhdGVcIjtcbiAgICBjcmVhdGUgbFxuXG4gIGxldCBsZW5ndGggeCA9IHNpemUocmVwciB4KSAtIGFkZGl0aW9uYWxfdmFsdWVzXG5cbiAgbGV0IHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBtc2cgPVxuICAgIGlmIG5vdCAoMCA8PSBvICYmIG8gPCBsZW5ndGggZSkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgbXNnXG5cbiAgZXh0ZXJuYWwgZ2V0X2tleTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleVwiXG4gIGxldCBnZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi5nZXRfa2V5XCI7XG4gICAgZ2V0X2tleSBlIG9cblxuICBleHRlcm5hbCBnZXRfa2V5X2NvcHk6IHQgLT4gaW50IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9rZXlfY29weVwiXG4gIGxldCBnZXRfa2V5X2NvcHkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlfY29weVwiO1xuICAgIGdldF9rZXlfY29weSBlIG9cblxuICBleHRlcm5hbCBzZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2tleVwiXG4gIGxldCBzZXRfa2V5IGUgbyB4ID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLnNldF9rZXlcIjtcbiAgICBzZXRfa2V5IGUgbyB4XG5cbiAgZXh0ZXJuYWwgdW5zZXRfa2V5OiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfa2V5XCJcbiAgbGV0IHVuc2V0X2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24udW5zZXRfa2V5XCI7XG4gICAgdW5zZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGNoZWNrX2tleTogdCAtPiBpbnQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2tleVwiXG4gIGxldCBjaGVja19rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmNoZWNrX2tleVwiO1xuICAgIGNoZWNrX2tleSBlIG9cblxuICBleHRlcm5hbCBibGl0X2tleSA6IHQgLT4gaW50IC0+IHQgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgPSBcImNhbWxfZXBoZV9ibGl0X2tleVwiXG5cbiAgbGV0IGJsaXRfa2V5IGUxIG8xIGUyIG8yIGwgPVxuICAgIGlmIGwgPCAwIHx8IG8xIDwgMCB8fCBvMSA+IGxlbmd0aCBlMSAtIGxcbiAgICAgICB8fCBvMiA8IDAgfHwgbzIgPiBsZW5ndGggZTIgLSBsXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIk9iai5FcGhlbWVyb24uYmxpdF9rZXlcIlxuICAgIGVsc2UgaWYgbCA8PiAwIHRoZW4gYmxpdF9rZXkgZTEgbzEgZTIgbzIgbFxuXG4gIGV4dGVybmFsIGdldF9kYXRhOiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhXCJcbiAgZXh0ZXJuYWwgZ2V0X2RhdGFfY29weTogdCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5XCJcbiAgZXh0ZXJuYWwgc2V0X2RhdGE6IHQgLT4gb2JqX3QgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3NldF9kYXRhXCJcbiAgZXh0ZXJuYWwgdW5zZXRfZGF0YTogdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfdW5zZXRfZGF0YVwiXG4gIGV4dGVybmFsIGNoZWNrX2RhdGE6IHQgLT4gYm9vbCA9IFwiY2FtbF9lcGhlX2NoZWNrX2RhdGFcIlxuICBleHRlcm5hbCBibGl0X2RhdGEgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX2JsaXRfZGF0YVwiXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBJbnRlcm5hbHMgb2YgZm9yY2luZyBsYXp5IHZhbHVlcy4gKilcblxudHlwZSAnYSB0ID0gJ2EgbGF6eV90XG5cbmV4Y2VwdGlvbiBVbmRlZmluZWRcblxubGV0IHJhaXNlX3VuZGVmaW5lZCA9IE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgVW5kZWZpbmVkKVxuXG5leHRlcm5hbCBtYWtlX2ZvcndhcmQgOiBPYmoudCAtPiBPYmoudCAtPiB1bml0ID0gXCJjYW1sX29ial9tYWtlX2ZvcndhcmRcIlxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfbGF6eV9ibG9jayAoYmxrIDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IGNsb3N1cmUgPSAoT2JqLm9iaiAoT2JqLmZpZWxkIChPYmoucmVwciBibGspIDApIDogdW5pdCAtPiAnYXJnKSBpblxuICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgcmFpc2VfdW5kZWZpbmVkO1xuICB0cnlcbiAgICBsZXQgcmVzdWx0ID0gY2xvc3VyZSAoKSBpblxuICAgIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgICByZXN1bHRcbiAgd2l0aCBlIC0+XG4gICAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIChPYmoucmVwciAoZnVuICgpIC0+IHJhaXNlIGUpKTtcbiAgICByYWlzZSBlXG5cblxuKCogQXNzdW1lIFtibGtdIGlzIGEgYmxvY2sgd2l0aCB0YWcgbGF6eSAqKVxubGV0IGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gIG1ha2VfZm9yd2FyZCAoT2JqLnJlcHIgYmxrKSAoT2JqLnJlcHIgcmVzdWx0KTtcbiAgcmVzdWx0XG5cblxuKCogW2ZvcmNlXSBpcyBub3QgdXNlZCwgc2luY2UgW0xhenkuZm9yY2VdIGlzIGRlY2xhcmVkIGFzIGEgcHJpbWl0aXZlXG4gICB3aG9zZSBjb2RlIGlubGluZXMgdGhlIHRhZyB0ZXN0cyBvZiBpdHMgYXJndW1lbnQsIGV4Y2VwdCB3aGVuIGFmbFxuICAgaW5zdHJ1bWVudGF0aW9uIGlzIHR1cm5lZCBvbi4gKilcblxubGV0IGZvcmNlIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICAoKiBVc2luZyBbU3lzLm9wYXF1ZV9pZGVudGl0eV0gcHJldmVudHMgdHdvIHBvdGVudGlhbCBwcm9ibGVtczpcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gaGF2ZSBGb3J3YXJkX3RhZywgdGhlbiBpdHMgdGFnIGNvdWxkIGhhdmVcbiAgICAgICBjaGFuZ2VkIGR1cmluZyBHQywgc28gdGhhdCBpbmZvcm1hdGlvbiBtdXN0IGJlIGZvcmdvdHRlbiAoc2VlIEdQUiM3MTNcbiAgICAgICBhbmQgaXNzdWUgIzczMDEpXG4gICAgIC0gSWYgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGltbXV0YWJsZSwgdGhlbiBpZiB0aGUgY29tcGlsZXJcbiAgICAgICBjYW5ub3QgcHJvdmUgdGhhdCB0aGUgbGFzdCBicmFuY2ggaXMgbm90IHRha2VuIGl0IHdpbGwgaXNzdWUgYVxuICAgICAgIHdhcm5pbmcgNTkgKG1vZGlmaWNhdGlvbiBvZiBhbiBpbW11dGFibGUgdmFsdWUpICopXG4gIGxldCBsenYgPSBTeXMub3BhcXVlX2lkZW50aXR5IGx6diBpblxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX2xhenlfYmxvY2sgbHp2XG5cblxubGV0IGZvcmNlX3ZhbCAobHp2IDogJ2FyZyBsYXp5X3QpID1cbiAgbGV0IHggPSBPYmoucmVwciBsenYgaW5cbiAgbGV0IHQgPSBPYmoudGFnIHggaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB0aGVuIChPYmoub2JqIChPYmouZmllbGQgeCAwKSA6ICdhcmcpIGVsc2VcbiAgaWYgdCA8PiBPYmoubGF6eV90YWcgdGhlbiAoT2JqLm9iaiB4IDogJ2FyZylcbiAgZWxzZSBmb3JjZV92YWxfbGF6eV9ibG9jayBsenZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtMYXp5XTogZGVmZXJyZWQgY29tcHV0YXRpb25zICopXG5cblxuKCpcbiAgIFdBUk5JTkc6IHNvbWUgcHVycGxlIG1hZ2ljIGlzIGdvaW5nIG9uIGhlcmUuICBEbyBub3QgdGFrZSB0aGlzIGZpbGVcbiAgIGFzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHByb2dyYW0gaW4gT0NhbWwuXG4qKVxuXG5cbigqIFdlIG1ha2UgdXNlIG9mIHR3byBzcGVjaWFsIHRhZ3MgcHJvdmlkZWQgYnkgdGhlIHJ1bnRpbWU6XG4gICBbbGF6eV90YWddIGFuZCBbZm9yd2FyZF90YWddLlxuXG4gICBBIHZhbHVlIG9mIHR5cGUgWydhIExhenkudF0gY2FuIGJlIG9uZSBvZiB0aHJlZSB0aGluZ3M6XG4gICAxLiBBIGJsb2NrIG9mIHNpemUgMSB3aXRoIHRhZyBbbGF6eV90YWddLiAgSXRzIGZpZWxkIGlzIGEgY2xvc3VyZSBvZlxuICAgICAgdHlwZSBbdW5pdCAtPiAnYV0gdGhhdCBjb21wdXRlcyB0aGUgdmFsdWUuXG4gICAyLiBBIGJsb2NrIG9mIHNpemUgMSB3aXRoIHRhZyBbZm9yd2FyZF90YWddLiAgSXRzIGZpZWxkIGlzIHRoZSB2YWx1ZVxuICAgICAgb2YgdHlwZSBbJ2FdIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgMy4gQW55dGhpbmcgZWxzZSBleGNlcHQgYSBmbG9hdC4gIFRoaXMgaGFzIHR5cGUgWydhXSBhbmQgaXMgdGhlIHZhbHVlXG4gICAgICB0aGF0IHdhcyBjb21wdXRlZC5cbiAgIEV4Y2VwdGlvbnMgYXJlIHN0b3JlZCBpbiBmb3JtYXQgKDEpLlxuICAgVGhlIEdDIHdpbGwgbWFnaWNhbGx5IGNoYW5nZSB0aGluZ3MgZnJvbSAoMikgdG8gKDMpIGFjY29yZGluZyB0byBpdHNcbiAgIGZhbmN5LlxuXG4gICBJZiBPQ2FtbCB3YXMgY29uZmlndXJlZCB3aXRoIHRoZSAtZmxhdC1mbG9hdC1hcnJheSBvcHRpb24gKHdoaWNoIGlzXG4gICBjdXJyZW50bHkgdGhlIGRlZmF1bHQpLCB0aGUgZm9sbG93aW5nIGlzIGFsc28gdHJ1ZTpcbiAgIFdlIGNhbm5vdCB1c2UgcmVwcmVzZW50YXRpb24gKDMpIGZvciBhIFtmbG9hdCBMYXp5LnRdIGJlY2F1c2VcbiAgIFtjYW1sX21ha2VfYXJyYXldIGFzc3VtZXMgdGhhdCBvbmx5IGEgW2Zsb2F0XSB2YWx1ZSBjYW4gaGF2ZSB0YWdcbiAgIFtEb3VibGVfdGFnXS5cblxuICAgV2UgaGF2ZSB0byB1c2UgdGhlIGJ1aWx0LWluIHR5cGUgY29uc3RydWN0b3IgW2xhenlfdF0gdG9cbiAgIGxldCB0aGUgY29tcGlsZXIgaW1wbGVtZW50IHRoZSBzcGVjaWFsIHR5cGluZyBhbmQgY29tcGlsYXRpb25cbiAgIHJ1bGVzIGZvciB0aGUgW2xhenldIGtleXdvcmQuXG4qKVxuXG50eXBlICdhIHQgPSAnYSBDYW1saW50ZXJuYWxMYXp5LnRcblxuZXhjZXB0aW9uIFVuZGVmaW5lZCA9IENhbWxpbnRlcm5hbExhenkuVW5kZWZpbmVkXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6ICdhIC0+ICdhIGxhenlfdCA9IFwiY2FtbF9sYXp5X21ha2VfZm9yd2FyZFwiXG5cbmV4dGVybmFsIGZvcmNlIDogJ2EgdCAtPiAnYSA9IFwiJWxhenlfZm9yY2VcIlxuXG5cbmxldCBmb3JjZV92YWwgPSBDYW1saW50ZXJuYWxMYXp5LmZvcmNlX3ZhbFxuXG5sZXQgZnJvbV9mdW4gKGYgOiB1bml0IC0+ICdhcmcpID1cbiAgbGV0IHggPSBPYmoubmV3X2Jsb2NrIE9iai5sYXp5X3RhZyAxIGluXG4gIE9iai5zZXRfZmllbGQgeCAwIChPYmoucmVwciBmKTtcbiAgKE9iai5vYmogeCA6ICdhcmcgdClcblxubGV0IGZyb21fdmFsICh2IDogJ2FyZykgPVxuICBsZXQgdCA9IE9iai50YWcgKE9iai5yZXByIHYpIGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgfHwgdCA9IE9iai5sYXp5X3RhZyB8fCB0ID0gT2JqLmRvdWJsZV90YWcgdGhlbiBiZWdpblxuICAgIG1ha2VfZm9yd2FyZCB2XG4gIGVuZCBlbHNlIGJlZ2luXG4gICAgKE9iai5tYWdpYyB2IDogJ2FyZyB0KVxuICBlbmRcblxuXG5sZXQgaXNfdmFsIChsIDogJ2FyZyB0KSA9IE9iai50YWcgKE9iai5yZXByIGwpIDw+IE9iai5sYXp5X3RhZ1xuXG5sZXQgbGF6eV9mcm9tX2Z1biA9IGZyb21fZnVuXG5cbmxldCBsYXp5X2Zyb21fdmFsID0gZnJvbV92YWxcblxubGV0IGxhenlfaXNfdmFsID0gaXNfdmFsXG5cblxubGV0IG1hcCBmIHggPVxuICBsYXp5IChmIChmb3JjZSB4KSlcblxubGV0IG1hcF92YWwgZiB4ID1cbiAgaWYgaXNfdmFsIHhcbiAgdGhlbiBsYXp5X2Zyb21fdmFsIChmIChmb3JjZSB4KSlcbiAgZWxzZSBsYXp5IChmIChmb3JjZSB4KSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAnYSB0ID0gJ2Egb3B0aW9uID0gTm9uZSB8IFNvbWUgb2YgJ2FcblxubGV0IG5vbmUgPSBOb25lXG5sZXQgc29tZSB2ID0gU29tZSB2XG5sZXQgdmFsdWUgbyB+ZGVmYXVsdCA9IG1hdGNoIG8gd2l0aCBTb21lIHYgLT4gdiB8IE5vbmUgLT4gZGVmYXVsdFxubGV0IGdldCA9IGZ1bmN0aW9uIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIm9wdGlvbiBpcyBOb25lXCJcbmxldCBiaW5kIG8gZiA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gZiB2XG5sZXQgam9pbiA9IGZ1bmN0aW9uIFNvbWUgbyAtPiBvIHwgTm9uZSAtPiBOb25lXG5sZXQgbWFwIGYgbyA9IG1hdGNoIG8gd2l0aCBOb25lIC0+IE5vbmUgfCBTb21lIHYgLT4gU29tZSAoZiB2KVxubGV0IGZvbGQgfm5vbmUgfnNvbWUgPSBmdW5jdGlvbiBTb21lIHYgLT4gc29tZSB2IHwgTm9uZSAtPiBub25lXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gU29tZSB2IC0+IGYgdiB8IE5vbmUgLT4gKClcbmxldCBpc19ub25lID0gZnVuY3Rpb24gTm9uZSAtPiB0cnVlIHwgU29tZSBfIC0+IGZhbHNlXG5sZXQgaXNfc29tZSA9IGZ1bmN0aW9uIE5vbmUgLT4gZmFsc2UgfCBTb21lIF8gLT4gdHJ1ZVxuXG5sZXQgZXF1YWwgZXEgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGVxIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gdHJ1ZVxufCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIGNtcCBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gY21wIHYwIHYxXG58IE5vbmUsIE5vbmUgLT4gMFxufCBOb25lLCBTb21lIF8gLT4gLTFcbnwgU29tZSBfLCBOb25lIC0+IDFcblxubGV0IHRvX3Jlc3VsdCB+bm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gRXJyb3Igbm9uZSB8IFNvbWUgdiAtPiBPayB2XG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE5vbmUgLT4gW10gfCBTb21lIHYgLT4gW3ZdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gTm9uZSAtPiBTZXEuZW1wdHkgfCBTb21lIHYgLT4gU2VxLnJldHVybiB2XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgKCdhLCAnZSkgdCA9ICgnYSwgJ2UpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2VcblxubGV0IG9rIHYgPSBPayB2XG5sZXQgZXJyb3IgZSA9IEVycm9yIGVcbmxldCB2YWx1ZSByIH5kZWZhdWx0ID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gZGVmYXVsdFxubGV0IGdldF9vayA9IGZ1bmN0aW9uIE9rIHYgLT4gdiB8IEVycm9yIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgRXJyb3IgX1wiXG5sZXQgZ2V0X2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBlIHwgT2sgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBPayBfXCJcbmxldCBiaW5kIHIgZiA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IGYgdiB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgam9pbiA9IGZ1bmN0aW9uIE9rIHIgLT4gciB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwIGYgPSBmdW5jdGlvbiBPayB2IC0+IE9rIChmIHYpIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXBfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gRXJyb3IgKGYgZSkgfCBPayBfIGFzIHYgLT4gdlxubGV0IGZvbGQgfm9rIH5lcnJvciA9IGZ1bmN0aW9uIE9rIHYgLT4gb2sgdiB8IEVycm9yIGUgLT4gZXJyb3IgZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyAtPiAoKVxubGV0IGl0ZXJfZXJyb3IgZiA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZiBlIHwgT2sgXyAtPiAoKVxubGV0IGlzX29rID0gZnVuY3Rpb24gT2sgXyAtPiB0cnVlIHwgRXJyb3IgXyAtPiBmYWxzZVxubGV0IGlzX2Vycm9yID0gZnVuY3Rpb24gRXJyb3IgXyAtPiB0cnVlIHwgT2sgXyAtPiBmYWxzZVxuXG5sZXQgZXF1YWwgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgXywgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBPayBfLCBFcnJvciBfIC0+IC0xXG58IEVycm9yIF8sIE9rIF8gLT4gMVxuXG5sZXQgdG9fb3B0aW9uID0gZnVuY3Rpb24gT2sgdiAtPiBTb21lIHYgfCBFcnJvciBfIC0+IE5vbmVcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gT2sgdiAtPiBbdl0gfCBFcnJvciBfIC0+IFtdXG5sZXQgdG9fc2VxID0gZnVuY3Rpb24gT2sgdiAtPiBTZXEucmV0dXJuIHYgfCBFcnJvciBfIC0+IFNlcS5lbXB0eVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIFV0aWxzIGFyb3VuZCBjaGFyfVxuXG4gICAgQHNpbmNlIDAuMTQgKilcblxuaW5jbHVkZSBDaGFyXG5cbmxldCBwcF9idWYgPSBCdWZmZXIuYWRkX2NoYXJcbmxldCBwcCA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgb2ZfaW50X2V4biA9IENoYXIuY2hyXG5sZXQgb2ZfaW50IGMgPSB0cnkgU29tZSAob2ZfaW50X2V4biBjKSB3aXRoIEludmFsaWRfYXJndW1lbnQgXyAtPiBOb25lXG5sZXQgdG9faW50ID0gQ2hhci5jb2RlXG5sZXQgdG9fc3RyaW5nIGMgPSBTdHJpbmcubWFrZSAxIGNcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoID0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPSApXG4gIGxldCAoIDw+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw+IClcbiAgbGV0ICggPCApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8IClcbiAgbGV0ICggPiApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+IClcbiAgbGV0ICggPD0gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD0gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjIyJyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6J1xuICB8ICdcXDIyNCcgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU0JyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBbiBhbGlhcyBmb3IgdGhlIHR5cGUgb2YgYXJyYXlzLiAqKVxudHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuKCogQXJyYXkgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBsZW5ndGggOiAnYSBhcnJheSAtPiBpbnQgPSBcIiVhcnJheV9sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV9zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2dldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhID0gXCIlYXJyYXlfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWFycmF5X3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgbWFrZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCBjcmVhdGU6IGludCAtPiAnYSAtPiAnYSBhcnJheSA9IFwiY2FtbF9tYWtlX3ZlY3RcIlxuZXh0ZXJuYWwgdW5zYWZlX3N1YiA6ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfc3ViXCJcbmV4dGVybmFsIGFwcGVuZF9wcmltIDogJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfYXBwZW5kXCJcbmV4dGVybmFsIGNvbmNhdCA6ICdhIGFycmF5IGxpc3QgLT4gJ2EgYXJyYXkgPSBcImNhbWxfYXJyYXlfY29uY2F0XCJcbmV4dGVybmFsIHVuc2FmZV9ibGl0IDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+ICdhIGFycmF5IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9hcnJheV9ibGl0XCJcbmV4dGVybmFsIHVuc2FmZV9maWxsIDpcbiAgJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2ZpbGxcIlxuZXh0ZXJuYWwgY3JlYXRlX2Zsb2F0OiBpbnQgLT4gZmxvYXQgYXJyYXkgPSBcImNhbWxfbWFrZV9mbG9hdF92ZWN0XCJcbmxldCBtYWtlX2Zsb2F0ID0gY3JlYXRlX2Zsb2F0XG5cbm1vZHVsZSBGbG9hdGFycmF5ID0gc3RydWN0XG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiBmbG9hdGFycmF5ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgbGVuZ3RoIDogZmxvYXRhcnJheSAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXRcbiAgICAgID0gXCIlZmxvYXRhcnJheV91bnNhZmVfc2V0XCJcbmVuZFxuXG5sZXQgaW5pdCBsIGYgPVxuICBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZVxuICBpZiBsIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuaW5pdFwiXG4gICgqIFNlZSAjNjU3NS4gV2UgY291bGQgYWxzbyBjaGVjayBmb3IgbWF4aW11bSBhcnJheSBzaXplLCBidXQgdGhpcyBkZXBlbmRzXG4gICAgIG9uIHdoZXRoZXIgd2UgY3JlYXRlIGEgZmxvYXQgYXJyYXkgb3IgYSByZWd1bGFyIG9uZS4uLiAqKVxuICBlbHNlXG4gICBsZXQgcmVzID0gY3JlYXRlIGwgKGYgMCkgaW5cbiAgIGZvciBpID0gMSB0byBwcmVkIGwgZG9cbiAgICAgdW5zYWZlX3NldCByZXMgaSAoZiBpKVxuICAgZG9uZTtcbiAgIHJlc1xuXG5sZXQgbWFrZV9tYXRyaXggc3ggc3kgaW5pdCA9XG4gIGxldCByZXMgPSBjcmVhdGUgc3ggW3x8XSBpblxuICBmb3IgeCA9IDAgdG8gcHJlZCBzeCBkb1xuICAgIHVuc2FmZV9zZXQgcmVzIHggKGNyZWF0ZSBzeSBpbml0KVxuICBkb25lO1xuICByZXNcblxubGV0IGNyZWF0ZV9tYXRyaXggPSBtYWtlX21hdHJpeFxuXG5sZXQgY29weSBhID1cbiAgbGV0IGwgPSBsZW5ndGggYSBpbiBpZiBsID0gMCB0aGVuIFt8fF0gZWxzZSB1bnNhZmVfc3ViIGEgMCBsXG5cbmxldCBhcHBlbmQgYTEgYTIgPVxuICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgaWYgbDEgPSAwIHRoZW4gY29weSBhMlxuICBlbHNlIGlmIGxlbmd0aCBhMiA9IDAgdGhlbiB1bnNhZmVfc3ViIGExIDAgbDFcbiAgZWxzZSBhcHBlbmRfcHJpbSBhMSBhMlxuXG5sZXQgc3ViIGEgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuc3ViXCJcbiAgZWxzZSB1bnNhZmVfc3ViIGEgb2ZzIGxlblxuXG5sZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxubGV0IGJsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBhMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggYTIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IGExIG9mczEgYTIgb2ZzMiBsZW5cblxubGV0IGl0ZXIgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBpdGVyMiBmIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lml0ZXIyOiBhcnJheXMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aFwiXG4gIGVsc2VcbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxubGV0IG1hcCBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZih1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZih1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgbWFwMiBmIGEgYiA9XG4gIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gIGxldCBsYiA9IGxlbmd0aCBiIGluXG4gIGlmIGxhIDw+IGxiIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZSBiZWdpblxuICAgIGlmIGxhID0gMCB0aGVuIFt8fF0gZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBjcmVhdGUgbGEgKGYgKHVuc2FmZV9nZXQgYSAwKSAodW5zYWZlX2dldCBiIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuICBlbmRcblxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgbWFwaSBmIGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCAoZiAwICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgdG9fbGlzdCBhID1cbiAgbGV0IHJlYyB0b2xpc3QgaSByZXMgPVxuICAgIGlmIGkgPCAwIHRoZW4gcmVzIGVsc2UgdG9saXN0IChpIC0gMSkgKHVuc2FmZV9nZXQgYSBpIDo6IHJlcykgaW5cbiAgdG9saXN0IChsZW5ndGggYSAtIDEpIFtdXG5cbigqIENhbm5vdCB1c2UgTGlzdC5sZW5ndGggaGVyZSBiZWNhdXNlIHRoZSBMaXN0IG1vZHVsZSBkZXBlbmRzIG9uIEFycmF5LiAqKVxubGV0IHJlYyBsaXN0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBhY2N1XG4gIHwgXzo6dCAtPiBsaXN0X2xlbmd0aCAoc3VjYyBhY2N1KSB0XG5cbmxldCBvZl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBhID0gY3JlYXRlIChsaXN0X2xlbmd0aCAwIGwpIGhkIGluXG4gICAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgICAgW10gLT4gYVxuICAgICAgICB8IGhkOjp0bCAtPiB1bnNhZmVfc2V0IGEgaSBoZDsgZmlsbCAoaSsxKSB0bCBpblxuICAgICAgZmlsbCAxIHRsXG5cbmxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICBkb25lO1xuICAhclxuXG5sZXQgZm9sZF9sZWZ0X21hcCBmIGFjYyBpbnB1dF9hcnJheSA9XG4gIGxldCBsZW4gPSBsZW5ndGggaW5wdXRfYXJyYXkgaW5cbiAgaWYgbGVuID0gMCB0aGVuIChhY2MsIFt8fF0pIGVsc2UgYmVnaW5cbiAgICBsZXQgYWNjLCBlbHQgPSBmIGFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSAwKSBpblxuICAgIGxldCBvdXRwdXRfYXJyYXkgPSBjcmVhdGUgbGVuIGVsdCBpblxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgZm9yIGkgPSAxIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBhY2MnLCBlbHQgPSBmICFhY2MgKHVuc2FmZV9nZXQgaW5wdXRfYXJyYXkgaSkgaW5cbiAgICAgIGFjYyA6PSBhY2MnO1xuICAgICAgdW5zYWZlX3NldCBvdXRwdXRfYXJyYXkgaSBlbHQ7XG4gICAgZG9uZTtcbiAgICAhYWNjLCBvdXRwdXRfYXJyYXlcbiAgZW5kXG5cbmxldCBmb2xkX3JpZ2h0IGYgYSB4ID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgIHIgOj0gZiAodW5zYWZlX2dldCBhIGkpICFyXG4gIGRvbmU7XG4gICFyXG5cbmxldCBleGlzdHMgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiB0cnVlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGZvcl9hbGwyIHAgbDEgbDIgPVxuICBsZXQgbjEgPSBsZW5ndGggbDFcbiAgYW5kIG4yID0gbGVuZ3RoIGwyIGluXG4gIGlmIG4xIDw+IG4yIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5mb3JfYWxsMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgbDEgaSkgKHVuc2FmZV9nZXQgbDIgaSkgdGhlbiBsb29wIChzdWNjIGkpXG4gICAgZWxzZSBmYWxzZSBpblxuICBsb29wIDBcblxubGV0IGV4aXN0czIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmV4aXN0czJcIlxuICBlbHNlIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbjEgdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIHRydWVcbiAgICBlbHNlIGxvb3AgKHN1Y2MgaSkgaW5cbiAgbG9vcCAwXG5cbmxldCBtZW0geCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgY29tcGFyZSAodW5zYWZlX2dldCBhIGkpIHggPSAwIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbXEgeCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgIGVsc2UgaWYgeCA9PSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IGZpbmRfb3B0IHAgYSA9XG4gIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuIHRoZW4gTm9uZVxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeFxuICAgICAgZWxzZSBsb29wIChzdWNjIGkpXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9tYXAgZiBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZiAodW5zYWZlX2dldCBhIGkpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBsb29wIChzdWNjIGkpXG4gICAgICB8IFNvbWUgXyBhcyByIC0+IHJcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBzcGxpdCB4ID1cbiAgaWYgeCA9IFt8fF0gdGhlbiBbfHxdLCBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgYTAsIGIwID0gdW5zYWZlX2dldCB4IDAgaW5cbiAgICBsZXQgbiA9IGxlbmd0aCB4IGluXG4gICAgbGV0IGEgPSBjcmVhdGUgbiBhMCBpblxuICAgIGxldCBiID0gY3JlYXRlIG4gYjAgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBhaSwgYmkgPSB1bnNhZmVfZ2V0IHggaSBpblxuICAgICAgdW5zYWZlX3NldCBhIGkgYWk7XG4gICAgICB1bnNhZmVfc2V0IGIgaSBiaVxuICAgIGRvbmU7XG4gICAgYSwgYlxuICBlbmRcblxubGV0IGNvbWJpbmUgYSBiID1cbiAgbGV0IG5hID0gbGVuZ3RoIGEgaW5cbiAgbGV0IG5iID0gbGVuZ3RoIGIgaW5cbiAgaWYgbmEgPD4gbmIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmNvbWJpbmVcIjtcbiAgaWYgbmEgPSAwIHRoZW4gW3x8XVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHggPSBjcmVhdGUgbmEgKHVuc2FmZV9nZXQgYSAwLCB1bnNhZmVfZ2V0IGIgMCkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbmEgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHggaSAodW5zYWZlX2dldCBhIGksIHVuc2FmZV9nZXQgYiBpKVxuICAgIGRvbmU7XG4gICAgeFxuICBlbmRcblxuZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbmxldCBzb3J0IGNtcCBhID1cbiAgbGV0IG1heHNvbiBsIGkgPVxuICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgbGV0IHggPSByZWYgaTMxIGluXG4gICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgIGlmIGNtcCAoZ2V0IGEgIXgpIChnZXQgYSAoaTMxKzIpKSA8IDAgdGhlbiB4IDo9IGkzMSsyO1xuICAgICAgIXhcbiAgICBlbmQgZWxzZVxuICAgICAgaWYgaTMxKzEgPCBsICYmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwXG4gICAgICB0aGVuIGkzMSsxXG4gICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gIGluXG4gIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgIGlmIGNtcCAoZ2V0IGEgaikgZSA+IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgc2V0IGEgaSBlO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgYnViYmxlZG93biBsIGpcbiAgaW5cbiAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgbGV0IGZhdGhlciA9IChpIC0gMSkgLyAzIGluXG4gICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGZhdGhlcik7XG4gICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgIGxldCBlID0gKGdldCBhIGkpIGluXG4gICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICBkb25lO1xuICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG5cbmxldCBjdXRvZmYgPSA1XG5sZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgIGxldCBzcmMxciA9IHNyYzFvZnMgKyBzcmMxbGVuIGFuZCBzcmMyciA9IHNyYzJvZnMgKyBzcmMybGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczE7XG4gICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIChnZXQgYSBpMSkgaTIgczIgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgaWYgaTIgPCBzcmMyciB0aGVuXG4gICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGJsaXQgYSBpMSBkc3QgKGQgKyAxKSAoc3JjMXIgLSBpMSlcbiAgICAgIGVuZFxuICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICBpblxuICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSAoc3Jjb2ZzICsgaSkpIGluXG4gICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgKGdldCBkc3QgIWopO1xuICAgICAgICBkZWNyIGo7XG4gICAgICBkb25lO1xuICAgICAgc2V0IGRzdCAoIWogKyAxKSBlO1xuICAgIGRvbmU7XG4gIGluXG4gIGxldCByZWMgc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGxlbiAtIGwxIGluXG4gICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgbWVyZ2UgKHNyY29mcyArIGwyKSBsMSBkc3QgKGRzdG9mcyArIGwxKSBsMiBkc3QgZHN0b2ZzO1xuICAgIGVuZDtcbiAgaW5cbiAgbGV0IGwgPSBsZW5ndGggYSBpblxuICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICBsZXQgbDIgPSBsIC0gbDEgaW5cbiAgICBsZXQgdCA9IG1ha2UgbDIgKGdldCBhIDApIGluXG4gICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgIG1lcmdlIGwyIGwxIHQgMCBsMiBhIDA7XG4gIGVuZFxuXG5cbmxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoeCwgYXV4IChpKzEpKVxuICAgIGVsc2UgU2VxLk5pbFxuICBpblxuICBhdXggMFxuXG5sZXQgdG9fc2VxaSBhID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgdGhlblxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCBvZl9yZXZfbGlzdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW3x8XVxuICB8IGhkOjp0bCBhcyBsIC0+XG4gICAgICBsZXQgbGVuID0gbGlzdF9sZW5ndGggMCBsIGluXG4gICAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgICBpblxuICAgICAgZmlsbCAobGVuLTIpIHRsXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICBvZl9yZXZfbGlzdCBsXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBpc19lbXB0eTogJ2EgdCAtPiBib29sXG4gICAgdmFsIG1lbTogIGtleSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBrZXkgLT4gJ2EgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAgICAgKGtleSAtPiAnYSBvcHRpb24gLT4gJ2Igb3B0aW9uIC0+ICdjIG9wdGlvbikgLT4gJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjb21wYXJlOiAoJ2EgLT4gJ2EgLT4gaW50KSAtPiAnYSB0IC0+ICdhIHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGtleSAtPiAnYSAtPiAnYiBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBwYXJ0aXRpb246IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0ICogJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGZpbmQ6IGtleSAtPiAnYSB0IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiBrZXkgLT4gJ2EgdCAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IGtleSAqICdhXG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1hcDogKCdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgbWFwaTogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9mcm9tIDoga2V5IC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuXG4gICAgdHlwZSBrZXkgPSBPcmQudFxuXG4gICAgdHlwZSAnYSB0ID1cbiAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSBvZiB7bDonYSB0OyB2OmtleTsgZDonYTsgcjonYSB0OyBoOmludH1cblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgIGxldCBjcmVhdGUgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBoZWlnaHQgbCBhbmQgaHIgPSBoZWlnaHQgciBpblxuICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBzaW5nbGV0b24geCBkID0gTm9kZXtsPUVtcHR5OyB2PXg7IGQ7IHI9RW1wdHk7IGg9MX1cblxuICAgIGxldCBiYWwgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgbGQgKGNyZWF0ZSBsciB4IGQgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IGQ9bHJkOyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbGQgbHJsKSBscnYgbHJkIChjcmVhdGUgbHJyIHggZCByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsKSBydiByZCByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgZD1ybGQ7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmxsKSBybHYgcmxkIChjcmVhdGUgcmxyIHJ2IHJkIHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGFkZCB4IGRhdGEgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBkYXRhIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggZGF0YSByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBkXG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSBkXG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0gLT4gbWluX2JpbmRpbmcgbFxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge2x9LT4gbWluX2JpbmRpbmdfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nIHJcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZ19vcHQgclxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2JpbmRpbmcgbCkgdiBkIHJcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgYmFsIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgKE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0pIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpbiBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW4gaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgdXBkYXRlIHggZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZiBOb25lIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gRW1wdHlcbiAgICAgICAgICB8IFNvbWUgZGF0YSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICAgICAgZW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIG1hdGNoIGYgKFNvbWUgZCkgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IG1lcmdlIGwgclxuICAgICAgICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbmQgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSB1cGRhdGUgeCBmIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gdXBkYXRlIHggZiByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGl0ZXIgZiBsOyBmIHYgZDsgaXRlciBmIHJcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIG1hcGkgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXBpIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwaSBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIGZvbGQgZiBtIGFjY3UgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBmb2xkIGYgciAoZiB2IGQgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIGsgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQga2V5cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBrZXkuXG5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9iaW5kaW5nIGsgeCBsKSB2IGQgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgbCB2IGQgKGFkZF9tYXhfYmluZGluZyBrIHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IGQgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fYmluZGluZyB2IGQgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfYmluZGluZyB2IGQgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyOyBoPWxofSxcbiAgICAgICAgIE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgbGQgKGpvaW4gbHIgdiBkIHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgZCBybCkgcnYgcmQgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgZCByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgam9pbiB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCBjb25jYXRfb3Jfam9pbiB0MSB2IGQgdDIgPVxuICAgICAgbWF0Y2ggZCB3aXRoXG4gICAgICB8IFNvbWUgZCAtPiBqb2luIHQxIHYgZCB0MlxuICAgICAgfCBOb25lIC0+IGNvbmNhdCB0MSB0MlxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIE5vbmUsIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgU29tZSBkLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IGQgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGQgbHIsIHByZXMsIHJyKVxuXG4gICAgbGV0IHJlYyBtZXJnZSBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LCBfKSB3aGVuIGgxID49IGhlaWdodCBzMiAtPlxuICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MSAoZiB2MSAoU29tZSBkMSkgZDIpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCAoXywgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMn0pIC0+XG4gICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYyIChmIHYyIGQxIChTb21lIGQyKSkgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IF8gLT5cbiAgICAgICAgICBhc3NlcnQgZmFsc2VcblxuICAgIGxldCByZWMgdW5pb24gZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICB8IChFbXB0eSwgcykgfCAocywgRW1wdHkpIC0+IHNcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LFxuICAgICAgICAgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMiB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYxIGQxIHJcbiAgICAgICAgICAgIHwgU29tZSBkMiAtPiBjb25jYXRfb3Jfam9pbiBsIHYxIChmIHYxIGQxIGQyKSByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYyIGQyIHJcbiAgICAgICAgICAgIHwgU29tZSBkMSAtPiBjb25jYXRfb3Jfam9pbiBsIHYyIChmIHYyIGQxIGQyKSByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdmQgdGhlbiBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIG0gZWxzZSBqb2luIGwnIHYgZCByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbZl0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBmdmQgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZnZkIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBkJyAtPiBqb2luIGwnIHYgZCcgcidcbiAgICAgICAgICAgIHwgTm9uZSAtPiBjb25jYXQgbCcgcidcbiAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdmRcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgZCBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IGQgcmYpXG5cbiAgICB0eXBlICdhIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBrZXkgKiAnYSAqICdhIHQgKiAnYSBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gbSBlID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIGQsIHIsIGUpKVxuXG4gICAgbGV0IGNvbXBhcmUgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICAgIHwgKE1vcmUodjEsIGQxLCByMSwgZTEpLCBNb3JlKHYyLCBkMiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgZDEgZDIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGNvbXBhcmVfYXV4IChjb25zX2VudW0gbTEgRW5kKSAoY29uc19lbnVtIG0yIEVuZClcblxuICAgIGxldCBlcXVhbCBjbXAgbTEgbTIgPVxuICAgICAgbGV0IHJlYyBlcXVhbF9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IHRydWVcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gZmFsc2VcbiAgICAgICAgfCAoXywgRW5kKSAtPiBmYWxzZVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBPcmQuY29tcGFyZSB2MSB2MiA9IDAgJiYgY21wIGQxIGQyICYmXG4gICAgICAgICAgICBlcXVhbF9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGVxdWFsX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgYmluZGluZ3NfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGJpbmRpbmdzX2F1eCAoKHYsIGQpIDo6IGJpbmRpbmdzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBiaW5kaW5ncyBzID1cbiAgICAgIGJpbmRpbmdzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2JpbmRpbmdcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2JpbmRpbmdfb3B0XG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCogQ29udl9lcnJvcjogTW9kdWxlIGZvciBIYW5kbGluZyBFcnJvcnMgZHVyaW5nIEF1dG9tYXRlZCBZb2pzb25cbiAgIENvbnZlcnNpb25zICopXG5cbm9wZW4hIFN0ZExhYmVsc1xub3BlbiBZb2pzb25fY29udlxuXG5sZXQgc3ByaW50ZiA9IFByaW50Zi5zcHJpbnRmXG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHR1cGxlcyAqKVxuXG5sZXQgdHVwbGVfb2Zfc2l6ZV9uX2V4cGVjdGVkIGxvYyBuIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAoc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdHVwbGUgb2Ygc2l6ZSAlZCBleHBlY3RlZFwiIGxvYyBuKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHN1bSB0eXBlcyAqKVxuXG5sZXQgc3RhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBzdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIHRhZyB5b2pzb24gPVxuICBsZXQgbXNnID1cbiAgICBzcHJpbnRmIFwiJXNfb2ZfeW9qc29uOiBzdW0gdGFnICVTIGhhcyBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50c1wiIGxvYyB0YWdcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbmxldCBzdGFnX3Rha2VzX2FyZ3MgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvciAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGlzIGNvbnN0cnVjdG9yIHJlcXVpcmVzIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBuZXN0ZWRfbGlzdF9pbnZhbGlkX3N1bSBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IGV4cGVjdGVkIGEgdmFyaWFudCB0eXBlLCBzYXcgYSBuZXN0ZWQgbGlzdFwiKSB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV9saXN0X2ludmFsaWRfc3VtIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogZXhwZWN0ZWQgYSB2YXJpYW50IHR5cGUsIHNhdyBhbiBlbXB0eSBsaXN0XCIpIHlvanNvblxuOztcblxubGV0IHVuZXhwZWN0ZWRfc3RhZyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHVuZXhwZWN0ZWQgdmFyaWFudCBjb25zdHJ1Y3RvclwiKSB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHJlY29yZHMgKilcblxubGV0IHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIGxldCBmbGRfbmFtZXNfc3RyID0gU3RyaW5nLmNvbmNhdCAoTGlzdC5yZXYgcmV2X2ZsZF9uYW1lcykgfnNlcDpcIiBcIiBpblxuICBsZXQgbXNnID0gc3ByaW50ZiBcIiVzX29mX3lvanNvbjogJXM6ICVzXCIgbG9jIHdoYXQgZmxkX25hbWVzX3N0ciBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9kdXBsaWNhdGVfZmllbGRzIGxvYyByZXZfZmxkX25hbWVzIHlvanNvbiA9XG4gIHJlY29yZF9zdXBlcmZsdW91c19maWVsZHMgfndoYXQ6XCJkdXBsaWNhdGUgZmllbGRzXCIgfmxvYyByZXZfZmxkX25hbWVzIHlvanNvblxuOztcblxubGV0IHJlY29yZF9leHRyYV9maWVsZHMgbG9jIHJldl9mbGRfbmFtZXMgeW9qc29uID1cbiAgcmVjb3JkX3N1cGVyZmx1b3VzX2ZpZWxkcyB+d2hhdDpcImV4dHJhIGZpZWxkc1wiIH5sb2MgcmV2X2ZsZF9uYW1lcyB5b2pzb25cbjs7XG5cbmxldCByZWMgcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgPSBmdW5jdGlvblxuICB8IFtdIC0+IFN0cmluZy5jb25jYXQgKExpc3QucmV2IGZpZWxkcykgfnNlcDpcIiBcIlxuICB8ICh0cnVlLCBmaWVsZCkgOjogcmVzdCAtPiByZWNvcmRfZ2V0X3VuZGVmaW5lZF9sb29wIChmaWVsZCA6OiBmaWVsZHMpIHJlc3RcbiAgfCBfIDo6IHJlc3QgLT4gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBmaWVsZHMgcmVzdFxuOztcblxubGV0IHJlY29yZF91bmRlZmluZWRfZWxlbWVudHMgbG9jIHlvanNvbiBsc3QgPVxuICBsZXQgdW5kZWZpbmVkID0gcmVjb3JkX2dldF91bmRlZmluZWRfbG9vcCBbXSBsc3QgaW5cbiAgbGV0IG1zZyA9XG4gICAgc3ByaW50ZiBcIiVzX29mX3lvanNvbjogdGhlIGZvbGxvd2luZyByZWNvcmQgZWxlbWVudHMgd2VyZSB1bmRlZmluZWQ6ICVzXCIgbG9jIHVuZGVmaW5lZFxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHJlY29yZF9saXN0X2luc3RlYWRfYXRvbSBsb2MgeW9qc29uID1cbiAgbGV0IG1zZyA9IGxvYyBeIFwiX29mX3lvanNvbjogbGlzdCBpbnN0ZWFkIG9mIGF0b20gZm9yIHJlY29yZCBleHBlY3RlZFwiIGluXG4gIG9mX3lvanNvbl9lcnJvciBtc2cgeW9qc29uXG47O1xuXG5sZXQgcmVjb3JkX3BvbHlfZmllbGRfdmFsdWUgbG9jIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIGxvY1xuICAgIF4gXCJfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCB2YWx1ZXMgb2YgdHlwZXMgcmVzdWx0aW5nIGZyb20gcG9seW1vcnBoaWMgcmVjb3JkIFxcXG4gICAgICAgZmllbGRzXCJcbiAgaW5cbiAgb2ZfeW9qc29uX2Vycm9yIG1zZyB5b2pzb25cbjs7XG5cbigqIEVycm9ycyBjb25jZXJuaW5nIHBvbHltb3JwaGljIHZhcmlhbnRzICopXG5cbmV4Y2VwdGlvbiBOb192YXJpYW50X21hdGNoXG5cbmxldCBub192YXJpYW50X21hdGNoICgpID0gcmFpc2UgTm9fdmFyaWFudF9tYXRjaFxuXG5sZXQgbm9fbWF0Y2hpbmdfdmFyaWFudF9mb3VuZCBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IG5vIG1hdGNoaW5nIHZhcmlhbnQgZm91bmRcIikgeW9qc29uXG47O1xuXG5sZXQgcHRhZ19ub19hcmdzIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogcG9seW1vcnBoaWMgdmFyaWFudCBkb2VzIG5vdCB0YWtlIGFyZ3VtZW50c1wiKSB5b2pzb25cbjs7XG5cbmxldCBwdGFnX2luY29ycmVjdF9uX2FyZ3MgbG9jIGNuc3RyIHlvanNvbiA9XG4gIGxldCBtc2cgPVxuICAgIHNwcmludGZcbiAgICAgIFwiJXNfb2ZfeW9qc29uOiBwb2x5bW9ycGhpYyB2YXJpYW50IHRhZyAlUyBoYXMgaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHNcIlxuICAgICAgbG9jXG4gICAgICBjbnN0clxuICBpblxuICBvZl95b2pzb25fZXJyb3IgbXNnIHlvanNvblxuOztcblxubGV0IHB0YWdfdGFrZXNfYXJncyBsb2MgeW9qc29uID1cbiAgb2ZfeW9qc29uX2Vycm9yIChsb2MgXiBcIl9vZl95b2pzb246IHBvbHltb3JwaGljIHZhcmlhbnQgdGFnIHRha2VzIGFuIGFyZ3VtZW50XCIpIHlvanNvblxuOztcblxubGV0IG5lc3RlZF9saXN0X2ludmFsaWRfcG9seV92YXIgbG9jIHlvanNvbiA9XG4gIG9mX3lvanNvbl9lcnJvclxuICAgIChsb2MgXiBcIl9vZl95b2pzb246IGEgbmVzdGVkIGxpc3QgaXMgYW4gaW52YWxpZCBwb2x5bW9ycGhpYyB2YXJpYW50XCIpXG4gICAgeW9qc29uXG47O1xuXG5sZXQgZW1wdHlfbGlzdF9pbnZhbGlkX3BvbHlfdmFyIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3JcbiAgICAobG9jIF4gXCJfb2ZfeW9qc29uOiB0aGUgZW1wdHkgbGlzdCBpcyBhbiBpbnZhbGlkIHBvbHltb3JwaGljIHZhcmlhbnRcIilcbiAgICB5b2pzb25cbjs7XG5cbmxldCBlbXB0eV90eXBlIGxvYyB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgKGxvYyBeIFwiX29mX3lvanNvbjogdHJ5aW5nIHRvIGNvbnZlcnQgYW4gZW1wdHkgdHlwZVwiKSB5b2pzb25cbjs7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGlkIDogJ2EgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5sZXQgY29uc3QgYyBfID0gY1xubGV0IGZsaXAgZiB4IHkgPSBmIHkgeFxubGV0IG5lZ2F0ZSBwIHYgPSBub3QgKHAgdilcblxuZXhjZXB0aW9uIEZpbmFsbHlfcmFpc2VkIG9mIGV4blxuXG5sZXQgKCkgPSBQcmludGV4Yy5yZWdpc3Rlcl9wcmludGVyIEBAIGZ1bmN0aW9uXG58IEZpbmFsbHlfcmFpc2VkIGV4biAtPiBTb21lIChcIkZ1bi5GaW5hbGx5X3JhaXNlZDogXCIgXiBQcmludGV4Yy50b19zdHJpbmcgZXhuKVxufCBfIC0+IE5vbmVcblxubGV0IHByb3RlY3QgfihmaW5hbGx5IDogdW5pdCAtPiB1bml0KSB3b3JrID1cbiAgbGV0IGZpbmFsbHlfbm9fZXhuICgpID1cbiAgICB0cnkgZmluYWxseSAoKSB3aXRoIGUgLT5cbiAgICAgIGxldCBidCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSAoRmluYWxseV9yYWlzZWQgZSkgYnRcbiAgaW5cbiAgbWF0Y2ggd29yayAoKSB3aXRoXG4gIHwgcmVzdWx0IC0+IGZpbmFsbHlfbm9fZXhuICgpIDsgcmVzdWx0XG4gIHwgZXhjZXB0aW9uIHdvcmtfZXhuIC0+XG4gICAgICBsZXQgd29ya19idCA9IFByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBmaW5hbGx5X25vX2V4biAoKSA7XG4gICAgICBQcmludGV4Yy5yYWlzZV93aXRoX2JhY2t0cmFjZSB3b3JrX2V4biB3b3JrX2J0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1lc3NhZ2UgZGlnZXN0IChNRDUpICopXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSA9IFN0cmluZy5jb21wYXJlXG5sZXQgZXF1YWwgPSBTdHJpbmcuZXF1YWxcblxuZXh0ZXJuYWwgdW5zYWZlX3N0cmluZzogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfc3RyaW5nXCJcbmV4dGVybmFsIGNoYW5uZWw6IGluX2NoYW5uZWwgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X2NoYW5cIlxuXG5sZXQgc3RyaW5nIHN0ciA9XG4gIHVuc2FmZV9zdHJpbmcgc3RyIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG5sZXQgYnl0ZXMgYiA9IHN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKVxuXG5sZXQgc3Vic3RyaW5nIHN0ciBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IFN0cmluZy5sZW5ndGggc3RyIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3Quc3Vic3RyaW5nXCJcbiAgZWxzZSB1bnNhZmVfc3RyaW5nIHN0ciBvZnMgbGVuXG5cbmxldCBzdWJieXRlcyBiIG9mcyBsZW4gPSBzdWJzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYikgb2ZzIGxlblxuXG5sZXQgZmlsZSBmaWxlbmFtZSA9XG4gIGxldCBpYyA9IG9wZW5faW5fYmluIGZpbGVuYW1lIGluXG4gIG1hdGNoIGNoYW5uZWwgaWMgKC0xKSB3aXRoXG4gICAgfCBkIC0+IGNsb3NlX2luIGljOyBkXG4gICAgfCBleGNlcHRpb24gZSAtPiBjbG9zZV9pbiBpYzsgcmFpc2UgZVxuXG5sZXQgb3V0cHV0IGNoYW4gZGlnZXN0ID1cbiAgb3V0cHV0X3N0cmluZyBjaGFuIGRpZ2VzdFxuXG5sZXQgaW5wdXQgY2hhbiA9IHJlYWxseV9pbnB1dF9zdHJpbmcgY2hhbiAxNlxuXG5sZXQgY2hhcl9oZXggbiA9XG4gIENoYXIudW5zYWZlX2NociAobiArIGlmIG4gPCAxMCB0aGVuIENoYXIuY29kZSAnMCcgZWxzZSAoQ2hhci5jb2RlICdhJyAtIDEwKSlcblxubGV0IHRvX2hleCBkID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBkIDw+IDE2IHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QudG9faGV4XCI7XG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMzIgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgbGV0IHggPSBDaGFyLmNvZGUgZC5baV0gaW5cbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKSAoY2hhcl9oZXggKHggbHNyIDQpKTtcbiAgICBCeXRlcy51bnNhZmVfc2V0IHJlc3VsdCAoaSoyKzEpIChjaGFyX2hleCAoeCBsYW5kIDB4MGYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcblxubGV0IGZyb21faGV4IHMgPVxuICBpZiBTdHJpbmcubGVuZ3RoIHMgPD4gMzIgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5mcm9tX2hleFwiO1xuICBsZXQgZGlnaXQgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnMCcuLic5JyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdBJy4uJ0YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdBJyArIDEwXG4gICAgfCAnYScuLidmJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnYScgKyAxMFxuICAgIHwgXyAtPiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkRpZ2VzdC5mcm9tX2hleFwiKVxuICBpblxuICBsZXQgYnl0ZSBpID0gZGlnaXQgcy5baV0gbHNsIDQgKyBkaWdpdCBzLltpKzFdIGluXG4gIGxldCByZXN1bHQgPSBCeXRlcy5jcmVhdGUgMTYgaW5cbiAgZm9yIGkgPSAwIHRvIDE1IGRvXG4gICAgQnl0ZXMuc2V0IHJlc3VsdCBpIChDaGFyLmNociAoYnl0ZSAoMiAqIGkpKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEhhc2ggdGFibGVzICopXG5cbigqIFdlIGRvIGR5bmFtaWMgaGFzaGluZywgYW5kIHJlc2l6ZSB0aGUgdGFibGUgYW5kIHJlaGFzaCB0aGUgZWxlbWVudHNcbiAgIHdoZW4gYnVja2V0cyBiZWNvbWUgdG9vIGxvbmcuICopXG5cbnR5cGUgKCdhLCAnYikgdCA9XG4gIHsgbXV0YWJsZSBzaXplOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogbnVtYmVyIG9mIGVudHJpZXMgKilcbiAgICBtdXRhYmxlIGRhdGE6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgIG11dGFibGUgaW5pdGlhbF9zaXplOiBpbnQ7ICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICB9XG5cbmFuZCAoJ2EsICdiKSBidWNrZXRsaXN0ID1cbiAgICBFbXB0eVxuICB8IENvbnMgb2YgeyBtdXRhYmxlIGtleTogJ2E7XG4gICAgICAgICAgICAgIG11dGFibGUgZGF0YTogJ2I7XG4gICAgICAgICAgICAgIG11dGFibGUgbmV4dDogKCdhLCAnYikgYnVja2V0bGlzdCB9XG5cbigqIFRoZSBzaWduIG9mIGluaXRpYWxfc2l6ZSBlbmNvZGVzIHRoZSBmYWN0IHRoYXQgYSB0cmF2ZXJzYWwgaXNcbiAgIG9uZ29pbmcgb3Igbm90LlxuXG4gICBUaGlzIGRpc2FibGVzIHRoZSBlZmZpY2llbnQgaW4gcGxhY2UgaW1wbGVtZW50YXRpb24gb2YgcmVzaXppbmcuXG4qKVxuXG5sZXQgb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICB8fCBoLmluaXRpYWxfc2l6ZSA8IDBcblxubGV0IGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaCA9XG4gIGguaW5pdGlhbF9zaXplIDwtIC0gaC5pbml0aWFsX3NpemVcblxuKCogVG8gcGljayByYW5kb20gc2VlZHMgaWYgcmVxdWVzdGVkICopXG5cbmxldCByYW5kb21pemVkX2RlZmF1bHQgPVxuICBsZXQgcGFyYW1zID1cbiAgICB0cnkgU3lzLmdldGVudiBcIk9DQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPlxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT4gXCJcIiBpblxuICBTdHJpbmcuY29udGFpbnMgcGFyYW1zICdSJ1xuXG5sZXQgcmFuZG9taXplZCA9IHJlZiByYW5kb21pemVkX2RlZmF1bHRcblxubGV0IHJhbmRvbWl6ZSAoKSA9IHJhbmRvbWl6ZWQgOj0gdHJ1ZVxubGV0IGlzX3JhbmRvbWl6ZWQgKCkgPSAhcmFuZG9taXplZFxuXG5sZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4oKiBGdW5jdGlvbnMgd2hpY2ggYXBwZWFyIGJlZm9yZSB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgbXVzdCBlaXRoZXIgYmVcbiAgIGluZGVwZW5kZW50IG9mIHRoZSBoYXNoIGZ1bmN0aW9uIG9yIHRha2UgaXQgYXMgYSBwYXJhbWV0ZXIgKHNlZSAjMjIwMiBhbmRcbiAgIGNvZGUgYmVsb3cgdGhlIGZ1bmN0b3IgZGVmaW5pdGlvbnMuICopXG5cbigqIENyZWF0aW5nIGEgZnJlc2gsIGVtcHR5IHRhYmxlICopXG5cbmxldCByZWMgcG93ZXJfMl9hYm92ZSB4IG4gPVxuICBpZiB4ID49IG4gdGhlbiB4XG4gIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgZWxzZSBwb3dlcl8yX2Fib3ZlICh4ICogMikgblxuXG5sZXQgY3JlYXRlID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGluaXRpYWxfc2l6ZSA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiBpbml0aWFsX3NpemUgaW5cbiAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG5sZXQgY2xlYXIgaCA9XG4gIGlmIGguc2l6ZSA+IDAgdGhlbiBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIEFycmF5LmZpbGwgaC5kYXRhIDAgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIEVtcHR5XG4gIGVuZFxuXG5sZXQgcmVzZXQgaCA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA8IDQgKCogY29tcGF0aWJpbGl0eSB3aXRoIG9sZCBoYXNoIHRhYmxlcyAqKVxuICAgIHx8IGxlbiA9IGFicyBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgY2xlYXIgaFxuICBlbHNlIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgKGFicyBoLmluaXRpYWxfc2l6ZSkgRW1wdHlcbiAgZW5kXG5cbmxldCBjb3B5X2J1Y2tldGxpc3QgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IEVtcHR5XG4gIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgbGV0IHJlYyBsb29wIHByZWMgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgICB8IENvbnMgcHJlYyAtPiAgcHJlYy5uZXh0IDwtIHJcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGxvb3AgciBuZXh0XG4gICAgICBpblxuICAgICAgbGV0IHIgPSBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGluXG4gICAgICBsb29wIHIgbmV4dDtcbiAgICAgIHJcblxubGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5tYXAgY29weV9idWNrZXRsaXN0IGguZGF0YSB9XG5cbmxldCBsZW5ndGggaCA9IGguc2l6ZVxuXG5sZXQgaW5zZXJ0X2FsbF9idWNrZXRzIGluZGV4ZnVuIGlucGxhY2Ugb2RhdGEgbmRhdGEgPVxuICBsZXQgbnNpemUgPSBBcnJheS5sZW5ndGggbmRhdGEgaW5cbiAgbGV0IG5kYXRhX3RhaWwgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gIGxldCByZWMgaW5zZXJ0X2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPiAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBhcyBjZWxsIC0+XG4gICAgICAgIGxldCBjZWxsID1cbiAgICAgICAgICBpZiBpbnBsYWNlIHRoZW4gY2VsbFxuICAgICAgICAgIGVsc2UgQ29ucyB7a2V5OyBkYXRhOyBuZXh0ID0gRW1wdHl9XG4gICAgICAgIGluXG4gICAgICAgIGxldCBuaWR4ID0gaW5kZXhmdW4ga2V5IGluXG4gICAgICAgIGJlZ2luIG1hdGNoIG5kYXRhX3RhaWwuKG5pZHgpIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBuZGF0YS4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIGNlbGw7XG4gICAgICAgIGVuZDtcbiAgICAgICAgbmRhdGFfdGFpbC4obmlkeCkgPC0gY2VsbDtcbiAgICAgICAgaW5zZXJ0X2J1Y2tldCBuZXh0XG4gIGluXG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggb2RhdGEgLSAxIGRvXG4gICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgZG9uZTtcbiAgaWYgaW5wbGFjZSB0aGVuXG4gICAgZm9yIGkgPSAwIHRvIG5zaXplIC0gMSBkb1xuICAgICAgbWF0Y2ggbmRhdGFfdGFpbC4oaSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgfCBDb25zIHRhaWwgLT4gdGFpbC5uZXh0IDwtIEVtcHR5XG4gICAgZG9uZVxuXG5sZXQgcmVzaXplIGluZGV4ZnVuIGggPVxuICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgbGV0IG9zaXplID0gQXJyYXkubGVuZ3RoIG9kYXRhIGluXG4gIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICBpZiBuc2l6ZSA8IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgbGV0IGlucGxhY2UgPSBub3QgKG9uZ29pbmdfdHJhdmVyc2FsIGgpIGluXG4gICAgaC5kYXRhIDwtIG5kYXRhOyAgICAgICAgICAoKiBzbyB0aGF0IGluZGV4ZnVuIHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICBpbnNlcnRfYWxsX2J1Y2tldHMgKGluZGV4ZnVuIGgpIGlucGxhY2Ugb2RhdGEgbmRhdGFcbiAgZW5kXG5cbmxldCBpdGVyIGYgaCA9XG4gIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+XG4gICAgICAgICgpXG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZiBrZXkgZGF0YTsgZG9fYnVja2V0IG5leHQgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIEVtcHR5XG4gICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gRW1wdHlcbiAgICAgIGVuZFxuICB8IChDb25zICh7a2V5OyBkYXRhOyBuZXh0fSBhcyBjKSkgYXMgc2xvdCAtPlxuICAgICAgYmVnaW4gbWF0Y2ggZiBrZXkgZGF0YSB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgbmV4dFxuICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gc2xvdFxuICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBzbG90XG4gICAgICAgICAgZW5kO1xuICAgICAgICAgIGMuZGF0YSA8LSBkYXRhO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgc2xvdCBuZXh0XG4gICAgICBlbmRcblxubGV0IGZpbHRlcl9tYXBfaW5wbGFjZSBmIGggPVxuICBsZXQgZCA9IGguZGF0YSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBFbXB0eSBoLmRhdGEuKGkpXG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGhcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCBmb2xkIGYgaCBpbml0ID1cbiAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICBtYXRjaCBiIHdpdGhcbiAgICAgIEVtcHR5IC0+XG4gICAgICAgIGFjY3VcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBkb19idWNrZXQgbmV4dCAoZiBrZXkgZGF0YSBhY2N1KSBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgYWNjdSA6PSBkb19idWNrZXQgZC4oaSkgIWFjY3VcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICAhYWNjdVxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxudHlwZSBzdGF0aXN0aWNzID0ge1xuICBudW1fYmluZGluZ3M6IGludDtcbiAgbnVtX2J1Y2tldHM6IGludDtcbiAgbWF4X2J1Y2tldF9sZW5ndGg6IGludDtcbiAgYnVja2V0X2hpc3RvZ3JhbTogaW50IGFycmF5XG59XG5cbmxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhY2N1XG4gIHwgQ29uc3tuZXh0fSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgbmV4dFxuXG5sZXQgc3RhdHMgaCA9XG4gIGxldCBtYmwgPVxuICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICBBcnJheS5pdGVyXG4gICAgKGZ1biBiIC0+XG4gICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGggMCBiIGluXG4gICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICBoLmRhdGE7XG4gIHsgbnVtX2JpbmRpbmdzID0gaC5zaXplO1xuICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHRibCA9XG4gICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gIGxldCB0YmxfZGF0YSA9IHRibC5kYXRhIGluXG4gICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgZWxzZSBhdXgoaSsxKSB0YmxfZGF0YS4oaSkgKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICBpblxuICBhdXggMCBFbXB0eVxuXG5sZXQgdG9fc2VxX2tleXMgbSA9IFNlcS5tYXAgZnN0ICh0b19zZXEgbSlcblxubGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuKCogRnVuY3RvcmlhbCBpbnRlcmZhY2UgKilcblxubW9kdWxlIHR5cGUgSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGU6IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHk6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQ6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQ6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGw6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGg6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlIDogP3JhbmRvbTpib29sIC0+IGludCAtPiAnYSB0XG4gICAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gICAgdmFsIGNvcHkgOiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gICAgdmFsIGZpbmQgOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsIDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXIgOiAoa2V5IC0+ICdhIC0+IHVuaXQpIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmaWx0ZXJfbWFwX2lucGxhY2U6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIE1ha2VTZWVkZWQoSDogU2VlZGVkSGFzaGVkVHlwZSk6IChTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgdHlwZSBrZXkgPSBILnRcbiAgICB0eXBlICdhIGhhc2h0YmwgPSAoa2V5LCAnYSkgdFxuICAgIHR5cGUgJ2EgdCA9ICdhIGhhc2h0YmxcbiAgICBsZXQgY3JlYXRlID0gY3JlYXRlXG4gICAgbGV0IGNsZWFyID0gY2xlYXJcbiAgICBsZXQgcmVzZXQgPSByZXNldFxuICAgIGxldCBjb3B5ID0gY29weVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGtleSA9XG4gICAgICAoSC5oYXNoIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGFkZCBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIFtdXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE9ZDsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBkIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgdHJ1ZVxuICAgICAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICAgICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgICAgIGVuZFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICAgICAgSC5lcXVhbCBrIGtleSB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgYWRkX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbiAgICBsZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuXG4gICAgbGV0IGl0ZXIgPSBpdGVyXG4gICAgbGV0IGZpbHRlcl9tYXBfaW5wbGFjZSA9IGZpbHRlcl9tYXBfaW5wbGFjZVxuICAgIGxldCBmb2xkID0gZm9sZFxuICAgIGxldCBsZW5ndGggPSBsZW5ndGhcbiAgICBsZXQgc3RhdHMgPSBzdGF0c1xuICAgIGxldCB0b19zZXEgPSB0b19zZXFcbiAgICBsZXQgdG9fc2VxX2tleXMgPSB0b19zZXFfa2V5c1xuICAgIGxldCB0b19zZXFfdmFsdWVzID0gdG9fc2VxX3ZhbHVlc1xuICBlbmRcblxubW9kdWxlIE1ha2UoSDogSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4oKiBQb2x5bW9ycGhpYyBoYXNoIGZ1bmN0aW9uLWJhc2VkIHRhYmxlcyAqKVxuKCogQ29kZSBpbmNsdWRlZCBiZWxvdyB0aGUgZnVuY3RvcmlhbCBpbnRlcmZhY2UgdG8gZ3VhcmQgYWdhaW5zdCBhY2NpZGVudGFsXG4gICB1c2UgLSBzZWUgIzIyMDIgKilcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOlxuICBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiBpbnQgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5cbmxldCBoYXNoIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgMCB4XG5sZXQgaGFzaF9wYXJhbSBuMSBuMiB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gbjEgbjIgMCB4XG5sZXQgc2VlZGVkX2hhc2ggc2VlZCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIHNlZWQgeFxuXG5sZXQga2V5X2luZGV4IGgga2V5ID1cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDRcbiAgdGhlbiAoc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIGguc2VlZCBrZXkpIGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuICBlbHNlIGludmFsaWRfYXJnIFwiSGFzaHRibDogdW5zdXBwb3J0ZWQgaGFzaCB0YWJsZSBmb3JtYXRcIlxuXG5sZXQgYWRkIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgYnVja2V0ID0gQ29uc3trZXk7IGRhdGE7IG5leHQ9aC5kYXRhLihpKX0gaW5cbiAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG5cbmxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICAoKVxuICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGJlZ2luXG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIG5leHRcbiAgICAgIGVuZFxuICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbmxldCByZW1vdmUgaCBrZXkgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG5sZXQgcmVjIGZpbmRfcmVjIGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIGRhdGEgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dFxuXG5sZXQgZmluZCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxubGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgTm9uZVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrID0gMCB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG5sZXQgZmluZF9vcHQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IE5vbmVcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIFNvbWUgZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIFNvbWUgZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBTb21lIGQzIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0M1xuXG5sZXQgZmluZF9hbGwgaCBrZXkgPVxuICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgW11cbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gZGF0YSA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICBlbHNlIGZpbmRfaW5fYnVja2V0IG5leHQgaW5cbiAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gKHNsb3Qua2V5IDwtIGtleTsgc2xvdC5kYXRhIDwtIGRhdGE7IGZhbHNlKVxuICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbmxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgaC5kYXRhLihpKSA8LSBDb25ze2tleTsgZGF0YTsgbmV4dD1sfTtcbiAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gIGVuZFxuXG5sZXQgbWVtIGgga2V5ID1cbiAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgY29tcGFyZSBrIGtleSA9IDAgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbmxldCBhZGRfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG5sZXQgcmVwbGFjZV9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG5sZXQgb2Zfc2VxIGkgPVxuICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gIHJlcGxhY2Vfc2VxIHRibCBpO1xuICB0YmxcblxubGV0IHJlYnVpbGQgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaCA9XG4gIGxldCBzID0gcG93ZXJfMl9hYm92ZSAxNiAoQXJyYXkubGVuZ3RoIGguZGF0YSkgaW5cbiAgbGV0IHNlZWQgPVxuICAgIGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpXG4gICAgZWxzZSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguc2VlZFxuICAgIGVsc2UgMCBpblxuICBsZXQgaCcgPSB7XG4gICAgc2l6ZSA9IGguc2l6ZTtcbiAgICBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5O1xuICAgIHNlZWQgPSBzZWVkO1xuICAgIGluaXRpYWxfc2l6ZSA9IGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5pbml0aWFsX3NpemUgZWxzZSBzXG4gIH0gaW5cbiAgaW5zZXJ0X2FsbF9idWNrZXRzIChrZXlfaW5kZXggaCcpIGZhbHNlIGguZGF0YSBoJy5kYXRhO1xuICBoJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBIZWxwZXJzIGZvciBGb3JtYXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbmluY2x1ZGUgRm9ybWF0XG5cbnR5cGUgdCA9IEZvcm1hdC5mb3JtYXR0ZXJcbnR5cGUgLSdhIHByaW50ZXIgPSB0IC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIENvbWJpbmF0b3JzfSAqKVxuXG5sZXQgc2lsZW50IF9mbXQgXyA9ICgpXG5sZXQgcmV0dXJuIGZtdF9zdHIgb3V0ICgpID0gRm9ybWF0LmZwcmludGYgb3V0IFwiJSglKVwiIGZtdF9zdHJcbmxldCB1bml0IGZtdCAoKSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IFwiKClcIlxubGV0IGludCBmbXQgaSA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgZm10IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgc3RyaW5nID0gRm9ybWF0LnBwX3ByaW50X3N0cmluZ1xubGV0IGJvb2wgPSBGb3JtYXQucHBfcHJpbnRfYm9vbFxubGV0IGZsb2F0MyBmbXQgZiA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIiUuM2ZcIiBmXG5sZXQgZmxvYXQgZm10IGYgPSBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIGZtdCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgY2hhciA9IEZvcm1hdC5wcF9wcmludF9jaGFyXG5sZXQgaW50MzIgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlbGRcIiBuXG5sZXQgaW50NjQgZm10IG4gPSBGb3JtYXQuZnByaW50ZiBmbXQgXCIlTGRcIiBuXG5sZXQgbmF0aXZlaW50IGZtdCBuID0gRm9ybWF0LmZwcmludGYgZm10IFwiJW5kXCIgblxubGV0IHN0cmluZ19xdW90ZWQgZm10IHMgPSBGb3JtYXQuZnByaW50ZiBmbXQgXCJcXFwiJXNcXFwiXCIgc1xubGV0IGZsdXNoID0gRm9ybWF0LnBwX3ByaW50X2ZsdXNoXG5sZXQgc3BhY2UgPSBGb3JtYXQucHBfcHJpbnRfc3BhY2VcbmxldCBjdXQgPSBGb3JtYXQucHBfcHJpbnRfY3V0XG5sZXQgYnJlYWsgZm10IChtLCBuKSA9IEZvcm1hdC5wcF9wcmludF9icmVhayBmbXQgbSBuXG5sZXQgbmV3bGluZSA9IEZvcm1hdC5wcF9mb3JjZV9uZXdsaW5lXG5sZXQgc3Vic3RyaW5nIG91dCAocywgaSwgbGVuKSA6IHVuaXQgPSBzdHJpbmcgb3V0IChTdHJpbmcuc3ViIHMgaSBsZW4pXG5sZXQgdGV4dCA9IEZvcm1hdC5wcF9wcmludF90ZXh0XG5cbmxldCBzdHJpbmdfbGluZXMgb3V0IChzIDogc3RyaW5nKSA6IHVuaXQgPVxuICBmcHJpbnRmIG91dCBcIkBbPHY+XCI7XG4gIGxldCBpID0gcmVmIDAgaW5cbiAgbGV0IG4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgd2hpbGUgIWkgPCBuIGRvXG4gICAgbGV0IGogPSB0cnkgU3RyaW5nLmluZGV4X2Zyb20gcyAhaSAnXFxuJyB3aXRoIE5vdF9mb3VuZCAtPiBuIGluXG4gICAgaWYgIWkgPiAwIHRoZW4gZnByaW50ZiBvdXQgXCJALFwiO1xuICAgIHN1YnN0cmluZyBvdXQgKHMsICFpLCBqIC0gIWkpO1xuICAgIGkgOj0gaiArIDFcbiAgZG9uZTtcbiAgZnByaW50ZiBvdXQgXCJAXVwiXG5cbmxldCBsaXN0ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBsID1cbiAgbGV0IHJlYyBwcF9saXN0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgeCA6OiAoXyA6OiBfIGFzIGwpIC0+XG4gICAgICBwcCBmbXQgeDtcbiAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcF9saXN0IGxcbiAgICB8IFsgeCBdIC0+IHBwIGZtdCB4XG4gICAgfCBbXSAtPiAoKVxuICBpblxuICBwcF9saXN0IGxcblxubGV0IGFycmF5ID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgYS4oaSlcbiAgZG9uZVxuXG5sZXQgYXJyYXlpID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwIGZtdCBhID1cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgIGlmIGkgPiAwIHRoZW4gc2VwIGZtdCAoKTtcbiAgICBwcCBmbXQgKGksIGEuKGkpKVxuICBkb25lXG5cbmxldCBzZXEgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIENDU2VxLml0ZXJcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcbiAgICBzZXFcblxubGV0IGl0ZXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHAgZm10IHNlcSA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIHNlcSAoZnVuIHggLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIHNlcCBmbXQgKCk7XG4gICAgICBwcCBmbXQgeClcblxubGV0IG9wdCBwcCBmbXQgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBmbXQgXCJub25lXCJcbiAgfCBTb21lIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwic29tZSAlYVwiIHBwIHhcblxubGV0IHBhaXIgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBmbXQgKGEsIGIpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhXCIgcHBhIGEgc2VwICgpIHBwYiBiXG5cbmxldCB0cmlwbGUgPyhzZXAgPSByZXR1cm4gXCIsQCBcIikgcHBhIHBwYiBwcGMgZm10IChhLCBiLCBjKSA9XG4gIEZvcm1hdC5mcHJpbnRmIGZtdCBcIiVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjXG5cbmxldCBxdWFkID8oc2VwID0gcmV0dXJuIFwiLEAgXCIpIHBwYSBwcGIgcHBjIHBwZCBmbXQgKGEsIGIsIGMsIGQpID1cbiAgRm9ybWF0LmZwcmludGYgZm10IFwiJWElYSVhJWElYSVhJWFcIiBwcGEgYSBzZXAgKCkgcHBiIGIgc2VwICgpIHBwYyBjIHNlcCAoKSBwcGRcbiAgICBkXG5cbmxldCBhcHBlbmQgcHBhIHBwYiBmbXQgKCkgPVxuICBwcGEgZm10ICgpO1xuICBwcGIgZm10ICgpXG5cbmxldCBhcHBlbmRfbCBwcGwgZm10ICgpID0gTGlzdC5pdGVyIChmdW4gcHAgLT4gcHAgZm10ICgpKSBwcGxcblxubGV0IHdpdGhpbiBhIGIgcCBvdXQgeCA9XG4gIHN0cmluZyBvdXQgYTtcbiAgcCBvdXQgeDtcbiAgc3RyaW5nIG91dCBiXG5cbmxldCBtYXAgZiBwcCBmbXQgeCA9XG4gIHBwIGZtdCAoZiB4KTtcbiAgKClcblxubGV0IHZib3ggPyhpID0gMCkgcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl92Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhvdmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2hvdmJveCBvdXQgaTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBodmJveCA/KGkgPSAwKSBwcCBvdXQgeCA9XG4gIEZvcm1hdC5wcF9vcGVuX2h2Ym94IG91dCBpO1xuICBwcCBvdXQgeDtcbiAgRm9ybWF0LnBwX2Nsb3NlX2JveCBvdXQgKClcblxubGV0IGhib3ggcHAgb3V0IHggPVxuICBGb3JtYXQucHBfb3Blbl9oYm94IG91dCAoKTtcbiAgcHAgb3V0IHg7XG4gIEZvcm1hdC5wcF9jbG9zZV9ib3ggb3V0ICgpXG5cbmxldCBvZl90b19zdHJpbmcgZiBvdXQgeCA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChmIHgpXG5sZXQgZXhuID0gb2ZfdG9fc3RyaW5nIFByaW50ZXhjLnRvX3N0cmluZ1xubGV0IGNvbnN0IHBwIHggb3V0ICgpID0gcHAgb3V0IHhcblxubGV0IHNvbWUgcHAgb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB4IC0+IHBwIG91dCB4XG5cbmxldCBjb25zdF9zdHJpbmcgcyBvdXQgXyA9IHN0cmluZyBvdXQgc1xubGV0IG9wYXF1ZSBvdXQgXyA9IHN0cmluZyBvdXQgXCJvcGFxdWVcIlxubGV0IGxhenlfZm9yY2UgcHAgb3V0IChsYXp5IHgpID0gcHAgb3V0IHhcblxubGV0IGxhenlfb3IgPyhkZWZhdWx0ID0gcmV0dXJuIFwiPGxhenk+XCIpIHBwIG91dCB4ID1cbiAgaWYgTGF6eS5pc192YWwgeCB0aGVuXG4gICAgcHAgb3V0IChMYXp5LmZvcmNlIHgpXG4gIGVsc2VcbiAgICBkZWZhdWx0IG91dCAoKVxuXG4oKiogezIgSU99ICopXG5cbmxldCBvdXRwdXQgZm10IHBwIHggPSBwcCBmbXQgeFxuXG5sZXQgdG9fc3RyaW5nIHBwIHggPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIHBwIGZtdCB4O1xuICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBmcHJpbnRmID0gRm9ybWF0LmZwcmludGZcbmxldCBzdGRvdXQgPSBGb3JtYXQuc3RkX2Zvcm1hdHRlclxubGV0IHN0ZGVyciA9IEZvcm1hdC5lcnJfZm9ybWF0dGVyXG5sZXQgb2ZfY2hhbiA9IEZvcm1hdC5mb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWxcblxubGV0IHdpdGhfb3V0X2NoYW4gb2MgZiA9XG4gIGxldCBmbXQgPSBvZl9jaGFuIG9jIGluXG4gIHRyeVxuICAgIGxldCB4ID0gZiBmbXQgaW5cbiAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggZm10ICgpO1xuICAgIHhcbiAgd2l0aCBlIC0+XG4gICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCB0ZWUgYSBiID1cbiAgbGV0IGZhID0gRm9ybWF0LnBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBhICgpIGluXG4gIGxldCBmYiA9IEZvcm1hdC5wcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgYiAoKSBpblxuICBGb3JtYXQubWFrZV9mb3JtYXR0ZXJcbiAgICAoZnVuIHN0ciBpIGxlbiAtPlxuICAgICAgZmEuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuO1xuICAgICAgZmIuRm9ybWF0Lm91dF9zdHJpbmcgc3RyIGkgbGVuKVxuICAgIChmdW4gKCkgLT5cbiAgICAgIGZhLkZvcm1hdC5vdXRfZmx1c2ggKCk7XG4gICAgICBmYi5Gb3JtYXQub3V0X2ZsdXNoICgpKVxuXG5sZXQgdG9fZmlsZSBmaWxlbmFtZSBmb3JtYXQgPVxuICBsZXQgb2MgPSBvcGVuX291dCBmaWxlbmFtZSBpblxuICBsZXQgZm10ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyBpblxuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIGZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIGNsb3NlX291dF9ub2VyciBvYylcbiAgICBmbXQgZm9ybWF0XG5cbm1vZHVsZSBBTlNJX2NvZGVzID0gc3RydWN0XG4gIHR5cGUgY29sb3IgPVxuICAgIFsgYEJsYWNrIHwgYFJlZCB8IGBZZWxsb3cgfCBgR3JlZW4gfCBgQmx1ZSB8IGBNYWdlbnRhIHwgYEN5YW4gfCBgV2hpdGUgXVxuXG4gIGxldCBpbnRfb2ZfY29sb3JfID0gZnVuY3Rpb25cbiAgICB8IGBCbGFjayAtPiAwXG4gICAgfCBgUmVkIC0+IDFcbiAgICB8IGBHcmVlbiAtPiAyXG4gICAgfCBgWWVsbG93IC0+IDNcbiAgICB8IGBCbHVlIC0+IDRcbiAgICB8IGBNYWdlbnRhIC0+IDVcbiAgICB8IGBDeWFuIC0+IDZcbiAgICB8IGBXaGl0ZSAtPiA3XG5cbiAgdHlwZSBzdHlsZSA9XG4gICAgWyBgRkcgb2YgY29sb3IgKCogZm9yZWdyb3VuZCAqKVxuICAgIHwgYEJHIG9mIGNvbG9yICgqIGJhY2tncm91bmQgKilcbiAgICB8IGBCb2xkXG4gICAgfCBgUmVzZXQgXVxuXG4gIGxldCBjb2RlX29mX3N0eWxlIDogc3R5bGUgLT4gaW50ID0gZnVuY3Rpb25cbiAgICB8IGBGRyBjIC0+IDMwICsgaW50X29mX2NvbG9yXyBjXG4gICAgfCBgQkcgYyAtPiA0MCArIGludF9vZl9jb2xvcl8gY1xuICAgIHwgYEJvbGQgLT4gMVxuICAgIHwgYFJlc2V0IC0+IDBcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlIGEgPSBQcmludGYuc3ByaW50ZiBcIlxceDFiWyVkbVwiIChjb2RlX29mX3N0eWxlIGEpXG4gIGxldCBjbGVhcl9saW5lID0gXCJcXHgxYlsyS1xcclwiXG4gIGxldCByZXNldCA9IHN0cmluZ19vZl9zdHlsZSBgUmVzZXRcblxuICBsZXQgc3RyaW5nX29mX3N0eWxlX2xpc3QgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gcmVzZXRcbiAgICB8IFsgYSBdIC0+IHN0cmluZ19vZl9zdHlsZSBhXG4gICAgfCBbIGE7IGIgXSAtPlxuICAgICAgUHJpbnRmLnNwcmludGYgXCJcXHgxYlslZDslZG1cIiAoY29kZV9vZl9zdHlsZSBhKSAoY29kZV9vZl9zdHlsZSBiKVxuICAgIHwgWyBhOyBiOyBjIF0gLT5cbiAgICAgIFByaW50Zi5zcHJpbnRmIFwiXFx4MWJbJWQ7JWQ7JWRtXCIgKGNvZGVfb2Zfc3R5bGUgYSkgKGNvZGVfb2Zfc3R5bGUgYilcbiAgICAgICAgKGNvZGVfb2Zfc3R5bGUgYylcbiAgICB8IGwgLT5cbiAgICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gICAgICBsZXQgcHBfbnVtIGMgPSBCdWZmZXIuYWRkX3N0cmluZyBidWYgKHN0cmluZ19vZl9pbnQgKGNvZGVfb2Zfc3R5bGUgYykpIGluXG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgXCJcXHgxYltcIjtcbiAgICAgIExpc3QuaXRlcmlcbiAgICAgICAgKGZ1biBpIGMgLT5cbiAgICAgICAgICBpZiBpID4gMCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgJzsnO1xuICAgICAgICAgIHBwX251bSBjKVxuICAgICAgICBsO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIFwibVwiO1xuICAgICAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG4gIGV4Y2VwdGlvbiBOb19zdWNoX3N0eWxlXG5cbiAgKCogcGFyc2UgYSBzdHJpbmcgdGFnLiAqKVxuICBsZXQgc3R5bGVfb2ZfdGFnXyBzID1cbiAgICBtYXRjaCBTdHJpbmcudHJpbSBzIHdpdGhcbiAgICB8IFwicmVzZXRcIiAtPiBbIGBSZXNldCBdXG4gICAgfCBcImJsYWNrXCIgLT4gWyBgRkcgYEJsYWNrIF1cbiAgICB8IFwicmVkXCIgLT4gWyBgRkcgYFJlZCBdXG4gICAgfCBcImdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuIF1cbiAgICB8IFwieWVsbG93XCIgLT4gWyBgRkcgYFllbGxvdyBdXG4gICAgfCBcImJsdWVcIiAtPiBbIGBGRyBgQmx1ZSBdXG4gICAgfCBcIm1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YSBdXG4gICAgfCBcImN5YW5cIiAtPiBbIGBGRyBgQ3lhbiBdXG4gICAgfCBcIndoaXRlXCIgLT4gWyBgRkcgYFdoaXRlIF1cbiAgICB8IFwiYm9sZFwiIC0+IFsgYEJvbGQgXVxuICAgIHwgXCJCbGFja1wiIC0+IFsgYEZHIGBCbGFjazsgYEJvbGQgXVxuICAgIHwgXCJSZWRcIiAtPiBbIGBGRyBgUmVkOyBgQm9sZCBdXG4gICAgfCBcIkdyZWVuXCIgLT4gWyBgRkcgYEdyZWVuOyBgQm9sZCBdXG4gICAgfCBcIlllbGxvd1wiIC0+IFsgYEZHIGBZZWxsb3c7IGBCb2xkIF1cbiAgICB8IFwiQmx1ZVwiIC0+IFsgYEZHIGBCbHVlOyBgQm9sZCBdXG4gICAgfCBcIk1hZ2VudGFcIiAtPiBbIGBGRyBgTWFnZW50YTsgYEJvbGQgXVxuICAgIHwgXCJDeWFuXCIgLT4gWyBgRkcgYEN5YW47IGBCb2xkIF1cbiAgICB8IFwiV2hpdGVcIiAtPiBbIGBGRyBgV2hpdGU7IGBCb2xkIF1cbiAgICB8IF8gLT4gcmFpc2UgTm9fc3VjaF9zdHlsZVxuZW5kXG5cbmxldCBjb2xvcl9lbmFibGVkID0gcmVmIGZhbHNlXG5cbmxldCBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGUgPVxuICBTdGFjay5wdXNoIHN0eWxlIHN0O1xuICBpZiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgQU5TSV9jb2Rlcy5zdHJpbmdfb2Zfc3R5bGVfbGlzdCBzdHlsZVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgbWFya19jbG9zZV9zdHlsZSBzdCA6IHN0cmluZyA9XG4gIGxldCBzdHlsZSA9XG4gICAgdHJ5XG4gICAgICBpZ25vcmUgKFN0YWNrLnBvcCBzdCk7XG4gICAgICAoKiBwb3AgY3VycmVudCBzdHlsZSAoaWYgd2VsbC1zY29wZWQg4oCmKSAqKVxuICAgICAgU3RhY2sudG9wIHN0XG4gICAgICAoKiBsb29rIGF0IHByZXZpb3VzIHN0eWxlICopXG4gICAgd2l0aCBTdGFjay5FbXB0eSAtPiBbIGBSZXNldCBdXG4gIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW5cbiAgICBBTlNJX2NvZGVzLnN0cmluZ19vZl9zdHlsZV9saXN0IHN0eWxlXG4gIGVsc2VcbiAgICBcIlwiXG5cbnR5cGUgc3RhZyArPSBTdHlsZSBvZiBBTlNJX2NvZGVzLnN0eWxlIGxpc3RcblxubGV0IHBwX29wZW5fdGFnIG91dCBzID0gcHBfb3Blbl9zdGFnIG91dCAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBvdXQgKCkgPSBwcF9jbG9zZV9zdGFnIG91dCAoKVxuXG4oKiBlaXRoZXIgcHJpbnRzIHRoZSB0YWcgb2YgW3NdIG9yIGRlbGVnYXRlIHRvIFtvcl9lbHNlXSAqKVxubGV0IG1hcmtfb3Blbl9zdGFnIHN0IH5vcl9lbHNlICh0YWcgOiBzdGFnKSA6IHN0cmluZyA9XG4gIG1hdGNoIHRhZyB3aXRoXG4gIHwgU3R5bGUgc3R5bGUgLT4gbWFya19vcGVuX3N0eWxlIHN0IHN0eWxlXG4gIHwgU3RyaW5nX3RhZyBzIC0+XG4gICAgbGV0IG9wZW4gQU5TSV9jb2RlcyBpblxuICAgICh0cnlcbiAgICAgICBsZXQgc3R5bGUgPSBzdHlsZV9vZl90YWdfIHMgaW5cbiAgICAgICBtYXJrX29wZW5fc3R5bGUgc3Qgc3R5bGVcbiAgICAgd2l0aCBOb19zdWNoX3N0eWxlIC0+IG9yX2Vsc2UgdGFnKVxuICB8IF8gLT4gb3JfZWxzZSB0YWdcblxubGV0IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZSAodGFnIDogc3RhZykgOiBzdHJpbmcgPVxuICBtYXRjaCB0YWcgd2l0aFxuICB8IFN0eWxlIF8gLT4gbWFya19jbG9zZV9zdHlsZSBzdFxuICB8IFN0cmluZ190YWcgcyAtPlxuICAgIGxldCBvcGVuIEFOU0lfY29kZXMgaW5cbiAgICAoKiBjaGVjayBpZiBpdCdzIGluZGVlZCBhYm91dCBjb2xvciAqKVxuICAgIChtYXRjaCBzdHlsZV9vZl90YWdfIHMgd2l0aFxuICAgIHwgXyAtPiBtYXJrX2Nsb3NlX3N0eWxlIHN0XG4gICAgfCBleGNlcHRpb24gTm9fc3VjaF9zdHlsZSAtPiBvcl9lbHNlIHRhZylcbiAgfCBfIC0+IG9yX2Vsc2UgdGFnXG5cbmxldCB3aXRoX3N0eWxpbmcgc3RsIG91dCBmID1cbiAgcHBfb3Blbl9zdGFnIG91dCAoU3R5bGUgc3RsKTtcbiAgdHJ5XG4gICAgbGV0IHggPSBmICgpIGluXG4gICAgcHBfY2xvc2Vfc3RhZyBvdXQgKCk7XG4gICAgeFxuICB3aXRoIGUgLT5cbiAgICBwcF9jbG9zZV9zdGFnIG91dCAoKTtcbiAgICByYWlzZSBlXG5cbmxldCBzdHlsaW5nIHN0bCBwcCBvdXQgeCA9IHdpdGhfc3R5bGluZyBzdGwgb3V0IEBAIGZ1biAoKSAtPiBwcCBvdXQgeFxuXG4oKiBhZGQgY29sb3IgaGFuZGxpbmcgdG8gZm9ybWF0dGVyIFtwcGZdICopXG5sZXQgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBwcGYgPVxuICBsZXQgc3QgPSBTdGFjay5jcmVhdGUgKCkgaW5cbiAgKCogc3RhY2sgb2Ygc3R5bGVzICopXG4gIHBwX3NldF9tYXJrX3RhZ3MgcHBmIHRydWU7XG4gICgqIGVuYWJsZSB0YWdzICopXG4gIGxldCBmdW5zID0gcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBwcGYgKCkgaW5cbiAgbGV0IGZ1bnMnID1cbiAgICB7XG4gICAgICBmdW5zIHdpdGhcbiAgICAgIG1hcmtfb3Blbl9zdGFnID0gbWFya19vcGVuX3N0YWcgc3Qgfm9yX2Vsc2U6ZnVucy5tYXJrX29wZW5fc3RhZztcbiAgICAgIG1hcmtfY2xvc2Vfc3RhZyA9IG1hcmtfY2xvc2Vfc3RhZyBzdCB+b3JfZWxzZTpmdW5zLm1hcmtfY2xvc2Vfc3RhZztcbiAgICB9XG4gIGluXG4gIHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgcHBmIGZ1bnMnXG5cbmxldCBzZXRfY29sb3JfZGVmYXVsdCA9XG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGZ1biBiIC0+XG4gICAgaWYgYiAmJiBub3QgIWNvbG9yX2VuYWJsZWQgdGhlbiAoXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IHRydWU7XG4gICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlO1xuICAgICAgICBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIHN0ZG91dDtcbiAgICAgICAgc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBzdGRlcnJcbiAgICAgIClcbiAgICApIGVsc2UgaWYgKG5vdCBiKSAmJiAhY29sb3JfZW5hYmxlZCB0aGVuXG4gICAgICBjb2xvcl9lbmFibGVkIDo9IGZhbHNlXG5cbmxldCB3aXRoX2NvbG9yIHMgcHAgb3V0IHggPVxuICBwcF9vcGVuX3RhZyBvdXQgcztcbiAgcHAgb3V0IHg7XG4gIHBwX2Nsb3NlX3RhZyBvdXQgKClcblxubGV0IHdpdGhfY29sb3JmIHMgb3V0IGZtdCA9XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gcHBfY2xvc2VfdGFnIG91dCAoKSkgb3V0IGZtdFxuXG4oKiBjOiB3aGV0aGVyIGNvbG9ycyBhcmUgZW5hYmxlZCAqKVxubGV0IHNwcmludGZfIGMgZm9ybWF0ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgbGV0IGZtdCA9IEZvcm1hdC5mb3JtYXR0ZXJfb2ZfYnVmZmVyIGJ1ZiBpblxuICBpZiBjICYmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBmbXQ7XG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gX2ZtdCAtPlxuICAgICAgRm9ybWF0LnBwX3ByaW50X2ZsdXNoIGZtdCAoKTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBidWYpXG4gICAgZm10IGZvcm1hdFxuXG5sZXQgd2l0aF9jb2xvcl9rc2YgfmYgcyBmbXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIGlmICFjb2xvcl9lbmFibGVkIHRoZW4gc2V0X2NvbG9yX3RhZ19oYW5kbGluZyBvdXQ7XG4gIHBwX29wZW5fdGFnIG91dCBzO1xuICBGb3JtYXQua2ZwcmludGZcbiAgICAoZnVuIG91dCAtPlxuICAgICAgcHBfY2xvc2VfdGFnIG91dCAoKTtcbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBmIChCdWZmZXIuY29udGVudHMgYnVmKSlcbiAgICBvdXQgZm10XG5cbmxldCB3aXRoX2NvbG9yX3NmIHMgZm10ID0gd2l0aF9jb2xvcl9rc2YgfmY6KGZ1biBzIC0+IHMpIHMgZm10XG5sZXQgc3ByaW50ZiBmbXQgPSBzcHJpbnRmXyB0cnVlIGZtdFxubGV0IHNwcmludGZfbm9fY29sb3IgZm10ID0gc3ByaW50Zl8gZmFsc2UgZm10XG5sZXQgc3ByaW50Zl9keW5fY29sb3IgfmNvbG9ycyBmbXQgPSBzcHJpbnRmXyBjb2xvcnMgZm10XG5cbmxldCBmcHJpbnRmX2R5bl9jb2xvciB+Y29sb3JzIG91dCBmbXQgPVxuICBsZXQgb2xkX3RhZ3MgPSBGb3JtYXQucHBfZ2V0X21hcmtfdGFncyBvdXQgKCkgaW5cbiAgRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IGNvbG9ycztcbiAgKCogZW5hYmxlL2Rpc2FibGUgdGFncyAqKVxuICBGb3JtYXQua2ZwcmludGYgKGZ1biBvdXQgLT4gRm9ybWF0LnBwX3NldF9tYXJrX3RhZ3Mgb3V0IG9sZF90YWdzKSBvdXQgZm10XG5cbmxldCBrc3ByaW50ZiA/bWFyZ2luIH5mIGZtdCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGxldCBvdXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgaWYgIWNvbG9yX2VuYWJsZWQgdGhlbiBzZXRfY29sb3JfdGFnX2hhbmRsaW5nIG91dDtcbiAgKG1hdGNoIG1hcmdpbiB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgbSAtPiBwcF9zZXRfbWFyZ2luIG91dCBtKTtcbiAgRm9ybWF0LmtmcHJpbnRmXG4gICAgKGZ1biBfIC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZiAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZtdFxuXG5tb2R1bGUgRHVtcCA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBwcmludGVyXG5cbiAgbGV0IHVuaXQgPSB1bml0XG4gIGxldCBpbnQgPSBpbnRcbiAgbGV0IHN0cmluZyA9IHN0cmluZ19xdW90ZWRcbiAgbGV0IGJvb2wgPSBib29sXG4gIGxldCBmbG9hdCA9IGZsb2F0XG4gIGxldCBjaGFyID0gY2hhclxuICBsZXQgaW50MzIgPSBpbnQzMlxuICBsZXQgaW50NjQgPSBpbnQ2NFxuICBsZXQgbmF0aXZlaW50ID0gbmF0aXZlaW50XG4gIGxldCBsaXN0IHBwID0gd2l0aGluIFwiW1wiIFwiXVwiIChob3Zib3ggKGxpc3QgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcbiAgbGV0IGFycmF5IHBwID0gd2l0aGluIFwiW3xcIiBcInxdXCIgKGhvdmJveCAoYXJyYXkgfnNlcDoocmV0dXJuIFwiO0AsXCIpIHBwKSlcblxuICBsZXQgb3B0aW9uIHBwIG91dCB4ID1cbiAgICBtYXRjaCB4IHdpdGhcbiAgICB8IE5vbmUgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJOb25lXCJcbiAgICB8IFNvbWUgeCAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCJTb21lICVhXCIgcHAgeFxuXG4gIGxldCBwYWlyIHAxIHAyID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHBhaXIgcDEgcDIpKVxuICBsZXQgdHJpcGxlIHAxIHAyIHAzID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHRyaXBsZSBwMSBwMiBwMykpXG4gIGxldCBxdWFkIHAxIHAyIHAzIHA0ID0gd2l0aGluIFwiKFwiIFwiKVwiIChob3Zib3ggKHF1YWQgcDEgcDIgcDMgcDQpKVxuXG4gIGxldCByZXN1bHQnIHBvayBwZXJyb3Igb3V0ID0gZnVuY3Rpb25cbiAgICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgb3V0IFwiKEBbT2sgJWFAXSlcIiBwb2sgeFxuICAgIHwgRXJyb3IgZSAtPiBGb3JtYXQuZnByaW50ZiBvdXQgXCIoQFtFcnJvciAlYUBdKVwiIHBlcnJvciBlXG5cbiAgbGV0IHJlc3VsdCBwb2sgPSByZXN1bHQnIHBvayBzdHJpbmdcbiAgbGV0IHRvX3N0cmluZyA9IHRvX3N0cmluZ1xuZW5kXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCArKyApID0gYXBwZW5kXG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCJtb2R1bGUgSnMgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgdHlwZSAnYSBqc19hcnJheSA9IHRcblxuICB0eXBlICgnYSwgJ2IpIG1ldGhfY2FsbGJhY2sgPSB0XG5cbiAgZXh0ZXJuYWwgc3RyaW5nIDogc3RyaW5nIC0+IHQgPSBcImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXCJcblxuICBleHRlcm5hbCB0b19zdHJpbmcgOiB0IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcIlxuXG4gIGV4dGVybmFsIGJ5dGVzdHJpbmcgOiBzdHJpbmcgLT4gdCA9IFwiY2FtbF9qc2J5dGVzX29mX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgdG9fYnl0ZXN0cmluZyA6IHQgLT4gc3RyaW5nID0gXCJjYW1sX3N0cmluZ19vZl9qc2J5dGVzXCJcblxuICBleHRlcm5hbCBib29sIDogYm9vbCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fYm9vbFwiXG5cbiAgZXh0ZXJuYWwgdG9fYm9vbCA6IHQgLT4gYm9vbCA9IFwiY2FtbF9qc190b19ib29sXCJcblxuICBleHRlcm5hbCBhcnJheSA6ICdhIGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnJvbV9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fYXJyYXkgOiB0IC0+ICdhIGFycmF5ID0gXCJjYW1sX2pzX3RvX2FycmF5XCJcblxuICBleHRlcm5hbCBudW1iZXJfb2ZfZmxvYXQgOiBmbG9hdCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fZmxvYXRcIlxuXG4gIGV4dGVybmFsIGZsb2F0X29mX251bWJlciA6IHQgLT4gZmxvYXQgPSBcImNhbWxfanNfdG9fZmxvYXRcIlxuXG4gIGV4dGVybmFsIG51bWJlcl9vZl9pbnQzMiA6IGludDMyIC0+IHQgPSBcImNhbWxfanNfZnJvbV9pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgaW50MzJfb2ZfbnVtYmVyIDogdCAtPiBpbnQzMiA9IFwiY2FtbF9qc190b19pbnQzMlwiXG5cbiAgZXh0ZXJuYWwgbnVtYmVyX29mX25hdGl2ZWludCA6IG5hdGl2ZWludCAtPiB0ID0gXCJjYW1sX2pzX2Zyb21fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCBuYXRpdmVpbnRfb2ZfbnVtYmVyIDogdCAtPiBuYXRpdmVpbnQgPSBcImNhbWxfanNfdG9fbmF0aXZlaW50XCJcblxuICBleHRlcm5hbCB0eXBlb2YgOiB0IC0+IHQgPSBcImNhbWxfanNfdHlwZW9mXCJcblxuICBleHRlcm5hbCBpbnN0YW5jZW9mIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfaW5zdGFuY2VvZlwiXG5cbiAgZXh0ZXJuYWwgZGVidWdnZXIgOiB1bml0IC0+IHVuaXQgPSBcImRlYnVnZ2VyXCJcblxuICBleHRlcm5hbCBnZXQgOiB0IC0+IHQgLT4gdCA9IFwiY2FtbF9qc19nZXRcIlxuXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gdCAtPiB0IC0+IHVuaXQgPSBcImNhbWxfanNfc2V0XCJcblxuICBleHRlcm5hbCBkZWxldGUgOiB0IC0+IHQgLT4gdW5pdCA9IFwiY2FtbF9qc19kZWxldGVcIlxuXG4gIGV4dGVybmFsIGNhbGwgOiB0IC0+IHQgLT4gdCBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX2NhbGxcIlxuXG4gIGV4dGVybmFsIGZ1bl9jYWxsIDogdCAtPiB0IGFycmF5IC0+IHQgPSBcImNhbWxfanNfZnVuX2NhbGxcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbCA6IHQgLT4gc3RyaW5nIC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19tZXRoX2NhbGxcIlxuXG4gIGV4dGVybmFsIG5ld19vYmogOiB0IC0+IHQgYXJyYXkgLT4gdCA9IFwiY2FtbF9qc19uZXdcIlxuXG4gIGV4dGVybmFsIG5ld19vYmpfYXJyIDogdCAtPiB0IGpzX2FycmF5IC0+IHQgPSBcImNhbWxfb2pzX25ld19hcnJcIlxuXG4gIGV4dGVybmFsIG9iaiA6IChzdHJpbmcgKiB0KSBhcnJheSAtPiB0ID0gXCJjYW1sX2pzX29iamVjdFwiXG5cbiAgZXh0ZXJuYWwgZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfZXF1YWxzXCJcblxuICBleHRlcm5hbCBzdHJpY3RfZXF1YWxzIDogdCAtPiB0IC0+IGJvb2wgPSBcImNhbWxfanNfc3RyaWN0X2VxdWFsc1wiXG5cbiAgZXh0ZXJuYWwgcHVyZV9leHByIDogKHVuaXQgLT4gJ2EpIC0+ICdhID0gXCJjYW1sX2pzX3B1cmVfZXhwclwiXG5cbiAgZXh0ZXJuYWwgZXZhbF9zdHJpbmcgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXZhbF9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGpzX2V4cHIgOiBzdHJpbmcgLT4gJ2EgPSBcImNhbWxfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgcHVyZV9qc19leHByIDogc3RyaW5nIC0+ICdhID0gXCJjYW1sX3B1cmVfanNfZXhwclwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2sgOiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3Vuc2FmZVwiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcmd1bWVudHMgOlxuICAgICh0IGpzX2FycmF5IC0+ICdiKSAtPiAoJ2MsIHQganNfYXJyYXkgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2EgLT4gJ2IpIC0+ICgnYywgJ2EgLT4gJ2IpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdFwiXG5cbiAgZXh0ZXJuYWwgbWV0aF9jYWxsYmFjayA6ICgnYiAtPiAnYSkgLT4gKCdiLCAnYSkgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmVcIlxuXG4gIGV4dGVybmFsIG1ldGhfY2FsbGJhY2tfd2l0aF9hcml0eSA6IGludCAtPiAoJ2IgLT4gJ2EpIC0+ICgnYiwgJ2EpIG1ldGhfY2FsbGJhY2tcbiAgICA9IFwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0XCJcblxuICBleHRlcm5hbCBtZXRoX2NhbGxiYWNrX3dpdGhfYXJndW1lbnRzIDpcbiAgICAoJ2IgLT4gdCBqc19hcnJheSAtPiAnYSkgLT4gKCdiLCB0IGpzX2FycmF5IC0+ICdhKSBtZXRoX2NhbGxiYWNrXG4gICAgPSBcImNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50c1wiXG5cbiAgZXh0ZXJuYWwgd3JhcF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdjLCAnYSAtPiAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tcIlxuXG4gIGV4dGVybmFsIHdyYXBfbWV0aF9jYWxsYmFjayA6ICgnYSAtPiAnYikgLT4gKCdhLCAnYikgbWV0aF9jYWxsYmFja1xuICAgID0gXCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja1wiXG5lbmRcblxubW9kdWxlIFN5cyA9IHN0cnVjdFxuICB0eXBlICdhIGNhbGxiYWNrID0gJ2FcblxuICBleHRlcm5hbCBjcmVhdGVfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IGNvbnRlbnQ6c3RyaW5nIC0+IHVuaXQgPSBcImNhbWxfY3JlYXRlX2ZpbGVcIlxuXG4gIGV4dGVybmFsIHJlYWRfZmlsZSA6IG5hbWU6c3RyaW5nIC0+IHN0cmluZyA9IFwiY2FtbF9yZWFkX2ZpbGVfY29udGVudFwiXG5cbiAgZXh0ZXJuYWwgc2V0X2NoYW5uZWxfb3V0cHV0JyA6IG91dF9jaGFubmVsIC0+IChqc19zdHJpbmc6SnMudCAtPiB1bml0KSBjYWxsYmFjayAtPiB1bml0XG4gICAgPSBcImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0XCJcblxuICBleHRlcm5hbCBzZXRfY2hhbm5lbF9pbnB1dCcgOiBpbl9jaGFubmVsIC0+ICh1bml0IC0+IHN0cmluZykgY2FsbGJhY2sgLT4gdW5pdFxuICAgID0gXCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFwiXG5cbiAgZXh0ZXJuYWwgbW91bnRfcG9pbnQgOiB1bml0IC0+IHN0cmluZyBsaXN0ID0gXCJjYW1sX2xpc3RfbW91bnRfcG9pbnRcIlxuXG4gIGV4dGVybmFsIG1vdW50X2F1dG9sb2FkIDogc3RyaW5nIC0+IChzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb24pIGNhbGxiYWNrIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tb3VudF9hdXRvbG9hZFwiXG5cbiAgZXh0ZXJuYWwgdW5tb3VudCA6IHN0cmluZyAtPiB1bml0ID0gXCJjYW1sX3VubW91bnRcIlxuXG4gIHR5cGUgcmVkaXJlY3Rpb25cblxuICBleHRlcm5hbCByZWRpcmVjdF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gaW50bzpvdXRfY2hhbm5lbCAtPiByZWRpcmVjdGlvblxuICAgID0gXCJjYW1sX21sX2NoYW5uZWxfcmVkaXJlY3RcIlxuXG4gIGV4dGVybmFsIHJlc3RvcmVfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHJlZGlyZWN0aW9uIC0+IHVuaXRcbiAgICA9IFwiY2FtbF9tbF9jaGFubmVsX3Jlc3RvcmVcIlxuXG4gIG1vZHVsZSBDb25maWcgPSBzdHJ1Y3RcbiAgICBleHRlcm5hbCB1c2VfanNfc3RyaW5nIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfdXNlX2pzX3N0cmluZ1wiXG5cbiAgICBleHRlcm5hbCBlZmZlY3RzIDogdW5pdCAtPiBib29sID0gXCJjYW1sX2pzb29fZmxhZ3NfZWZmZWN0c1wiXG4gIGVuZFxuXG4gIGxldCB2ZXJzaW9uID0gUnVudGltZV92ZXJzaW9uLnNcblxuICBsZXQgZ2l0X3ZlcnNpb24gPSBSdW50aW1lX3ZlcnNpb24uZ2l0X3ZlcnNpb25cbmVuZFxuXG5tb2R1bGUgRXJyb3IgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHJhaXNlXyA6IHQgLT4gJ2FcblxuICB2YWwgYXR0YWNoX2pzX2JhY2t0cmFjZSA6IGV4biAtPiBmb3JjZTpib29sIC0+IGV4blxuICAoKiogQXR0YWNoIGEgSmF2YXNTY3JpcHQgZXJyb3IgdG8gYW4gT0NhbWwgZXhjZXB0aW9uLiAgaWYgW2ZvcmNlID0gZmFsc2VdIGFuZCBhXG4gICAgSmF2YXNTY3JpcHQgZXJyb3IgaXMgYWxyZWFkeSBhdHRhY2hlZCwgaXQgd2lsbCBkbyBub3RoaW5nLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCB0b1xuICAgIHN0b3JlIGFuZCByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBKYXZhU2NyaXB0IHN0YWNrIHRyYWNlcy5cblxuICAgIEF0dGFjaGluZyBKYXZhc1NjcmlwdCBlcnJvcnMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSB3aGVuIGNvbXBpbGluZyB3aXRoXG4gICAgWy0tZW5hYmxlIHdpdGgtanMtZXJyb3JdLiAqKVxuXG4gIHZhbCBvZl9leG4gOiBleG4gLT4gdCBvcHRpb25cbiAgKCoqIEV4dHJhY3QgYSBKYXZhU2NyaXB0IGVycm9yIGF0dGFjaGVkIHRvIGFuIE9DYW1sIGV4Y2VwdGlvbiwgaWYgYW55LiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgICAgIGluc3BlY3QgYW4gZXZlbnR1YWwgc3RhY2sgc3RyYWNlLCBlc3BlY2lhbGx5IHdoZW4gc291cmNlbWFwIGlzIGVuYWJsZWQuICopXG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG4gICgqKiBUaGUgW0Vycm9yXSBleGNlcHRpb24gd3JhcCBqYXZhc2NyaXB0IGV4Y2VwdGlvbnMgd2hlbiBjYXVnaHQgYnkgT0NhbWwgY29kZS5cbiAgICAgIEluIGNhc2UgdGhlIGphdmFzY3JpcHQgZXhjZXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBqYXZhc2NyaXB0IFtFcnJvcl0sXG4gICAgICBpdCB3aWxsIGJlIHNlcmlhbGl6ZWQgYW5kIHdyYXBwZWQgaW50byBhIFtGYWlsdXJlXSBleGNlcHRpb24uXG4gICopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0XG5cbiAgZXhjZXB0aW9uIEV4biBvZiB0XG5cbiAgbGV0IF8gPSBDYWxsYmFjay5yZWdpc3Rlcl9leGNlcHRpb24gXCJqc0Vycm9yXCIgKEV4biAoT2JqLm1hZ2ljIFt8fF0pKVxuXG4gIGxldCByYWlzZV8gOiB0IC0+ICdhID0gSnMuanNfZXhwciBcIihmdW5jdGlvbiAoZXhuKSB7IHRocm93IGV4biB9KVwiXG5cbiAgZXh0ZXJuYWwgb2ZfZXhuIDogZXhuIC0+IHQgb3B0aW9uID0gXCJjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb25cIlxuXG4gIGV4dGVybmFsIGF0dGFjaF9qc19iYWNrdHJhY2UgOiBleG4gLT4gZm9yY2U6Ym9vbCAtPiBleG4gPSBcImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXCJcbmVuZFxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMi02MFwiXVxuXG5tb2R1bGUgRm9yX2NvbXBhdGliaWxpdHlfb25seSA9IHN0cnVjdFxuICAoKiBBZGQgcHJpbWl0aXZlcyBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBFeGlzdGluZyB1c2VycyBtaWdodFxuICAgICBkZXBlbmQgb24gaXQgKGUuZy4gZ2VuX2pzX2FwaSksIHdlIGRvbnQgd2FudCB0aGUgb2NhbWwgY29tcGlsZXJcbiAgICAgdG8gY29tcGxhaW4gYWJvdXQgdGhlc2VzIG1pc3NpbmcgcHJpbWl0aXZlcy4gKilcblxuICBleHRlcm5hbCBjYW1sX2pzX2Zyb21fc3RyaW5nIDogc3RyaW5nIC0+IEpzLnQgPSBcImNhbWxfanNfZnJvbV9zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfanNfdG9fYnl0ZV9zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19ieXRlX3N0cmluZ1wiXG5cbiAgZXh0ZXJuYWwgY2FtbF9qc190b19zdHJpbmcgOiBKcy50IC0+IHN0cmluZyA9IFwiY2FtbF9qc190b19zdHJpbmdcIlxuXG4gIGV4dGVybmFsIGNhbWxfbGlzdF9vZl9qc19hcnJheSA6ICdhIEpzLmpzX2FycmF5IC0+ICdhIGxpc3QgPSBcImNhbWxfbGlzdF9vZl9qc19hcnJheVwiXG5cbiAgZXh0ZXJuYWwgY2FtbF9saXN0X3RvX2pzX2FycmF5IDogJ2EgbGlzdCAtPiAnYSBKcy5qc19hcnJheSA9IFwiY2FtbF9saXN0X3RvX2pzX2FycmF5XCJcblxuICBleHRlcm5hbCB2YXJpYWJsZSA6IHN0cmluZyAtPiAnYSA9IFwiY2FtbF9qc192YXJcIlxuZW5kXG5cbm1vZHVsZSBUeXBlZF9hcnJheSA9IHN0cnVjdFxuICB0eXBlICgnYSwgJ2IpIHR5cGVkQXJyYXkgPSBKcy50XG5cbiAgdHlwZSBhcnJheUJ1ZmZlciA9IEpzLnRcblxuICB0eXBlIHVpbnQ4QXJyYXkgPSBKcy50XG5cbiAgZXh0ZXJuYWwga2luZCA6ICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYikgQmlnYXJyYXkua2luZFxuICAgID0gXCJjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXlcIlxuXG4gIGV4dGVybmFsIGZyb21fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IsIEJpZ2FycmF5LmNfbGF5b3V0KSBCaWdhcnJheS5HZW5hcnJheS50IC0+ICgnYSwgJ2IpIHR5cGVkQXJyYXlcbiAgICA9IFwiY2FtbF9iYV90b190eXBlZF9hcnJheVwiXG5cbiAgZXh0ZXJuYWwgdG9fZ2VuYXJyYXkgOlxuICAgICgnYSwgJ2IpIHR5cGVkQXJyYXkgLT4gKCdhLCAnYiwgQmlnYXJyYXkuY19sYXlvdXQpIEJpZ2FycmF5LkdlbmFycmF5LnRcbiAgICA9IFwiY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5XCJcblxuICBtb2R1bGUgQmlnc3RyaW5nID0gc3RydWN0XG4gICAgdHlwZSB0ID0gKGNoYXIsIEJpZ2FycmF5LmludDhfdW5zaWduZWRfZWx0LCBCaWdhcnJheS5jX2xheW91dCkgQmlnYXJyYXkuQXJyYXkxLnRcblxuICAgIGV4dGVybmFsIHRvX2FycmF5QnVmZmVyIDogdCAtPiBhcnJheUJ1ZmZlciA9IFwiYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlclwiXG5cbiAgICBleHRlcm5hbCB0b191aW50OEFycmF5IDogdCAtPiB1aW50OEFycmF5ID0gXCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXlcIlxuXG4gICAgZXh0ZXJuYWwgb2ZfYXJyYXlCdWZmZXIgOiBhcnJheUJ1ZmZlciAtPiB0ID0gXCJiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyXCJcblxuICAgIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHQgPSBcImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheVwiXG4gIGVuZFxuXG4gIGV4dGVybmFsIG9mX3VpbnQ4QXJyYXkgOiB1aW50OEFycmF5IC0+IHN0cmluZyA9IFwiY2FtbF9zdHJpbmdfb2ZfYXJyYXlcIlxuZW5kXG5cbm1vZHVsZSBJbnQ2NCA9IHN0cnVjdFxuICBleHRlcm5hbCBjcmVhdGVfaW50NjRfbG9fbWlfaGkgOiBpbnQgLT4gaW50IC0+IGludCAtPiBJbnQ2NC50XG4gICAgPSBcImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpXCJcbmVuZFxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBID0gQXR0cnNcblxudHlwZSAnYSB2YWxpZGF0aW9uID0gT2sgb2YgJ2EgfCBFcnJvciBvZiBzdHJpbmcgfCBFbXB0eVxudHlwZSBsYWJlbCA9IEVsd2QudCBFbHdkLmNvbFxudHlwZSAnYSBkZXNjID0geyBuYW1lIDogc3RyaW5nOyBkZWZhdWx0IDogJ2E7IGxhYmVsIDogbGFiZWwgfVxuXG4oKiBBIGZvcm0gZmllbGQgaXMgY29tcG9zZWQgb2Y6XG4gICAtIEFuIGh0bWwgaW5wdXQgZWxlbWVudCB3aXRoIHBvdGVudGlhbCB2YWxpZGF0aW9uIHZpYSBhdHRyaWJ1dGVzXG4gICAtIEEgdmFsaWRhdGlvbiBmdW5jdGlvbiB0aGF0IHJlcGxhY2Ugb3IgY29tcGxldGUgdGhlIHN0YW5kYXJkIHZhbGlkYXRpb25cbiAgIC0gQSBmdW5jdGlvbiB0aGF0IHJldGlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCAqKVxudHlwZSAnYSB0ID0ge1xuICBlbHQgOiBFbHdkLnQgTHdkLnQ7XG4gIHZhbHVlIDogJ2Egb3B0aW9uIEx3ZC52YXI7XG4gIHZhbGlkYXRlIDogJ2EgLT4gJ2EgdmFsaWRhdGlvbjtcbn1cblxubGV0IGdldF92YWx1ZSB0ID1cbiAgbGV0IGp2ID0gRWwudG9fanYgdCBpblxuICBKdi5nZXQganYgXCJ2YWx1ZVwiXG5cbmxldCBtYWtlX2hhbmRsZXIgfih2YWx1ZSA6IEp2LnQgLT4gJ2EpIH4odmFsdWVfY2hhbmdlX2V2ZW50IDogXyBFdi50eXBlJylcbiAgICBkZWZhdWx0X3ZhbHVlID1cbiAgbGV0IHZhciA9IEx3ZC52YXIgZGVmYXVsdF92YWx1ZSBpblxuICBsZXQgb25fY2hhbmdlID1cbiAgICBFbHdkLmhhbmRsZXIgdmFsdWVfY2hhbmdlX2V2ZW50IChmdW4gZXYgLT5cbiAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgIGxldCB2ID0gSnYuZ2V0IHQgXCJ2YWx1ZVwiIGluXG4gICAgICAgIEx3ZC5zZXQgdmFyIChTb21lICh2YWx1ZSB2KSkpXG4gIGluXG4gIChvbl9jaGFuZ2UsIHZhcilcblxuKCogVE9ETzogaXQncyBwcm9iYWJseSBiZXR0ZXIgdG8gc3BsaXQgdGhlIHZhbGlkYXRpb24gYXBydCBmcm9tIHRoZSBmaWVsZFxuICAgY3JlYXRpb24uIFZhbGlkYXRpb24gbWFrZSBtb3JlIHNlbnNlIGluIHRoZSBjYXNlIG9mIGEgZm9ybS4gVGhlcmUgaXMgYW5cbiAgIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgdGV4dCBpbnB1dHMgaW4gYEZpZWxkX3RleHRpbnB1dGAgdGhhdCBzaG91bGRcbiAgIGJlIHVzZWQgaW5zdGVhZC4gKilcbmxldCBtYWtlX2lucHV0IH4odmFsdWUgOiBKdi50IC0+ICdhKSA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXZcbiAgICA/KHJlcXVpcmVkID0gZmFsc2UpIH52YWx1ZV9jaGFuZ2VfZXZlbnQgP3BhdHRlcm4gfnR5cGUnIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgdHlwZScgPSBBdC50eXBlJyAoSnN0ci52IHR5cGUnKSBpblxuICBsZXQgYXQgPSBgUCB0eXBlJyA6OiBhdCBpblxuICBsZXQgYXQgPVxuICAgIGF0IHw+IEEuYWRkX2Jvb2wgQXQucmVxdWlyZWQgcmVxdWlyZWQgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGF0dGVybiBwYXR0ZXJuXG4gIGluXG4gIGxldCB2YWxpZGF0ZSA9IE9wdGlvbi52YWx1ZSB2YWxpZGF0ZSB+ZGVmYXVsdDooZnVuIHYgLT4gT2sgdikgaW5cbiAgbGV0IG9uX2NoYW5nZSwgdmFsdWUgPVxuICAgIG1ha2VfaGFuZGxlciB+dmFsdWUgfnZhbHVlX2NoYW5nZV9ldmVudCBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBPcHRpb24udG9fbGlzdCBldiBpblxuICBsZXQgZWx0ID0gRWx3ZC5pbnB1dCA/ZCB+YXQgfmV2ICgpIGluXG4gIHsgZWx0OyB2YWx1ZTsgdmFsaWRhdGUgfVxuXG5sZXQgdGV4dF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIGRlZmF1bHRfdmFsdWUgPVxuICBsZXQgYXQgPVxuICAgIGF0XG4gICAgfD4gQS5hZGRfb3B0IEF0Lk5hbWUucGxhY2Vob2xkZXIgcGxhY2Vob2xkZXJcbiAgICB8PiBBLmFkZF9vcHQgQXQuTmFtZS52YWx1ZSBkZWZhdWx0X3ZhbHVlXG4gIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSA/dmFsaWRhdGUgP2QgfmF0ID9ldiA/cmVxdWlyZWQgP3BhdHRlcm5cbiAgICB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwIH50eXBlJzpcInRleHRcIiBkZWZhdWx0X3ZhbHVlXG5cbmxldCBwYXNzd29yZF9pbnB1dCA/dmFsaWRhdGUgP2QgPyhhdCA9IFtdKSA/ZXYgP3JlcXVpcmVkID9wYXR0ZXJuID9wbGFjZWhvbGRlclxuICAgIF92YWx1ZSA9XG4gIGxldCBhdCA9IGF0IHw+IEEuYWRkX29wdCBBdC5OYW1lLnBsYWNlaG9sZGVyIHBsYWNlaG9sZGVyIGluXG4gIGxldCB2YWx1ZSA9IEp2LnRvX3N0cmluZyBpblxuICBtYWtlX2lucHV0IH52YWx1ZSB+dmFsdWVfY2hhbmdlX2V2ZW50OkV2LmtleXVwID92YWxpZGF0ZSA/ZCB+YXQgP2V2ID9yZXF1aXJlZFxuICAgID9wYXR0ZXJuIH50eXBlJzpcInBhc3N3b3JkXCIgTm9uZVxuXG5sZXQgc3VibWl0ID9kID8oYXQgPSBbXSkgP2V2IHRleHQgPVxuICBsZXQgYXQgPSBBLmFkZCBBdC5OYW1lLnZhbHVlIHRleHQgYXQgaW5cbiAgKCogVE9ETyB0aGlzIHNob3VsZCBiZSBtb3JlIHByZWNpc2UuIFN1Ym1pdCBpbnB1dHMgYXJlIGRpZmZlcmVudC4gKilcbiAgbWFrZV9pbnB1dCB+dmFsdWU6aWdub3JlIH52YWx1ZV9jaGFuZ2VfZXZlbnQ6RXYuY2hhbmdlID9kIH5hdCA/ZXZcbiAgICB+dHlwZSc6XCJzdWJtaXRcIiBOb25lXG4iLCJ0eXBlIHQgPSBKdi50XG5cbmV4dGVybmFsIG9mX2p2IDogSnYudCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgeCB0ID0gSnYuZ2V0IHQgXCJ4XCIgfD4gSnYudG9faW50XG5sZXQgeSB0ID0gSnYuZ2V0IHQgXCJ5XCIgfD4gSnYudG9faW50XG5sZXQgd2lkdGggdCA9IEp2LmdldCB0IFwid2lkdGhcIiB8PiBKdi50b19pbnRcbmxldCBoZWlnaHQgdCA9IEp2LmdldCB0IFwiaGVpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgdG9wIHQgPSBKdi5nZXQgdCBcInRvcFwiIHw+IEp2LnRvX2ludFxubGV0IHJpZ2h0IHQgPSBKdi5nZXQgdCBcInJpZ2h0XCIgfD4gSnYudG9faW50XG5sZXQgYm90dG9tIHQgPSBKdi5nZXQgdCBcImJvdHRvbVwiIHw+IEp2LnRvX2ludFxubGV0IGxlZnQgdCA9IEp2LmdldCB0IFwibGVmdFwiIHw+IEp2LnRvX2ludFxuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubW9kdWxlIEVudHJ5ID0gc3RydWN0XG4gIHR5cGUgdCA9IEp2LnRcblxuICBleHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxuICB0eXBlIGJveF9zaXplID0geyBibG9ja19zaXplIDogaW50OyBpbmxpbmVfc2l6ZSA6IGludCB9XG5cbiAgbGV0IGJveF9zaXplX29mX2p2IGp2ID1cbiAgICB7XG4gICAgICBibG9ja19zaXplID0gSnYuZ2V0IGp2IFwiYmxvY2tTaXplXCIgfD4gSnYudG9faW50O1xuICAgICAgaW5saW5lX3NpemUgPSBKdi5nZXQganYgXCJpbmxpbmVTaXplXCIgfD4gSnYudG9faW50O1xuICAgIH1cblxuICBsZXQgYm9yZGVyX2JveF9zaXplIHQgPSBKdi5nZXQgdCBcImJvcmRlckJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X2JveF9zaXplIHQgPVxuICAgIEp2LmdldCB0IFwiY29udGVudEJveFNpemVcIiB8PiBKdi50b19hcnJheSBib3hfc2l6ZV9vZl9qdlxuXG4gIGxldCBjb250ZW50X3JlY3QgdCA9IEp2LmdldCB0IFwiY29udGVudFJlY3RcIiB8PiBEb21fcmVjdF9yZWFkX29ubHkub2ZfanZcblxuICBsZXQgZGV2aWNlX3BpeGVsX2NvbnRlbnRfYm94X3NpemUgdCA9XG4gICAgSnYuZ2V0IHQgXCJkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplXCIgfD4gSnYudG9fYXJyYXkgYm94X3NpemVfb2ZfanZcblxuICBsZXQgdGFyZ2V0IHQgPSBKdi5nZXQgdCBcInRhcmdldFwiIHw+IEVsLm9mX2p2XG5lbmRcblxudHlwZSBib3ggPSBDb250ZW50X2JveCB8IEJvcmRlcl9ib3ggfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3hcblxubGV0IHN0cmluZ19vZl9ib3ggPSBmdW5jdGlvblxuICB8IENvbnRlbnRfYm94IC0+IFwiY29udGVudC1ib3hcIlxuICB8IEJvcmRlcl9ib3ggLT4gXCJib3JkZXItYm94XCJcbiAgfCBEZXZpY2VfcGl4ZWxfY29udGVudF9ib3ggLT4gXCJkZXZpY2UtcGl4ZWwtY29udGVudC1ib3hcIlxuXG5sZXQgZGlzY29ubmVjdCB0ID0gaWdub3JlIEBAIEp2LmNhbGwgdCBcImRpc2Nvbm5lY3RcIiBbfHxdXG5cbmxldCBvYnNlcnZlIHQgP2JveCB0YXJnZXQgPVxuICBsZXQgYXJncyA9XG4gICAgbGV0IHRhcmdldCA9IEVsLnRvX2p2IHRhcmdldCBpblxuICAgIG1hdGNoIGJveCB3aXRoXG4gICAgfCBOb25lIC0+IFt8IHRhcmdldCB8XVxuICAgIHwgU29tZSBiIC0+XG4gICAgICAgIGxldCBib3ggPSBKdi5vYmogW3wgKFwiYm94XCIsIEp2Lm9mX3N0cmluZyAoc3RyaW5nX29mX2JveCBiKSkgfF0gaW5cbiAgICAgICAgW3wgdGFyZ2V0OyBib3ggfF1cbiAgaW5cbiAgSnYuY2FsbCB0IFwib2JzZXJ2ZVwiIGFyZ3MgfD4gaWdub3JlXG5cbmxldCB1bm9ic2VydmUgdCB0YXJnZXQgPVxuICBsZXQgdGFyZ2V0ID0gRWwudG9fanYgdGFyZ2V0IGluXG4gIGlnbm9yZSBAQCBKdi5jYWxsIHQgXCJkaXNjb25uZWN0XCIgW3wgdGFyZ2V0IHxdXG5cbmxldCBjcmVhdGUgfmNhbGxiYWNrID1cbiAgbGV0IGNhbGxiYWNrIGVudHJpZXMgb2JzZXJ2ZXIgPVxuICAgIGxldCBlbnRyaWVzID0gSnYudG9fbGlzdCBFbnRyeS5vZl9qdiBlbnRyaWVzIGluXG4gICAgY2FsbGJhY2sgZW50cmllcyAob2ZfanYgb2JzZXJ2ZXIpXG4gIGluXG4gIGxldCBhcmdzID0gW3wgSnYucmVwciBjYWxsYmFjayB8XSBpblxuICBKdi5uZXcnIChKdi5nZXQgSnYuZ2xvYmFsIFwiUmVzaXplT2JzZXJ2ZXJcIikgYXJnc1xuIiwib3BlbiBCcnJcblxudHlwZSB0ID0gSnYudFxuXG5leHRlcm5hbCBvZl9qdiA6IEp2LnQgLT4gdCA9IFwiJWlkZW50aXR5XCJcblxubGV0IG9mX25hdmlnYXRvciBuID0gSnYuZ2V0IChOYXZpZ2F0b3IudG9fanYgbikgXCJtZWRpYVNlc3Npb25cIlxuXG5tb2R1bGUgTWVkaWFfbWV0YWRhdGEgPSBzdHJ1Y3RcbiAgdHlwZSBpbWcgPSB7IHNyYyA6IHN0cmluZzsgc2l6ZXMgOiBzdHJpbmc7IHR5cGUnIDogc3RyaW5nIH1cblxuICBsZXQgaW1nX3RvX2p2IGltZyA9XG4gICAgSnYub2JqXG4gICAgICBbfFxuICAgICAgICAoXCJzcmNcIiwgSnYub2Zfc3RyaW5nIGltZy5zcmMpO1xuICAgICAgICAoXCJzaXplc1wiLCBKdi5vZl9zdHJpbmcgaW1nLnNpemVzKTtcbiAgICAgICAgKFwidHlwZVwiLCBKdi5vZl9zdHJpbmcgaW1nLnR5cGUnKTtcbiAgICAgIHxdXG5cbiAgbGV0IG1heWJlX3N0cmluZyBqdiBwcm9wID1cbiAgICBtYXRjaCBKdi5maW5kIGp2IHByb3Agd2l0aCBOb25lIC0+IFwidW5rbm93blwiIHwgU29tZSBqdiAtPiBKdi50b19zdHJpbmcganZcblxuICBsZXQgaW1nX29mX2p2IGp2ID1cbiAgICBsZXQgc3JjID0gbWF5YmVfc3RyaW5nIGp2IFwic3JjXCIgaW5cbiAgICBsZXQgc2l6ZXMgPSBtYXliZV9zdHJpbmcganYgXCJzaXplc1wiIGluXG4gICAgbGV0IHR5cGUnID0gbWF5YmVfc3RyaW5nIGp2IFwidHlwZVwiIGluXG4gICAgeyBzcmM7IHNpemVzOyB0eXBlJyB9XG5cbiAgdHlwZSB0ID0ge1xuICAgIHRpdGxlIDogc3RyaW5nO1xuICAgIGFydGlzdCA6IHN0cmluZztcbiAgICBhbGJ1bSA6IHN0cmluZztcbiAgICBhcnR3b3JrIDogaW1nIGxpc3Q7XG4gIH1cblxuICBsZXQgdG9fanYgdCA9XG4gICAgbGV0IGFydHdvcmsgPSBKdi5vZl9saXN0IGltZ190b19qdiB0LmFydHdvcmsgaW5cbiAgICBKdi5vYmpcbiAgICAgIFt8XG4gICAgICAgIChcInRpdGxlXCIsIEp2Lm9mX3N0cmluZyB0LnRpdGxlKTtcbiAgICAgICAgKFwiYXJ0aXN0XCIsIEp2Lm9mX3N0cmluZyB0LmFydGlzdCk7XG4gICAgICAgIChcImFsYnVtXCIsIEp2Lm9mX3N0cmluZyB0LmFsYnVtKTtcbiAgICAgICAgKFwiYXJ0d29ya1wiLCBhcnR3b3JrKTtcbiAgICAgIHxdXG5cbiAgbGV0IG9mX2p2IGp2ID1cbiAgICBsZXQgdGl0bGUgPSBtYXliZV9zdHJpbmcganYgXCJ0aXRsZVwiIGluXG4gICAgbGV0IGFydGlzdCA9IG1heWJlX3N0cmluZyBqdiBcImFydGlzdFwiIGluXG4gICAgbGV0IGFsYnVtID0gbWF5YmVfc3RyaW5nIGp2IFwiYWxidW1cIiBpblxuICAgIGxldCBhcnR3b3JrID1cbiAgICAgIG1hdGNoIEp2LmZpbmQganYgXCJhcnR3b3JrXCIgd2l0aFxuICAgICAgfCBOb25lIC0+IFtdXG4gICAgICB8IFNvbWUganYgLT4gSnYudG9fbGlzdCBpbWdfb2ZfanYganZcbiAgICBpblxuICAgIHsgdGl0bGU7IGFydGlzdDsgYWxidW07IGFydHdvcmsgfVxuZW5kXG5cbmxldCBtZXRhZGF0YSB0ID0gSnYuZ2V0IHQgXCJtZXRhZGF0YVwiIHw+IEp2LnRvX29wdGlvbiBNZWRpYV9tZXRhZGF0YS5vZl9qdlxuXG5sZXQgc2V0X21ldGFkYXRhIHQgdiA9XG4gIENvbnNvbGUubG9nIFsgXCJTZXQgbWV0YWRhdGFcIjsgTWVkaWFfbWV0YWRhdGEudG9fanYgdiBdO1xuICBsZXQgbWV0YWRhdGEgPVxuICAgIEp2Lm5ldycgKEp2LmdldCBKdi5nbG9iYWwgXCJNZWRpYU1ldGFkYXRhXCIpIFt8IE1lZGlhX21ldGFkYXRhLnRvX2p2IHYgfF1cbiAgaW5cbiAgSnYuc2V0IHQgXCJtZXRhZGF0YVwiIG1ldGFkYXRhXG5cbm1vZHVsZSBBY3Rpb24gPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gSnN0ci50XG5cbiAgbGV0IG5leHRfdHJhY2sgPSBKc3RyLnYgXCJuZXh0dHJhY2tcIlxuICBsZXQgcHJldmlvdXNfdHJhY2sgPSBKc3RyLnYgXCJwcmV2aW91c3RyYWNrXCJcbmVuZFxuXG5sZXQgc2V0X2FjdGlvbl9oYW5kbGVyIHQgYWN0aW9uIGYgPVxuICBsZXQgY2FsbGJhY2sgPSBKdi5jYWxsYmFjayB+YXJpdHk6MSBmIGluXG4gIEp2LmNhbGwgdCBcInNldEFjdGlvbkhhbmRsZXJcIiBbfCBKdi5vZl9qc3RyIGFjdGlvbjsgY2FsbGJhY2sgfF0gfD4gaWdub3JlXG5cbmxldCBzZXRfcG9zaXRpb25fc3RhdGUgP2R1cmF0aW9uID9wbGF5YmFja19yYXRlID9wb3NpdGlvbiB0ID1cbiAgbGV0IG1heWJlX2Zsb2F0IG5hbWUgdiA9IE9wdGlvbi5tYXAgKGZ1biB2IC0+IChuYW1lLCBKdi5vZl9mbG9hdCB2KSkgdiBpblxuICBsZXQgZHVyYXRpb24gPSBtYXliZV9mbG9hdCBcImR1cmF0aW9uXCIgZHVyYXRpb24gaW5cbiAgbGV0IHBsYXliYWNrX3JhdGUgPSBtYXliZV9mbG9hdCBcInBsYXliYWNrUmF0ZVwiIHBsYXliYWNrX3JhdGUgaW5cbiAgbGV0IHBvc2l0aW9uID0gbWF5YmVfZmxvYXQgXCJwb3NpdGlvblwiIHBvc2l0aW9uIGluXG4gIGxldCBhcmdzID1cbiAgICBsZXQgc3RhdGVfZGljdCA9XG4gICAgICBMaXN0LmZpbHRlcl9tYXAgRnVuLmlkIFsgZHVyYXRpb247IHBsYXliYWNrX3JhdGU7IHBvc2l0aW9uIF1cbiAgICBpblxuICAgIG1hdGNoIHN0YXRlX2RpY3Qgd2l0aCBbXSAtPiBbfHxdIHwgc2QgLT4gW3wgSnYub2JqIChBcnJheS5vZl9saXN0IHNkKSB8XVxuICBpblxuICBKdi5jYWxsIHQgXCJzZXRQb3NpdGlvblN0YXRlXCIgYXJncyB8PiBpZ25vcmVcbiIsIm1vZHVsZSBKdiA9IEp2XG5tb2R1bGUgSnN0ciA9IEpzdHJcblxubW9kdWxlIEJyciA9IHN0cnVjdFxuICBpbmNsdWRlIEJyclxuXG4gIG1vZHVsZSBFbCA9IHN0cnVjdFxuICAgIG1vZHVsZSBTID0gU3R5bGVcbiAgICBpbmNsdWRlIEVsXG4gICAgbW9kdWxlIFN0eWxlID0gU1xuICBlbmRcblxuICBtb2R1bGUgRXYgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIEV2XG5cbiAgICBtb2R1bGUgU3VibWl0ID0gc3RydWN0XG4gICAgICB0eXBlICdhIGV2ZW50ID0gJ2EgdFxuICAgICAgdHlwZSB0ID0gSnYudFxuICAgIGVuZFxuXG4gICAgbGV0IHN1Ym1pdCA9IFR5cGUudm9pZCAoSnN0ci52IFwic3VibWl0XCIpXG4gIGVuZFxuXG4gIG1vZHVsZSBBdCA9IHN0cnVjdFxuICAgIGluY2x1ZGUgQXRcblxuICAgIG1vZHVsZSBOYW1lID0gc3RydWN0XG4gICAgICBpbmNsdWRlIE5hbWVcblxuICAgICAgbGV0IHBhdHRlcm4gPSBKc3RyLnYgXCJwYXR0ZXJuXCJcbiAgICBlbmRcblxuICAgIGxldCBkcmFnZ2FibGUgcyA9IHYgTmFtZS5kcmFnZ2FibGUgc1xuICBlbmRcbmVuZFxuXG5tb2R1bGUgQnJyX2lvID0gc3RydWN0XG4gIGluY2x1ZGUgQnJyX2lvXG4gIG1vZHVsZSBJbmRleGVkX2RiID0gSW5kZXhlZF9kYlxuXG4gIG1vZHVsZSBNZWRpYSA9IHN0cnVjdFxuICAgIGluY2x1ZGUgTWVkaWFcbiAgICBtb2R1bGUgU2Vzc2lvbiA9IE1lZGlhX3Nlc3Npb25cbiAgZW5kXG5cbiAgbW9kdWxlIFN0b3JhZ2UgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFN0b3JhZ2VcblxuICAgIG1vZHVsZSBNYW5hZ2VyID0gc3RydWN0XG4gICAgICAoKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU3RvcmFnZU1hbmFnZXIgKilcbiAgICAgIHR5cGUgdCA9IEp2LnRcblxuICAgICAgaW5jbHVkZSAoSnYuSWQgOiBKdi5DT05WIHdpdGggdHlwZSB0IDo9IHQpXG5cbiAgICAgIGxldCBwZXJzaXN0IHQgPSBKdi5jYWxsIHQgXCJwZXJzaXN0XCIgW3x8XSB8PiBGdXQub2ZfcHJvbWlzZSB+b2s6SnYudG9fYm9vbFxuICAgIGVuZFxuXG4gICAgbGV0IG1hbmFnZXIgKG4gOiBCcnIuTmF2aWdhdG9yLnQpID1cbiAgICAgIEp2LmdldCAoQnJyLk5hdmlnYXRvci50b19qdiBuKSBcInN0b3JhZ2VcIiB8PiBNYW5hZ2VyLm9mX2p2XG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBCcnJfd2Vid29ya2VycyA9IEJycl93ZWJ3b3JrZXJzXG5tb2R1bGUgQnJyX3dlYm1pZGkgPSBCcnJfd2VibWlkaVxubW9kdWxlIEJycl93ZWJncHUgPSBCcnJfd2ViZ3B1XG5tb2R1bGUgQnJyX3dlYmNyeXB0byA9IEJycl93ZWJjcnlwdG9cbm1vZHVsZSBCcnJfd2ViYXVkaW8gPSBCcnJfd2ViYXVkaW9cbm1vZHVsZSBCcnJfY2FudmFzID0gQnJyX2NhbnZhc1xubW9kdWxlIEZ1dCA9IEZ1dFxubW9kdWxlIEludGVyc2VjdGlvbl9vYnNlcnZlciA9IEludGVyc2VjdGlvbl9vYnNlcnZlclxubW9kdWxlIE11dGF0aW9uX29ic2VydmVyID0gTXV0YXRpb25fb2JzZXJ2ZXJcbm1vZHVsZSBSZXNpemVfb2JzZXJ2ZXIgPSBSZXNpemVfb2JzZXJ2ZXJcbm1vZHVsZSBEb21fcmVjdF9yZWFkX29ubHkgPSBEb21fcmVjdF9yZWFkX29ubHlcbiIsIigqKiBDcmVhdGUtb25seSB2ZXJzaW9uIG9mIFtPYmoudF0gKilcbm1vZHVsZSBBbnkgOiBzaWdcbiAgdHlwZSB0XG4gIHZhbCBhbnkgOiAnYSAtPiB0XG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gT2JqLnRcbiAgbGV0IGFueSA9IE9iai5yZXByXG5lbmRcblxudHlwZSAnYSBldmFsID1cbiAgfCBFdmFsX25vbmVcbiAgfCBFdmFsX3Byb2dyZXNzXG4gIHwgRXZhbF9zb21lIG9mICdhXG5cbnR5cGUgJ2EgdF8gPVxuICB8IFB1cmUgb2YgJ2FcbiAgfCBPcGVyYXRvciA6IHtcbiAgICAgIG11dGFibGUgdmFsdWUgOiAnYSBldmFsOyAoKiBjYWNoZWQgdmFsdWUgKilcbiAgICAgIG11dGFibGUgdHJhY2UgOiB0cmFjZTsgKCogbGlzdCBvZiBwYXJlbnRzIHRoaXMgY2FuIGludmFsaWRhdGUgKilcbiAgICAgIG11dGFibGUgdHJhY2VfaWR4IDogdHJhY2VfaWR4OyAoKiBsaXN0IG9mIGRpcmVjdCBjaGlsZHJlbiB0aGF0IGNhbiBpbnZhbGlkYXRlIHRoaXMgKilcbiAgICAgIGRlc2M6ICdhIGRlc2M7XG4gICAgfSAtPiAnYSB0X1xuICB8IFJvb3QgOiB7XG4gICAgICBtdXRhYmxlIHZhbHVlIDogJ2EgZXZhbDsgKCogY2FjaGVkIHZhbHVlICopXG4gICAgICBtdXRhYmxlIHRyYWNlX2lkeCA6IHRyYWNlX2lkeDsgKCogbGlzdCBvZiBkaXJlY3QgY2hpbGRyZW4gdGhhdCBjYW4gaW52YWxpZGF0ZSB0aGlzICopXG4gICAgICBtdXRhYmxlIG9uX2ludmFsaWRhdGUgOiAnYSAtPiB1bml0O1xuICAgICAgbXV0YWJsZSBhY3F1aXJlZCA6IGJvb2w7XG4gICAgICBjaGlsZCA6ICdhIHRfO1xuICAgIH0gLT4gJ2EgdF9cblxuYW5kIF8gZGVzYyA9XG4gIHwgTWFwICA6ICdhIHRfICogKCdhIC0+ICdiKSAtPiAnYiBkZXNjXG4gIHwgTWFwMiA6ICdhIHRfICogJ2IgdF8gKiAoJ2EgLT4gJ2IgLT4gJ2MpIC0+ICdjIGRlc2NcbiAgfCBQYWlyIDogJ2EgdF8gKiAnYiB0XyAtPiAoJ2EgKiAnYikgZGVzY1xuICB8IEFwcCAgOiAoJ2EgLT4gJ2IpIHRfICogJ2EgdF8gLT4gJ2IgZGVzY1xuICB8IEpvaW4gOiB7IGNoaWxkIDogJ2EgdF8gdF87IG11dGFibGUgaW50ZXJtZWRpYXRlIDogJ2EgdF8gb3B0aW9uIH0gLT4gJ2EgZGVzY1xuICB8IFZhciAgOiB7IG11dGFibGUgYmluZGluZyA6ICdhIH0gLT4gJ2EgZGVzY1xuICB8IFByaW0gOiB7IGFjcXVpcmUgOiAnYSB0IC0+ICdhO1xuICAgICAgICAgICAgIHJlbGVhc2UgOiAnYSB0IC0+ICdhIC0+IHVuaXQgfSAtPiAnYSBkZXNjXG4gIHwgRml4IDogeyBkb2MgOiAnYSB0Xzsgd3J0IDogXyB0XyB9IC0+ICdhIGRlc2NcblxuKCogYSBzZXQgb2YgKGFjdGl2ZSkgcGFyZW50cyBmb3IgYSBbJ2EgdF0sIHVzZWQgZHVyaW5nIGludmFsaWRhdGlvbiAqKVxuYW5kIHRyYWNlID1cbiAgfCBUMFxuICB8IFQxIDogXyB0XyAtPiB0cmFjZVxuICB8IFQyIDogXyB0XyAqIF8gdF8gLT4gdHJhY2VcbiAgfCBUMyA6IF8gdF8gKiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFQ0IDogXyB0XyAqIF8gdF8gKiBfIHRfICogXyB0XyAtPiB0cmFjZVxuICB8IFRuIDogeyBtdXRhYmxlIGFjdGl2ZSA6IGludDsgbXV0YWJsZSBjb3VudCA6IGludDtcbiAgICAgICAgICAgbXV0YWJsZSBlbnRyaWVzIDogQW55LnQgdF8gYXJyYXkgfSAtPiB0cmFjZVxuXG4oKiBhIHNldCBvZiBkaXJlY3QgY2hpbGRyZW4gZm9yIGEgY29tcG9zaXRlIGRvY3VtZW50ICopXG5hbmQgdHJhY2VfaWR4ID1cbiAgfCBJMFxuICB8IEkxIDogeyBtdXRhYmxlIGlkeCA6IGludCA7XG4gICAgICAgICAgIG9iaiA6ICdhIHRfO1xuICAgICAgICAgICBtdXRhYmxlIG5leHQgOiB0cmFjZV9pZHggfSAtPiB0cmFjZV9pZHhcblxuKCogVGhlIHR5cGUgc3lzdGVtIGNhbm5vdCBzZWUgdGhhdCB0IGlzIGNvdmFyaWFudCBpbiBpdHMgcGFyYW1ldGVyLlxuICAgVXNlIHRoZSBGb3JjZSB0byBjb252aW5jZSBpdC4gKilcbmFuZCArJ2EgdFxuZXh0ZXJuYWwgaW5qIDogJ2EgdF8gLT4gJ2EgdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHByaiA6ICdhIHQgLT4gJ2EgdF8gPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBwcmoyIDogJ2EgdCB0IC0+ICdhIHRfIHRfID0gXCIlaWRlbnRpdHlcIlxuXG4oKiBCYXNpYyBjb21iaW5hdG9ycyAqKVxubGV0IHJldHVybiB4ID0gaW5qIChQdXJlIHgpXG5sZXQgcHVyZSB4ID0gaW5qIChQdXJlIHgpXG5cbmxldCBpc19wdXJlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSB4IC0+IFNvbWUgeFxuICB8IF8gLT4gTm9uZVxuXG5sZXQgZHVtbXkgPSBQdXJlIChBbnkuYW55ICgpKVxuXG5sZXQgb3BlcmF0b3IgZGVzYyA9XG4gIE9wZXJhdG9yIHsgdmFsdWUgPSBFdmFsX25vbmU7IHRyYWNlID0gVDA7IGRlc2M7IHRyYWNlX2lkeCA9IEkwIH1cblxubGV0IG1hcCB4IH5mID0gaW5qIChcbiAgICBtYXRjaCBwcmogeCB3aXRoXG4gICAgfCBQdXJlIHZ4IC0+IFB1cmUgKGYgdngpXG4gICAgfCB4IC0+IG9wZXJhdG9yIChNYXAgKHgsIGYpKVxuICApXG5cbmxldCBtYXAyIHggeSB+ZiA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHgsIHByaiB5IHdpdGhcbiAgICB8IFB1cmUgdngsIFB1cmUgdnkgLT4gUHVyZSAoZiB2eCB2eSlcbiAgICB8IHgsIHkgLT4gb3BlcmF0b3IgKE1hcDIgKHgsIHksIGYpKVxuICApXG5cbmxldCBwYWlyIHggeSA9IGluaiAoXG4gICAgbWF0Y2ggcHJqIHgsIHByaiB5IHdpdGhcbiAgICB8IFB1cmUgdngsIFB1cmUgdnkgLT4gUHVyZSAodngsIHZ5KVxuICAgIHwgeCwgeSAtPiBvcGVyYXRvciAoUGFpciAoeCwgeSkpXG4gIClcblxubGV0IGFwcCBmIHggPSBpbmogKFxuICAgIG1hdGNoIHByaiBmLCBwcmogeCB3aXRoXG4gICAgfCBQdXJlIHZmLCBQdXJlIHZ4IC0+IFB1cmUgKHZmIHZ4KVxuICAgIHwgZiwgeCAtPiBvcGVyYXRvciAoQXBwIChmLCB4KSlcbiAgKVxuXG5sZXQgam9pbiBjaGlsZCA9IGluaiAoXG4gICAgbWF0Y2ggcHJqMiBjaGlsZCB3aXRoXG4gICAgfCBQdXJlIHYgLT4gdlxuICAgIHwgY2hpbGQgLT4gb3BlcmF0b3IgKEpvaW4geyBjaGlsZDsgaW50ZXJtZWRpYXRlID0gTm9uZSB9KVxuICApXG5cbmxldCBiaW5kIHggfmYgPSBqb2luIChtYXAgfmYgeClcblxuKCogTWFuYWdlbWVudCBvZiB0cmFjZSBpbmRpY2VzICopXG5cbmxldCBhZGRyIG9jIG9iaiA9XG4gIFByaW50Zi5mcHJpbnRmIG9jIFwiMHglMDh4XCIgKE9iai5tYWdpYyBvYmogOiBpbnQpXG5cbmV4dGVybmFsIHRfZXF1YWwgOiBfIHRfIC0+IF8gdF8gLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsIG9ial90IDogJ2EgdF8gLT4gQW55LnQgdF8gPSBcIiVpZGVudGl0eVwiXG5cbmxldCByZWMgZHVtcF90cmFjZSA6IHR5cGUgYS4gYSB0XyAtPiB1bml0ID1cbiAgZnVuIG9iaiAtPiBtYXRjaCBvYmogd2l0aFxuICB8IFB1cmUgXyAtPiBQcmludGYuZXByaW50ZiBcIiVhOiBQdXJlIF9cXG4lIVwiIGFkZHIgb2JqXG4gIHwgT3BlcmF0b3IgdCAtPlxuICAgIFByaW50Zi5lcHJpbnRmIFwiJWE6IE9wZXJhdG9yIF8gLT4gJWFcXG4lIVwiIGFkZHIgb2JqIGR1bXBfdHJhY2VfYXV4IHQudHJhY2U7XG4gICAgYmVnaW4gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+ICgpXG4gICAgICB8IFQxIGEgLT4gZHVtcF90cmFjZSBhXG4gICAgICB8IFQyIChhLGIpIC0+IGR1bXBfdHJhY2UgYTsgZHVtcF90cmFjZSBiXG4gICAgICB8IFQzIChhLGIsYykgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGI7IGR1bXBfdHJhY2UgY1xuICAgICAgfCBUNCAoYSxiLGMsZCkgLT4gZHVtcF90cmFjZSBhOyBkdW1wX3RyYWNlIGI7IGR1bXBfdHJhY2UgYzsgZHVtcF90cmFjZSBkXG4gICAgICB8IFRuIHQgLT4gQXJyYXkuaXRlciBkdW1wX3RyYWNlIHQuZW50cmllc1xuICAgIGVuZFxuICB8IFJvb3QgXyAtPiBQcmludGYuZXByaW50ZiBcIiVhOiBSb290IF9cXG4lIVwiIGFkZHIgb2JqXG5cbmFuZCBkdW1wX3RyYWNlX2F1eCBvYyA9IGZ1bmN0aW9uXG4gIHwgVDAgLT4gUHJpbnRmLmZwcmludGYgb2MgXCJUMFwiXG4gIHwgVDEgYSAtPiBQcmludGYuZnByaW50ZiBvYyBcIlQxICVhXCIgYWRkciBhXG4gIHwgVDIgKGEsYikgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQyICglYSwgJWEpXCIgYWRkciBhIGFkZHIgYlxuICB8IFQzIChhLGIsYykgLT5cbiAgICBQcmludGYuZnByaW50ZiBvYyBcIlQzICglYSwgJWEsICVhKVwiIGFkZHIgYSBhZGRyIGIgYWRkciBjXG4gIHwgVDQgKGEsYixjLGQpIC0+XG4gICAgUHJpbnRmLmZwcmludGYgb2MgXCJUNCAoJWEsICVhLCAlYSwgJWEpXCIgYWRkciBhIGFkZHIgYiBhZGRyIGMgYWRkciBkXG4gIHwgVG4gdCAtPlxuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwiVG4ge2FjdGl2ZSA9ICVkOyBjb3VudCA9ICVkOyBlbnRyaWVzID0gXCJcbiAgICAgIHQuYWN0aXZlIHQuY291bnQ7XG4gICAgQXJyYXkuaXRlciAoUHJpbnRmLmZwcmludGYgb2MgXCIoJWEpXCIgYWRkcikgdC5lbnRyaWVzO1xuICAgIFByaW50Zi5mcHJpbnRmIG9jIFwifVwiXG5cbmxldCBkdW1wX3RyYWNlIHggPSBkdW1wX3RyYWNlIChvYmpfdCAocHJqIHgpKVxuXG5sZXQgYWRkX2lkeCBvYmogaWR4ID0gZnVuY3Rpb25cbiAgfCBQdXJlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgUm9vdCB0JyAtPiB0Jy50cmFjZV9pZHggPC0gSTEgeyBpZHg7IG9iajsgbmV4dCA9IHQnLnRyYWNlX2lkeCB9XG4gIHwgT3BlcmF0b3IgdCcgLT4gdCcudHJhY2VfaWR4IDwtIEkxIHsgaWR4OyBvYmo7IG5leHQgPSB0Jy50cmFjZV9pZHggfVxuXG5sZXQgcmVjIHJlbV9pZHhfcmVjIG9iaiA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCBhcyBzZWxmIC0+XG4gICAgaWYgdF9lcXVhbCB0Lm9iaiBvYmpcbiAgICB0aGVuICh0LmlkeCwgdC5uZXh0KVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGlkeCwgcmVzdWx0ID0gcmVtX2lkeF9yZWMgb2JqIHQubmV4dCBpblxuICAgICAgdC5uZXh0IDwtIHJlc3VsdDtcbiAgICAgIChpZHgsIHNlbGYpXG4gICAgKVxuXG4oKiByZW1vdmUgW29ial0gZnJvbSB0aGUgbHdkJ3MgdHJhY2UuICopXG5sZXQgcmVtX2lkeCBvYmogPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+XG4gICAgbGV0IGlkeCwgdHJhY2VfaWR4ID0gcmVtX2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeCBpblxuICAgIHQnLnRyYWNlX2lkeCA8LSB0cmFjZV9pZHg7IGlkeFxuICB8IE9wZXJhdG9yIHQnIC0+XG4gICAgbGV0IGlkeCwgdHJhY2VfaWR4ID0gcmVtX2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeCBpblxuICAgIHQnLnRyYWNlX2lkeCA8LSB0cmFjZV9pZHg7IGlkeFxuXG4oKiBtb3ZlIFtvYmpdIGZyb20gb2xkIGluZGV4IHRvIG5ldyBpbmRleC4gKilcbmxldCByZWMgbW92X2lkeF9yZWMgb2JqIG9sZGlkeCBuZXdpZHggPSBmdW5jdGlvblxuICB8IEkwIC0+IGFzc2VydCBmYWxzZVxuICB8IEkxIHQgLT5cbiAgICBpZiB0LmlkeCA9IG9sZGlkeCAmJiB0X2VxdWFsIHQub2JqIG9ialxuICAgIHRoZW4gdC5pZHggPC0gbmV3aWR4XG4gICAgZWxzZSBtb3ZfaWR4X3JlYyBvYmogb2xkaWR4IG5ld2lkeCB0Lm5leHRcblxubGV0IG1vdl9pZHggb2JqIG9sZGlkeCBuZXdpZHggPSBmdW5jdGlvblxuICB8IFB1cmUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQnIC0+IG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQnLnRyYWNlX2lkeFxuICB8IE9wZXJhdG9yIHQnIC0+IG1vdl9pZHhfcmVjIG9iaiBvbGRpZHggbmV3aWR4IHQnLnRyYWNlX2lkeFxuXG5sZXQgcmVjIGdldF9pZHhfcmVjIG9iaiA9IGZ1bmN0aW9uXG4gIHwgSTAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSTEgdCAtPlxuICAgIGlmIHRfZXF1YWwgdC5vYmogb2JqXG4gICAgdGhlbiB0LmlkeFxuICAgIGVsc2UgZ2V0X2lkeF9yZWMgb2JqIHQubmV4dFxuXG4oKiBmaW5kIGluZGV4IG9mIFtvYmpdIGluIHRoZSBnaXZlbiBsd2QgKilcbmxldCBnZXRfaWR4IG9iaiA9IGZ1bmN0aW9uXG4gIHwgUHVyZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCcgLT4gZ2V0X2lkeF9yZWMgb2JqIHQnLnRyYWNlX2lkeFxuICB8IE9wZXJhdG9yIHQnIC0+IGdldF9pZHhfcmVjIG9iaiB0Jy50cmFjZV9pZHhcblxudHlwZSBzdGF0dXMgPVxuICB8IE5ldXRyYWxcbiAgfCBTYWZlXG4gIHwgVW5zYWZlXG5cbnR5cGUgc2Vuc2l0aXZpdHkgPVxuICB8IFN0cm9uZ1xuICB8IEZyYWdpbGVcblxuKCogUHJvcGFnYXRpbmcgaW52YWxpZGF0aW9uIHJlY3Vyc2l2ZWx5LlxuICAgRWFjaCBkb2N1bWVudCBpcyBpbnZhbGlkYXRlZCBhdCBtb3N0IG9uY2UsXG4gICBhbmQgb25seSBpZiBpdCBoYXMgW3QudmFsdWUgPSBTb21lIF9dLiAqKVxubGV0IHJlYyBpbnZhbGlkYXRlX25vZGUgOiB0eXBlIGEgLiBzdGF0dXMgcmVmIC0+IHNlbnNpdGl2aXR5IC0+IGEgdF8gLT4gdW5pdCA9XG4gIGZ1biBzdGF0dXMgc2Vuc2l0aXZpdHkgbm9kZSAtPlxuICBtYXRjaCBub2RlLCBzZW5zaXRpdml0eSB3aXRoXG4gIHwgUHVyZSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgKHt2YWx1ZTsgX30gYXMgdCksIF8gLT5cbiAgICB0LnZhbHVlIDwtIEV2YWxfbm9uZTtcbiAgICBiZWdpbiBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgICB8IEV2YWxfbm9uZSAtPiAoKVxuICAgICAgfCBFdmFsX3Byb2dyZXNzIC0+XG4gICAgICAgIHN0YXR1cyA6PSBVbnNhZmVcbiAgICAgIHwgRXZhbF9zb21lIHggLT5cbiAgICAgICAgYmVnaW4gbWF0Y2ggc2Vuc2l0aXZpdHkgd2l0aFxuICAgICAgICAgIHwgU3Ryb25nIC0+ICgpXG4gICAgICAgICAgfCBGcmFnaWxlIC0+IHN0YXR1cyA6PSBVbnNhZmVcbiAgICAgICAgZW5kO1xuICAgICAgICB0Lm9uX2ludmFsaWRhdGUgeCAoKiB1c2VyIGNhbGxiYWNrIHRoYXQge2kgb2JzZXJ2ZXN9IHRoaXMgcm9vdC4gKilcbiAgICBlbmRcbiAgfCBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX25vbmU7IF99LCBGcmFnaWxlIC0+XG4gICAgYmVnaW4gbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgICB8IFVuc2FmZSB8IFNhZmUgLT4gKClcbiAgICAgIHwgXyAtPiBzdGF0dXMgOj0gU2FmZVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHt2YWx1ZSA9IEV2YWxfbm9uZTsgX30sIF8gLT4gKClcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IEZpeCB7d3J0ID0gT3BlcmF0b3Ige3ZhbHVlID0gRXZhbF9ub25lOyBffTsgX307IF99LCBGcmFnaWxlIC0+XG4gICAgYmVnaW4gbWF0Y2ggIXN0YXR1cyB3aXRoXG4gICAgICB8IFNhZmUgfCBVbnNhZmUgLT4gKClcbiAgICAgIHwgTmV1dHJhbCAtPiBzdGF0dXMgOj0gU2FmZVxuICAgIGVuZFxuICB8IE9wZXJhdG9yIHtkZXNjID0gRml4IHt3cnQgPSBPcGVyYXRvciB7dmFsdWUgPSBFdmFsX3NvbWUgXzsgX307IF99OyBffSwgRnJhZ2lsZSAtPlxuICAgICgpXG4gIHwgT3BlcmF0b3IgdCwgXyAtPlxuICAgIGxldCBzZW5zaXRpdml0eSA9XG4gICAgICBtYXRjaCB0LnZhbHVlIHdpdGggRXZhbF9wcm9ncmVzcyAtPiBGcmFnaWxlIHwgXyAtPiBzZW5zaXRpdml0eVxuICAgIGluXG4gICAgdC52YWx1ZSA8LSBFdmFsX25vbmU7XG4gICAgKCogaW52YWxpZGF0ZSBwYXJlbnRzIHJlY3Vyc2l2ZWx5ICopXG4gICAgaW52YWxpZGF0ZV90cmFjZSBzdGF0dXMgc2Vuc2l0aXZpdHkgdC50cmFjZVxuXG4oKiBpbnZhbGlkYXRlIHJlY3Vyc2l2ZWx5IGRvY3VtZW50cyBpbiB0aGUgZ2l2ZW4gdHJhY2UgKilcbmFuZCBpbnZhbGlkYXRlX3RyYWNlIHN0YXR1cyBzZW5zaXRpdml0eSA9IGZ1bmN0aW9uXG4gIHwgVDAgLT4gKClcbiAgfCBUMSB4IC0+IGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeFxuICB8IFQyICh4LCB5KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHlcbiAgfCBUMyAoeCwgeSwgeikgLT5cbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHg7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB5O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgelxuICB8IFQ0ICh4LCB5LCB6LCB3KSAtPlxuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgeDtcbiAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHk7XG4gICAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSB6O1xuICAgIGludmFsaWRhdGVfbm9kZSBzdGF0dXMgc2Vuc2l0aXZpdHkgd1xuICB8IFRuIHQgLT5cbiAgICBsZXQgYWN0aXZlID0gdC5hY3RpdmUgaW5cbiAgICB0LmFjdGl2ZSA8LSAwO1xuICAgIGZvciBpID0gMCB0byBhY3RpdmUgLSAxIGRvXG4gICAgICBpbnZhbGlkYXRlX25vZGUgc3RhdHVzIHNlbnNpdGl2aXR5IHQuZW50cmllcy4oaSlcbiAgICBkb25lXG5cbmxldCBkZWZhdWx0X3Vuc2FmZV9tdXRhdGlvbl9sb2dnZXIgKCkgPVxuICBsZXQgY2FsbHN0YWNrID0gUHJpbnRleGMuZ2V0X2NhbGxzdGFjayAyMCBpblxuICBQcmludGYuZnByaW50ZiBzdGRlcnJcbiAgICBcIkx3ZDogdW5zYWZlIG11dGF0aW9uICh2YXJpYWJsZSBpbnZhbGlkYXRlZCBkdXJpbmcgZXZhbHVhdGlvbikgYXRcXG4lYVwiXG4gICAgUHJpbnRleGMucHJpbnRfcmF3X2JhY2t0cmFjZSBjYWxsc3RhY2tcblxubGV0IHVuc2FmZV9tdXRhdGlvbl9sb2dnZXIgPSByZWYgZGVmYXVsdF91bnNhZmVfbXV0YXRpb25fbG9nZ2VyXG5cbmxldCBkb19pbnZhbGlkYXRlIHNlbnNpdGl2aXR5IG5vZGUgPVxuICBsZXQgc3RhdHVzID0gcmVmIE5ldXRyYWwgaW5cbiAgaW52YWxpZGF0ZV9ub2RlIHN0YXR1cyBzZW5zaXRpdml0eSBub2RlO1xuICBsZXQgdW5zYWZlID1cbiAgICBtYXRjaCAhc3RhdHVzIHdpdGhcbiAgICB8IE5ldXRyYWwgfCBTYWZlIC0+IGZhbHNlXG4gICAgfCBVbnNhZmUgLT4gdHJ1ZVxuICBpblxuICBpZiB1bnNhZmUgdGhlbiAhdW5zYWZlX211dGF0aW9uX2xvZ2dlciAoKVxuXG4oKiBWYXJpYWJsZXMgKilcbnR5cGUgJ2EgdmFyID0gJ2EgdF9cbmxldCB2YXIgeCA9IG9wZXJhdG9yIChWYXIge2JpbmRpbmcgPSB4fSlcbmxldCBnZXQgeCA9IGluaiB4XG5cbmxldCBzZXQgKHZ4Ol8gdmFyKSB4IDogdW5pdCA9XG4gIG1hdGNoIHZ4IHdpdGhcbiAgfCBPcGVyYXRvciAoe2Rlc2MgPSBWYXIgdjsgX30pIC0+XG4gICAgKCogc2V0IHRoZSB2YXJpYWJsZSwgYW5kIGludmFsaWRhdGUgYWxsIG9ic2VydmVycyAqKVxuICAgIHYuYmluZGluZyA8LSB4O1xuICAgIGRvX2ludmFsaWRhdGUgU3Ryb25nIHZ4XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE9wZXJhdG9yICh7ZGVzYyA9IFZhciB2OyBffSkgLT4gdi5iaW5kaW5nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHVwZGF0ZSBmIHYgPSBzZXQgdiAoZiAocGVlayB2KSlcblxubGV0IG1heV91cGRhdGUgZiB2ID1cbiAgbWF0Y2ggZiAocGVlayB2KSB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBzZXQgdiB4XG5cbigqIFByaW1pdGl2ZXMgKilcbnR5cGUgJ2EgcHJpbSA9ICdhIHRcbmxldCBwcmltIH5hY3F1aXJlIH5yZWxlYXNlID1cbiAgaW5qIChvcGVyYXRvciAoUHJpbSB7IGFjcXVpcmU7IHJlbGVhc2UgfSkpXG5sZXQgZ2V0X3ByaW0geCA9IHhcblxubGV0IGludmFsaWRhdGUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBPcGVyYXRvciB7ZGVzYyA9IFByaW0gcDsgdmFsdWU7IF99IGFzIHQgLT5cbiAgICAoKiB0aGUgdmFsdWUgaXMgaW52YWxpZGF0ZWQsIGJlIHN1cmUgdG8gaW52YWxpZGF0ZSBhbGwgcGFyZW50cyBhcyB3ZWxsICopXG4gICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBFdmFsX25vbmUgLT4gKClcbiAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiBkb19pbnZhbGlkYXRlIEZyYWdpbGUgdDtcbiAgICAgIHwgRXZhbF9zb21lIHYgLT5cbiAgICAgICAgZG9faW52YWxpZGF0ZSBTdHJvbmcgdDtcbiAgICAgICAgcC5yZWxlYXNlIHggdlxuICAgIGVuZFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqIEZpeCBwb2ludCAqKVxuXG5sZXQgZml4IGRvYyB+d3J0ID0gbWF0Y2ggcHJqIHdydCB3aXRoXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiBkb2NcbiAgfCBPcGVyYXRvciBfIGFzIHdydCAtPiBpbmogKG9wZXJhdG9yIChGaXgge2RvYyA9IHByaiBkb2M7IHdydH0pKVxuXG50eXBlIHJlbGVhc2VfbGlzdCA9XG4gIHwgUmVsZWFzZV9kb25lXG4gIHwgUmVsZWFzZV9tb3JlIDpcbiAgICAgIHsgb3JpZ2luIDogJ2EgdF87IGVsZW1lbnQgOiAnYiB0XzsgbmV4dCA6IHJlbGVhc2VfbGlzdCB9IC0+IHJlbGVhc2VfbGlzdFxuXG50eXBlIHJlbGVhc2VfcXVldWUgPSByZWxlYXNlX2xpc3QgcmVmXG5sZXQgbWFrZV9yZWxlYXNlX3F1ZXVlICgpID0gcmVmIFJlbGVhc2VfZG9uZVxuXG50eXBlIHJlbGVhc2VfZmFpbHVyZSA9IGV4biAqIFByaW50ZXhjLnJhd19iYWNrdHJhY2VcblxuKCogW3N1Yl9yZWxlYXNlIFtdIG9yaWdpbiBzZWxmXSBpcyBjYWxsZWQgd2hlbiBbb3JpZ2luXSBpcyByZWxlYXNlZCxcbiAgIHdoZXJlIFtvcmlnaW5dIGlzIHJlYWNoYWJsZSBmcm9tIFtzZWxmXSdzIHRyYWNlLlxuICAgV2UncmUgZ29pbmcgdG8gcmVtb3ZlIFtvcmlnaW5dIGZyb20gdGhhdCB0cmFjZSBhcyBbb3JpZ2luXSBpcyBub3cgZGVhZC5cblxuICAgW3N1Yl9yZWxlYXNlXSBjYW5ub3QgcmFpc2UuXG4gICBJZiBhIHByaW1pdGl2ZSByYWlzZXMsIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0IGFuZCBhIHdhcm5pbmcgaXMgZW1pdHRlZC4gKilcbmxldCByZWMgc3ViX3JlbGVhc2VcbiAgOiB0eXBlIGEgYiAuIHJlbGVhc2VfZmFpbHVyZSBsaXN0IC0+IGEgdF8gLT4gYiB0XyAtPiByZWxlYXNlX2ZhaWx1cmUgbGlzdFxuICA9IGZ1biBmYWlsdXJlcyBvcmlnaW4gLT4gZnVuY3Rpb25cbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFB1cmUgXyAtPiBmYWlsdXJlc1xuICAgIHwgT3BlcmF0b3IgdCBhcyBzZWxmIC0+XG4gICAgICAoKiBjb21wdXRlIFt0LnRyYWNlIFxcIHtvcmlnaW59XSAqKVxuICAgICAgbGV0IHRyYWNlID0gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICAgIHwgVDAgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDEgeCAtPiBhc3NlcnQgKHRfZXF1YWwgeCBvcmlnaW4pOyBUMFxuICAgICAgICB8IFQyICh4LCB5KSAtPlxuICAgICAgICAgIGlmIHRfZXF1YWwgeCBvcmlnaW4gdGhlbiBUMSB5XG4gICAgICAgICAgZWxzZSBpZiB0X2VxdWFsIHkgb3JpZ2luIHRoZW4gVDEgeFxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDMgKHgsIHksIHopIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQyICh5LCB6KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQyICh4LCB6KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB6IG9yaWdpbiB0aGVuIFQyICh4LCB5KVxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgICAgICAgaWYgdF9lcXVhbCB4IG9yaWdpbiB0aGVuIFQzICh5LCB6LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB5IG9yaWdpbiB0aGVuIFQzICh4LCB6LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB6IG9yaWdpbiB0aGVuIFQzICh4LCB5LCB3KVxuICAgICAgICAgIGVsc2UgaWYgdF9lcXVhbCB3IG9yaWdpbiB0aGVuIFQzICh4LCB5LCB6KVxuICAgICAgICAgIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgVG4gdG4gYXMgdHJhY2UgLT5cbiAgICAgICAgICBsZXQgcmV2aWR4ID0gcmVtX2lkeCBzZWxmIG9yaWdpbiBpblxuICAgICAgICAgIGFzc2VydCAodF9lcXVhbCB0bi5lbnRyaWVzLihyZXZpZHgpIG9yaWdpbik7XG4gICAgICAgICAgbGV0IGNvdW50ID0gdG4uY291bnQgLSAxIGluXG4gICAgICAgICAgdG4uY291bnQgPC0gY291bnQ7XG4gICAgICAgICAgaWYgcmV2aWR4IDwgY291bnQgdGhlbiAoXG4gICAgICAgICAgICBsZXQgb2JqID0gdG4uZW50cmllcy4oY291bnQpIGluXG4gICAgICAgICAgICB0bi5lbnRyaWVzLihyZXZpZHgpIDwtIG9iajtcbiAgICAgICAgICAgIHRuLmVudHJpZXMuKGNvdW50KSA8LSBkdW1teTtcbiAgICAgICAgICAgIG1vdl9pZHggc2VsZiBjb3VudCByZXZpZHggb2JqXG4gICAgICAgICAgKSBlbHNlXG4gICAgICAgICAgICB0bi5lbnRyaWVzLihyZXZpZHgpIDwtIGR1bW15O1xuICAgICAgICAgIGlmIHRuLmFjdGl2ZSA+IGNvdW50IHRoZW4gdG4uYWN0aXZlIDwtIGNvdW50O1xuICAgICAgICAgIGlmIGNvdW50ID0gNCB0aGVuIChcbiAgICAgICAgICAgICgqIGRvd25ncmFkZSB0byBbVDRdIHRvIHNhdmUgc3BhY2UgKilcbiAgICAgICAgICAgIGxldCBhID0gdG4uZW50cmllcy4oMCkgYW5kIGIgPSB0bi5lbnRyaWVzLigxKSBpblxuICAgICAgICAgICAgbGV0IGMgPSB0bi5lbnRyaWVzLigyKSBhbmQgZCA9IHRuLmVudHJpZXMuKDMpIGluXG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBhIDogaW50KTtcbiAgICAgICAgICAgIGlnbm9yZSAocmVtX2lkeCBzZWxmIGIgOiBpbnQpO1xuICAgICAgICAgICAgaWdub3JlIChyZW1faWR4IHNlbGYgYyA6IGludCk7XG4gICAgICAgICAgICBpZ25vcmUgKHJlbV9pZHggc2VsZiBkIDogaW50KTtcbiAgICAgICAgICAgIFQ0IChhLCBiLCBjLCBkKVxuICAgICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHRuLmVudHJpZXMgaW5cbiAgICAgICAgICAgIGlmIGNvdW50IDw9IGxlbiBsc3IgMiB0aGVuXG4gICAgICAgICAgICAgIFRuIHsgYWN0aXZlID0gdG4uYWN0aXZlOyBjb3VudCA9IHRuLmNvdW50O1xuICAgICAgICAgICAgICAgICAgIGVudHJpZXMgPSBBcnJheS5zdWIgdG4uZW50cmllcyAwIChsZW4gbHNyIDEpIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdHJhY2VcbiAgICAgICAgICApXG4gICAgICBpblxuICAgICAgdC50cmFjZSA8LSB0cmFjZTtcbiAgICAgIG1hdGNoIHRyYWNlIHdpdGhcbiAgICAgIHwgVDAgLT5cbiAgICAgICAgKCogW3NlbGZdIGlzIG5vdCBhY3RpdmUgYW55bW9yZSwgc2luY2UgaXQncyBub3QgcmVhY2hhYmxlXG4gICAgICAgICAgIGZyb20gYW55IHJvb3QuIFdlIGNhbiByZWxlYXNlIGl0cyBjYWNoZWQgdmFsdWUgYW5kXG4gICAgICAgICAgIHJlY3Vyc2l2ZWx5IHJlbGVhc2UgaXRzIHN1YnRyZWUuICopXG4gICAgICAgIGxldCB2YWx1ZSA9IHQudmFsdWUgaW5cbiAgICAgICAgdC52YWx1ZSA8LSBFdmFsX3Byb2dyZXNzO1xuICAgICAgICBiZWdpbiBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgICAgIHwgTWFwICAoeCwgXykgLT4gc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiB4XG4gICAgICAgICAgfCBNYXAyICh4LCB5LCBfKSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBQYWlyICh4LCB5KSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBBcHAgICh4LCB5KSAtPlxuICAgICAgICAgICAgc3ViX3JlbGVhc2UgKHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgeCkgc2VsZiB5XG4gICAgICAgICAgfCBKb2luICh7IGNoaWxkOyBpbnRlcm1lZGlhdGUgfSBhcyB0KSAtPlxuICAgICAgICAgICAgbGV0IGZhaWx1cmVzID0gc3ViX3JlbGVhc2UgZmFpbHVyZXMgc2VsZiBjaGlsZCBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50ZXJtZWRpYXRlIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgIHwgU29tZSBjaGlsZCcgLT5cbiAgICAgICAgICAgICAgICB0LmludGVybWVkaWF0ZSA8LSBOb25lO1xuICAgICAgICAgICAgICAgIHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHNlbGYgY2hpbGQnXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IFZhciAgXyAtPiBmYWlsdXJlc1xuICAgICAgICAgIHwgRml4IHtkb2M7IHdydH0gLT5cbiAgICAgICAgICAgIHN1Yl9yZWxlYXNlIChzdWJfcmVsZWFzZSBmYWlsdXJlcyBzZWxmIHdydCkgc2VsZiBkb2NcbiAgICAgICAgICB8IFByaW0gdCAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgICAgICAgICB8IEV2YWxfbm9uZSAgfCBFdmFsX3Byb2dyZXNzIC0+IGZhaWx1cmVzXG4gICAgICAgICAgICAgIHwgRXZhbF9zb21lIHggLT5cbiAgICAgICAgICAgICAgICBiZWdpbiBtYXRjaCB0LnJlbGVhc2UgKGluaiBzZWxmKSB4IHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgKCkgLT4gZmFpbHVyZXNcbiAgICAgICAgICAgICAgICAgIHwgZXhjZXB0aW9uIGV4biAtPlxuICAgICAgICAgICAgICAgICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgICAgICAgICAgICAgICAoZXhuLCBidCkgOjogZmFpbHVyZXNcbiAgICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICBlbmRcbiAgICAgIHwgXyAtPiBmYWlsdXJlc1xuXG4oKiBbc3ViX2FjcXVpcmVdIGNhbm5vdCByYWlzZSAqKVxubGV0IHJlYyBzdWJfYWNxdWlyZSA6IHR5cGUgYSBiIC4gYSB0XyAtPiBiIHRfIC0+IHVuaXQgPSBmdW4gb3JpZ2luIC0+XG4gIGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiAoKVxuICB8IE9wZXJhdG9yIHQgYXMgc2VsZiAtPlxuICAgICgqIFthY3F1aXJlXSBpcyB0cnVlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhpcyBvcGVyYXRvclxuICAgICAgIGlzIHVzZWQsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0byBhY3F1aXJlIGl0cyBjaGlsZHJlbiAqKVxuICAgIGxldCBhY3F1aXJlID0gbWF0Y2ggdC50cmFjZSB3aXRoIFQwIC0+IHRydWUgfCBfIC0+IGZhbHNlIGluXG4gICAgbGV0IHRyYWNlID0gbWF0Y2ggdC50cmFjZSB3aXRoXG4gICAgICB8IFQwIC0+IFQxIG9yaWdpblxuICAgICAgfCBUMSB4IC0+IFQyIChvcmlnaW4sIHgpXG4gICAgICB8IFQyICh4LCB5KSAtPiBUMyAob3JpZ2luLCB4LCB5KVxuICAgICAgfCBUMyAoeCwgeSwgeikgLT4gVDQgKG9yaWdpbiwgeCwgeSwgeilcbiAgICAgIHwgVDQgKHgsIHksIHosIHcpIC0+XG4gICAgICAgIGxldCBvYmpfb3JpZ2luID0gb2JqX3Qgb3JpZ2luIGluXG4gICAgICAgIGxldCBlbnRyaWVzID1cbiAgICAgICAgICBbfCBvYmpfdCB4OyBvYmpfdCB5OyBvYmpfdCB6OyBvYmpfdCB3OyBvYmpfb3JpZ2luOyBkdW1teTsgZHVtbXk7IGR1bW15IHxdXG4gICAgICAgIGluXG4gICAgICAgIGZvciBpID0gMCB0byA0IGRvIGFkZF9pZHggc2VsZiBpIGVudHJpZXMuKGkpIGRvbmU7XG4gICAgICAgIFRuIHsgYWN0aXZlID0gNTsgY291bnQgPSA1OyBlbnRyaWVzIH1cbiAgICAgIHwgVG4gdG4gYXMgdHJhY2UgLT5cbiAgICAgICAgbGV0IGluZGV4ID0gdG4uY291bnQgaW5cbiAgICAgICAgbGV0IGVudHJpZXMsIHRyYWNlID1cbiAgICAgICAgICAoKiBwb3NzaWJseSByZXNpemUgYXJyYXkgW2VudHJpZXNdICopXG4gICAgICAgICAgaWYgaW5kZXggPCBBcnJheS5sZW5ndGggdG4uZW50cmllcyB0aGVuIChcbiAgICAgICAgICAgIHRuLmNvdW50IDwtIHRuLmNvdW50ICsgMTtcbiAgICAgICAgICAgICh0bi5lbnRyaWVzLCB0cmFjZSlcbiAgICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICAgbGV0IGVudHJpZXMgPSBBcnJheS5tYWtlIChpbmRleCAqIDIpIGR1bW15IGluXG4gICAgICAgICAgICBBcnJheS5ibGl0IHRuLmVudHJpZXMgMCBlbnRyaWVzIDAgaW5kZXg7XG4gICAgICAgICAgICAoZW50cmllcywgVG4geyBhY3RpdmUgPSB0bi5hY3RpdmU7IGNvdW50ID0gaW5kZXggKyAxOyBlbnRyaWVzIH0pXG4gICAgICAgICAgKVxuICAgICAgICBpblxuICAgICAgICBsZXQgb2JqX29yaWdpbiA9IG9ial90IG9yaWdpbiBpblxuICAgICAgICBlbnRyaWVzLihpbmRleCkgPC0gb2JqX29yaWdpbjtcbiAgICAgICAgYWRkX2lkeCBzZWxmIGluZGV4IG9ial9vcmlnaW47XG4gICAgICAgIHRyYWNlXG4gICAgaW5cbiAgICB0LnRyYWNlIDwtIHRyYWNlO1xuICAgIGlmIGFjcXVpcmUgdGhlbiAoXG4gICAgICAoKiBhY3F1aXJlIGltbWVkaWF0ZSBjaGlsZHJlbiwgYW5kIHNvIG9uIHJlY3Vyc2l2ZWx5ICopXG4gICAgICBtYXRjaCB0LmRlc2Mgd2l0aFxuICAgICAgfCBNYXAgICh4LCBfKSAtPiBzdWJfYWNxdWlyZSBzZWxmIHhcbiAgICAgIHwgTWFwMiAoeCwgeSwgXykgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgUGFpciAoeCwgeSkgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgQXBwICAoeCwgeSkgLT5cbiAgICAgICAgc3ViX2FjcXVpcmUgc2VsZiB4O1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHlcbiAgICAgIHwgRml4ICB7ZG9jOyB3cnR9IC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgZG9jO1xuICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIHdydFxuICAgICAgfCBKb2luIHsgY2hpbGQ7IGludGVybWVkaWF0ZSB9IC0+XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgY2hpbGQ7XG4gICAgICAgIGJlZ2luIG1hdGNoIGludGVybWVkaWF0ZSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIF8gLT5cbiAgICAgICAgICAgIGFzc2VydCBmYWxzZSAoKiB0aGlzIGNhbid0IGluaXRpYWxpemVkIGFscmVhZHksIGZpcnN0LXRpbWUgYWNxdWlyZSAqKVxuICAgICAgICBlbmRcbiAgICAgIHwgVmFyICBfIC0+ICgpXG4gICAgICB8IFByaW0gXyAtPiAoKVxuICAgIClcblxuKCogbWFrZSBzdXJlIHRoYXQgW29yaWdpbl0gaXMgaW4gW3NlbGYudHJhY2VdLCBwYXNzZWQgYXMgbGFzdCBhcmcuICopXG5sZXQgYWN0aXZhdGVfdHJhY2luZyBzZWxmIG9yaWdpbiA9IGZ1bmN0aW9uXG4gIHwgVG4gdG4gLT5cbiAgICBsZXQgaWR4ID0gZ2V0X2lkeCBzZWxmIG9yaWdpbiBpbiAoKiBpbmRleCBvZiBbc2VsZl0gaW4gW29yaWdpbi50cmFjZV9pZHhdICopXG4gICAgbGV0IGFjdGl2ZSA9IHRuLmFjdGl2ZSBpblxuICAgICgqIFtpZHggPCBhY3RpdmVdIG1lYW5zIFtzZWxmXSBpcyBhbHJlYWR5IHRyYWNlZCBieSBbb3JpZ2luXS5cbiAgICAgICBXZSBvbmx5IGhhdmUgdG8gYWRkIFtzZWxmXSB0byB0aGUgZW50cmllcyBpZiBbaWR4ID49IGFjdGl2ZV0uICopXG4gICAgaWYgaWR4ID49IGFjdGl2ZSB0aGVuIChcbiAgICAgIHRuLmFjdGl2ZSA8LSBhY3RpdmUgKyAxO1xuICAgICk7XG4gICAgaWYgaWR4ID4gYWN0aXZlIHRoZW4gKFxuICAgICAgKCogc3dhcCB3aXRoIGxhc3QgZW50cnkgaW4gW3RuLmVudHJpZXNdICopXG4gICAgICBsZXQgb2xkID0gdG4uZW50cmllcy4oYWN0aXZlKSBpblxuICAgICAgdG4uZW50cmllcy4oaWR4KSA8LSBvbGQ7XG4gICAgICB0bi5lbnRyaWVzLihhY3RpdmUpIDwtIG9ial90IG9yaWdpbjtcbiAgICAgIG1vdl9pZHggc2VsZiBhY3RpdmUgaWR4IG9sZDtcbiAgICAgIG1vdl9pZHggc2VsZiBpZHggYWN0aXZlIG9yaWdpblxuICAgIClcbiAgfCBfIC0+ICgpXG5cbmxldCBzdWJfaXNfZGFtYWdlZCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFB1cmUgXyAtPiBmYWxzZVxuICB8IE9wZXJhdG9yIHt2YWx1ZTsgX30gLT5cbiAgICBtYXRjaCB2YWx1ZSB3aXRoXG4gICAgfCBFdmFsX25vbmUgLT4gdHJ1ZVxuICAgIHwgRXZhbF9zb21lIF8gLT4gZmFsc2VcbiAgICB8IEV2YWxfcHJvZ3Jlc3MgLT4gYXNzZXJ0IGZhbHNlXG5cbigqIFtzdWJfc2FtcGxlIG9yaWdpbiBzZWxmXSBjb21wdXRlcyBhIHZhbHVlIGZvciBbc2VsZl0uXG5cbiAgIFtzdWJfc2FtcGxlXSByYWlzZSBpZiBhbnkgdXNlci1wcm92aWRlZCBjb21wdXRhdGlvbiByYWlzZXMuXG4gICBHcmFwaCB3aWxsIGJlIGxlZnQgaW4gYSBjb2hlcmVudCBzdGF0ZSBidXQgZXhjZXB0aW9uIHdpbGwgYmUgcHJvcGFnYXRlZFxuICAgdG8gdGhlIG9ic2VydmVyLiAqKVxubGV0IHN1Yl9zYW1wbGUgcXVldWUgPVxuICBsZXQgcmVjIGF1eCA6IHR5cGUgYSBiIC4gYSB0XyAtPiBiIHRfIC0+IGIgPSBmdW4gb3JpZ2luIC0+XG4gICAgZnVuY3Rpb25cbiAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICB8IFB1cmUgeCAtPiB4XG4gICAgfCBPcGVyYXRvciB0IGFzIHNlbGYgLT5cbiAgICAgICgqIHRyeSB0byB1c2UgY2FjaGVkIHZhbHVlLCBpZiBwcmVzZW50ICopXG4gICAgICBtYXRjaCB0LnZhbHVlIHdpdGhcbiAgICAgIHwgRXZhbF9zb21lIHZhbHVlIC0+XG4gICAgICAgIGFjdGl2YXRlX3RyYWNpbmcgc2VsZiBvcmlnaW4gdC50cmFjZTtcbiAgICAgICAgdmFsdWVcbiAgICAgIHwgXyAtPlxuICAgICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICAgIGxldCByZXN1bHQgOiBiID0gbWF0Y2ggdC5kZXNjIHdpdGhcbiAgICAgICAgICB8IE1hcCAgKHgsIGYpIC0+IGYgKGF1eCBzZWxmIHgpXG4gICAgICAgICAgfCBNYXAyICh4LCB5LCBmKSAtPiBmIChhdXggc2VsZiB4KSAoYXV4IHNlbGYgeSlcbiAgICAgICAgICB8IFBhaXIgKHgsIHkpIC0+IChhdXggc2VsZiB4LCBhdXggc2VsZiB5KVxuICAgICAgICAgIHwgQXBwICAoZiwgeCkgLT4gKGF1eCBzZWxmIGYpIChhdXggc2VsZiB4KVxuICAgICAgICAgIHwgRml4IHtkb2M7IHdydH0gLT5cbiAgICAgICAgICAgIGxldCBfID0gYXV4IHNlbGYgd3J0IGluXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXV4IHNlbGYgZG9jIGluXG4gICAgICAgICAgICBpZiBzdWJfaXNfZGFtYWdlZCB3cnQgdGhlblxuICAgICAgICAgICAgICBhdXggb3JpZ2luIHNlbGZcbiAgICAgICAgICAgIGVsc2UgKFxuICAgICAgICAgICAgICBpZiBzdWJfaXNfZGFtYWdlZCBkb2MgdGhlblxuICAgICAgICAgICAgICAgIGRvX2ludmFsaWRhdGUgRnJhZ2lsZSBzZWxmO1xuICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgIClcbiAgICAgICAgICB8IEpvaW4geCAtPlxuICAgICAgICAgICAgbGV0IGludGVybWVkaWF0ZSA9XG4gICAgICAgICAgICAgICgqIFdlIGhhdmVuJ3QgdG91Y2hlZCBhbnkgc3RhdGUgeWV0LFxuICAgICAgICAgICAgICAgICBpdCBpcyBzYWZlIGZvciBbYXV4XSB0byByYWlzZSAqKVxuICAgICAgICAgICAgICBhdXggc2VsZiB4LmNoaWxkXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggeC5pbnRlcm1lZGlhdGUgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICB4LmludGVybWVkaWF0ZSA8LSBTb21lIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgfCBTb21lIHgnIHdoZW4geCcgIT0gaW50ZXJtZWRpYXRlIC0+XG4gICAgICAgICAgICAgICAgcXVldWUgOj0gUmVsZWFzZV9tb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0gc2VsZjtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IHgnO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gIXF1ZXVlO1xuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB4LmludGVybWVkaWF0ZSA8LSBTb21lIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgICBzdWJfYWNxdWlyZSBzZWxmIGludGVybWVkaWF0ZTtcbiAgICAgICAgICAgICAgfCBTb21lIF8gLT4gKClcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGF1eCBzZWxmIGludGVybWVkaWF0ZVxuICAgICAgICAgIHwgVmFyICB4IC0+IHguYmluZGluZ1xuICAgICAgICAgIHwgUHJpbSB0IC0+IHQuYWNxdWlyZSAoaW5qIHNlbGYpXG4gICAgICAgIGluXG4gICAgICAgIGJlZ2luIG1hdGNoIHQudmFsdWUgd2l0aFxuICAgICAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiB0LnZhbHVlIDwtIEV2YWxfc29tZSByZXN1bHQ7XG4gICAgICAgICAgfCBFdmFsX25vbmUgfCBFdmFsX3NvbWUgXyAtPiAoKVxuICAgICAgICBlbmQ7XG4gICAgICAgICgqIFtzZWxmXSBqdXN0IGJlY2FtZSBhY3RpdmUsIHNvIGl0IG1heSBpbnZhbGlkYXRlIFtvcmlnaW5dIGluIGNhc2UgaXRzXG4gICAgICAgICAgIHZhbHVlIGNoYW5nZXMgYmVjYXVzZSBvZiBbdC5kZXNjXSwgbGlrZSBpZiBpdCdzIGEgdmFyaWFibGUgYW5kIGdldHNcbiAgICAgICAgICAgbXV0YXRlZCwgb3IgaWYgaXQncyBhIHByaW1pdGl2ZSB0aGF0IGdldHMgaW52YWxpZGF0ZWQuXG4gICAgICAgICAgIFdlIG5lZWQgdG8gcHV0IFtvcmlnaW5dIGludG8gW3NlbGYudHJhY2VdIGluIGNhc2UgaXQgaXNuJ3QgdGhlcmUgeWV0LiAqKVxuICAgICAgICBhY3RpdmF0ZV90cmFjaW5nIHNlbGYgb3JpZ2luIHQudHJhY2U7XG4gICAgICAgIHJlc3VsdFxuICBpblxuICBhdXhcblxudHlwZSAnYSByb290ID0gJ2EgdFxuXG5sZXQgb2JzZXJ2ZSA/KG9uX2ludmFsaWRhdGU9aWdub3JlKSBjaGlsZCA6IF8gcm9vdCA9XG4gIGxldCByb290ID0gUm9vdCB7XG4gICAgICBjaGlsZCA9IHByaiBjaGlsZDtcbiAgICAgIHZhbHVlID0gRXZhbF9ub25lO1xuICAgICAgb25faW52YWxpZGF0ZTtcbiAgICAgIHRyYWNlX2lkeCA9IEkwO1xuICAgICAgYWNxdWlyZWQgPSBmYWxzZTtcbiAgICB9IGluXG4gIGluaiByb290XG5cbmV4Y2VwdGlvbiBSZWxlYXNlX2ZhaWx1cmUgb2YgZXhuIG9wdGlvbiAqIHJlbGVhc2VfZmFpbHVyZSBsaXN0XG5cbmxldCByYXdfZmx1c2hfcmVsZWFzZV9xdWV1ZSBxdWV1ZSA9XG4gIGxldCByZWMgYXV4IGZhaWx1cmVzID0gZnVuY3Rpb25cbiAgICB8IFJlbGVhc2VfZG9uZSAtPiBmYWlsdXJlc1xuICAgIHwgUmVsZWFzZV9tb3JlIHQgLT5cbiAgICAgIGxldCBmYWlsdXJlcyA9IHN1Yl9yZWxlYXNlIGZhaWx1cmVzIHQub3JpZ2luIHQuZWxlbWVudCBpblxuICAgICAgYXV4IGZhaWx1cmVzIHQubmV4dFxuICBpblxuICBhdXggW10gcXVldWVcblxubGV0IGZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUgPVxuICBsZXQgcXVldWUnID0gIXF1ZXVlIGluXG4gIHF1ZXVlIDo9IFJlbGVhc2VfZG9uZTtcbiAgcmF3X2ZsdXNoX3JlbGVhc2VfcXVldWUgcXVldWUnXG5cbmxldCBzYW1wbGUgcXVldWUgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3QgdCBhcyBzZWxmIC0+XG4gICAgbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgfCBFdmFsX3NvbWUgdmFsdWUgLT4gdmFsdWVcbiAgICB8IF8gLT5cbiAgICAgICgqIG5vIGNhY2hlZCB2YWx1ZSwgY29tcHV0ZSBpdCBub3cgKilcbiAgICAgIGlmIG5vdCB0LmFjcXVpcmVkIHRoZW4gKFxuICAgICAgICB0LmFjcXVpcmVkIDwtIHRydWU7XG4gICAgICAgIHN1Yl9hY3F1aXJlIHNlbGYgdC5jaGlsZDtcbiAgICAgICk7XG4gICAgICB0LnZhbHVlIDwtIEV2YWxfcHJvZ3Jlc3M7XG4gICAgICBsZXQgdmFsdWUgPSBzdWJfc2FtcGxlIHF1ZXVlIHNlbGYgdC5jaGlsZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggdC52YWx1ZSB3aXRoXG4gICAgICAgIHwgRXZhbF9wcm9ncmVzcyAtPiB0LnZhbHVlIDwtIEV2YWxfc29tZSB2YWx1ZTsgKCogY2FjaGUgdmFsdWUgKilcbiAgICAgICAgfCBFdmFsX25vbmUgfCBFdmFsX3NvbWUgXyAtPiAoKVxuICAgICAgZW5kO1xuICAgICAgdmFsdWVcblxubGV0IGlzX2RhbWFnZWQgeCA9IG1hdGNoIHByaiB4IHdpdGhcbiAgfCBQdXJlIF8gfCBPcGVyYXRvciBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qge3ZhbHVlID0gRXZhbF9zb21lIF87IF99IC0+IGZhbHNlXG4gIHwgUm9vdCB7dmFsdWUgPSBFdmFsX25vbmUgfCBFdmFsX3Byb2dyZXNzOyBffSAtPiB0cnVlXG5cbmxldCByZWxlYXNlIHF1ZXVlIHggPSBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgYXMgc2VsZiAtPlxuICAgIGlmIHQuYWNxdWlyZWQgdGhlbiAoXG4gICAgICAoKiByZWxlYXNlIHN1YnRyZWUsIHJlbW92ZSBjYWNoZWQgdmFsdWUgKilcbiAgICAgIHQudmFsdWUgPC0gRXZhbF9ub25lO1xuICAgICAgdC5hY3F1aXJlZCA8LSBmYWxzZTtcbiAgICAgIHF1ZXVlIDo9IFJlbGVhc2VfbW9yZSB7IG9yaWdpbiA9IHNlbGY7IGVsZW1lbnQgPSB0LmNoaWxkOyBuZXh0ID0gIXF1ZXVlIH1cbiAgICApXG5cbmxldCBzZXRfb25faW52YWxpZGF0ZSB4IGYgPVxuICBtYXRjaCBwcmogeCB3aXRoXG4gIHwgUHVyZSBfIHwgT3BlcmF0b3IgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHQgLT4gdC5vbl9pbnZhbGlkYXRlIDwtIGZcblxubGV0IGZsdXNoX29yX2ZhaWwgbWFpbl9leG4gcXVldWUgPVxuICBtYXRjaCBmbHVzaF9yZWxlYXNlX3F1ZXVlIHF1ZXVlIHdpdGhcbiAgfCBbXSAtPiAoKVxuICB8IGZhaWx1cmVzIC0+IHJhaXNlIChSZWxlYXNlX2ZhaWx1cmUgKG1haW5fZXhuLCBmYWlsdXJlcykpXG5cbmxldCBxdWlja19zYW1wbGUgcm9vdCA9XG4gIGxldCBxdWV1ZSA9IHJlZiBSZWxlYXNlX2RvbmUgaW5cbiAgbWF0Y2ggc2FtcGxlIHF1ZXVlIHJvb3Qgd2l0aFxuICB8IHJlc3VsdCAtPiBmbHVzaF9vcl9mYWlsIE5vbmUgcXVldWU7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiBleG4gLT4gZmx1c2hfb3JfZmFpbCAoU29tZSBleG4pIHF1ZXVlOyByYWlzZSBleG5cblxubGV0IHF1aWNrX3JlbGVhc2Ugcm9vdCA9XG4gIGxldCBxdWV1ZSA9IHJlZiBSZWxlYXNlX2RvbmUgaW5cbiAgcmVsZWFzZSBxdWV1ZSByb290O1xuICBmbHVzaF9vcl9mYWlsIE5vbmUgcXVldWVcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoPj49KSB4IGYgPSBiaW5kIHggfmZcbiAgbGV0ICg+fD0pIHggZiA9IG1hcCB4IH5mXG4gIGxldCAoPCo+KSA9IGFwcFxuZW5kXG5cbigqJFJcbiAgbGV0IHggPSB2YXIgMCBpblxuICBsZXQgeSA9IG1hcCB+ZjpzdWNjIChnZXQgeCkgaW5cbiAgbGV0IG9feSA9IEx3ZC5vYnNlcnZlIHkgaW5cbiAgYXNzZXJ0X2VxdWFsIDEgKHF1aWNrX3NhbXBsZSBvX3kpO1xuICBzZXQgeCAxMDtcbiAgYXNzZXJ0X2VxdWFsIDExIChxdWlja19zYW1wbGUgb195KTtcbiAgKilcbiIsIlxudHlwZSAnYSBtb25vaWQgPSAnYSAqICgnYSAtPiAnYSAtPiAnYSlcblxubGV0IGxpZnRfbW9ub2lkICh6ZXJvLCBwbHVzKSA9XG4gIChMd2QucmV0dXJuIHplcm8sIEx3ZC5tYXAyIH5mOnBsdXMpXG5cbmxldCBtYXBfcmVkdWNlIGluaiAoemVybywgcGx1cykgaXRlbXMgPVxuICBsZXQgcmVjIGNvbnNfbW9ub2lkIGMgeHMgdiA9XG4gICAgbWF0Y2ggeHMgd2l0aFxuICAgIHwgKGMnLCB2JykgOjogeHMgd2hlbiBjID0gYycgLT5cbiAgICAgIGNvbnNfbW9ub2lkIChjICsgMSkgeHMgKHBsdXMgdicgdilcbiAgICB8IHhzIC0+IChjLCB2KSA6OiB4c1xuICBpblxuICBsZXQgY29uc19tb25vaWQgeHMgdiA9IGNvbnNfbW9ub2lkIDAgeHMgKGluaiB2KSBpblxuICBtYXRjaCBMaXN0LmZvbGRfbGVmdCBjb25zX21vbm9pZCBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IHBsdXMgdiBhY2MpIHggeHNcblxubGV0IHJlZHVjZSBtb25vaWQgaXRlbXMgPSBtYXBfcmVkdWNlIChmdW4geCAtPiB4KSBtb25vaWQgaXRlbXNcblxubGV0IHJlYyBjb25zX2x3ZF9tb25vaWQgcGx1cyBjIHhzIHYgPVxuICBtYXRjaCB4cyB3aXRoXG4gIHwgKGMnLCB2JykgOjogeHMgd2hlbiBjID0gYycgLT5cbiAgICBjb25zX2x3ZF9tb25vaWQgcGx1cyAoYyArIDEpIHhzIChMd2QubWFwMiB+ZjpwbHVzIHYnIHYpXG4gIHwgeHMgLT4gKGMsIHYpIDo6IHhzXG5cbmxldCBwYWNrICh6ZXJvLCBwbHVzKSBpdGVtcyA9XG4gIG1hdGNoIExpc3QuZm9sZF9sZWZ0IChjb25zX2x3ZF9tb25vaWQgcGx1cyAwKSBbXSBpdGVtcyB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiB6ZXJvXG4gIHwgKF8seCkgOjogeHMgLT5cbiAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyAoXywgdikgLT4gTHdkLm1hcDIgfmY6cGx1cyB2IGFjYykgeCB4c1xuXG5sZXQgcGFja19zZXEgKHplcm8sIHBsdXMpIGl0ZW1zID1cbiAgbWF0Y2ggU2VxLmZvbGRfbGVmdCAoY29uc19sd2RfbW9ub2lkIHBsdXMgMCkgW10gaXRlbXMgd2l0aFxuICB8IFtdIC0+IEx3ZC5yZXR1cm4gemVyb1xuICB8IChfLHgpIDo6IHhzIC0+XG4gICAgTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgKF8sIHYpIC0+IEx3ZC5tYXAyIH5mOnBsdXMgdiBhY2MpIHggeHNcblxubGV0IHJlYyBtYXBfbCAoZjonYSAtPiAnYiBMd2QudCkgKGw6J2EgbGlzdCkgOiAnYiBsaXN0IEx3ZC50ID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gTHdkLnJldHVybiBbXVxuICB8IHggOjogdGwgLT4gTHdkLm1hcDIgfmY6TGlzdC5jb25zIChmIHgpIChtYXBfbCBmIHRsKVxuXG5sZXQgZmxhdHRlbl9sIChsOidhIEx3ZC50IGxpc3QpIDogJ2EgbGlzdCBMd2QudCA9XG4gIG1hcF9sIChmdW4geC0+eCkgbFxuXG4oKiogezEgTWlzY2VsbGFuZW91cyBmdW5jdGlvbnN9XG5cbiAgICBJIGRvbid0IGtub3cgd2hlcmUgdG8gcHV0IHRoZXNlLCBidXQgdGhleSBhcmUgdXNlZnVsLCBlc3BlY2lhbGx5IGZvclxuICAgIFVJLXJlbGF0ZWQgY29tcHV0YXRpb25zLlxuKilcblxubGV0IG1pbmkgYSBiIDogaW50ID0gaWYgYiA8IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgbWF4aSBhIGIgOiBpbnQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBjbGFtcGkgeCB+bWluIH5tYXggOiBpbnQgPVxuICBpZiB4IDwgbWluIHRoZW5cbiAgICBtaW5cbiAgZWxzZSBpZiB4ID4gbWF4IHRoZW5cbiAgICBtYXhcbiAgZWxzZVxuICAgIHhcblxubGV0IG1pbmYgYSBiIDogZmxvYXQgPSBpZiBiIDwgYSB0aGVuIGIgZWxzZSBhXG5cbmxldCBtYXhmIGEgYiA6IGZsb2F0ID0gaWYgYiA+IGEgdGhlbiBiIGVsc2UgYVxuXG5sZXQgY2xhbXBmIHggfm1pbiB+bWF4IDogZmxvYXQgPVxuICBpZiB4IDwgbWluIHRoZW5cbiAgICBtaW5cbiAgZWxzZSBpZiB4ID4gbWF4IHRoZW5cbiAgICBtYXhcbiAgZWxzZVxuICAgIHhcbiIsInR5cGUgJ2EgYmluZGluZyA9XG4gIHwgQm91bmQgb2YgeyB2YWx1ZSA6ICdhIDsgbXV0YWJsZSB2YWxpZCA6IGJvb2wgfVxuICB8IFVuYm91bmRcblxudHlwZSAnYSB0cmVlID1cbiAgfCBMZWFmXG4gIHwgTm9kZSBvZiB7XG4gICAgICBtdXRhYmxlIHZlcnNpb24gOiBpbnQ7XG4gICAgICBtdXRhYmxlIGxlZnQgICAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBiaW5kaW5nIDogJ2EgYmluZGluZztcbiAgICAgIG11dGFibGUgcmlnaHQgICA6ICdhIHRyZWU7XG4gICAgICBtdXRhYmxlIHBhcmVudCAgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBzaXplICAgIDogaW50O1xuICAgIH1cbiAgfCBSb290IG9mIHtcbiAgICAgIG11dGFibGUgdmVyc2lvbiA6IGludDtcbiAgICAgIG11dGFibGUgY2hpbGQgOiAnYSB0cmVlO1xuICAgICAgbXV0YWJsZSBnZW5lcmF0aW9uIDogdW5pdCByZWY7XG4gICAgICBtdXRhYmxlIG9uX2ludmFsaWRhdGUgOiBPYmoudCBMd2QucHJpbSBsaXN0O1xuICAgIH1cblxudHlwZSAnYSB0ID0gJ2EgdHJlZVxudHlwZSAnYSByb3cgPSAnYSB0cmVlXG5cbmxldCBub3Rfb3JpZ2luID0gcmVmICgpICgqIG5vdCB7IW9yaWdpbn0gKilcbmxldCBvcmlnaW4gPSByZWYgKCkgKCogbm90IHshbm90X29yaWdpbn0gKilcblxubGV0IG1ha2UgKCkgPVxuICBSb290IHsgY2hpbGQgPSBMZWFmOyBnZW5lcmF0aW9uID0gb3JpZ2luOyB2ZXJzaW9uID0gMDsgb25faW52YWxpZGF0ZSA9IFtdIH1cblxubGV0IHNldF9wYXJlbnQgfnBhcmVudCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgbiAtPiBuLnBhcmVudCA8LSBwYXJlbnRcbiAgfCBMZWFmIC0+ICgpXG5cbmxldCByZXBhcmVudCB+cGFyZW50IH5vbGRjaGlsZCB+bmV3Y2hpbGQgPVxuICBtYXRjaCBwYXJlbnQgd2l0aFxuICB8IFJvb3QgciAtPlxuICAgIGFzc2VydCAoci5jaGlsZCA9PSBvbGRjaGlsZCk7XG4gICAgci5jaGlsZCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ubGVmdCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ubGVmdCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ucmlnaHQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLnJpZ2h0IDwtIG5ld2NoaWxkXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IG1ha2Vfbm9kZSBzZXQgfmxlZnQgfnJpZ2h0IH5wYXJlbnQgPVxuICBsZXQgYmluZGluZyA9IG1hdGNoIHNldCB3aXRoXG4gICAgfCBOb25lIC0+IFVuYm91bmRcbiAgICB8IFNvbWUgdmFsdWUgLT4gQm91bmQgeyB2YWx1ZSA7IHZhbGlkID0gdHJ1ZSB9XG4gIGluXG4gIGxldCBub2RlID0gTm9kZSB7IGxlZnQ7IHJpZ2h0OyBwYXJlbnQ7IHZlcnNpb24gPSAwOyBzaXplID0gMDsgYmluZGluZyB9IGluXG4gIHNldF9wYXJlbnQgbGVmdCAgfnBhcmVudDpub2RlO1xuICBzZXRfcGFyZW50IHJpZ2h0IH5wYXJlbnQ6bm9kZTtcbiAgbm9kZVxuXG5sZXQgcmVjIHJhd19pbnZhbGlkYXRlID0gZnVuY3Rpb25cbiAgfCBOb2RlIHsgc2l6ZSA9IDA7IF8gfSAtPiAoKVxuICB8IE5vZGUgdCAtPlxuICAgIHQuc2l6ZSA8LSAwO1xuICAgIHJhd19pbnZhbGlkYXRlIHQucGFyZW50XG4gIHwgUm9vdCByIC0+XG4gICAgTGlzdC5pdGVyIEx3ZC5pbnZhbGlkYXRlIHIub25faW52YWxpZGF0ZVxuICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBwcmVwZW5kID9zZXQgPSBmdW5jdGlvblxuICB8IFJvb3QgciBhcyBwYXJlbnQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSBwYXJlbnQ7XG4gICAgbGV0IG5vZGUgPSBtYWtlX25vZGUgc2V0IH5sZWZ0OkxlYWYgfnJpZ2h0OnIuY2hpbGQgfnBhcmVudCBpblxuICAgIHIuY2hpbGQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHByZXBlbmQnIHggc2V0ID0gaWdub3JlIChwcmVwZW5kIHggfnNldClcblxubGV0IGFwcGVuZCA/c2V0ID0gZnVuY3Rpb25cbiAgfCBSb290IHIgYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpyLmNoaWxkIH5yaWdodDpMZWFmIH5wYXJlbnQgaW5cbiAgICByLmNoaWxkIDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBhcHBlbmQnIHggc2V0ID0gaWdub3JlIChhcHBlbmQgeCB+c2V0KVxuXG5sZXQgYmVmb3JlID9zZXQgPSBmdW5jdGlvblxuICB8IE5vZGUgeyBwYXJlbnQgPSBMZWFmIDsgXyB9IHwgTGVhZiAtPiBMZWFmXG4gIHwgTm9kZSBuIGFzIHBhcmVudCAtPlxuICAgIHJhd19pbnZhbGlkYXRlIHBhcmVudDtcbiAgICBsZXQgbm9kZSA9IG1ha2Vfbm9kZSBzZXQgfmxlZnQ6bi5sZWZ0IH5yaWdodDpMZWFmIH5wYXJlbnQgaW5cbiAgICBuLmxlZnQgPC0gbm9kZTtcbiAgICBub2RlXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgYWZ0ZXIgP3NldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IHBhcmVudCA9IExlYWYgOyBfIH0gfCBMZWFmIC0+IExlYWZcbiAgfCBOb2RlIG4gYXMgcGFyZW50IC0+XG4gICAgcmF3X2ludmFsaWRhdGUgcGFyZW50O1xuICAgIGxldCBub2RlID0gbWFrZV9ub2RlIHNldCB+bGVmdDpMZWFmIH5yaWdodDpuLnJpZ2h0IH5wYXJlbnQgaW5cbiAgICBuLnJpZ2h0IDwtIG5vZGU7XG4gICAgbm9kZVxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGdldCA9IGZ1bmN0aW9uXG4gIHwgTm9kZSB7IGJpbmRpbmcgPSBCb3VuZCB7IHZhbHVlIDsgXyB9IDsgXyB9IC0+IFNvbWUgdmFsdWVcbiAgfCBMZWFmIHwgUm9vdCBfIHwgTm9kZSB7IGJpbmRpbmcgPSBVbmJvdW5kIDsgXyB9IC0+IE5vbmVcblxubGV0IGludmFsaWRhdGVfYmluZGluZyA9IGZ1bmN0aW9uXG4gIHwgVW5ib3VuZCAtPiAoKVxuICB8IEJvdW5kIGIgLT4gYi52YWxpZCA8LSBmYWxzZVxuXG5sZXQgc2V0X2JpbmRpbmcgeCA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgfCBOb2RlIHsgcGFyZW50ID0gTGVhZjsgXyB9IC0+ICgpXG4gIHwgTm9kZSBuIGFzIHQgLT5cbiAgICByYXdfaW52YWxpZGF0ZSB0O1xuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5iaW5kaW5nIDwtIHhcblxubGV0IHNldCB0IHZhbHVlID0gc2V0X2JpbmRpbmcgKEJvdW5kIHsgdmFsdWU7IHZhbGlkID0gdHJ1ZSB9KSB0XG5sZXQgdW5zZXQgdCA9IHNldF9iaW5kaW5nIFVuYm91bmQgdFxuXG5sZXQgaXNfYm91bmQgPSBmdW5jdGlvblxuICB8IExlYWYgfCBOb2RlIHsgcGFyZW50ID0gTGVhZjsgXyB9IC0+IGZhbHNlXG4gIHwgUm9vdCBfIHwgTm9kZSBfIC0+IHRydWVcblxubGV0IHJlYyBqb2luIGxlZnQgPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTm9kZSAoeyBsZWZ0ID0gTGVhZjsgXyB9IGFzIG4pIGFzIHNlbGYgLT5cbiAgICBuLmxlZnQgPC0gbGVmdDtcbiAgICBzZXRfcGFyZW50IGxlZnQgfnBhcmVudDpzZWxmO1xuICAgIHNlbGZcbiAgfCBOb2RlIG5vZGUgLT5cbiAgICBqb2luIGxlZnQgbm9kZS5sZWZ0XG5cbmxldCByZW1vdmUgPSBmdW5jdGlvblxuICB8IFJvb3QgXyB8IExlYWYgfCBOb2RlIHtwYXJlbnQgPSBMZWFmOyBffSAtPiAoKVxuICB8IE5vZGUgKHtsZWZ0OyByaWdodDsgcGFyZW50OyBffSBhcyBuKSBhcyB0IC0+XG4gICAgaW52YWxpZGF0ZV9iaW5kaW5nIG4uYmluZGluZztcbiAgICBuLmxlZnQgPC0gTGVhZjtcbiAgICBuLnJpZ2h0IDwtIExlYWY7XG4gICAgbi5wYXJlbnQgPC0gTGVhZjtcbiAgICBuLmJpbmRpbmcgPC0gVW5ib3VuZDtcbiAgICBuLnZlcnNpb24gPC0gbWF4X2ludDtcbiAgICBsZXQgam9pbiwgaW52YWxpZCA9IG1hdGNoIGxlZnQsIHJpZ2h0IHdpdGhcbiAgICAgIHwgTGVhZiwgb3RoZXIgfCBvdGhlciwgTGVhZiAtPiAob3RoZXIsIHBhcmVudClcbiAgICAgIHwgXyAtPiAocmlnaHQsIGpvaW4gbGVmdCByaWdodClcbiAgICBpblxuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnQgfm5ld2NoaWxkOmpvaW47XG4gICAgc2V0X3BhcmVudCBqb2luIH5wYXJlbnQ7XG4gICAgcmF3X2ludmFsaWRhdGUgaW52YWxpZFxuXG5sZXQgcmVjIGNsZWFyID0gZnVuY3Rpb25cbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSAoe2xlZnQ7IHJpZ2h0OyBffSBhcyBuKSAtPlxuICAgIGludmFsaWRhdGVfYmluZGluZyBuLmJpbmRpbmc7XG4gICAgbi5sZWZ0IDwtIExlYWY7XG4gICAgbi5yaWdodCA8LSBMZWFmO1xuICAgIG4ucGFyZW50IDwtIExlYWY7XG4gICAgbi5iaW5kaW5nIDwtIFVuYm91bmQ7XG4gICAgbi52ZXJzaW9uIDwtIG1heF9pbnQ7XG4gICAgY2xlYXIgbGVmdDtcbiAgICBjbGVhciByaWdodFxuICB8IFJvb3QgciBhcyByb290IC0+XG4gICAgbGV0IGNoaWxkID0gci5jaGlsZCBpblxuICAgIHIuY2hpbGQgPC0gTGVhZjtcbiAgICBjbGVhciBjaGlsZDtcbiAgICByYXdfaW52YWxpZGF0ZSByb290XG5cbigqIFRyZWUgYmFsYW5jaW5nICopXG5cbmxldCBzaXplID0gZnVuY3Rpb25cbiAgfCBOb2RlIG5vZGUgLT5cbiAgICBhc3NlcnQgKG5vZGUuc2l6ZSA8PiAwKTtcbiAgICBub2RlLnNpemVcbiAgfCBMZWFmIC0+IDBcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbigqKiBbc21hbGxlcl9lbGwgc21pbiBzbWF4XSBpZmZcbiAgICAtIFtzbWluXSBpcyBsZXNzIHRoYW4gW3NtYXhdXG4gICAgLSBbc21pbl0gYW5kIFtzbWF4XSBkaWZmZXJzIGJ5IGxlc3MgdGhhbiB0d28gbWFnbml0dWRlIG9yZGVycywgaS5lXG4gICAgICBtc2JzKHNtaW4pID49IG1zYnMoc21heCkgLSAxXG4gICAgICB3aGVyZSBtc2JzIGlzIHRoZSBpbmRleCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgc2V0ICopXG5sZXQgc21hbGxlcl9lbGwgc21pbiBzbWF4ID0gKHNtaW4gPCBzbWF4KSAmJiAoKHNtaW4gbGFuZCBzbWF4KSBsc2wgMSA8IHNtYXgpXG5cbigqKiBbZGlzYmFsYW5jZWQgc21pbiBzbWF4XSBjaGVjayBpZiB0d28gc3ViLXRyZWVzIG9mIHNpemUgW3NtaW5dIGFuZCBbc21heF0sXG4gICAgYXJlIGRpc2JhbGFuY3plZC4gVGhhdCBpcywgbXNicyhzbWluKSA8IG1zYnMoc21heCkgLSAxICopXG5sZXQgZGlzYmFsYW5jZWQgc21pbiBzbWF4ID0gc21hbGxlcl9lbGwgc21pbiAoc21heCBsc3IgMSlcblxubGV0IHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkIH5uZXdjaGlsZCA9XG4gIG1hdGNoIHBhcmVudCB3aXRoXG4gIHwgUm9vdCByIC0+XG4gICAgYXNzZXJ0IChyLmNoaWxkID09IG9sZGNoaWxkKTtcbiAgICByLmNoaWxkIDwtIG5ld2NoaWxkO1xuICB8IE5vZGUgbiB3aGVuIG4ubGVmdCA9PSBvbGRjaGlsZCAtPlxuICAgIG4ubGVmdCA8LSBuZXdjaGlsZFxuICB8IE5vZGUgbiB3aGVuIG4ucmlnaHQgPT0gb2xkY2hpbGQgLT5cbiAgICBuLnJpZ2h0IDwtIG5ld2NoaWxkXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHJlYyByb3RfbGVmdCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBOb2RlICh7IHJpZ2h0ID0gKE5vZGUgcm4pIGFzIHI7IF99IGFzIHNuKSBhcyBzIC0+XG4gICAgbGV0IHBhcmVudCA9IHNuLnBhcmVudCBpblxuICAgIGxldCBybCA9IG1hdGNoIHJuLmxlZnQgd2l0aFxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IExlYWYgLT4gTGVhZlxuICAgICAgfCAoTm9kZSBybG4pIGFzIHJsIC0+XG4gICAgICAgIHJsbi5wYXJlbnQgPC0gcztcbiAgICAgICAgcmxcbiAgICBpblxuICAgIHJuLmxlZnQgPC0gcztcbiAgICBzbi5yaWdodCA8LSBybDtcbiAgICBzbi5wYXJlbnQgPC0gcjtcbiAgICBybi5wYXJlbnQgPC0gcGFyZW50O1xuICAgIHJlcGFyZW50IH5wYXJlbnQgfm9sZGNoaWxkOnMgfm5ld2NoaWxkOnI7XG4gICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gcyk7XG4gICAgYmFsYW5jZSB2ZXJzaW9uIHJcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5hbmQgcm90X3JpZ2h0IHZlcnNpb24gPSBmdW5jdGlvblxuICB8IE5vZGUgKHsgbGVmdCA9IChOb2RlIGxuKSBhcyBsOyBffSBhcyBzbikgYXMgcyAtPlxuICAgIGxldCBwYXJlbnQgPSBzbi5wYXJlbnQgaW5cbiAgICBsZXQgbHIgPSBtYXRjaCBsbi5yaWdodCB3aXRoXG4gICAgICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTGVhZiAtPiBMZWFmXG4gICAgICB8IChOb2RlIGxybikgYXMgbHIgLT5cbiAgICAgICAgbHJuLnBhcmVudCA8LSBzO1xuICAgICAgICBsclxuICAgIGluXG4gICAgbG4ucmlnaHQgPC0gcztcbiAgICBzbi5sZWZ0IDwtIGxyO1xuICAgIHNuLnBhcmVudCA8LSBsO1xuICAgIGxuLnBhcmVudCA8LSBwYXJlbnQ7XG4gICAgcmVwYXJlbnQgfnBhcmVudCB+b2xkY2hpbGQ6cyB+bmV3Y2hpbGQ6bDtcbiAgICBpZ25vcmUgKGJhbGFuY2UgdmVyc2lvbiBzKTtcbiAgICBiYWxhbmNlIHZlcnNpb24gbFxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmFuZCBpbmNfbGVmdCB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUge3JpZ2h0OyBffSBhcyBzZWxmIC0+XG4gICAgYmVnaW4gbWF0Y2ggcmlnaHQgd2l0aFxuICAgICAgfCBOb2RlIHJuIHdoZW4gc21hbGxlcl9lbGwgKHNpemUgcm4ucmlnaHQpIChzaXplIHJuLmxlZnQpIC0+XG4gICAgICAgIGlnbm9yZSAocm90X3JpZ2h0IHZlcnNpb24gcmlnaHQpXG4gICAgICB8IF8gLT4gKClcbiAgICBlbmQ7XG4gICAgcm90X2xlZnQgdmVyc2lvbiBzZWxmXG5cbmFuZCBpbmNfcmlnaHQgdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgUm9vdCBfIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgfCBOb2RlIHtsZWZ0OyBffSBhcyBzZWxmIC0+XG4gICAgYmVnaW4gbWF0Y2ggbGVmdCB3aXRoXG4gICAgICB8IE5vZGUgbG4gd2hlbiBzbWFsbGVyX2VsbCAoc2l6ZSBsbi5sZWZ0KSAoc2l6ZSBsbi5yaWdodCkgLT5cbiAgICAgICAgaWdub3JlIChyb3RfbGVmdCB2ZXJzaW9uIGxlZnQpXG4gICAgICB8IF8gLT4gKClcbiAgICBlbmQ7XG4gICAgcm90X3JpZ2h0IHZlcnNpb24gc2VsZlxuXG5hbmQgYmFsYW5jZSB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICB8IE5vZGUgbm9kZSBhcyBzZWxmIC0+XG4gICAgbGV0IHNsID0gc2l6ZSBub2RlLmxlZnQgYW5kIHNyID0gc2l6ZSBub2RlLnJpZ2h0IGluXG4gICAgaWYgc2wgPCBzciB0aGVuIChcbiAgICAgIGlmIGRpc2JhbGFuY2VkIHNsIHNyXG4gICAgICB0aGVuIGluY19sZWZ0IHZlcnNpb24gc2VsZlxuICAgICAgZWxzZSAobm9kZS52ZXJzaW9uIDwtIHZlcnNpb247IG5vZGUuc2l6ZSA8LSAxICsgc2wgKyBzcjsgc2VsZilcbiAgICApIGVsc2UgKFxuICAgICAgaWYgZGlzYmFsYW5jZWQgc3Igc2xcbiAgICAgIHRoZW4gaW5jX3JpZ2h0IHZlcnNpb24gc2VsZlxuICAgICAgZWxzZSAobm9kZS52ZXJzaW9uIDwtIHZlcnNpb247IG5vZGUuc2l6ZSA8LSAxICsgc2wgKyBzcjsgc2VsZilcbiAgICApXG5cbmxldCByZWMgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gKClcbiAgfCBMZWFmIC0+ICgpXG4gIHwgTm9kZSBub2RlIGFzIHNlbGYgLT5cbiAgICBpZiBub2RlLnNpemUgPSAwIHRoZW5cbiAgICAgIG1hdGNoIG5vZGUubGVmdCB3aXRoXG4gICAgICB8IE5vZGUge3NpemUgPSAwOyBffSAtPlxuICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gbm9kZS5sZWZ0XG4gICAgICB8IF8gLT5cbiAgICAgICAgbWF0Y2ggbm9kZS5yaWdodCB3aXRoXG4gICAgICAgIHwgTm9kZSB7c2l6ZSA9IDA7IF99IC0+XG4gICAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIG5vZGUucmlnaHRcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUucGFyZW50IGluXG4gICAgICAgICAgaWdub3JlIChiYWxhbmNlIHZlcnNpb24gc2VsZik7XG4gICAgICAgICAgY29tcHV0ZV9zdWJfc2l6ZSB2ZXJzaW9uIHBhcmVudFxuXG5sZXQgcmVjIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiAtPiAoKVxuICB8IE5vZGUgbiAtPlxuICAgIG4udmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgIHJlc2V0X3ZlcnNpb24gdmVyc2lvbiBuLmxlZnQ7XG4gICAgcmVzZXRfdmVyc2lvbiB2ZXJzaW9uIG4ucmlnaHRcbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWJhbGFuY2UgPSBmdW5jdGlvblxuICB8IFJvb3QgciAtPlxuICAgIGJlZ2luIG1hdGNoIHIuY2hpbGQgd2l0aFxuICAgICAgfCBOb2RlIHsgc2l6ZSA9IDA7IF8gfSAtPlxuICAgICAgICBsZXQgdmVyc2lvbiA9IHN1Y2Mgci52ZXJzaW9uIGluXG4gICAgICAgIGxldCB2ZXJzaW9uID1cbiAgICAgICAgICBpZiB2ZXJzaW9uID0gbWF4X2ludCB0aGVuIChcbiAgICAgICAgICAgIHIuZ2VuZXJhdGlvbiA8LSByZWYgKCk7XG4gICAgICAgICAgICByZXNldF92ZXJzaW9uIDAgci5jaGlsZDtcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgZWxzZSB2ZXJzaW9uXG4gICAgICAgIGluXG4gICAgICAgIHIudmVyc2lvbiA8LSB2ZXJzaW9uO1xuICAgICAgICBjb21wdXRlX3N1Yl9zaXplIHZlcnNpb24gci5jaGlsZDtcbiAgICAgICAgdmVyc2lvblxuICAgICAgfCBOb2RlIF8gfCBMZWFmIC0+IHIudmVyc2lvblxuICAgICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgZW5kXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IHBsdXMgKHplcm8sIHBsdXMpIHggeSA9XG4gIGlmIHggPT0gemVybyB0aGVuIHlcbiAgZWxzZSBpZiB5ID09IHplcm8gdGhlbiB4XG4gIGVsc2UgcGx1cyB4IHlcblxudHlwZSAoJ2EsICdiKSByZWR1Y3Rpb25fdHJlZSA9XG4gIHwgUmVkX2xlYWZcbiAgfCBSZWRfbm9kZSBvZiB7XG4gICAgICBjZWxsOiAnYSByb3c7XG4gICAgICBiaW5kaW5nOiAnYSBiaW5kaW5nO1xuICAgICAgcmVkdWN0aW9uOiAnYjtcbiAgICAgIGFnZ3JlZ2F0ZTogJ2I7XG4gICAgICBsZWZ0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gICAgICByaWdodCA6ICgnYSwgJ2IpIHJlZHVjdGlvbl90cmVlO1xuICAgIH1cblxudHlwZSAoJ2EsICdiKSByZWR1Y3Rpb24gPSB7XG4gIG11dGFibGUgdmVyc2lvbjogaW50O1xuICBzb3VyY2U6ICdhIHRyZWU7XG4gIG11dGFibGUgcmVzdWx0IDogKCdhLCAnYikgcmVkdWN0aW9uX3RyZWU7XG4gIG11dGFibGUgZ2VuZXJhdGlvbjogdW5pdCByZWY7XG4gIG1hcHBlcjogJ2Egcm93IC0+ICdhIC0+ICdiO1xuICBtb25vaWQ6ICdiIEx3ZF91dGlscy5tb25vaWQ7XG59XG5cblxubGV0IGV4dHJhY3RfYmluZGluZ3MgdHJlZSA9XG4gIGxldCByZWMgYXV4IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBSZWRfbGVhZiAtPiBhY2NcbiAgICB8IFJlZF9ub2RlIHJub2RlIC0+XG4gICAgICBsZXQgYWNjID0gYXV4IGFjYyBybm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFjYyA9IG1hdGNoIHJub2RlLmJpbmRpbmcgd2l0aFxuICAgICAgICB8IFVuYm91bmQgLT4gYWNjXG4gICAgICAgIHwgQm91bmQgeyB2YWxpZCA9IGZhbHNlOyBfIH0gLT4gYWNjXG4gICAgICAgIHwgXyAtPiAocm5vZGUuYmluZGluZywgcm5vZGUucmVkdWN0aW9uKSA6OiBhY2NcbiAgICAgIGluXG4gICAgICBhdXggYWNjIHJub2RlLmxlZnRcbiAgaW5cbiAgYXV4IFtdIHRyZWVcblxubGV0IGZ1bGxfcmVidWlsZCByZWQgdHJlZSA9XG4gIGxldCBiaW5kaW5ncyA9IHJlZiAoZXh0cmFjdF9iaW5kaW5ncyByZWQucmVzdWx0KSBpblxuICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCAtPlxuICAgICAgbGV0IGxlZnQgPSBhdXggbm9kZS5sZWZ0IGluXG4gICAgICBsZXQgcmVkdWN0aW9uID1cbiAgICAgICAgbWF0Y2ggbm9kZS5iaW5kaW5nLCAhYmluZGluZ3Mgd2l0aFxuICAgICAgICB8IFVuYm91bmQsIF8gLT4gZnN0IHJlZC5tb25vaWRcbiAgICAgICAgfCBiaW5kaW5nLCAoKGJpbmRpbmcnLCByZWR1Y3Rpb24pIDo6IGJpbmRpbmdzJylcbiAgICAgICAgICB3aGVuIGJpbmRpbmcgPT0gYmluZGluZycgLT5cbiAgICAgICAgICBiaW5kaW5ncyA6PSBiaW5kaW5ncyc7XG4gICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIHwgQm91bmQgYiwgXyAtPiBhc3NlcnQgYi52YWxpZDsgcmVkLm1hcHBlciBjZWxsIGIudmFsdWVcbiAgICAgIGluXG4gICAgICBsZXQgcmlnaHQgPSBhdXggbm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIGxlZnQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IHJlZHVjdGlvblxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIHIuYWdncmVnYXRlIHJlZHVjdGlvblxuICAgICAgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCByaWdodCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gYWdncmVnYXRlXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgYWdncmVnYXRlIHIuYWdncmVnYXRlXG4gICAgICBpblxuICAgICAgUmVkX25vZGUge1xuICAgICAgICBjZWxsO1xuICAgICAgICBiaW5kaW5nID0gbm9kZS5iaW5kaW5nO1xuICAgICAgICByZWR1Y3Rpb247XG4gICAgICAgIGFnZ3JlZ2F0ZTtcbiAgICAgICAgbGVmdDtcbiAgICAgICAgcmlnaHQ7XG4gICAgICB9XG4gICAgfCBMZWFmIC0+IFJlZF9sZWFmXG4gICAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIGluXG4gIGxldCByZXN1bHQgPSBhdXggdHJlZSBpblxuICBhc3NlcnQgKCFiaW5kaW5ncyA9IFtdKTtcbiAgcmVzdWx0XG5cbmxldCBleHRyYWN0X2ZyaW5nZSB2ZXJzaW9uIHRyZWUgPVxuICBsZXQgcmVjIGF1eCBhY2MgPSBmdW5jdGlvblxuICAgIHwgUmVkX2xlYWYgLT4gYWNjXG4gICAgfCBSZWRfbm9kZSBybm9kZSBhcyB0cmVlIC0+XG4gICAgICBtYXRjaCBybm9kZS5jZWxsIHdpdGhcbiAgICAgIHwgTm9kZSBub2RlIHdoZW4gbm9kZS52ZXJzaW9uIDw9IHZlcnNpb24gLT4gdHJlZSA6OiBhY2NcbiAgICAgIHwgXyAtPlxuICAgICAgICBsZXQgYWNjID0gYXV4IGFjYyBybm9kZS5yaWdodCBpblxuICAgICAgICBsZXQgYWNjID0gbWF0Y2ggcm5vZGUuYmluZGluZyB3aXRoXG4gICAgICAgICAgfCBVbmJvdW5kIC0+IGFjY1xuICAgICAgICAgIHwgQm91bmQgeyB2YWxpZCA9IGZhbHNlOyBfIH0gLT4gYWNjXG4gICAgICAgICAgfCBfIC0+IHRyZWUgOjogYWNjXG4gICAgICAgIGluXG4gICAgICAgIGF1eCBhY2Mgcm5vZGUubGVmdFxuICBpblxuICBhdXggW10gdHJlZVxuXG5sZXQgaW5jcmVtZW50YWxfcmVidWlsZCByZWQgdmVyc2lvbiB0cmVlID1cbiAgbGV0IGZyaW5nZSA9IHJlZiAoZXh0cmFjdF9mcmluZ2UgdmVyc2lvbiByZWQucmVzdWx0KSBpblxuICBsZXQgcmVjIGF1eCA9IGZ1bmN0aW9uXG4gICAgfCBOb2RlIG5vZGUgYXMgY2VsbCB3aGVuIG5vZGUudmVyc2lvbiA8PSB2ZXJzaW9uIC0+XG4gICAgICBiZWdpbiBtYXRjaCAhZnJpbmdlIHdpdGhcbiAgICAgICAgfCAoUmVkX25vZGUgcm5vZGUgYXMgcmVkdWN0aW9uKSA6OiBmcmluZ2UnIC0+XG4gICAgICAgICAgYXNzZXJ0IChybm9kZS5jZWxsID09IGNlbGwpO1xuICAgICAgICAgIGZyaW5nZSA6PSBmcmluZ2UnO1xuICAgICAgICAgIHJlZHVjdGlvblxuICAgICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICBlbmRcbiAgICB8IE5vZGUgbm9kZSBhcyBjZWxsIC0+XG4gICAgICBsZXQgbGVmdCA9IGF1eCBub2RlLmxlZnQgaW5cbiAgICAgIGxldCByZWR1Y3Rpb24gPVxuICAgICAgICBtYXRjaCBub2RlLmJpbmRpbmcsICFmcmluZ2Ugd2l0aFxuICAgICAgICB8IFVuYm91bmQsIF8gLT4gZnN0IHJlZC5tb25vaWRcbiAgICAgICAgfCBiaW5kaW5nLCAoUmVkX25vZGUgcm5vZGUgOjogZnJpbmdlJylcbiAgICAgICAgICB3aGVuIGJpbmRpbmcgPT0gcm5vZGUuYmluZGluZyAtPlxuICAgICAgICAgIGZyaW5nZSA6PSBmcmluZ2UnO1xuICAgICAgICAgIHJub2RlLnJlZHVjdGlvblxuICAgICAgICB8IEJvdW5kIGIsIF8gLT5cbiAgICAgICAgICBhc3NlcnQgYi52YWxpZDsgcmVkLm1hcHBlciBjZWxsIGIudmFsdWVcbiAgICAgIGluXG4gICAgICBsZXQgcmlnaHQgPSBhdXggbm9kZS5yaWdodCBpblxuICAgICAgbGV0IGFnZ3JlZ2F0ZSA9IG1hdGNoIGxlZnQgd2l0aFxuICAgICAgICB8IFJlZF9sZWFmIC0+IHJlZHVjdGlvblxuICAgICAgICB8IFJlZF9ub2RlIHIgLT4gcGx1cyByZWQubW9ub2lkIHIuYWdncmVnYXRlIHJlZHVjdGlvblxuICAgICAgaW5cbiAgICAgIGxldCBhZ2dyZWdhdGUgPSBtYXRjaCByaWdodCB3aXRoXG4gICAgICAgIHwgUmVkX2xlYWYgLT4gYWdncmVnYXRlXG4gICAgICAgIHwgUmVkX25vZGUgciAtPiBwbHVzIHJlZC5tb25vaWQgYWdncmVnYXRlIHIuYWdncmVnYXRlXG4gICAgICBpblxuICAgICAgUmVkX25vZGUge1xuICAgICAgICBjZWxsO1xuICAgICAgICBiaW5kaW5nID0gbm9kZS5iaW5kaW5nO1xuICAgICAgICByZWR1Y3Rpb247XG4gICAgICAgIGFnZ3JlZ2F0ZTtcbiAgICAgICAgbGVmdDtcbiAgICAgICAgcmlnaHQ7XG4gICAgICB9XG4gICAgfCBSb290IF8gfCBMZWFmIC0+IFJlZF9sZWFmXG4gIGluXG4gIGxldCByZXN1bHQgPSBhdXggdHJlZSBpblxuICBhc3NlcnQgKCFmcmluZ2UgPSBbXSk7XG4gIHJlc3VsdFxuXG5sZXQgZXZhbCByZWQgPVxuICBtYXRjaCByZWQuc291cmNlIHdpdGhcbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPlxuICAgIGxldCB2ZXJzaW9uID0gcmViYWxhbmNlIHJlZC5zb3VyY2UgaW5cbiAgICBpZiB0cnVlIHRoZW4gKFxuICAgICAgaWYgcmVkLmdlbmVyYXRpb24gIT0gcm9vdC5nZW5lcmF0aW9uIHRoZW4gKFxuICAgICAgICByZWQuZ2VuZXJhdGlvbiA8LSByb290LmdlbmVyYXRpb247XG4gICAgICAgIHJlZC5yZXN1bHQgPC0gZnVsbF9yZWJ1aWxkIHJlZCByb290LmNoaWxkO1xuICAgICAgKSBlbHNlIChcbiAgICAgICAgcmVkLnJlc3VsdCA8LSBpbmNyZW1lbnRhbF9yZWJ1aWxkIHJlZCByZWQudmVyc2lvbiByb290LmNoaWxkXG4gICAgICApO1xuICAgICkgZWxzZSAoXG4gICAgICByZWQucmVzdWx0IDwtIGZ1bGxfcmVidWlsZCByZWQgcm9vdC5jaGlsZDtcbiAgICApO1xuICAgIHJlZC52ZXJzaW9uIDwtIHZlcnNpb247XG4gICAgbWF0Y2ggcmVkLnJlc3VsdCB3aXRoXG4gICAgfCBSZWRfbGVhZiAtPiBmc3QgcmVkLm1vbm9pZFxuICAgIHwgUmVkX25vZGUgciAtPiByLmFnZ3JlZ2F0ZVxuXG5sZXQgb3BhcXVlIDogJ2EgTHdkLnByaW0gLT4gT2JqLnQgTHdkLnByaW0gPSBPYmoubWFnaWNcblxubGV0IG1hcF9yZWR1Y2UgbWFwcGVyIG1vbm9pZCBzb3VyY2UgPVxuICBsZXQgcmVkdWN0aW9uID0ge1xuICAgIHNvdXJjZTsgbWFwcGVyOyBtb25vaWQ7XG4gICAgcmVzdWx0ID0gUmVkX2xlYWY7XG4gICAgZ2VuZXJhdGlvbiA9IG5vdF9vcmlnaW47XG4gICAgdmVyc2lvbiA9IDA7XG4gIH0gaW5cbiAgbGV0IHByaW0gPSBMd2QucHJpbVxuICAgICAgfmFjcXVpcmU6KGZ1biBzZWxmIC0+XG4gICAgICAgICAgbWF0Y2ggcmVkdWN0aW9uLnNvdXJjZSB3aXRoXG4gICAgICAgICAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgUm9vdCByb290IC0+XG4gICAgICAgICAgICByb290Lm9uX2ludmFsaWRhdGUgPC0gb3BhcXVlIHNlbGYgOjogcm9vdC5vbl9pbnZhbGlkYXRlO1xuICAgICAgICAgICAgcmVkdWN0aW9uXG4gICAgICAgIClcbiAgICAgIH5yZWxlYXNlOihmdW4gc2VsZiByZWR1Y3Rpb24gLT5cbiAgICAgICAgICBtYXRjaCByZWR1Y3Rpb24uc291cmNlIHdpdGhcbiAgICAgICAgICB8IExlYWYgfCBOb2RlIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBSb290IHJvb3QgLT5cbiAgICAgICAgICAgIHJvb3Qub25faW52YWxpZGF0ZSA8LVxuICAgICAgICAgICAgICBMaXN0LmZpbHRlciAoKCE9KSAob3BhcXVlIHNlbGYpKSByb290Lm9uX2ludmFsaWRhdGVcbiAgICAgICAgKVxuICBpblxuICBMd2QubWFwIH5mOmV2YWwgKEx3ZC5nZXRfcHJpbSBwcmltKVxuXG5sZXQgcmVkdWNlIG1vbm9pZCBzb3VyY2UgPSBtYXBfcmVkdWNlIChmdW4gXyB4IC0+IHgpIG1vbm9pZCBzb3VyY2VcblxubGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICB8IExlYWYgLT4gKClcbiAgfCBOb2RlIHQgLT5cbiAgICBpdGVyIGYgdC5sZWZ0O1xuICAgIGJlZ2luIG1hdGNoIHQuYmluZGluZyB3aXRoXG4gICAgICB8IEJvdW5kIHggLT4gZiB4LnZhbHVlXG4gICAgICB8IFVuYm91bmQgLT4gKClcbiAgICBlbmQ7XG4gICAgaXRlciBmIHQucmlnaHRcbiAgfCBSb290IHQgLT5cbiAgICBpdGVyIGYgdC5jaGlsZFxuXG5sZXQgcmVjIGxlZnRfbW9zdCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCBsZWZ0X21vc3Qgbi5sZWZ0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT4gU29tZSBzZWxmXG5cbmxldCByZWMgcmlnaHRfbW9zdCA6ICdhIHJvdyAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBSb290IF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgTGVhZiAtPiBOb25lXG4gIHwgTm9kZSBuIGFzIHNlbGYgLT5cbiAgICBtYXRjaCByaWdodF9tb3N0IG4ucmlnaHQgd2l0aFxuICAgIHwgU29tZSBfIGFzIHggLT4geFxuICAgIHwgTm9uZSAtPiBTb21lIHNlbGZcblxubGV0IGZpcnN0IDogJ2EgdCAtPiAnYSByb3cgb3B0aW9uID0gZnVuY3Rpb25cbiAgfCBMZWFmIHwgTm9kZSBfIC0+IGFzc2VydCBmYWxzZVxuICB8IFJvb3Qgcm9vdCAtPiBsZWZ0X21vc3Qgcm9vdC5jaGlsZFxuXG5sZXQgbGFzdCA6ICdhIHQgLT4gJ2Egcm93IG9wdGlvbiA9IGZ1bmN0aW9uXG4gIHwgTGVhZiB8IE5vZGUgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBSb290IHJvb3QgLT4gcmlnaHRfbW9zdCByb290LmNoaWxkXG5cbmxldCBuZXh0IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIGxlZnRfbW9zdCBuLnJpZ2h0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCByZWMgd2Fsa19yb290IHNlbGYgPSBmdW5jdGlvblxuICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgUm9vdCBfIC0+IE5vbmVcbiAgICAgICAgfCBOb2RlIG4nIGFzIHBhcmVudCAtPlxuICAgICAgICAgIGlmIG4nLmxlZnQgPT0gc2VsZiB0aGVuIFNvbWUgcGFyZW50IGVsc2UgKFxuICAgICAgICAgICAgYXNzZXJ0IChuJy5yaWdodCA9PSBzZWxmKTtcbiAgICAgICAgICAgIHdhbGtfcm9vdCBwYXJlbnQgbicucGFyZW50XG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHdhbGtfcm9vdCBzZWxmIG4ucGFyZW50XG5cbmxldCBwcmV2IDogJ2Egcm93IC0+ICdhIHJvdyBvcHRpb24gPSBmdW5jdGlvblxuICB8IFJvb3QgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBMZWFmIC0+IE5vbmVcbiAgfCBOb2RlIG4gYXMgc2VsZiAtPlxuICAgIG1hdGNoIHJpZ2h0X21vc3Qgbi5sZWZ0IHdpdGhcbiAgICB8IFNvbWUgXyBhcyB4IC0+IHhcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCByZWMgd2Fsa19yb290IHNlbGYgPSBmdW5jdGlvblxuICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgUm9vdCBfIC0+IE5vbmVcbiAgICAgICAgfCBOb2RlIG4nIGFzIHBhcmVudCAtPlxuICAgICAgICAgIGlmIG4nLnJpZ2h0ID09IHNlbGYgdGhlbiBTb21lIHBhcmVudCBlbHNlIChcbiAgICAgICAgICAgIGFzc2VydCAobicubGVmdCA9PSBzZWxmKTtcbiAgICAgICAgICAgIHdhbGtfcm9vdCBwYXJlbnQgbicucGFyZW50XG4gICAgICAgICAgKVxuICAgICAgaW5cbiAgICAgIHdhbGtfcm9vdCBzZWxmIG4ucGFyZW50XG4iLCJcbnR5cGUgISsnYSB0ID1cblxuXG4gIHwgTmlsXG4gIHwgTGVhZiBvZiB7IG11dGFibGUgbWFyazogaW50OyB2OiAnYTsgfVxuICB8IEpvaW4gb2YgeyBtdXRhYmxlIG1hcms6IGludDsgbDogJ2EgdDsgcjogJ2EgdDsgfVxuXG50eXBlICdhIHNlcSA9ICdhIHRcblxubGV0IGVtcHR5ID0gTmlsXG5cbmxldCBlbGVtZW50IHYgPSBMZWFmIHsgbWFyayA9IDA7IHYgfVxuXG5sZXQgbWFza19iaXRzID0gMlxuXG5sZXQgbWF4aSBhIGIgOiBpbnQgPSBpZiBiID4gYSB0aGVuIGIgZWxzZSBhXG5cbmxldCByYW5rID0gZnVuY3Rpb25cbiAgfCBOaWwgLT4gMFxuICB8IExlYWYgdCAtPlxuICAgIGlmIHQubWFyayA8PiAwIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiTHdkX3NlcS5yYW5rOiBub2RlIGlzIG1hcmtlZFwiO1xuICAgIDBcbiAgfCBKb2luIHQgLT5cbiAgICBpZiB0Lm1hcmsgbGFuZCBtYXNrX2JpdHMgPD4gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkx3ZF9zZXEucmFuazogbm9kZSBpcyBtYXJrZWRcIjtcbiAgICB0Lm1hcmsgbHNyIG1hc2tfYml0c1xuXG5sZXQgY29uY2F0IGEgYiA9IG1hdGNoIGEsIGIgd2l0aFxuICB8IE5pbCwgeCB8IHgsIE5pbCAtPiB4XG4gIHwgbCwgciAtPiBKb2luIHsgbWFyayA9IChtYXhpIChyYW5rIGwpIChyYW5rIHIpICsgMSkgbHNsIG1hc2tfYml0czsgbDsgciB9XG5cbnR5cGUgKCdhLCAnYikgdmlldyA9XG4gIHwgRW1wdHlcbiAgfCBFbGVtZW50IG9mICdhXG4gIHwgQ29uY2F0IG9mICdiICogJ2JcblxubGV0IHZpZXcgPSBmdW5jdGlvblxuICB8IE5pbCAgICAtPiBFbXB0eVxuICB8IExlYWYgdCAtPiBFbGVtZW50IHQudlxuICB8IEpvaW4gdCAtPiBDb25jYXQgKHQubCwgdC5yKVxuXG5tb2R1bGUgQmFsYW5jZWQgOiBzaWdcbiAgdHlwZSAnYSB0ID0gcHJpdmF0ZSAnYSBzZXFcbiAgdmFsIGVtcHR5IDogJ2EgdFxuICB2YWwgZWxlbWVudCA6ICdhIC0+ICdhIHRcbiAgdmFsIGNvbmNhdCA6ICdhIHQgLT4gJ2EgdCAtPiAnYSB0XG5cbiAgdmFsIHZpZXcgOiAnYSB0IC0+ICgnYSwgJ2EgdCkgdmlld1xuZW5kID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIHNlcVxuXG4gIGxldCBlbXB0eSA9IGVtcHR5XG4gIGxldCBlbGVtZW50ID0gZWxlbWVudFxuXG4gIGxldCBjaGVjayBsIHIgPSBhYnMgKGwgLSByKSA8PSAxXG5cbiAgbGV0IHJlYyBub2RlX2xlZnQgbCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtciB0aGVuIGNvbmNhdCBsIHIgZWxzZSBtYXRjaCBsIHdpdGhcbiAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBKb2luIHQgLT5cbiAgICAgICAgaWYgY2hlY2sgKHJhbmsgdC5sKSBtbFxuICAgICAgICB0aGVuIGNvbmNhdCB0LmwgKG5vZGVfbGVmdCB0LnIgcilcbiAgICAgICAgZWxzZSBtYXRjaCB0LnIgd2l0aFxuICAgICAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgSm9pbiB0ciAtPlxuICAgICAgICAgICAgbGV0IHRyciA9IG5vZGVfbGVmdCB0ci5yIHIgaW5cbiAgICAgICAgICAgIGlmIGNoZWNrICgxICsgbWF4aSAocmFuayB0LmwpIChyYW5rIHRyLmwpKSAocmFuayB0cnIpXG4gICAgICAgICAgICB0aGVuIGNvbmNhdCAoY29uY2F0IHQubCB0ci5sKSB0cnJcbiAgICAgICAgICAgIGVsc2UgY29uY2F0IHQubCAoY29uY2F0IHRyLmwgdHJyKVxuXG4gIGxldCByZWMgbm9kZV9yaWdodCBsIHIgPVxuICAgIGxldCBtbCA9IHJhbmsgbCBpblxuICAgIGxldCBtciA9IHJhbmsgciBpblxuICAgIGlmIGNoZWNrIG1yIG1sIHRoZW4gY29uY2F0IGwgciBlbHNlIG1hdGNoIHIgd2l0aFxuICAgICAgfCBOaWwgfCBMZWFmIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LnIpIG1yXG4gICAgICAgIHRoZW4gY29uY2F0IChub2RlX3JpZ2h0IGwgdC5sKSB0LnJcbiAgICAgICAgZWxzZSBtYXRjaCB0Lmwgd2l0aFxuICAgICAgICAgIHwgTmlsIHwgTGVhZiBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgSm9pbiB0bCAtPlxuICAgICAgICAgICAgbGV0IHRsbCA9IG5vZGVfcmlnaHQgbCB0bC5sIGluXG4gICAgICAgICAgICBpZiBjaGVjayAoMSArIG1heGkgKHJhbmsgdGwucikgKHJhbmsgdC5yKSkgKHJhbmsgdGxsKVxuICAgICAgICAgICAgdGhlbiBjb25jYXQgdGxsIChjb25jYXQgdGwuciB0LnIpXG4gICAgICAgICAgICBlbHNlIGNvbmNhdCAoY29uY2F0IHRsbCB0bC5yKSB0LnJcblxuICBsZXQgY29uY2F0IGwgciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbWwgbXJcbiAgICB0aGVuIGNvbmNhdCBsIHJcbiAgICBlbHNlIGlmIG1sIDw9IG1yXG4gICAgdGhlbiBub2RlX3JpZ2h0IGwgclxuICAgIGVsc2Ugbm9kZV9sZWZ0IGwgclxuXG4gIGxldCB2aWV3ID0gdmlld1xuZW5kXG5cbm1vZHVsZSBNYXJraW5nIDogc2lnXG4gIHR5cGUgbWFyayA9ICgqcHJpdmF0ZSopIGludFxuICB2YWwgaXNfc2hhcmVkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ub3Rfc2hhcmVkIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ub25lIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19ib3RoIDogbWFyayAtPiBib29sXG4gIHZhbCBpc19vbGQgOiBtYXJrIC0+IGJvb2xcbiAgdmFsIGlzX25ldyA6IG1hcmsgLT4gYm9vbFxuICAoKnZhbCBoYXNfb2xkIDogbWFyayAtPiBib29sKilcbiAgKCp2YWwgaGFzX25ldyA6IG1hcmsgLT4gYm9vbCopXG4gIHZhbCBzZXRfYm90aCA6IG1hcmsgLT4gbWFya1xuICB2YWwgdW5tYXJrIDogbWFyayAtPiBtYXJrXG4gIHZhbCBnZXRfaW5kZXggOiBtYXJrIC0+IGludFxuICB2YWwgd2l0aF9pbmRleF9uZXcgOiBpbnQgLT4gbWFya1xuXG4gIHR5cGUgc3RhdHNcbiAgdmFsIG1hcmtlZCA6IHN0YXRzIC0+IGludFxuICB2YWwgc2hhcmVkIDogc3RhdHMgLT4gaW50XG4gIHZhbCBibG9ja2VkIDogc3RhdHMgLT4gaW50XG5cbiAgdHlwZSB0cmF2ZXJzYWxcbiAgdmFsIG9sZF9zdGF0cyA6IHRyYXZlcnNhbCAtPiBzdGF0c1xuICB2YWwgbmV3X3N0YXRzIDogdHJhdmVyc2FsIC0+IHN0YXRzXG5cbiAgdmFsIHVuc2FmZV90cmF2ZXJzZSA6IG9sZF9yb290Ol8gc2VxIC0+IG5ld19yb290Ol8gc2VxIC0+IHRyYXZlcnNhbFxuXG4gIHZhbCByZXN0b3JlIDogXyBzZXEgLT4gdW5pdFxuZW5kID0gc3RydWN0XG4gIHR5cGUgbWFyayA9IGludFxuXG4gIGxldCBtYXNrX25vbmUgPSAwXG4gIGxldCBtYXNrX29sZCAgPSAxXG4gIGxldCBtYXNrX25ldyAgPSAyXG4gIGxldCBtYXNrX2JvdGggPSAzXG5cbiAgbGV0IGlzX3NoYXJlZCBtID0gbSA9IC0xXG4gIGxldCBpc19ub3Rfc2hhcmVkIG0gPSBtIDw+IC0xXG4gIGxldCBpc19ub25lIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19ub25lXG4gIGxldCBpc19ib3RoIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoXG4gIGxldCBpc19vbGQgIG0gPSBtIGxhbmQgbWFza19ib3RoID0gbWFza19vbGRcbiAgbGV0IGlzX25ldyAgbSA9IG0gbGFuZCBtYXNrX2JvdGggPSBtYXNrX25ld1xuICAoKmxldCBoYXNfb2xkIG0gPSBtIGxhbmQgbWFza19vbGQgPD4gMCopXG4gICgqbGV0IGhhc19uZXcgbSA9IG0gbGFuZCBtYXNrX25ldyA8PiAwKilcbiAgbGV0IHNldF9ib3RoIG0gPSBtIGxvciBtYXNrX2JvdGhcblxuICBsZXQgZ2V0X2luZGV4IG0gPSBtIGxzciBtYXNrX2JpdHNcbiAgbGV0IHdpdGhfaW5kZXhfbmV3IGluZGV4ID0gKGluZGV4IGxzbCBtYXNrX2JpdHMpIGxvciBtYXNrX25ld1xuXG4gIGxldCB1bm1hcmsgbSA9IG0gbGFuZCBsbm90IG1hc2tfYm90aFxuXG4gIHR5cGUgc3RhdHMgPSB7XG4gICAgbXV0YWJsZSBtYXJrZWQ6IGludDtcbiAgICBtdXRhYmxlIHNoYXJlZDogaW50O1xuICAgIG11dGFibGUgYmxvY2tlZDogaW50O1xuICB9XG4gIGxldCBtYXJrZWQgcyA9IHMubWFya2VkXG4gIGxldCBzaGFyZWQgcyA9IHMuc2hhcmVkXG4gIGxldCBibG9ja2VkIHMgPSBzLmJsb2NrZWRcblxuICBsZXQgbWtfc3RhdHMgKCkgPSB7IG1hcmtlZCA9IDA7IHNoYXJlZCA9IDA7IGJsb2NrZWQgPSAwIH1cblxuICBsZXQgbmV3X21hcmtlZCBzdGF0cyA9IHN0YXRzLm1hcmtlZCA8LSBzdGF0cy5tYXJrZWQgKyAxXG4gIGxldCBuZXdfc2hhcmVkIHN0YXRzID0gc3RhdHMuc2hhcmVkIDwtIHN0YXRzLnNoYXJlZCArIDFcbiAgbGV0IG5ld19ibG9ja2VkIHN0YXRzID0gc3RhdHMuYmxvY2tlZCA8LSBzdGF0cy5ibG9ja2VkICsgMVxuXG4gIGxldCByZWMgYmxvY2sgc3RhdHMgbWFzayA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IExlYWYgdCcgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiBtYXNrX2JvdGggJiYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwXG4gICAgICB0aGVuIChcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gbmV3X21hcmtlZCBzdGF0cyBlbHNlIGFzc2VydCBmYWxzZTtcbiAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgIHQnLm1hcmsgPC0gbWFyayBsb3IgbWFza19ib3RoXG4gICAgICApXG4gICAgfCBKb2luIHQnIC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gbWFza19ib3RoICYmIG1hcmsgbGFuZCBtYXNrX2JvdGggPD4gMFxuICAgICAgdGhlbiAoXG4gICAgICAgIGlmIG1hcmsgbGFuZCBtYXNrID0gMCB0aGVuIG5ld19tYXJrZWQgc3RhdHMgZWxzZSBhc3NlcnQgZmFsc2U7XG4gICAgICAgIG5ld19ibG9ja2VkIHN0YXRzO1xuICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2tfYm90aDtcbiAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5sO1xuICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLnI7XG4gICAgICApXG5cbiAgbGV0IGVucXVldWUgc3RhdHMgcSBtYXNrID0gZnVuY3Rpb25cbiAgICB8IE5pbCAtPiAoKVxuICAgIHwgTGVhZiB0JyAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrIGxhbmQgbWFzayA9IDAgdGhlbiAoXG4gICAgICAgICgqIE5vdCB5ZXQgc2VlbiAqKVxuICAgICAgICBuZXdfbWFya2VkIHN0YXRzO1xuICAgICAgICBpZiBtYXJrIGxhbmQgbWFza19ib3RoIDw+IDAgdGhlbiAoXG4gICAgICAgICAgKCogTmV3bHkgc2hhcmVkLCBjbGVhciBtYXNrICopXG4gICAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgICBuZXdfYmxvY2tlZCBzdGF0cztcbiAgICAgICAgICBuZXdfc2hhcmVkIHN0YXRzO1xuICAgICAgICApIGVsc2VcbiAgICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2s7XG4gICAgICApO1xuICAgICAgaWYgbWFyayA8PiAtMSAmJiBtYXJrIGxhbmQgbWFza19ib3RoID0gbWFza19ib3RoIHRoZW4gKFxuICAgICAgICB0Jy5tYXJrIDwtIC0xO1xuICAgICAgICBuZXdfc2hhcmVkIHN0YXRzXG4gICAgICApXG4gICAgfCBKb2luIHQnIGFzIHQgLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgbWFyayBsYW5kIG1hc2sgPSAwIHRoZW4gKFxuICAgICAgICAoKiBOb3QgeWV0IHNlZW4gKilcbiAgICAgICAgbmV3X21hcmtlZCBzdGF0cztcbiAgICAgICAgaWYgbWFyayBsYW5kIG1hc2tfYm90aCA8PiAwIHRoZW4gKFxuICAgICAgICAgICgqIE5ld2x5IHNoYXJlZCwgY2xlYXIgbWFzayAqKVxuICAgICAgICAgIHQnLm1hcmsgPC0gLTE7XG4gICAgICAgICAgbmV3X2Jsb2NrZWQgc3RhdHM7XG4gICAgICAgICAgbmV3X3NoYXJlZCBzdGF0cztcbiAgICAgICAgICBibG9jayBzdGF0cyBtYXNrIHQnLmw7XG4gICAgICAgICAgYmxvY2sgc3RhdHMgbWFzayB0Jy5yO1xuICAgICAgICApIGVsc2UgKFxuICAgICAgICAgICgqIEZpcnN0IG1hcmsgKilcbiAgICAgICAgICB0Jy5tYXJrIDwtIG1hcmsgbG9yIG1hc2s7XG4gICAgICAgICAgUXVldWUucHVzaCB0IHFcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIGlmIG1hcmsgPD4gLTEgJiYgbWFyayBsYW5kIG1hc2tfYm90aCA9IG1hc2tfYm90aCB0aGVuIChcbiAgICAgICAgdCcubWFyayA8LSAtMTtcbiAgICAgICAgbmV3X3NoYXJlZCBzdGF0c1xuICAgICAgKVxuXG4gIGxldCBkZXF1ZXVlIHN0YXRzIHEgbWFzayA9XG4gICAgbWF0Y2ggUXVldWUucG9wIHEgd2l0aFxuICAgIHwgSm9pbiB0IC0+XG4gICAgICBpZiB0Lm1hcmsgbGFuZCBtYXNrX2JvdGggPSBtYXNrIHRoZW4gKFxuICAgICAgICBlbnF1ZXVlIHN0YXRzIHEgbWFzayB0Lmw7XG4gICAgICAgIGVucXVldWUgc3RhdHMgcSBtYXNrIHQucjtcbiAgICAgIClcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgbGV0IHRyYXZlcnNlMSBzdGF0cyBxIG1hc2sgPVxuICAgIHdoaWxlIG5vdCAoUXVldWUuaXNfZW1wdHkgcSkgZG9cbiAgICAgIGRlcXVldWUgc3RhdHMgcSBtYXNrXG4gICAgZG9uZVxuXG4gIGxldCByZWMgdHJhdmVyc2Ugc29sZCBzbmV3IHFvbGQgcW5ldyA9XG4gICAgaWYgUXVldWUuaXNfZW1wdHkgcW9sZCB0aGVuXG4gICAgICB0cmF2ZXJzZTEgc25ldyBxbmV3IG1hc2tfbmV3XG4gICAgZWxzZSBpZiBRdWV1ZS5pc19lbXB0eSBxbmV3IHRoZW5cbiAgICAgIHRyYXZlcnNlMSBzb2xkIHFvbGQgbWFza19vbGRcbiAgICBlbHNlIChcbiAgICAgIGRlcXVldWUgc29sZCBxb2xkIG1hc2tfb2xkO1xuICAgICAgZGVxdWV1ZSBzbmV3IHFuZXcgbWFza19uZXc7XG4gICAgICB0cmF2ZXJzZSBzb2xkIHNuZXcgcW9sZCBxbmV3XG4gICAgKVxuXG4gIHR5cGUgdHJhdmVyc2FsID0ge1xuICAgIG9sZF9zdGF0czogc3RhdHM7XG4gICAgbmV3X3N0YXRzOiBzdGF0cztcbiAgfVxuXG4gIGxldCBvbGRfc3RhdHMgdHIgPSB0ci5vbGRfc3RhdHNcbiAgbGV0IG5ld19zdGF0cyB0ciA9IHRyLm5ld19zdGF0c1xuXG4gIGxldCB1bnNhZmVfdHJhdmVyc2Ugfm9sZF9yb290IH5uZXdfcm9vdCA9XG4gICAgbGV0IG9sZF9zdGF0cyA9IG1rX3N0YXRzICgpIGluXG4gICAgbGV0IG5ld19zdGF0cyA9IG1rX3N0YXRzICgpIGluXG4gICAgbGV0IG9sZF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICAgIGxldCBuZXdfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBlbnF1ZXVlIG9sZF9zdGF0cyBvbGRfcXVldWUgbWFza19vbGQgb2xkX3Jvb3Q7XG4gICAgZW5xdWV1ZSBuZXdfc3RhdHMgbmV3X3F1ZXVlIG1hc2tfbmV3IG5ld19yb290O1xuICAgIHRyYXZlcnNlIG9sZF9zdGF0cyBuZXdfc3RhdHMgb2xkX3F1ZXVlIG5ld19xdWV1ZTtcbiAgICB7b2xkX3N0YXRzOyBuZXdfc3RhdHN9XG5cbiAgbGV0IHJlc3RvcmUgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+ICgpXG4gICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIDBcbiAgICB8IEpvaW4gdCAtPlxuICAgICAgdC5tYXJrIDwtIChtYXhpIChyYW5rIHQubCkgKHJhbmsgdC5yKSArIDEpIGxzbCBtYXNrX2JpdHNcbmVuZFxuXG4oKiBNYXJrcyBnbyB0aHJvdWdoIG1hbnkgc3RhdGVzLlxuXG4gICBBIG1hcmsgaXMgdXN1YWxseSBzcGxpdCBpbiB0d28gcGFydHM6XG4gICAtIHRoZSBtYXNrLCBtYWRlIG9mIHRoZSB0d28gbGVhc3Qgc2lnbmlmaWNhbnQgYml0c1xuICAgLSB0aGUgaW5kZXggaXMgYW4gdW5zaWduZWQgaW50ZWdlciBmb3JtZWQgb2YgYWxsIHRoZSByZW1haW5pbmcgYml0c1xuXG4gICBUaGUgZXhjZXB0aW9uIGlzIHRoZSBkaXN0aW5ndWlzaGVkIG1hc2sgd2l0aCB2YWx1ZSAtMSAoYWxsIGJpdHMgc2V0IHRvIDEpXG4gICB0aGF0IGRlbm90ZSBhIFwibG9ja2VkXCIgbm9kZS5cblxuICAgV2hlbiB0aGUgbWFzayBpcyAwLCB0aGUgaW5kZXggZGVub3RlcyB0aGUgcmFuayBvZiB0aGUgbm9kZTogdGhlIGRlcHRoIG9mXG4gICB0aGUgdHJlZSByb290ZWQgYXQgdGhpcyBub2RlLlxuICAgV2hlbiB0aGUgbWFzayBpcyBub24temVybywgdGhlIGluZGV4IG1lYW5pbmcgaXMgbGVmdCB0byB0aGUgdHJhdmVyc2FsXG4gICBhbGdvcml0aG0uXG4gICBSZXN0b3JpbmcgdGhlIG1hcmsgc2V0cyB0aGUgbWFzayB0byAwIGFuZCB0aGUgaW5kZXh0IHRvIHRoZSByYW5rLFxuICAgYnV0IGlzIG9ubHkgcG9zc2libGUgd2hlbiB0aGUgY2hpbGRyZW4gb2YgdGhlIG5vZGUgYXJlIHRoZW1zZWx2ZXMgcmVzdG9yZWQuXG4qKVxuXG5tb2R1bGUgUmVkdWNlciA9IHN0cnVjdFxuICB0eXBlICgrJ2EsICdiKSB4Zm9ybSA9XG4gICAgfCBYRW1wdHlcbiAgICB8IFhMZWFmIG9mIHsgYTogJ2EgdDsgbXV0YWJsZSBiOiAnYiBvcHRpb247IH1cbiAgICB8IFhKb2luIG9mIHsgYTogJ2EgdDsgbXV0YWJsZSBiOiAnYiBvcHRpb247XG4gICAgICAgICAgICAgICAgIGw6ICgnYSwgJ2IpIHhmb3JtOyByOiAoJ2EsICdiKSB4Zm9ybTsgfVxuXG4gIHR5cGUgKCdhLCAnYikgdW5tYXJrX3N0YXRlID0ge1xuICAgIGRyb3BwZWQgOiAnYiBvcHRpb24gYXJyYXk7XG4gICAgbXV0YWJsZSBkcm9wcGVkX2xlYWYgOiBpbnQ7XG4gICAgbXV0YWJsZSBkcm9wcGVkX2pvaW4gOiBpbnQ7XG4gICAgc2hhcmVkIDogJ2Egc2VxIGFycmF5O1xuICAgIHNoYXJlZF94IDogKCdhLCAnYikgeGZvcm0gbGlzdCBhcnJheTtcbiAgICBtdXRhYmxlIHNoYXJlZF9pbmRleDogaW50O1xuICB9XG5cbiAgbGV0IG5leHRfc2hhcmVkX2luZGV4IHN0ID1cbiAgICBsZXQgcmVzdWx0ID0gc3Quc2hhcmVkX2luZGV4IGluXG4gICAgc3Quc2hhcmVkX2luZGV4IDwtIHJlc3VsdCArIDE7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHJlYyB1bmJsb2NrID0gZnVuY3Rpb25cbiAgICB8IFhFbXB0eSAtPiAoKVxuICAgIHwgWExlYWYge2EgPSBOaWwgfCBKb2luIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWEpvaW4ge2EgPSBOaWwgfCBMZWFmIF87IF99IC0+IGFzc2VydCBmYWxzZVxuICAgIHwgWExlYWYge2EgPSBMZWFmIHQnOyBffSAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX25vdF9zaGFyZWQgbWFyayAmJiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICB8IFhKb2luIHthID0gSm9pbiB0JzsgbDsgcjsgX30gLT5cbiAgICAgIGxldCBtYXJrID0gdCcubWFyayBpblxuICAgICAgaWYgTWFya2luZy5pc19ub3Rfc2hhcmVkIG1hcmsgJiYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgbWFyaztcbiAgICAgICAgdW5ibG9jayBsO1xuICAgICAgICB1bmJsb2NrIHJcbiAgICAgIClcblxuICBsZXQgcmVjIHVubWFya19vbGQgc3QgPSBmdW5jdGlvblxuICAgIHwgWEVtcHR5IC0+ICgpXG4gICAgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYSm9pbiB7YSA9IE5pbCB8IExlYWYgXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBYTGVhZiB7YSA9IExlYWYgdCcgYXMgYTsgYn0gYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBNYXJraW5nLmlzX29sZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgZHJvcHBlZF9sZWFmID0gc3QuZHJvcHBlZF9sZWFmIGluXG4gICAgICAgIGlmIGRyb3BwZWRfbGVhZiA+IC0xIHRoZW4gKFxuICAgICAgICAgIHN0LmRyb3BwZWQuKGRyb3BwZWRfbGVhZikgPC0gYjtcbiAgICAgICAgICBzdC5kcm9wcGVkX2xlYWYgPC0gZHJvcHBlZF9sZWFmICsgMTtcbiAgICAgICAgICBhc3NlcnQgKHN0LmRyb3BwZWRfbGVhZiA8PSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgICApO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcmtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX3NoYXJlZCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBuZXh0X3NoYXJlZF9pbmRleCBzdCBpblxuICAgICAgICBzdC5zaGFyZWQuKGluZGV4KSA8LSBhO1xuICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIFt0XTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLndpdGhfaW5kZXhfbmV3IGluZGV4O1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IE1hcmtpbmcuZ2V0X2luZGV4IG1hcmsgaW5cbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB0IDo6IHN0LnNoYXJlZF94LihpbmRleCk7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgICAoKnQnLm1hcmsgPC0gbWFyayBsYW5kIGxub3QgYm90aF9tYXNrKilcbiAgICAgIClcbiAgICB8IFhKb2luIHthID0gSm9pbiB0JyBhcyBhOyBsOyByOyBifSBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfc2hhcmVkIG1hcmsgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHN0LnNoYXJlZC4oaW5kZXgpIDwtIGE7XG4gICAgICAgIHN0LnNoYXJlZF94LihpbmRleCkgPC0gW3RdO1xuICAgICAgICB0Jy5tYXJrIDwtIE1hcmtpbmcud2l0aF9pbmRleF9uZXcgaW5kZXg7XG4gICAgICAgIHVuYmxvY2sgbDtcbiAgICAgICAgdW5ibG9jayByO1xuICAgICAgKSBlbHNlIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgIGlmIHN0LmRyb3BwZWRfam9pbiA+IC0xIHRoZW4gKFxuICAgICAgICAgIGxldCBkcm9wcGVkX2pvaW4gPSBzdC5kcm9wcGVkX2pvaW4gLSAxIGluXG4gICAgICAgICAgc3QuZHJvcHBlZC4oZHJvcHBlZF9qb2luKSA8LSBiO1xuICAgICAgICAgIHN0LmRyb3BwZWRfam9pbiA8LSBkcm9wcGVkX2pvaW47XG4gICAgICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPD0gc3QuZHJvcHBlZF9qb2luKTtcbiAgICAgICAgKTtcbiAgICAgICAgdCcubWFyayA8LSBNYXJraW5nLnVubWFyayBtYXJrO1xuICAgICAgICB1bm1hcmtfb2xkIHN0IGw7XG4gICAgICAgIHVubWFya19vbGQgc3QgcjtcbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX25ldyBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgc3Quc2hhcmVkX3guKGluZGV4KSA8LSB0IDo6IHN0LnNoYXJlZF94LihpbmRleCk7XG4gICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgIGFzc2VydCBmYWxzZVxuICAgICAgKVxuXG4gIGxldCBwcmVwYXJlX3NoYXJlZCBzdCA9XG4gICAgZm9yIGkgPSAwIHRvIHN0LnNoYXJlZF9pbmRleCAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHN0LnNoYXJlZC4oaSkgd2l0aFxuICAgICAgICB8IE5pbCAtPiAoKVxuICAgICAgICB8IExlYWYgdCAtPiB0Lm1hcmsgPC0gTWFya2luZy5zZXRfYm90aCB0Lm1hcmtcbiAgICAgICAgfCBKb2luIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcuc2V0X2JvdGggdC5tYXJrXG4gICAgICBlbmQ7XG4gICAgICBtYXRjaCBzdC5zaGFyZWRfeC4oaSkgd2l0aFxuICAgICAgfCBbXSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgW19dIC0+ICgpXG4gICAgICB8IHhzIC0+IHN0LnNoYXJlZF94LihpKSA8LSBMaXN0LnJldiB4c1xuICAgIGRvbmVcblxuICBsZXQgcmVjIHVubWFya19uZXcgc3QgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+IFhFbXB0eVxuICAgIHwgTGVhZiB0JyBhcyB0IC0+XG4gICAgICBsZXQgbWFyayA9IHQnLm1hcmsgaW5cbiAgICAgIGlmIE1hcmtpbmcuaXNfbm90X3NoYXJlZCBtYXJrICYmIE1hcmtpbmcuaXNfYm90aCBtYXJrIHRoZW4gKFxuICAgICAgICBsZXQgaW5kZXggPSBtYXJrIGxzciBtYXNrX2JpdHMgaW5cbiAgICAgICAgbWF0Y2ggc3Quc2hhcmVkX3guKGluZGV4KSB3aXRoXG4gICAgICAgIHwgW10gLT4gWExlYWYge2EgPSB0OyBiID0gTm9uZX1cbiAgICAgICAgfCB4IDo6IHhzIC0+IHN0LnNoYXJlZF94LihpbmRleCkgPC0geHM7IHhcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgWExlYWYge2EgPSB0OyBiID0gTm9uZX1cbiAgICAgIClcbiAgICB8IEpvaW4gdCcgYXMgdCAtPlxuICAgICAgbGV0IG1hcmsgPSB0Jy5tYXJrIGluXG4gICAgICBpZiBtYXJrID0gLTEgdGhlbiAoXG4gICAgICAgIGxldCBpbmRleCA9IG5leHRfc2hhcmVkX2luZGV4IHN0IGluXG4gICAgICAgIHQnLm1hcmsgPC0gMDtcbiAgICAgICAgc3Quc2hhcmVkLihpbmRleCkgPC0gdDtcbiAgICAgICAgbGV0IGwgPSB1bm1hcmtfbmV3IHN0IHQnLmwgaW5cbiAgICAgICAgbGV0IHIgPSB1bm1hcmtfbmV3IHN0IHQnLnIgaW5cbiAgICAgICAgWEpvaW4ge2EgPSB0OyBiID0gTm9uZTsgbDsgcn1cbiAgICAgICkgZWxzZSBpZiBNYXJraW5nLmlzX2JvdGggbWFyayB0aGVuIChcbiAgICAgICAgbGV0IGluZGV4ID0gbWFyayBsc3IgbWFza19iaXRzIGluXG4gICAgICAgIG1hdGNoIHN0LnNoYXJlZF94LihpbmRleCkgd2l0aFxuICAgICAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICB8IHggOjogeHMgLT5cbiAgICAgICAgICBzdC5zaGFyZWRfeC4oaW5kZXgpIDwtIHhzO1xuICAgICAgICAgIGlmIHhzID09IFtdIHRoZW4gdCcubWFyayA8LSAwO1xuICAgICAgICAgIHhcbiAgICAgICkgZWxzZSAoXG4gICAgICAgIHQnLm1hcmsgPC0gTWFya2luZy51bm1hcmsgdCcubWFyaztcbiAgICAgICAgbGV0IGwgPSB1bm1hcmtfbmV3IHN0IHQnLmwgaW5cbiAgICAgICAgbGV0IHIgPSB1bm1hcmtfbmV3IHN0IHQnLnIgaW5cbiAgICAgICAgWEpvaW4ge2EgPSB0OyBiID0gTm9uZTsgbDsgcn1cbiAgICAgIClcblxuICB0eXBlICdiIGRyb3BwZWQgPSB7XG4gICAgbGVhdmVzOiBpbnQ7XG4gICAgdGFibGU6ICdiIG9wdGlvbiBhcnJheTtcbiAgICBleHRyYV9sZWFmOiAnYiBsaXN0O1xuICAgIGV4dHJhX2pvaW46ICdiIGxpc3Q7XG4gIH1cblxuICBsZXQgbm9fZHJvcHBlZCA9XG4gICAgeyBsZWF2ZXMgPSAwOyB0YWJsZSA9IFt8fF07IGV4dHJhX2xlYWYgPSBbXTsgZXh0cmFfam9pbiA9IFtdIH1cblxuICBsZXQgZGlmZiBnZXRfZHJvcHBlZCB4b2xkIHRuZXcgPSBtYXRjaCB4b2xkLCB0bmV3IHdpdGhcbiAgICB8IFhFbXB0eSwgTmlsIC0+IG5vX2Ryb3BwZWQsIFhFbXB0eVxuICAgIHwgKFhMZWFmIHthOyBffSB8IFhKb2luIHthOyBffSksIF8gd2hlbiBhID09IHRuZXcgLT4gbm9fZHJvcHBlZCwgeG9sZFxuICAgIHwgXyAtPlxuICAgICAgbGV0IHRyYXZlcnNhbCA9XG4gICAgICAgIE1hcmtpbmcudW5zYWZlX3RyYXZlcnNlXG4gICAgICAgICAgfm9sZF9yb290OihtYXRjaCB4b2xkIHdpdGhcbiAgICAgICAgICAgICAgfCBYRW1wdHkgLT4gZW1wdHlcbiAgICAgICAgICAgICAgfCAoWExlYWYge2E7IF99IHwgWEpvaW4ge2E7IF99KSAtPiBhXG4gICAgICAgICAgICApXG4gICAgICAgICAgfm5ld19yb290OnRuZXdcbiAgICAgIGluXG4gICAgICBsZXQgc29sZCA9IE1hcmtpbmcub2xkX3N0YXRzIHRyYXZlcnNhbCBpblxuICAgICAgbGV0IHNuZXcgPSBNYXJraW5nLm5ld19zdGF0cyB0cmF2ZXJzYWwgaW5cbiAgICAgIGxldCBuYl9kcm9wcGVkID1cbiAgICAgICAgTWFya2luZy5tYXJrZWQgc29sZCAtIChNYXJraW5nLmJsb2NrZWQgc29sZCArIE1hcmtpbmcuYmxvY2tlZCBzbmV3KVxuICAgICAgaW5cbiAgICAgIGxldCBuYl9zaGFyZWQgPVxuICAgICAgICBNYXJraW5nLnNoYXJlZCBzb2xkICsgTWFya2luZy5zaGFyZWQgc25ld1xuICAgICAgaW5cbiAgICAgIGxldCBzdCA9IHtcbiAgICAgICAgZHJvcHBlZCA9IGlmIGdldF9kcm9wcGVkIHRoZW4gQXJyYXkubWFrZSBuYl9kcm9wcGVkIE5vbmUgZWxzZSBbfHxdO1xuICAgICAgICBkcm9wcGVkX2xlYWYgPSBpZiBnZXRfZHJvcHBlZCB0aGVuIDAgZWxzZSAtIDE7XG4gICAgICAgIGRyb3BwZWRfam9pbiA9IGlmIGdldF9kcm9wcGVkIHRoZW4gbmJfZHJvcHBlZCBlbHNlIC0gMTtcbiAgICAgICAgc2hhcmVkID0gQXJyYXkubWFrZSBuYl9zaGFyZWQgTmlsO1xuICAgICAgICBzaGFyZWRfeCA9IEFycmF5Lm1ha2UgbmJfc2hhcmVkIFtdO1xuICAgICAgICBzaGFyZWRfaW5kZXggPSAwO1xuICAgICAgfSBpblxuICAgICAgKCpQcmludGYuZXByaW50ZiBcInNvbGQuc2hhcmVkOiVkIHNvbGQubWFya2VkOiVkIHNvbGQuYmxvY2tlZDolZFxcbiUhXCJcbiAgICAgICAgc29sZC5zaGFyZWQgc29sZC5tYXJrZWQgc29sZC5ibG9ja2VkO1xuICAgICAgUHJpbnRmLmVwcmludGYgXCJzbmV3LnNoYXJlZDolZCBzbmV3Lm1hcmtlZDolZCBzbmV3LmJsb2NrZWQ6JWRcXG4lIVwiXG4gICAgICAgIHNuZXcuc2hhcmVkIHNuZXcubWFya2VkIHNuZXcuYmxvY2tlZDsqKVxuICAgICAgdW5tYXJrX29sZCBzdCB4b2xkO1xuICAgICAgYXNzZXJ0IChzdC5kcm9wcGVkX2xlYWYgPSBzdC5kcm9wcGVkX2pvaW4pO1xuICAgICAgcHJlcGFyZV9zaGFyZWQgc3Q7XG4gICAgICBsZXQgcmVzdWx0ID0gdW5tYXJrX25ldyBzdCB0bmV3IGluXG4gICAgICAoKlByaW50Zi5lcHJpbnRmIFwibmV3X2NvbXB1dGVkOiVkJSFcXG5cIiAhbmV3X2NvbXB1dGVkOyopXG4gICAgICBmb3IgaSA9IHN0LnNoYXJlZF9pbmRleCAtIDEgZG93bnRvIDAgZG9cbiAgICAgICAgTWFya2luZy5yZXN0b3JlIHN0LnNoYXJlZC4oaSlcbiAgICAgIGRvbmU7XG4gICAgICBpZiBnZXRfZHJvcHBlZCB0aGVuIChcbiAgICAgICAgbGV0IHhsZWFmID0gcmVmIFtdIGluXG4gICAgICAgIGxldCB4am9pbiA9IHJlZiBbXSBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gc3Quc2hhcmVkX2luZGV4IC0gMSBkb1xuICAgICAgICAgIExpc3QuaXRlciAoZnVuY3Rpb25cbiAgICAgICAgICAgICAgfCBYTGVhZiB7IGIgPSBTb21lIGI7IF99IC0+IHhsZWFmIDo9IGIgOjogIXhsZWFmXG4gICAgICAgICAgICAgIHwgWEpvaW4geyBiID0gU29tZSBiOyBffSAtPiB4am9pbiA6PSBiIDo6ICF4am9pblxuICAgICAgICAgICAgICB8IF8gLT4gKClcbiAgICAgICAgICAgICkgc3Quc2hhcmVkX3guKGkpXG4gICAgICAgIGRvbmU7XG4gICAgICAgICh7IGxlYXZlcyA9IHN0LmRyb3BwZWRfbGVhZjtcbiAgICAgICAgICAgdGFibGUgPSBzdC5kcm9wcGVkO1xuICAgICAgICAgICBleHRyYV9sZWFmID0gIXhsZWFmO1xuICAgICAgICAgICBleHRyYV9qb2luID0gIXhqb2luIH0sIHJlc3VsdClcbiAgICAgICkgZWxzZVxuICAgICAgICBub19kcm9wcGVkLCByZXN1bHRcblxuICB0eXBlICgnYSwgJ2IpIG1hcF9yZWR1Y2UgPSB7XG4gICAgbWFwOiAnYSAtPiAnYjtcbiAgICByZWR1Y2U6ICdiIC0+ICdiIC0+ICdiO1xuICB9XG5cbiAgbGV0IGV2YWwgbWFwX3JlZHVjZSA9IGZ1bmN0aW9uXG4gICAgfCBYRW1wdHkgLT4gTm9uZVxuICAgIHwgb3RoZXIgLT5cbiAgICAgIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICAgICAgfCBYRW1wdHkgfCBYTGVhZiB7YSA9IE5pbCB8IEpvaW4gXzsgX30gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgIHwgWExlYWYge2IgPSBTb21lIGI7IF99IHwgWEpvaW4ge2IgPSBTb21lIGI7IF99IC0+IGJcbiAgICAgICAgfCBYTGVhZiAoe2EgPSBMZWFmIHQnO18gfSBhcyB0KSAtPlxuICAgICAgICAgIGxldCByZXN1bHQgPSBtYXBfcmVkdWNlLm1hcCB0Jy52IGluXG4gICAgICAgICAgdC5iIDwtIFNvbWUgcmVzdWx0O1xuICAgICAgICAgIHJlc3VsdFxuICAgICAgICB8IFhKb2luIHQgLT5cbiAgICAgICAgICBsZXQgbCA9IGF1eCB0LmwgYW5kIHIgPSBhdXggdC5yIGluXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IG1hcF9yZWR1Y2UucmVkdWNlIGwgciBpblxuICAgICAgICAgIHQuYiA8LSBTb21lIHJlc3VsdDtcbiAgICAgICAgICByZXN1bHRcbiAgICAgIGluXG4gICAgICBTb21lIChhdXggb3RoZXIpXG5cbiAgdHlwZSAoJ2EsICdiKSByZWR1Y2VyID0gKCdhLCAnYikgbWFwX3JlZHVjZSAqICgnYSwgJ2IpIHhmb3JtXG5cbiAgbGV0IG1ha2Ugfm1hcCB+cmVkdWNlID0gKHttYXA7IHJlZHVjZX0sIFhFbXB0eSlcblxuICBsZXQgcmVkdWNlIChtYXBfcmVkdWNlLCB0cmVlIDogXyByZWR1Y2VyKSA9XG4gICAgZXZhbCBtYXBfcmVkdWNlIHRyZWVcblxuICBsZXQgdXBkYXRlIChtYXBfcmVkdWNlLCBvbGRfdHJlZSA6IF8gcmVkdWNlcikgbmV3X3RyZWUgOiBfIHJlZHVjZXIgPVxuICAgIGxldCBfLCB0cmVlID0gZGlmZiBmYWxzZSBvbGRfdHJlZSBuZXdfdHJlZSBpblxuICAgIChtYXBfcmVkdWNlLCB0cmVlKVxuXG4gIGxldCB1cGRhdGVfYW5kX2dldF9kcm9wcGVkIChtYXBfcmVkdWNlLCBvbGRfdHJlZSA6IF8gcmVkdWNlcikgbmV3X3RyZWVcbiAgICA6IF8gZHJvcHBlZCAqIF8gcmVkdWNlciA9XG4gICAgbGV0IGRyb3BwZWQsIHRyZWUgPSBkaWZmIHRydWUgb2xkX3RyZWUgbmV3X3RyZWUgaW5cbiAgICAoZHJvcHBlZCwgKG1hcF9yZWR1Y2UsIHRyZWUpKVxuXG4gIGxldCBmb2xkX2Ryb3BwZWQga2luZCBmIGRyb3BwZWQgYWNjID1cbiAgICBsZXQgYWNjID0gcmVmIGFjYyBpblxuICAgIGxldCBzdGFydCwgYm91bmQgPSBtYXRjaCBraW5kIHdpdGhcbiAgICAgIHwgYEFsbCAgICAtPiAwLCBBcnJheS5sZW5ndGggZHJvcHBlZC50YWJsZVxuICAgICAgfCBgTWFwICAgIC0+IDAsIGRyb3BwZWQubGVhdmVzXG4gICAgICB8IGBSZWR1Y2UgLT4gZHJvcHBlZC5sZWF2ZXMsIEFycmF5Lmxlbmd0aCBkcm9wcGVkLnRhYmxlXG4gICAgaW5cbiAgICBmb3IgaSA9IHN0YXJ0IHRvIGJvdW5kIC0gMSBkb1xuICAgICAgbWF0Y2ggZHJvcHBlZC50YWJsZS4oaSkgd2l0aFxuICAgICAgfCBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgeCAtPiBhY2MgOj0gZiB4ICFhY2NcbiAgICBkb25lO1xuICAgIGJlZ2luIG1hdGNoIGtpbmQgd2l0aFxuICAgICAgfCBgQWxsIHwgYE1hcCAtPlxuICAgICAgICBMaXN0Lml0ZXIgKGZ1biB4IC0+IGFjYyA6PSBmIHggIWFjYykgZHJvcHBlZC5leHRyYV9sZWFmXG4gICAgICB8IGBSZWR1Y2UgLT4gKClcbiAgICBlbmQ7XG4gICAgYmVnaW4gbWF0Y2gga2luZCB3aXRoXG4gICAgICB8IGBBbGwgfCBgUmVkdWNlIC0+XG4gICAgICAgIExpc3QuaXRlciAoZnVuIHggLT4gYWNjIDo9IGYgeCAhYWNjKSBkcm9wcGVkLmV4dHJhX2pvaW5cbiAgICAgIHwgYE1hcCAtPiAoKVxuICAgIGVuZDtcbiAgICAhYWNjXG5lbmRcblxuKCogTHdkIGludGVyZmFjZSAqKVxuXG5sZXQgcmVjIHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlID0gZnVuY3Rpb25cbiAgfCBOaWwgIC0+IGFzc2VydCBmYWxzZVxuICB8IExlYWYgdCAtPiBtYXAgdC52XG4gIHwgSm9pbiB0IC0+XG4gICAgcmVkdWNlXG4gICAgICAocHVyZV9tYXBfcmVkdWNlIG1hcCByZWR1Y2UgdC5sKVxuICAgICAgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIHQucilcblxubGV0IGZvbGQgfm1hcCB+cmVkdWNlIHNlcSA9XG4gIG1hdGNoIEx3ZC5pc19wdXJlIHNlcSB3aXRoXG4gIHwgU29tZSBOaWwgLT4gTHdkLnB1cmUgTm9uZVxuICB8IFNvbWUgb3RoZXIgLT4gTHdkLnB1cmUgKFNvbWUgKHB1cmVfbWFwX3JlZHVjZSBtYXAgcmVkdWNlIG90aGVyKSlcbiAgfCBOb25lIC0+XG4gICAgbGV0IHJlZHVjZXIgPSByZWYgKFJlZHVjZXIubWFrZSB+bWFwIH5yZWR1Y2UpIGluXG4gICAgTHdkLm1hcCBzZXEgfmY6YmVnaW4gZnVuIHNlcSAtPlxuICAgICAgbGV0IHJlZHVjZXInID0gUmVkdWNlci51cGRhdGUgIXJlZHVjZXIgc2VxIGluXG4gICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgUmVkdWNlci5yZWR1Y2UgcmVkdWNlcidcbiAgICBlbmRcblxubGV0IGZvbGRfbW9ub2lkIG1hcCAoemVybywgcmVkdWNlKSBzZXEgPVxuICBtYXRjaCBMd2QuaXNfcHVyZSBzZXEgd2l0aFxuICB8IFNvbWUgTmlsIC0+IEx3ZC5wdXJlIHplcm9cbiAgfCBTb21lIG90aGVyIC0+IEx3ZC5wdXJlIChwdXJlX21hcF9yZWR1Y2UgbWFwIHJlZHVjZSBvdGhlcilcbiAgfCBOb25lIC0+XG4gICAgbGV0IHJlZHVjZXIgPSByZWYgKFJlZHVjZXIubWFrZSB+bWFwIH5yZWR1Y2UpIGluXG4gICAgTHdkLm1hcCBzZXEgfmY6YmVnaW4gZnVuIHNlcSAtPlxuICAgICAgbGV0IHJlZHVjZXInID0gUmVkdWNlci51cGRhdGUgIXJlZHVjZXIgc2VxIGluXG4gICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgbWF0Y2ggUmVkdWNlci5yZWR1Y2UgcmVkdWNlcicgd2l0aFxuICAgICAgfCBOb25lIC0+IHplcm9cbiAgICAgIHwgU29tZSB4IC0+IHhcbiAgICBlbmRcblxubGV0IG1vbm9pZCA9IChlbXB0eSwgY29uY2F0KVxuXG5sZXQgdHJhbnNmb3JtX2xpc3QgbHMgZiA9XG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIGYgbW9ub2lkIGxzXG5cbmxldCBvZl9saXN0IGxzID0gdHJhbnNmb3JtX2xpc3QgbHMgZWxlbWVudFxuXG5sZXQgcmVjIG9mX3N1Yl9hcnJheSBmIGFyciBpIGogPVxuICBpZiBqIDwgaSB0aGVuIGVtcHR5XG4gIGVsc2UgaWYgaiA9IGkgdGhlbiBmIGFyci4oaSlcbiAgZWxzZVxuICAgIGxldCBrID0gaSArIChqIC0gaSkgLyAyIGluXG4gICAgY29uY2F0IChvZl9zdWJfYXJyYXkgZiBhcnIgaSBrKSAob2Zfc3ViX2FycmF5IGYgYXJyIChrICsgMSkgailcblxubGV0IHRyYW5zZm9ybV9hcnJheSBhcnIgZiA9IG9mX3N1Yl9hcnJheSBmIGFyciAwIChBcnJheS5sZW5ndGggYXJyIC0gMSlcblxubGV0IG9mX2FycmF5IGFyciA9IHRyYW5zZm9ybV9hcnJheSBhcnIgZWxlbWVudFxuXG5sZXQgdG9fbGlzdCB4ID1cbiAgbGV0IHJlYyBmb2xkIHggYWNjID0gbWF0Y2ggeCB3aXRoXG4gICAgfCBOaWwgLT4gYWNjXG4gICAgfCBMZWFmIHQgLT4gdC52IDo6IGFjY1xuICAgIHwgSm9pbiB0IC0+IGZvbGQgdC5sIChmb2xkIHQuciBhY2MpXG4gIGluXG4gIGZvbGQgeCBbXVxuXG5sZXQgdG9fYXJyYXkgeCA9XG4gIGxldCByZWMgY291bnQgPSBmdW5jdGlvblxuICAgIHwgTmlsIC0+IDBcbiAgICB8IExlYWYgXyAtPiAxXG4gICAgfCBKb2luIHQgLT4gY291bnQgdC5sICsgY291bnQgdC5yXG4gIGluXG4gIG1hdGNoIGNvdW50IHggd2l0aFxuICB8IDAgLT4gW3x8XVxuICB8IG4gLT5cbiAgICBsZXQgcmVjIGZpcnN0ID0gZnVuY3Rpb25cbiAgICAgIHwgTmlsIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBMZWFmIHQgLT4gdC52XG4gICAgICB8IEpvaW4gdCAtPiBmaXJzdCB0LmxcbiAgICBpblxuICAgIGxldCBmaXJzdCA9IGZpcnN0IHggaW5cbiAgICBsZXQgYXJyID0gQXJyYXkubWFrZSBuIGZpcnN0IGluXG4gICAgbGV0IHJlYyBmb2xkIGkgPSBmdW5jdGlvblxuICAgICAgfCBOaWwgLT4gaVxuICAgICAgfCBMZWFmIHQgLT4gYXJyLihpKSA8LSB0LnY7IGkgKyAxXG4gICAgICB8IEpvaW4gdCAtPlxuICAgICAgICBsZXQgaSA9IGZvbGQgaSB0LmwgaW5cbiAgICAgICAgbGV0IGkgPSBmb2xkIGkgdC5yIGluXG4gICAgICAgIGlcbiAgICBpblxuICAgIGxldCBfIDogaW50ID0gZm9sZCAwIHggaW5cbiAgICBhcnJcblxubGV0IGx3ZF9lbXB0eSA6ICdhIHQgTHdkLnQgPSBMd2QucHVyZSBOaWxcbmxldCBsd2RfbW9ub2lkIDogJ2EuICdhIHQgTHdkLnQgTHdkX3V0aWxzLm1vbm9pZCA9XG4gIChsd2RfZW1wdHksIGZ1biB4IHkgLT4gTHdkLm1hcDIgfmY6Y29uY2F0IHggeSlcblxubGV0IG1hcCBmIHNlcSA9XG4gIGZvbGRfbW9ub2lkIChmdW4geCAtPiBlbGVtZW50IChmIHgpKSBtb25vaWQgc2VxXG5cbmxldCBmaWx0ZXIgZiBzZXEgPVxuICBmb2xkX21vbm9pZCAoZnVuIHggLT4gaWYgZiB4IHRoZW4gZWxlbWVudCB4IGVsc2UgZW1wdHkpIG1vbm9pZCBzZXFcblxubGV0IGZpbHRlcl9tYXAgZiBzZXEgPVxuICBsZXQgc2VsZWN0IHggPSBtYXRjaCBmIHggd2l0aFxuICAgIHwgU29tZSB5IC0+IGVsZW1lbnQgeVxuICAgIHwgTm9uZSAtPiBlbXB0eVxuICBpblxuICBmb2xkX21vbm9pZCBzZWxlY3QgbW9ub2lkIHNlcVxuXG5sZXQgYmluZCAoc2VxIDogJ2Egc2VxIEx3ZC50KSAoZiA6ICdhIC0+ICdiIHNlcSBMd2QudCkgIDogJ2Igc2VxIEx3ZC50ID1cbiAgTHdkLmpvaW4gKGZvbGRfbW9ub2lkIGYgbHdkX21vbm9pZCBzZXEpXG5cbmxldCBzZXFfYmluZCAoc2VxIDogJ2Egc2VxIEx3ZC50KSAoZiA6ICdhIC0+ICdiIHNlcSkgIDogJ2Igc2VxIEx3ZC50ID1cbiAgZm9sZF9tb25vaWQgZiBtb25vaWQgc2VxXG5cbmxldCBsaWZ0IChzZXEgOiAnYSBMd2QudCBzZXEgTHdkLnQpIDogJ2Egc2VxIEx3ZC50ID1cbiAgYmluZCBzZXEgKEx3ZC5tYXAgfmY6ZWxlbWVudClcblxubW9kdWxlIEJhbGFuY2VkVHJlZSA6IHNpZ1xuICB0eXBlICdhIHQgPVxuICAgIHwgTGVhZlxuICAgIHwgTm9kZSBvZiB7XG4gICAgICAgIHJhbms6IGludDtcbiAgICAgICAgbDogJ2EgdDtcbiAgICAgICAgeDogaW50ICogJ2Egc2VxO1xuICAgICAgICByOiAnYSB0O1xuICAgICAgICBtdXRhYmxlIHNlcTogJ2Egc2VxO1xuICAgICAgfVxuICB2YWwgbGVhZiA6ICdhIHRcbiAgKCp2YWwgbm9kZSA6ICdhIHQgLT4gaW50ICogJ2Egc2VxIC0+ICdhIHQgLT4gJ2EgdCopXG5cbiAgdmFsIGluc2VydCA6IGNtcDooJ2EgLT4gJ2EgLT4gaW50KSAtPiBpbnQgLT4gJ2Egc2VxIC0+ICdhIHQgLT4gJ2EgdFxuICAoKnZhbCB1bmlvbiA6IGNtcDooJ2EgLT4gJ2EgLT4gaW50KSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdCopXG5lbmQgPSBzdHJ1Y3RcbiAgdHlwZSAnYSB0ID1cbiAgICB8IExlYWZcbiAgICB8IE5vZGUgb2Yge1xuICAgICAgICByYW5rOiBpbnQ7XG4gICAgICAgIGw6ICdhIHQ7XG4gICAgICAgIHg6IGludCAqICdhIHNlcTtcbiAgICAgICAgcjogJ2EgdDtcbiAgICAgICAgbXV0YWJsZSBzZXE6ICdhIHNlcTtcbiAgICAgIH1cblxuICBsZXQgbGVhZiA9IExlYWZcblxuICBsZXQgcmFuayA9IGZ1bmN0aW9uXG4gICAgfCBMZWFmIC0+IDBcbiAgICB8IE5vZGUgdCAtPiB0LnJhbmtcblxuICBsZXQgY2hlY2sgbCByID0gYWJzIChsIC0gcikgPD0gMVxuXG4gIGxldCBub2RlIGwgeCByID1cbiAgICBOb2RlIHtsOyB4OyByOyBzZXEgPSBlbXB0eTsgcmFuayA9IG1heGkgKHJhbmsgbCkgKHJhbmsgcikgKyAxfVxuXG4gIGxldCByZWMgbm9kZV9sZWZ0IGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtciB0aGVuIG5vZGUgbCB4IHIgZWxzZSBtYXRjaCBsIHdpdGhcbiAgICAgIHwgTGVhZiAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgTm9kZSB0IC0+XG4gICAgICAgIGlmIGNoZWNrIChyYW5rIHQubCkgbWxcbiAgICAgICAgdGhlbiBub2RlIHQubCB0LnggKG5vZGVfbGVmdCB0LnIgeCByKVxuICAgICAgICBlbHNlIG1hdGNoIHQuciB3aXRoXG4gICAgICAgICAgfCBMZWFmIC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgIHwgTm9kZSB0ciAtPlxuICAgICAgICAgICAgbGV0IHRyciA9IG5vZGVfbGVmdCB0ci5yIHggciBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHQubCkgKHJhbmsgdHIubCkpIChyYW5rIHRycilcbiAgICAgICAgICAgIHRoZW4gbm9kZSAobm9kZSB0LmwgdC54IHRyLmwpIHRyLnggdHJyXG4gICAgICAgICAgICBlbHNlIG5vZGUgdC5sIHQueCAobm9kZSB0ci5sIHRyLnggdHJyKVxuXG4gIGxldCByZWMgbm9kZV9yaWdodCBsIHggciA9XG4gICAgbGV0IG1sID0gcmFuayBsIGluXG4gICAgbGV0IG1yID0gcmFuayByIGluXG4gICAgaWYgY2hlY2sgbXIgbWwgdGhlbiBub2RlIGwgeCByIGVsc2UgbWF0Y2ggciB3aXRoXG4gICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBpZiBjaGVjayAocmFuayB0LnIpIG1yXG4gICAgICAgIHRoZW4gbm9kZSAobm9kZV9yaWdodCBsIHggdC5sKSB0LnggdC5yXG4gICAgICAgIGVsc2UgbWF0Y2ggdC5sIHdpdGhcbiAgICAgICAgICB8IExlYWYgLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBOb2RlIHRsIC0+XG4gICAgICAgICAgICBsZXQgdGxsID0gbm9kZV9yaWdodCBsIHggdGwubCBpblxuICAgICAgICAgICAgaWYgY2hlY2sgKDEgKyBtYXhpIChyYW5rIHRsLnIpIChyYW5rIHQucikpIChyYW5rIHRsbClcbiAgICAgICAgICAgIHRoZW4gbm9kZSB0bGwgdGwueCAobm9kZSB0bC5yIHQueCB0LnIpXG4gICAgICAgICAgICBlbHNlIG5vZGUgKG5vZGUgdGxsIHRsLnggdGwucikgdC54IHQuclxuXG4gIGxldCBub2RlIGwgeCByID1cbiAgICBsZXQgbWwgPSByYW5rIGwgaW5cbiAgICBsZXQgbXIgPSByYW5rIHIgaW5cbiAgICBpZiBjaGVjayBtbCBtclxuICAgIHRoZW4gbm9kZSBsIHggclxuICAgIGVsc2UgaWYgbWwgPD0gbXJcbiAgICB0aGVuIG5vZGVfcmlnaHQgbCB4IHJcbiAgICBlbHNlIG5vZGVfbGVmdCBsIHggclxuXG4gIGxldCByZWMgam9pbiBsIHIgPSBtYXRjaCBsLCByIHdpdGhcbiAgICB8IExlYWYsIHQgfCB0LCBMZWFmIC0+IHRcbiAgICB8IE5vZGUgdGwsIE5vZGUgdHIgLT5cbiAgICAgIGlmIHRsLnJhbmsgPD0gdHIucmFuayB0aGVuXG4gICAgICAgIG5vZGUgKGpvaW4gbCB0ci5sKSB0ci54IHRyLnJcbiAgICAgIGVsc2VcbiAgICAgICAgbm9kZSB0bC5sIHRsLnggKGpvaW4gdGwuciByKVxuXG4gIGxldCBnZXRfZWxlbWVudCA9IGZ1bmN0aW9uXG4gICAgfCBOaWwgfCBKb2luIF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBMZWFmIHt2O199IC0+IHZcblxuICAoKmxldCByZWMgc3BsaXQgfmNtcCBrID0gZnVuY3Rpb25cbiAgICB8IExlYWYgLT4gTGVhZiwgMCwgTGVhZlxuICAgIHwgTm9kZSB0IC0+XG4gICAgICBsZXQgYyA9IGNtcCBrIChnZXRfZWxlbWVudCAoc25kICh0LngpKSkgaW5cbiAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgbGV0IGwnLCB2JywgcicgPSBzcGxpdCB+Y21wIGsgdC5sIGluXG4gICAgICAgIGwnLCB2Jywgam9pbiByJyB0LnJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICBsZXQgbCcsIHYnLCByJyA9IHNwbGl0IH5jbXAgayB0LnIgaW5cbiAgICAgICAgam9pbiB0LmwgbCcsIHYnLCByJ1xuICAgICAgZWxzZVxuICAgICAgICAodC5sLCBmc3QgdC54LCB0LnIpXG5cbiAgbGV0IHJlYyB1bmlvbiB+Y21wIHQxIHQyID1cbiAgICBtYXRjaCB0MSwgdDIgd2l0aFxuICAgIHwgTGVhZiwgdCB8IHQsIExlYWYgLT4gdFxuICAgIHwgTm9kZSB0MSwgdDIgIC0+XG4gICAgICBsZXQgbTEsIGsxID0gdDEueCBpblxuICAgICAgbGV0IGwyLCBtMiwgcjIgPSBzcGxpdCB+Y21wIChnZXRfZWxlbWVudCBrMSkgdDIgaW5cbiAgICAgIGxldCBsJyA9IHVuaW9uIH5jbXAgdDEubCBsMiBpblxuICAgICAgbGV0IHInID0gdW5pb24gfmNtcCB0MS5yIHIyIGluXG4gICAgICBsZXQgbSA9IG0xICsgbTIgaW5cbiAgICAgIGlmIG0gPSAwIHRoZW5cbiAgICAgICAgam9pbiBsJyByJ1xuICAgICAgZWxzZSAoXG4gICAgICAgIGFzc2VydCAobSA+IDApO1xuICAgICAgICBub2RlIGwnIChtLCBrMSkgcic7XG4gICAgICApXG4gICAgKilcblxuICBsZXQgaW5zZXJ0IH5jbXAgbTEgcyB0ID1cbiAgICBhc3NlcnQgKG0xIDw+IDApO1xuICAgIGxldCByZWMgYXV4ID0gZnVuY3Rpb25cbiAgICAgIHwgTGVhZiAtPiBub2RlIExlYWYgKG0xLCBzKSBMZWFmXG4gICAgICB8IE5vZGUgdCAtPlxuICAgICAgICBsZXQgbTIsIHggPSB0LnggaW5cbiAgICAgICAgbGV0IGMgPSBjbXAgKGdldF9lbGVtZW50IHMpIChnZXRfZWxlbWVudCB4KSBpblxuICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgbGV0IG0gPSBtMSArIG0yIGluXG4gICAgICAgICAgaWYgbSA9IDAgdGhlblxuICAgICAgICAgICAgam9pbiB0LmwgdC5yXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbm9kZSB0LmwgKG0sIHgpIHQuclxuICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICBsZXQgbCcgPSBhdXggdC5sIGluXG4gICAgICAgICAgbm9kZSBsJyB0LnggdC5yXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBsZXQgcicgPSBhdXggdC5yIGluXG4gICAgICAgICAgbm9kZSB0LmwgdC54IHInXG4gICAgaW5cbiAgICBhdXggdFxuZW5kXG5cbmxldCByZWMgc2VxX29mX3RyZWUgPSBmdW5jdGlvblxuICB8IEJhbGFuY2VkVHJlZS5MZWFmIC0+IGVtcHR5XG4gIHwgQmFsYW5jZWRUcmVlLk5vZGUgdCAtPlxuICAgIG1hdGNoIHQuc2VxIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgbGV0IHNsID0gc2VxX29mX3RyZWUgdC5sIGluXG4gICAgICBsZXQgc3IgPSBzZXFfb2ZfdHJlZSB0LnIgaW5cbiAgICAgIGFzc2VydCAoZnN0IHQueCA+IDApO1xuICAgICAgbGV0IHNlcSA9IGNvbmNhdCBzbCAoY29uY2F0IChzbmQgdC54KSBzcikgaW5cbiAgICAgIHQuc2VxIDwtIHNlcTtcbiAgICAgIHNlcVxuICAgIHwgc2VxIC0+IHNlcVxuXG5sZXQgc29ydF91bmlxIGNtcCBzZXEgPVxuICBsZXQgcHJldmlvdXNfc2VxID0gcmVmIGVtcHR5IGluXG4gIGxldCBwcmV2aW91c190cmVlID0gcmVmIEJhbGFuY2VkVHJlZS5sZWFmIGluXG4gIGxldCBmIG5ld19zZXEgPVxuICAgIGxldCBvbGRfc2VxID0gIXByZXZpb3VzX3NlcSBpblxuICAgIGxldCBvbGRfdHJlZSA9ICFwcmV2aW91c190cmVlIGluXG4gICAgbGV0IF8gPSBNYXJraW5nLnVuc2FmZV90cmF2ZXJzZSB+b2xkX3Jvb3Q6b2xkX3NlcSB+bmV3X3Jvb3Q6bmV3X3NlcSBpblxuICAgIGxldCByZWMgdW5ibG9jayA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiAoKVxuICAgICAgfCBMZWFmIHQgLT4gdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIHQubWFya1xuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIHVuYmxvY2sgdC5sO1xuICAgICAgICB1bmJsb2NrIHQucjtcbiAgICAgICAgaWYgTWFya2luZy5pc19zaGFyZWQgbWFyayB0aGVuIChcbiAgICAgICAgICBNYXJraW5nLnJlc3RvcmUgc2VxO1xuICAgICAgICApIGVsc2UgaWYgTWFya2luZy5pc19ib3RoIG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICkgZWxzZVxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ub25lIG1hcmspXG4gICAgaW5cbiAgICBsZXQgcmVjIHVubWFya19uZXcgdHJlZSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiB0cmVlXG4gICAgICB8IExlYWYgdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdC5tYXJrIDwtIDA7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlblxuICAgICAgICAgIEJhbGFuY2VkVHJlZS5pbnNlcnQgfmNtcCAoKzEpIHNlcSB0cmVlXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ib3RoIG1hcmsgfHwgTWFya2luZy5pc19ub25lIG1hcmspO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIGlmIE1hcmtpbmcuaXNfbmV3IG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICAgdW5tYXJrX25ldyAodW5tYXJrX25ldyB0cmVlIHQubCkgdC5yXG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgdW5ibG9jayBzZXE7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgaW5cbiAgICBsZXQgcmVjIHVubWFya19vbGQgdHJlZSA9IGZ1bmN0aW9uXG4gICAgICB8IE5pbCAtPiB0cmVlXG4gICAgICB8IExlYWYgdCBhcyBzZXEgLT5cbiAgICAgICAgbGV0IG1hcmsgPSB0Lm1hcmsgaW5cbiAgICAgICAgdC5tYXJrIDwtIDA7XG4gICAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlblxuICAgICAgICAgIEJhbGFuY2VkVHJlZS5pbnNlcnQgfmNtcCAoLTEpIHNlcSB0cmVlXG4gICAgICAgIGVsc2UgKFxuICAgICAgICAgIGFzc2VydCAoTWFya2luZy5pc19ib3RoIG1hcmsgfHwgTWFya2luZy5pc19ub25lIG1hcmspO1xuICAgICAgICAgIHRyZWVcbiAgICAgICAgKVxuICAgICAgfCBKb2luIHQgYXMgc2VxIC0+XG4gICAgICAgIGxldCBtYXJrID0gdC5tYXJrIGluXG4gICAgICAgIGlmIE1hcmtpbmcuaXNfb2xkIG1hcmsgdGhlbiAoXG4gICAgICAgICAgdC5tYXJrIDwtIE1hcmtpbmcudW5tYXJrIG1hcms7XG4gICAgICAgICAgdW5tYXJrX29sZCAodW5tYXJrX29sZCB0cmVlIHQubCkgdC5yXG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgdW5ibG9jayBzZXE7XG4gICAgICAgICAgdHJlZVxuICAgICAgICApXG4gICAgaW5cbiAgICBsZXQgbmV3X3RyZWUgPSB1bm1hcmtfb2xkICh1bm1hcmtfbmV3IG9sZF90cmVlIG5ld19zZXEpIG9sZF9zZXEgaW5cbiAgICBwcmV2aW91c19zZXEgOj0gbmV3X3NlcTtcbiAgICBwcmV2aW91c190cmVlIDo9IG5ld190cmVlO1xuICAgIHNlcV9vZl90cmVlIG5ld190cmVlXG4gIGluXG4gIEx3ZC5tYXAgc2VxIH5mXG4iLCJvcGVuIEJyclxub3BlbiBFbFxuXG50eXBlIHQgPSBFbC50XG5cbnR5cGUgJ2EgY29sID0gW1xuICB8IGBQIG9mICdhXG4gICgqKiBQdXJlIGVsZW1lbnQgKilcbiAgfCBgUiBvZiAnYSBMd2QudFxuICAoKiogUmVhY3RpdmUgZWxlbWVudCAqKVxuICB8IGBTIG9mICdhIEx3ZF9zZXEudCBMd2QudFxuICAoKiogUmVhY3RpdmUgc2VxdWVuY2Ugb2YgZWxlbWVudHMgKilcbl0gbGlzdFxuKCoqIERlc2NyaWJpbmcgY29sbGVjdGlvbnMgb2YgZWxlbWVudHMgKilcblxudHlwZSBoYW5kbGVyID0gSGFuZGxlciA6IHtcbiAgICBvcHRzOiBFdi5saXN0ZW5fb3B0cyBvcHRpb247XG4gICAgdHlwZSc6ICdhIEV2LnR5cGUnO1xuICAgIGZ1bmM6ICdhIEV2LnQgLT4gdW5pdDtcbiAgfSAtPiBoYW5kbGVyXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPVxuICBIYW5kbGVyIHtvcHRzOyB0eXBlJzsgZnVuY31cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgZXh0cmFjdF9wdXJlX2VsZW1lbnQgeCA9IE9wdGlvbi5nZXQgKEx3ZC5pc19wdXJlIHgpXG5cbmxldCBleHRyYWN0X3B1cmVfZWxlbWVudHMgeHMgPVxuICBMaXN0LmZsYXR0ZW4gKFxuICAgIExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICB8IGBQIHggLT4gW3hdXG4gICAgICAgIHwgYFIgeCAtPiBbZXh0cmFjdF9wdXJlX2VsZW1lbnQgeF1cbiAgICAgICAgfCBgUyB4IC0+IEx3ZF9zZXEudG9fbGlzdCAoZXh0cmFjdF9wdXJlX2VsZW1lbnQgeClcbiAgICAgICkgeHNcbiAgKVxuXG5sZXQgcHJlcGFyZV9jb2wgOiBfIGNvbCAtPiBfID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXSwgW11cbiAgfCBjb2wgLT5cbiAgICBsZXQgcHVyZSwgaW1wdXJlID0gTGlzdC5wYXJ0aXRpb24gaXNfcHVyZV9lbGVtZW50IGNvbCBpblxuICAgIGV4dHJhY3RfcHVyZV9lbGVtZW50cyBwdXJlLCBpbXB1cmVcblxuKCoqIFJlYWN0aXZlIHNlcXVlbmNlIG9mIGVsZW1lbnRzICopXG5cbmxldCBjb25zdW1lX2NoaWxkcmVuID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBbXSwgTm9uZVxuICB8IFtgUCB4XSAtPiBbeF0sIE5vbmVcbiAgfCBbYFMgeF0gLT4gW10sIFNvbWUgeFxuICB8IFtgUiB4XSAtPiBbXSwgU29tZSAoTHdkLm1hcCB+ZjpMd2Rfc2VxLmVsZW1lbnQgeClcbiAgfCBjb2wgLT5cbiAgICBpZiBMaXN0LmZvcl9hbGwgaXNfcHVyZV9lbGVtZW50IGNvbFxuICAgIHRoZW5cbiAgICAgIExpc3QuZmxhdHRlbiAoXG4gICAgICAgIExpc3QubWFwIChmdW5jdGlvblxuICAgICAgICAgICAgfCBgUCB4IC0+IFt4XVxuICAgICAgICAgICAgfCBgUiB4IC0+IFtleHRyYWN0X3B1cmVfZWxlbWVudCB4XVxuICAgICAgICAgICAgfCBgUyB4IC0+IEx3ZF9zZXEudG9fbGlzdCAoZXh0cmFjdF9wdXJlX2VsZW1lbnQgeClcbiAgICAgICAgICApXG4gICAgICAgICAgY29sXG4gICAgICApLCBOb25lXG4gICAgZWxzZSBbXSwgU29tZSAoXG4gICAgICAgIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgICAgICAgfCBgUCB4IC0+IEx3ZC5wdXJlIChMd2Rfc2VxLmVsZW1lbnQgeClcbiAgICAgICAgICAgIHwgYFIgeCAtPiBMd2QubWFwIH5mOkx3ZF9zZXEuZWxlbWVudCB4XG4gICAgICAgICAgICB8IGBTIHggLT4geFxuICAgICAgICAgICkgTHdkX3NlcS5sd2RfbW9ub2lkXG4gICAgICAgICAgY29sXG4gICAgICApXG5cbnR5cGUgY2hpbGRfdHJlZSA9XG4gIHwgTGVhZiBvZiBFbC50XG4gIHwgSW5uZXIgb2YgeyBtdXRhYmxlIGJvdW5kOiBKdi50O1xuICAgICAgICAgICAgICAgbGVmdDogY2hpbGRfdHJlZTsgcmlnaHQ6IGNoaWxkX3RyZWU7IH1cblxubGV0IGNoaWxkX25vZGUgbm9kZSA9IExlYWYgbm9kZVxuXG5sZXQgY2hpbGRfam9pbiBsZWZ0IHJpZ2h0ID0gSW5uZXIgeyBib3VuZCA9IEp2Lm51bGw7IGxlZnQ7IHJpZ2h0IH1cblxubGV0IGp2X3BhcmVudE5vZGUgPSBKc3RyLnYgXCJwYXJlbnROb2RlXCJcbmxldCBqdl9uZXh0U2libGluZyA9IEpzdHIudiBcIm5leHRTaWJsaW5nXCJcbmxldCBqdl9hcHBlbmQgPSBKc3RyLnYgXCJhcHBlbmRcIlxubGV0IGp2X2JlZm9yZSA9IEpzdHIudiBcImJlZm9yZVwiXG5sZXQganZfcmVtb3ZlID0gSnN0ci52IFwicmVtb3ZlXCJcbmxldCBqdl9jb250YWlucyA9IEpzdHIudiBcImNvbnRhaW5zXCJcblxubGV0IGp2X3RvUmVtb3ZlID1cbiAgSnN0ci52IFwibHdkLXRvLXJlbW92ZVwiICgqIEhBQ0sgQ291bGQgYmUgdHVybmVkIGludG8gYSBKYXZhc2NyaXB0IHN5bWJvbCAqKVxuXG5sZXQgY29udGFpbnNfZm9jdXMgbm9kZSA9XG4gIG1hdGNoIEJyci5Eb2N1bWVudC5hY3RpdmVfZWwgKEJyci5FbC5kb2N1bWVudCBub2RlKSB3aXRoXG4gIHwgTm9uZSAtPiBmYWxzZVxuICB8IFNvbWUgZWwgLT5cbiAgICBKdi50b19ib29sIChKdi5jYWxsJyAoRWwudG9fanYgbm9kZSkganZfY29udGFpbnMgW3xFbC50b19qdiBlbHxdKVxuXG5sZXQgdXBkYXRlX2NoaWxkcmVuXG4gICAgKHNlbGYgOiBFbC50KVxuICAgIChjaGlsZHJlbiA6IEVsLnQgTHdkX3NlcS50IEx3ZC50KSA6IEVsLnQgTHdkLnQgPVxuICBsZXQgcmVkdWNlciA9XG4gICAgcmVmIChMd2Rfc2VxLlJlZHVjZXIubWFrZSB+bWFwOmNoaWxkX25vZGUgfnJlZHVjZTpjaGlsZF9qb2luKVxuICBpblxuICBMd2QubWFwIGNoaWxkcmVuIH5mOmJlZ2luIGZ1biBjaGlsZHJlbiAtPlxuICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBjaGlsZHJlbiBpblxuICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgbGV0IHNjaGVkdWxlX2Zvcl9yZW1vdmFsIGNoaWxkICgpID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgfCBMZWFmIG5vZGUgLT4gSnYuc2V0JyAoRWwudG9fanYgbm9kZSkganZfdG9SZW1vdmUgSnYudHJ1ZSc7XG4gICAgICB8IElubmVyIF8gLT4gKClcbiAgICBpblxuICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcCBzY2hlZHVsZV9mb3JfcmVtb3ZhbCBkcm9wcGVkICgpO1xuICAgIGxldCBwcmVzZXJ2ZV9mb2N1cyA9IGNvbnRhaW5zX2ZvY3VzIHNlbGYgaW5cbiAgICBiZWdpbiBtYXRjaCBMd2Rfc2VxLlJlZHVjZXIucmVkdWNlIHJlZHVjZXInIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIHRyZWUgLT5cbiAgICAgICAgbGV0IHJlYyB1cGRhdGUgYWNjID0gZnVuY3Rpb25cbiAgICAgICAgICB8IExlYWYgbm9kZSAtPlxuICAgICAgICAgICAgbGV0IG5vZGUnID0gRWwudG9fanYgbm9kZSBpblxuICAgICAgICAgICAgSnYuZGVsZXRlJyBub2RlJyBqdl90b1JlbW92ZTtcbiAgICAgICAgICAgICgqQnJyLkNvbnNvbGUubG9nIFtcIlVwZGF0aW5nIFwiOyBub2RlXTsqKVxuICAgICAgICAgICAgaWYgSnYuZ2V0JyBub2RlJyBqdl9wYXJlbnROb2RlICE9IEVsLnRvX2p2IHNlbGYgdGhlbiAoXG4gICAgICAgICAgICAgIGlmIEp2LmlzX251bGwgYWNjXG4gICAgICAgICAgICAgIHRoZW4gaWdub3JlIChKdi5jYWxsJyAoRWwudG9fanYgc2VsZikganZfYXBwZW5kIFt8bm9kZSd8XSlcbiAgICAgICAgICAgICAgZWxzZSBpZ25vcmUgKEp2LmNhbGwnIGFjYyBqdl9iZWZvcmUgW3xub2RlJ3xdKVxuICAgICAgICAgICAgKSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgKCogQ2hlY2sgaWYgdGhlcmUgaXMgbm90IGFueSB3b3JrIHRvIGRvICopXG4gICAgICAgICAgICAgIEp2LmdldCcgbm9kZScganZfbmV4dFNpYmxpbmcgIT0gYWNjICYmXG4gICAgICAgICAgICAgICgqIENoZWNrIGlmIHdlIGFyZSBpbiB0aGUgZm9jdXMgY2FzZSBhbmQgdHJ5IHRvIFwiYnViYmxlIHNvcnRcIiB0b1xuICAgICAgICAgICAgICAgICBwcmVzZXJ2ZSBmb2N1cyAqKVxuICAgICAgICAgICAgICBub3QgKFxuICAgICAgICAgICAgICAgIHByZXNlcnZlX2ZvY3VzICYmIGNvbnRhaW5zX2ZvY3VzIG5vZGUgJiZcbiAgICAgICAgICAgICAgICBsZXQgcmVjIHNoaWZ0X3NpYmxpbmdzICgpID1cbiAgICAgICAgICAgICAgICAgIGxldCBzaWJsaW5nID0gSnYuZ2V0JyBub2RlJyBqdl9uZXh0U2libGluZyBpblxuICAgICAgICAgICAgICAgICAgaWYgc2libGluZyA9PSBhY2MgdGhlbiB0cnVlXG4gICAgICAgICAgICAgICAgICBlbHNlIGlmIEp2LmlzX251bGwgc2libGluZyB0aGVuIGZhbHNlXG4gICAgICAgICAgICAgICAgICBlbHNlIChcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlIChKdi5jYWxsJyBub2RlJyBqdl9iZWZvcmUgW3xzaWJsaW5nfF0pO1xuICAgICAgICAgICAgICAgICAgICBzaGlmdF9zaWJsaW5ncyAoKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGluXG4gICAgICAgICAgICAgICAgc2hpZnRfc2libGluZ3MgKClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB0aGVuIChcbiAgICAgICAgICAgICAgaWYgSnYuaXNfbnVsbCBhY2NcbiAgICAgICAgICAgICAgdGhlbiBpZ25vcmUgKEp2LmNhbGwnIChFbC50b19qdiBzZWxmKSBqdl9hcHBlbmQgW3xub2RlJ3xdKVxuICAgICAgICAgICAgICBlbHNlIGlnbm9yZSAoSnYuY2FsbCcgYWNjIGp2X2JlZm9yZSBbfG5vZGUnfF0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbm9kZSdcbiAgICAgICAgICB8IElubmVyIHQgLT5cbiAgICAgICAgICAgIGlmIEp2LmlzX251bGwgdC5ib3VuZCB0aGVuIChcbiAgICAgICAgICAgICAgbGV0IGFjYyA9IHVwZGF0ZSBhY2MgdC5yaWdodCBpblxuICAgICAgICAgICAgICBsZXQgYWNjID0gdXBkYXRlIGFjYyB0LmxlZnQgaW5cbiAgICAgICAgICAgICAgdC5ib3VuZCA8LSBhY2M7XG4gICAgICAgICAgICAgIGFjY1xuICAgICAgICAgICAgKSBlbHNlXG4gICAgICAgICAgICAgIHQuYm91bmRcbiAgICAgICAgaW5cbiAgICAgICAgaWdub3JlICh1cGRhdGUgSnYubnVsbCB0cmVlKVxuICAgIGVuZDtcbiAgICBsZXQgcmVtb3ZlX2NoaWxkIGNoaWxkICgpID0gbWF0Y2ggY2hpbGQgd2l0aFxuICAgICAgfCBMZWFmIG5vZGUgLT5cbiAgICAgICAgbGV0IG5vZGUgPSBFbC50b19qdiBub2RlIGluXG4gICAgICAgIGlmIEp2LmlzX3NvbWUgKEp2LmdldCcgbm9kZSBqdl90b1JlbW92ZSkgdGhlbiAoXG4gICAgICAgICAgKCpCcnIuQ29uc29sZS5sb2cgW1wiUmVtb3ZpbmcgXCI7IG5vZGVdOyopXG4gICAgICAgICAgSnYuZGVsZXRlJyBub2RlIGp2X3RvUmVtb3ZlO1xuICAgICAgICAgIGlnbm9yZSAoSnYuY2FsbCcgbm9kZSBqdl9yZW1vdmUgW3x8XSlcbiAgICAgICAgKVxuICAgICAgfCBJbm5lciBfIC0+ICgpXG4gICAgaW5cbiAgICBMd2Rfc2VxLlJlZHVjZXIuZm9sZF9kcm9wcGVkIGBNYXAgcmVtb3ZlX2NoaWxkIGRyb3BwZWQgKCk7XG4gICAgc2VsZlxuICBlbmRcblxubGV0IHB1cmVfdW5pdCA9IEx3ZC5wdXJlICgpXG5cbmxldCBkdW1teV9rdl9hdCA9IChKc3RyLmVtcHR5LCBKc3RyLmVtcHR5KVxuXG5sZXQgYXR0YWNoX2F0dHJpYnMgZWwgYXR0cmlicyA9XG4gIGxldCBzZXRfa3YgKGssIHYpID1cbiAgICBpZiBKc3RyLmVxdWFsIGsgQXQuTmFtZS5jbGFzcydcbiAgICB0aGVuIEVsLnNldF9jbGFzcyB2IHRydWUgZWxcbiAgICBlbHNlIEVsLnNldF9hdCBrIChTb21lIHYpIGVsXG4gIGluXG4gIGxldCB1bnNldF9rdiAoaywgdikgPVxuICAgIGlmIEpzdHIuZXF1YWwgayBBdC5OYW1lLmNsYXNzJ1xuICAgIHRoZW4gRWwuc2V0X2NsYXNzIHYgZmFsc2UgZWxcbiAgICBlbHNlIEVsLnNldF9hdCBrIE5vbmUgZWxcbiAgaW5cbiAgbGV0IHNldF9sd2RfYXQgKCkgPVxuICAgIGxldCBwcmV2ID0gcmVmIGR1bW15X2t2X2F0IGluXG4gICAgZnVuIGF0IC0+XG4gICAgICBpZiAhcHJldiAhPSBkdW1teV9rdl9hdCB0aGVuXG4gICAgICAgIHVuc2V0X2t2ICFwcmV2O1xuICAgICAgbGV0IHBhaXIgPSBBdC50b19wYWlyIGF0IGluXG4gICAgICBzZXRfa3YgcGFpcjtcbiAgICAgIHByZXYgOj0gcGFpclxuICBpblxuICBMd2RfdXRpbHMubWFwX3JlZHVjZSAoZnVuY3Rpb25cbiAgICAgIHwgYFAgXyAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgYFIgYXQgLT4gTHdkLm1hcCB+Zjooc2V0X2x3ZF9hdCAoKSkgYXRcbiAgICAgIHwgYFMgYXRzIC0+XG4gICAgICAgIGxldCBzZXRfYXQnIGF0ID1cbiAgICAgICAgICBsZXQga3YgPSBBdC50b19wYWlyIGF0IGluXG4gICAgICAgICAgc2V0X2t2IGt2O1xuICAgICAgICAgIGt2XG4gICAgICAgIGluXG4gICAgICAgIGxldCByZWR1Y2VyID1cbiAgICAgICAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlXG4gICAgICAgICAgICAgICAgIH5tYXA6c2V0X2F0J1xuICAgICAgICAgICAgICAgICB+cmVkdWNlOihmdW4gXyBfIC0+IGR1bW15X2t2X2F0KSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHVwZGF0ZSBhdHMgPVxuICAgICAgICAgIGxldCBkcm9wcGVkLCByZWR1Y2VyJyA9XG4gICAgICAgICAgICBMd2Rfc2VxLlJlZHVjZXIudXBkYXRlX2FuZF9nZXRfZHJvcHBlZCAhcmVkdWNlciBhdHNcbiAgICAgICAgICBpblxuICAgICAgICAgIHJlZHVjZXIgOj0gcmVkdWNlcic7XG4gICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLmZvbGRfZHJvcHBlZCBgTWFwXG4gICAgICAgICAgICAoZnVuIGt2ICgpIC0+IHVuc2V0X2t2IGt2KVxuICAgICAgICAgICAgZHJvcHBlZCAoKTtcbiAgICAgICAgICBpZ25vcmUgKEx3ZF9zZXEuUmVkdWNlci5yZWR1Y2UgcmVkdWNlcic6IF8gb3B0aW9uKVxuICAgICAgICBpblxuICAgICAgICBMd2QubWFwIH5mOnVwZGF0ZSBhdHNcbiAgICApIChwdXJlX3VuaXQsIGZ1biBfIF8gLT4gcHVyZV91bml0KVxuICAgIGF0dHJpYnNcblxubGV0IGxpc3RlbiBlbCAoSGFuZGxlciB7b3B0czsgdHlwZSc7IGZ1bmN9KSA9XG4gIEV2Lmxpc3RlbiA/b3B0cyB0eXBlJyBmdW5jIChFbC5hc190YXJnZXQgZWwpXG5cbmxldCBhdHRhY2hfZXZlbnRzIGVsIGV2ZW50cyA9XG4gIEx3ZF91dGlscy5tYXBfcmVkdWNlIChmdW5jdGlvblxuICAgICAgfCBgUCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBgUiBhdCAtPlxuICAgICAgICBsZXQgY2FjaGVkID0gcmVmIE5vbmUgaW5cbiAgICAgICAgTHdkLm1hcCB+ZjooZnVuIGggLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoICFjYWNoZWQgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICAgICAgfCBTb21lIGwgLT4gRXYudW5saXN0ZW4gbFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY2FjaGVkIDo9IFNvbWUgKGxpc3RlbiBlbCBoKVxuICAgICAgICAgICkgYXRcbiAgICAgIHwgYFMgYXRzIC0+XG4gICAgICAgIGxldCByZWR1Y2VyID1cbiAgICAgICAgICByZWYgKEx3ZF9zZXEuUmVkdWNlci5tYWtlXG4gICAgICAgICAgICAgICAgIH5tYXA6KGxpc3RlbiBlbClcbiAgICAgICAgICAgICAgICAgfnJlZHVjZTooZnVuIHggX3kgLT4geCkpXG4gICAgICAgIGluXG4gICAgICAgIGxldCB1cGRhdGUgYXRzID1cbiAgICAgICAgICBsZXQgZHJvcHBlZCwgcmVkdWNlcicgPVxuICAgICAgICAgICAgTHdkX3NlcS5SZWR1Y2VyLnVwZGF0ZV9hbmRfZ2V0X2Ryb3BwZWQgIXJlZHVjZXIgYXRzXG4gICAgICAgICAgaW5cbiAgICAgICAgICByZWR1Y2VyIDo9IHJlZHVjZXInO1xuICAgICAgICAgIEx3ZF9zZXEuUmVkdWNlci5mb2xkX2Ryb3BwZWQgYE1hcFxuICAgICAgICAgICAgKGZ1biBsICgpIC0+IEV2LnVubGlzdGVuIGwpXG4gICAgICAgICAgICBkcm9wcGVkICgpO1xuICAgICAgICAgIGlnbm9yZSAoTHdkX3NlcS5SZWR1Y2VyLnJlZHVjZSByZWR1Y2VyJzogXyBvcHRpb24pXG4gICAgICAgIGluXG4gICAgICAgIEx3ZC5tYXAgfmY6dXBkYXRlIGF0c1xuICAgICkgKHB1cmVfdW5pdCwgZnVuIF8gXyAtPiBwdXJlX3VuaXQpXG4gICAgZXZlbnRzXG5cbmxldCB2ID9kID8oYXQ9W10pID8oZXY9W10pIHRhZyBjaGlsZHJlbiA9XG4gIGxldCBhdCwgaW1wdXJlX2F0ID0gcHJlcGFyZV9jb2wgYXQgaW5cbiAgbGV0IGV2LCBpbXB1cmVfZXYgPSBwcmVwYXJlX2NvbCBldiBpblxuICBsZXQgY2hpbGRyZW4sIGltcHVyZV9jaGlsZHJlbiA9IGNvbnN1bWVfY2hpbGRyZW4gY2hpbGRyZW4gaW5cbiAgbGV0IGVsID0gRWwudiA/ZCB+YXQgdGFnIGNoaWxkcmVuIGluXG4gIGxldCByZXN1bHQgPVxuICAgIG1hdGNoIGltcHVyZV9hdCwgaW1wdXJlX2NoaWxkcmVuIHdpdGhcbiAgICB8IFtdLCBOb25lIC0+IEx3ZC5wdXJlIGVsXG4gICAgfCBbXSwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgdXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuXG4gICAgfCBhdCwgTm9uZSAtPlxuICAgICAgTHdkLm1hcCB+ZjooZnVuICgpIC0+IGVsKSAoYXR0YWNoX2F0dHJpYnMgZWwgYXQpXG4gICAgfCBhdCwgU29tZSBjaGlsZHJlbiAtPlxuICAgICAgTHdkLm1hcDIgfmY6KGZ1biAoKSBlbCAtPiBlbClcbiAgICAgICAgKGF0dGFjaF9hdHRyaWJzIGVsIGF0KVxuICAgICAgICAodXBkYXRlX2NoaWxkcmVuIGVsIGNoaWxkcmVuKVxuICBpblxuICBMaXN0Lml0ZXIgKGZ1biBoIC0+IGlnbm9yZSAobGlzdGVuIGVsIGgpKSBldjtcbiAgbGV0IHJlc3VsdCA9XG4gICAgbWF0Y2ggaW1wdXJlX2V2IHdpdGhcbiAgICB8IFtdIC0+IHJlc3VsdFxuICAgIHwgZXZzIC0+XG4gICAgICBMd2QubWFwMiB+ZjooZnVuICgpIGVsIC0+IGVsKVxuICAgICAgICAoYXR0YWNoX2V2ZW50cyBlbCBldnMpXG4gICAgICAgIHJlc3VsdFxuICBpblxuICByZXN1bHRcblxuKCoqIHsxOmVscyBFbGVtZW50IGNvbnN0cnVjdG9yc30gKilcblxudHlwZSBjb25zID0gID9kOmRvY3VtZW50IC0+ID9hdDpBdC50IGNvbCAtPiA/ZXY6aGFuZGxlciBjb2wgLT4gdCBjb2wgLT4gdCBMd2QudFxuKCoqIFRoZSB0eXBlIGZvciBlbGVtZW50IGNvbnN0cnVjdG9ycy4gVGhpcyBpcyBzaW1wbHkgeyF2fSB3aXRoIGFcbiAgICBwcmUtYXBwbGllZCBlbGVtZW50IG5hbWUuICopXG5cbnR5cGUgdm9pZF9jb25zID0gP2Q6ZG9jdW1lbnQgLT4gP2F0OkF0LnQgY29sIC0+ID9ldjpoYW5kbGVyIGNvbCAtPiB1bml0IC0+IHQgTHdkLnRcbigqKiBUaGUgdHlwZSBmb3Igdm9pZCBlbGVtZW50IGNvbnN0cnVjdG9ycy4gVGhpcyBpcyBzaW1wbHkgeyF2fVxuICAgIHdpdGggYSBwcmUtYXBwbGllZCBlbGVtZW50IG5hbWUgYW5kIHdpdGhvdXQgY2hpbGRyZW4uICopXG5cbmxldCBjb25zIG5hbWUgP2QgP2F0ID9ldiBjcyA9IHYgP2QgP2F0ID9ldiBuYW1lIGNzXG5sZXQgdm9pZF9jb25zIG5hbWUgP2QgP2F0ID9ldiAoKSA9IHYgP2QgP2F0ID9ldiBuYW1lIFtdXG5cbmxldCBhID0gY29ucyBOYW1lLmFcbmxldCBhYmJyID0gY29ucyBOYW1lLmFiYnJcbmxldCBhZGRyZXNzID0gY29ucyBOYW1lLmFkZHJlc3NcbmxldCBhcmVhID0gdm9pZF9jb25zIE5hbWUuYXJlYVxubGV0IGFydGljbGUgPSBjb25zIE5hbWUuYXJ0aWNsZVxubGV0IGFzaWRlID0gY29ucyBOYW1lLmFzaWRlXG5sZXQgYXVkaW8gPSBjb25zIE5hbWUuYXVkaW9cbmxldCBiID0gY29ucyBOYW1lLmJcbmxldCBiYXNlID0gdm9pZF9jb25zIE5hbWUuYmFzZVxubGV0IGJkaSA9IGNvbnMgTmFtZS5iZGlcbmxldCBiZG8gPSBjb25zIE5hbWUuYmRvXG5sZXQgYmxvY2txdW90ZSA9IGNvbnMgTmFtZS5ibG9ja3F1b3RlXG5sZXQgYm9keSA9IGNvbnMgTmFtZS5ib2R5XG5sZXQgYnIgPSB2b2lkX2NvbnMgTmFtZS5iclxubGV0IGJ1dHRvbiA9IGNvbnMgTmFtZS5idXR0b25cbmxldCBjYW52YXMgPSBjb25zIE5hbWUuY2FudmFzXG5sZXQgY2FwdGlvbiA9IGNvbnMgTmFtZS5jYXB0aW9uXG5sZXQgY2l0ZSA9IGNvbnMgTmFtZS5jaXRlXG5sZXQgY29kZSA9IGNvbnMgTmFtZS5jb2RlXG5sZXQgY29sID0gdm9pZF9jb25zIE5hbWUuY29sXG5sZXQgY29sZ3JvdXAgPSBjb25zIE5hbWUuY29sZ3JvdXBcbmxldCBjb21tYW5kID0gY29ucyBOYW1lLmNvbW1hbmRcbmxldCBkYXRhbGlzdCA9IGNvbnMgTmFtZS5kYXRhbGlzdFxubGV0IGRkID0gY29ucyBOYW1lLmRkXG5sZXQgZGVsID0gY29ucyBOYW1lLmRlbFxubGV0IGRldGFpbHMgPSBjb25zIE5hbWUuZGV0YWlsc1xubGV0IGRmbiA9IGNvbnMgTmFtZS5kZm5cbmxldCBkaXYgPSBjb25zIE5hbWUuZGl2XG5sZXQgZGwgPSBjb25zIE5hbWUuZGxcbmxldCBkdCA9IGNvbnMgTmFtZS5kdFxubGV0IGVtID0gY29ucyBOYW1lLmVtXG5sZXQgZW1iZWQgPSB2b2lkX2NvbnMgTmFtZS5lbWJlZFxubGV0IGZpZWxkc2V0ID0gY29ucyBOYW1lLmZpZWxkc2V0XG5sZXQgZmlnY2FwdGlvbiA9IGNvbnMgTmFtZS5maWdjYXB0aW9uXG5sZXQgZmlndXJlID0gY29ucyBOYW1lLmZpZ3VyZVxubGV0IGZvb3RlciA9IGNvbnMgTmFtZS5mb290ZXJcbmxldCBmb3JtID0gY29ucyBOYW1lLmZvcm1cbmxldCBoMSA9IGNvbnMgTmFtZS5oMVxubGV0IGgyID0gY29ucyBOYW1lLmgyXG5sZXQgaDMgPSBjb25zIE5hbWUuaDNcbmxldCBoNCA9IGNvbnMgTmFtZS5oNFxubGV0IGg1ID0gY29ucyBOYW1lLmg1XG5sZXQgaDYgPSBjb25zIE5hbWUuaDZcbmxldCBoZWFkID0gY29ucyBOYW1lLmhlYWRcbmxldCBoZWFkZXIgPSBjb25zIE5hbWUuaGVhZGVyXG5sZXQgaGdyb3VwID0gY29ucyBOYW1lLmhncm91cFxubGV0IGhyID0gdm9pZF9jb25zIE5hbWUuaHJcbmxldCBodG1sID0gY29ucyBOYW1lLmh0bWxcbmxldCBpID0gY29ucyBOYW1lLmlcbmxldCBpZnJhbWUgPSBjb25zIE5hbWUuaWZyYW1lXG5sZXQgaW1nID0gdm9pZF9jb25zIE5hbWUuaW1nXG5sZXQgaW5wdXQgPSB2b2lkX2NvbnMgTmFtZS5pbnB1dFxubGV0IGlucyA9IGNvbnMgTmFtZS5pbnNcbmxldCBrYmQgPSBjb25zIE5hbWUua2JkXG5sZXQga2V5Z2VuID0gY29ucyBOYW1lLmtleWdlblxubGV0IGxhYmVsID0gY29ucyBOYW1lLmxhYmVsXG5sZXQgbGVnZW5kID0gY29ucyBOYW1lLmxlZ2VuZFxubGV0IGxpID0gY29ucyBOYW1lLmxpXG5sZXQgbGluayA9IHZvaWRfY29ucyBOYW1lLmxpbmtcbmxldCBtYXAgPSBjb25zIE5hbWUubWFwXG5sZXQgbWFyayA9IGNvbnMgTmFtZS5tYXJrXG5sZXQgbWVudSA9IGNvbnMgTmFtZS5tZW51XG5sZXQgbWV0YSA9IHZvaWRfY29ucyBOYW1lLm1ldGFcbmxldCBtZXRlciA9IGNvbnMgTmFtZS5tZXRlclxubGV0IG5hdiA9IGNvbnMgTmFtZS5uYXZcbmxldCBub3NjcmlwdCA9IGNvbnMgTmFtZS5ub3NjcmlwdFxubGV0IG9iamVjdCcgPSBjb25zIE5hbWUub2JqZWN0J1xubGV0IG9sID0gY29ucyBOYW1lLm9sXG5sZXQgb3B0Z3JvdXAgPSBjb25zIE5hbWUub3B0Z3JvdXBcbmxldCBvcHRpb24gPSBjb25zIE5hbWUub3B0aW9uXG5sZXQgb3V0cHV0ID0gY29ucyBOYW1lLm91dHB1dFxubGV0IHAgPSBjb25zIE5hbWUucFxubGV0IHBhcmFtID0gdm9pZF9jb25zIE5hbWUucGFyYW1cbmxldCBwcmUgPSBjb25zIE5hbWUucHJlXG5sZXQgcHJvZ3Jlc3MgPSBjb25zIE5hbWUucHJvZ3Jlc3NcbmxldCBxID0gY29ucyBOYW1lLnFcbmxldCBycCA9IGNvbnMgTmFtZS5ycFxubGV0IHJ0ID0gY29ucyBOYW1lLnJ0XG5sZXQgcnVieSA9IGNvbnMgTmFtZS5ydWJ5XG5sZXQgcyA9IGNvbnMgTmFtZS5zXG5sZXQgc2FtcCA9IGNvbnMgTmFtZS5zYW1wXG5sZXQgc2NyaXB0ID0gY29ucyBOYW1lLnNjcmlwdFxubGV0IHNlY3Rpb24gPSBjb25zIE5hbWUuc2VjdGlvblxubGV0IHNlbGVjdCA9IGNvbnMgTmFtZS5zZWxlY3RcbmxldCBzbWFsbCA9IGNvbnMgTmFtZS5zbWFsbFxubGV0IHNvdXJjZSA9IHZvaWRfY29ucyBOYW1lLnNvdXJjZVxubGV0IHNwYW4gPSBjb25zIE5hbWUuc3BhblxubGV0IHN0cm9uZyA9IGNvbnMgTmFtZS5zdHJvbmdcbmxldCBzdHlsZSA9IGNvbnMgTmFtZS5zdHlsZVxubGV0IHN1YiA9IGNvbnMgTmFtZS5zdWJcbmxldCBzdW1tYXJ5ID0gY29ucyBOYW1lLnN1bW1hcnlcbmxldCBzdXAgPSBjb25zIE5hbWUuc3VwXG5sZXQgdGFibGUgPSBjb25zIE5hbWUudGFibGVcbmxldCB0Ym9keSA9IGNvbnMgTmFtZS50Ym9keVxubGV0IHRkID0gY29ucyBOYW1lLnRkXG5sZXQgdGV4dGFyZWEgPSBjb25zIE5hbWUudGV4dGFyZWFcbmxldCB0Zm9vdCA9IGNvbnMgTmFtZS50Zm9vdFxubGV0IHRoID0gY29ucyBOYW1lLnRoXG5sZXQgdGhlYWQgPSBjb25zIE5hbWUudGhlYWRcbmxldCB0aW1lID0gY29ucyBOYW1lLnRpbWVcbmxldCB0aXRsZSA9IGNvbnMgTmFtZS50aXRsZVxubGV0IHRyID0gY29ucyBOYW1lLnRyXG5sZXQgdHJhY2sgPSB2b2lkX2NvbnMgTmFtZS50cmFja1xubGV0IHUgPSBjb25zIE5hbWUudVxubGV0IHVsID0gY29ucyBOYW1lLnVsXG5sZXQgdmFyID0gY29ucyBOYW1lLnZhclxubGV0IHZpZGVvID0gY29ucyBOYW1lLnZpZGVvXG5sZXQgd2JyID0gdm9pZF9jb25zIE5hbWUud2JyXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgQXJyYXkgdXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIGVxdWFsID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBvcmQgPSAnYSAtPiAnYSAtPiBpbnRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEFycmF5c30gKilcblxuaW5jbHVkZSBBcnJheVxuXG5sZXQgZW1wdHkgPSBbfHxdXG5cbmxldCBnZXRfc2FmZSBhIGkgPVxuICBpZiBpID49IDAgJiYgaSA8IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICBTb21lIChBcnJheS51bnNhZmVfZ2V0IGEgaSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IG1hcF9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGUpKSBhXG5sZXQgbWFwaV9pbnBsYWNlIGYgYSA9IEFycmF5Lml0ZXJpIChmdW4gaSBlIC0+IEFycmF5LnVuc2FmZV9zZXQgYSBpIChmIGkgZSkpIGFcbmxldCBmb2xkID0gQXJyYXkuZm9sZF9sZWZ0XG5cbmxldCBmb2xkaSBmIGFjYyBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKGYgYWNjIGkgYS4oaSkpIChpICsgMSlcbiAgaW5cbiAgYXV4IGFjYyAwXG5cbmxldCBmb2xkX3doaWxlIGYgYWNjIGEgPVxuICBsZXQgcmVjIGZvbGRfd2hpbGVfaSBmIGFjYyBpID1cbiAgICBpZiBpIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYWNjLCBjb250ID0gZiBhY2MgYS4oaSkgaW5cbiAgICAgIG1hdGNoIGNvbnQgd2l0aFxuICAgICAgfCBgU3RvcCAtPiBhY2NcbiAgICAgIHwgYENvbnRpbnVlIC0+IGZvbGRfd2hpbGVfaSBmIGFjYyAoaSArIDEpXG4gICAgKSBlbHNlXG4gICAgICBhY2NcbiAgaW5cbiAgZm9sZF93aGlsZV9pIGYgYWNjIDBcblxubGV0IGZvbGRfbWFwIGYgYWNjIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICgqIG5lZWQgc3BlY2lhbCBjYXNlIGZvciBpbml0aWFsaXppbmcgdGhlIHJlc3VsdCAqKVxuICBpZiBuID0gMCB0aGVuXG4gICAgYWNjLCBbfHxdXG4gIGVsc2UgKFxuICAgIGxldCBhY2MsIGIwID0gZiBhY2MgYS4oMCkgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBuIGIwIGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbiAtIDEgZG9cbiAgICAgIGxldCBuZXdfYWNjLCBiID0gZiAhYWNjIGEuKGkpIGluXG4gICAgICBhY2MgOj0gbmV3X2FjYztcbiAgICAgIHJlcy4oaSkgPC0gYlxuICAgIGRvbmU7XG4gICAgIWFjYywgcmVzXG4gIClcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobiArIDEpIGFjYyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGYgcmVzLihpKSB4IGluXG4gICAgICByZXMuKGkgKyAxKSA8LSBuZXdfYWNjKVxuICAgIGE7XG4gIHJlc1xuXG5sZXQgcmV2ZXJzZV9pbl9wbGFjZSBhID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBhIGluXG4gIGlmIGxlbiA+IDAgdGhlblxuICAgIGZvciBrID0gMCB0byAobGVuIC0gMSkgLyAyIGRvXG4gICAgICBsZXQgdCA9IGEuKGspIGluXG4gICAgICBhLihrKSA8LSBhLihsZW4gLSAxIC0gayk7XG4gICAgICBhLihsZW4gLSAxIC0gaykgPC0gdFxuICAgIGRvbmVcblxubGV0IHNvcnRlZCBjbXAgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIEFycmF5LnNvcnQgY21wIGI7XG4gIGJcblxubGV0IHNvcnRfaW5kaWNlcyBjbXAgYSA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgYiA9IEFycmF5LmluaXQgbGVuIChmdW4gayAtPiBrKSBpblxuICBBcnJheS5zb3J0IChmdW4gazEgazIgLT4gY21wIGEuKGsxKSBhLihrMikpIGI7XG4gIGJcblxubGV0IHNvcnRfcmFua2luZyBjbXAgYSA9IHNvcnRfaW5kaWNlcyBjb21wYXJlIChzb3J0X2luZGljZXMgY21wIGEpXG5cbmxldCByZXYgYSA9XG4gIGxldCBiID0gQXJyYXkuY29weSBhIGluXG4gIHJldmVyc2VfaW5fcGxhY2UgYjtcbiAgYlxuXG5leGNlcHRpb24gRm91bmRcblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSBlbHQgYSA9XG4gIHRyeVxuICAgIEFycmF5Lml0ZXIgKGZ1biBlIC0+IGlmIGVxIGUgZWx0IHRoZW4gcmFpc2Vfbm90cmFjZSBGb3VuZCkgYTtcbiAgICBmYWxzZVxuICB3aXRoIEZvdW5kIC0+IHRydWVcblxubGV0IHJlYyBmaW5kX2F1eCBmIGEgaSA9XG4gIGlmIGkgPj0gQXJyYXkubGVuZ3RoIGEgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbWF0Y2ggZiBpIGEuKGkpIHdpdGhcbiAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBOb25lIC0+IGZpbmRfYXV4IGYgYSAoaSArIDEpXG4gIClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IGZpbmRfbWFwIGYgYSA9IGZpbmRfYXV4IChmdW4gXyAtPiBmKSBhIDBcbmxldCBmaW5kID0gZmluZF9tYXBcbmxldCBmaW5kX21hcF9pIGYgYSA9IGZpbmRfYXV4IGYgYSAwXG5sZXQgZmluZGkgPSBmaW5kX21hcF9pXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbmxldCBmaW5kX2lkeCBwIGEgPVxuICBmaW5kX2F1eFxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGEgMFxuXG5sZXQgbWF4IGNtcCBhID1cbiAgaWYgQXJyYXkubGVuZ3RoIGEgPSAwIHRoZW5cbiAgICBOb25lXG4gIGVsc2VcbiAgICBTb21lXG4gICAgICAoZm9sZFxuICAgICAgICAgKGZ1biBhY2MgZWx0IC0+XG4gICAgICAgICAgIGlmIGNtcCBhY2MgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgZWx0XG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICBhLigwKSBhKVxuXG5sZXQgbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIG1heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkubWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBhcmdtYXggY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkaVxuICAgICAgICAgKGZ1biBhY2MgaSBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGEuKGFjYykgZWx0IDwgMCB0aGVuXG4gICAgICAgICAgICAgaVxuICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgYWNjKVxuICAgICAgICAgMCBhKVxuXG5sZXQgYXJnbWF4X2V4biBjbXAgYSA9XG4gIG1hdGNoIGFyZ21heCBjbXAgYSB3aXRoXG4gIHwgTm9uZSAtPiBpbnZhbGlkX2FyZyBcIkNDQXJyYXkuYXJnbWF4X2V4blwiXG4gIHwgU29tZSBlbHQgLT4gZWx0XG5cbmxldCBtaW4gY21wIGEgPVxuICBpZiBBcnJheS5sZW5ndGggYSA9IDAgdGhlblxuICAgIE5vbmVcbiAgZWxzZVxuICAgIFNvbWVcbiAgICAgIChmb2xkXG4gICAgICAgICAoZnVuIGFjYyBlbHQgLT5cbiAgICAgICAgICAgaWYgY21wIGFjYyBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBlbHRcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIGFjYylcbiAgICAgICAgIGEuKDApIGEpXG5cbmxldCBtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5taW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGFyZ21pbiBjbXAgYSA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuXG4gICAgTm9uZVxuICBlbHNlXG4gICAgU29tZVxuICAgICAgKGZvbGRpXG4gICAgICAgICAoZnVuIGFjYyBpIGVsdCAtPlxuICAgICAgICAgICBpZiBjbXAgYS4oYWNjKSBlbHQgPiAwIHRoZW5cbiAgICAgICAgICAgICBpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBhY2MpXG4gICAgICAgICAwIGEpXG5cbmxldCBhcmdtaW5fZXhuIGNtcCBhID1cbiAgbWF0Y2ggYXJnbWluIGNtcCBhIHdpdGhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NBcnJheS5hcmdtaW5fZXhuXCJcbiAgfCBTb21lIGVsdCAtPiBlbHRcblxubGV0IGZpbHRlcl9tYXAgZiBhID1cbiAgbGV0IHJlYyBhdXggYWNjIGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuIChcbiAgICAgIGxldCBhJyA9IEFycmF5Lm9mX2xpc3QgYWNjIGluXG4gICAgICByZXZlcnNlX2luX3BsYWNlIGEnO1xuICAgICAgYSdcbiAgICApIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBhLihpKSB3aXRoXG4gICAgICB8IE5vbmUgLT4gYXV4IGFjYyAoaSArIDEpXG4gICAgICB8IFNvbWUgeCAtPiBhdXggKHggOjogYWNjKSAoaSArIDEpXG4gICAgKVxuICBpblxuICBhdXggW10gMFxuXG5sZXQgZmlsdGVyIHAgYSA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuIHggLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIFNvbWUgeFxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGFcblxuKCogYXBwZW5kIFtyZXYgYV0gaW4gZnJvbnQgb2YgW2FjY10gKilcbmxldCByZWMgX19yZXZfYXBwZW5kX2xpc3QgYSBhY2MgaSA9XG4gIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgYWNjXG4gIGVsc2VcbiAgICBfX3Jldl9hcHBlbmRfbGlzdCBhIChhLihpKSA6OiBhY2MpIChpICsgMSlcblxubGV0IGZsYXRfbWFwIGYgYSA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgYScgPSBBcnJheS5vZl9saXN0IGFjYyBpblxuICAgICAgcmV2ZXJzZV9pbl9wbGFjZSBhJztcbiAgICAgIGEnXG4gICAgKSBlbHNlIChcbiAgICAgIGxldCBhJyA9IGYgYS4oaSkgaW5cbiAgICAgIGF1eCAoX19yZXZfYXBwZW5kX2xpc3QgYScgYWNjIDApIChpICsgMSlcbiAgICApXG4gIGluXG4gIGF1eCBbXSAwXG5cbmxldCBtb25vaWRfcHJvZHVjdCBmIGExIGEyID1cbiAgbGV0IG5hMSA9IGxlbmd0aCBhMSBpblxuICBpbml0XG4gICAgKG5hMSAqIGxlbmd0aCBhMilcbiAgICAoZnVuIGlfcHJvZCAtPlxuICAgICAgbGV0IGkgPSBpX3Byb2QgbW9kIG5hMSBpblxuICAgICAgbGV0IGogPSBpX3Byb2QgLyBuYTEgaW5cbiAgICAgIGYgYTEuKGkpIGEyLihqKSlcblxubGV0IHJlYyBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuXG4gICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgaWYgaSA9IGogdGhlblxuICAgIGlmIGNtcCBrIGEuKGkpID0gMCB0aGVuXG4gICAgICBpXG4gICAgZWxzZVxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIGVsc2UgKFxuICAgIGxldCBtaWRkbGUgPSAoaiArIGkpIC8gMiBpblxuICAgIG1hdGNoIGNtcCBrIGEuKG1pZGRsZSkgd2l0aFxuICAgIHwgMCAtPiBtaWRkbGVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSBpIChtaWRkbGUgLSAxKVxuICAgIHwgXyAtPiBfbG9va3VwX3JlYyB+Y21wIGsgYSAobWlkZGxlICsgMSkgalxuICApXG5cbmxldCBfbG9va3VwX2V4biB+Y21wIGsgYSBpIGogPVxuICBpZiBpID4gaiB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgbWF0Y2ggY21wIGsgYS4oaSkgd2l0aFxuICB8IDAgLT4gaVxuICB8IG4gd2hlbiBuIDwgMCAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGxvdyAqKVxuICB8IF8gd2hlbiBpID0gaiAtPiByYWlzZSBOb3RfZm91bmQgKCogdG9vIGhpZ2ggKilcbiAgfCBfIC0+XG4gICAgKG1hdGNoIGNtcCBrIGEuKGopIHdpdGhcbiAgICB8IDAgLT4galxuICAgIHwgbiB3aGVuIG4gPCAwIC0+IF9sb29rdXBfcmVjIH5jbXAgayBhIChpICsgMSkgKGogLSAxKVxuICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmQpXG4oKiB0b28gaGlnaCAqKVxuXG5sZXQgbG9va3VwX2V4biB+Y21wIGsgYSA9IF9sb29rdXBfZXhuIH5jbXAgayBhIDAgKEFycmF5Lmxlbmd0aCBhIC0gMSlcblxubGV0IGxvb2t1cCB+Y21wIGsgYSA9XG4gIHRyeSBTb21lIChfbG9va3VwX2V4biB+Y21wIGsgYSAwIChBcnJheS5sZW5ndGggYSAtIDEpKVxuICB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBic2VhcmNoIH5jbXAgayBhID1cbiAgbGV0IHJlYyBhdXggaSBqID1cbiAgICBpZiBpID4gaiB0aGVuXG4gICAgICBgSnVzdF9hZnRlciBqXG4gICAgZWxzZSAoXG4gICAgICBsZXQgbWlkZGxlID0gaSArICgoaiAtIGkpIC8gMikgaW5cbiAgICAgICgqIGF2b2lkIG92ZXJmbG93ICopXG4gICAgICBtYXRjaCBjbXAgayBhLihtaWRkbGUpIHdpdGhcbiAgICAgIHwgMCAtPiBgQXQgbWlkZGxlXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBhdXggaSAobWlkZGxlIC0gMSlcbiAgICAgIHwgXyAtPiBhdXggKG1pZGRsZSArIDEpIGpcbiAgICApXG4gIGluXG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlblxuICAgIGBFbXB0eVxuICBlbHNlIChcbiAgICBtYXRjaCBjbXAgYS4oMCkgaywgY21wIGEuKG4gLSAxKSBrIHdpdGhcbiAgICB8IGMsIF8gd2hlbiBjID4gMCAtPiBgQWxsX2JpZ2dlclxuICAgIHwgXywgYyB3aGVuIGMgPCAwIC0+IGBBbGxfbG93ZXJcbiAgICB8IF8gLT4gYXV4IDAgKG4gLSAxKVxuICApXG5cbmxldCByZWMgX2Zvcl9hbGwyIHAgYTEgYTIgaTEgaTIgfmxlbiA9XG4gIGxlbiA9IDBcbiAgfHwgKHAgYTEuKGkxKSBhMi4oaTIpICYmIF9mb3JfYWxsMiBwIGExIGEyIChpMSArIDEpIChpMiArIDEpIH5sZW46KGxlbiAtIDEpKVxuXG5sZXQgZm9yX2FsbDIgcCBhIGIgPVxuICBBcnJheS5sZW5ndGggYSA9IEFycmF5Lmxlbmd0aCBiICYmIF9mb3JfYWxsMiBwIGEgYiAwIDAgfmxlbjooQXJyYXkubGVuZ3RoIGEpXG5cbmxldCByZWMgX2V4aXN0czIgcCBhMSBhMiBpMSBpMiB+bGVuID1cbiAgbGVuID4gMFxuICAmJiAocCBhMS4oaTEpIGEyLihpMikgfHwgX2V4aXN0czIgcCBhMSBhMiAoaTEgKyAxKSAoaTIgKyAxKSB+bGVuOihsZW4gLSAxKSlcblxubGV0IGV4aXN0czIgcCBhIGIgPVxuICBfZXhpc3RzMiBwIGEgYiAwIDAgfmxlbjooU3RkbGliLm1pbiAoQXJyYXkubGVuZ3RoIGEpIChBcnJheS5sZW5ndGggYikpXG5cbmxldCBfZm9sZDIgZiBhY2MgYSBiIGkgaiB+bGVuID1cbiAgbGV0IHJlYyBhdXggYWNjIG8gPVxuICAgIGlmIG8gPSBsZW4gdGhlblxuICAgICAgYWNjXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYWNjID0gZiBhY2MgKEFycmF5LmdldCBhIChpICsgbykpIChBcnJheS5nZXQgYiAoaiArIG8pKSBpblxuICAgICAgYXV4IGFjYyAobyArIDEpXG4gICAgKVxuICBpblxuICBhdXggYWNjIDBcblxubGV0IGZvbGQyIGYgYWNjIGEgYiA9XG4gIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW4gaW52YWxpZF9hcmcgXCJmb2xkMlwiO1xuICBfZm9sZDIgZiBhY2MgYSBiIDAgMCB+bGVuOihBcnJheS5sZW5ndGggYSlcblxubGV0ICggLS0gKSBpIGogPVxuICBpZiBpIDw9IGogdGhlblxuICAgIEFycmF5LmluaXQgKGogLSBpICsgMSkgKGZ1biBrIC0+IGkgKyBrKVxuICBlbHNlXG4gICAgQXJyYXkuaW5pdCAoaSAtIGogKyAxKSAoZnVuIGsgLT4gaSAtIGspXG5cbmxldCAoIC0tXiApIGkgaiA9XG4gIGlmIGkgPSBqIHRoZW5cbiAgICBbfHxdXG4gIGVsc2UgaWYgaSA+IGogdGhlblxuICAgIEFycmF5LmluaXQgKGkgLSBqKSAoZnVuIGsgLT4gaSAtIGspXG4gIGVsc2VcbiAgICBBcnJheS5pbml0IChqIC0gaSkgKGZ1biBrIC0+IGkgKyBrKVxuXG4oKiogYWxsIHRoZSBlbGVtZW50cyBvZiBhLCBidXQgdGhlIGktdGgsIGludG8gYSBsaXN0ICopXG5sZXQgZXhjZXB0X2lkeCBhIGkgPVxuICBmb2xkaVxuICAgIChmdW4gYWNjIGogZWx0IC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGFjY1xuICAgICAgZWxzZVxuICAgICAgICBlbHQgOjogYWNjKVxuICAgIFtdIGFcblxubGV0IGVxdWFsIGVxIGEgYiA9XG4gIGxldCByZWMgYXV4IGkgPVxuICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYSB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgZXEgYS4oaSkgYi4oaSkgJiYgYXV4IChpICsgMSlcbiAgaW5cbiAgQXJyYXkubGVuZ3RoIGEgPSBBcnJheS5sZW5ndGggYiAmJiBhdXggMFxuXG5sZXQgY29tcGFyZSBjbXAgYSBiID1cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAgIDBcbiAgICAgIGVsc2VcbiAgICAgICAgLTFcbiAgICBlbHNlIGlmIGkgPSBBcnJheS5sZW5ndGggYiB0aGVuXG4gICAgICAxXG4gICAgZWxzZSAoXG4gICAgICBsZXQgYyA9IGNtcCBhLihpKSBiLihpKSBpblxuICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICBhdXggKGkgKyAxKVxuICAgICAgZWxzZVxuICAgICAgICBjXG4gICAgKVxuICBpblxuICBhdXggMFxuXG4oKiBzd2FwIGVsZW1lbnRzIG9mIGFycmF5ICopXG5sZXQgc3dhcCBhIGkgaiA9XG4gIGlmIGkgPD4gaiB0aGVuIChcbiAgICBsZXQgdG1wID0gYS4oaSkgaW5cbiAgICBhLihpKSA8LSBhLihqKTtcbiAgICBhLihqKSA8LSB0bXBcbiAgKVxuXG4oKiBzaHVmZmxlIGFbaSDigKYgal0gdXNpbmcgdGhlIGdpdmVuIGludCByYW5kb20gZ2VuZXJhdG9yXG4gICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaXNoZXItWWF0ZXNfc2h1ZmZsZSAqKVxubGV0IF9zaHVmZmxlIF9yYW5kX2ludCBhIGkgaiA9XG4gIGZvciBrID0gaiAtIDEgZG93bnRvIGkgKyAxIGRvXG4gICAgbGV0IGwgPSBfcmFuZF9pbnQgKGsgKyAxKSBpblxuICAgIGxldCB0bXAgPSBhLihsKSBpblxuICAgIGEuKGwpIDwtIGEuKGspO1xuICAgIGEuKGspIDwtIHRtcFxuICBkb25lXG5cbmxldCBzaHVmZmxlIGEgPSBfc2h1ZmZsZSBSYW5kb20uaW50IGEgMCAoQXJyYXkubGVuZ3RoIGEpXG5sZXQgc2h1ZmZsZV93aXRoIHN0IGEgPSBfc2h1ZmZsZSAoUmFuZG9tLlN0YXRlLmludCBzdCkgYSAwIChBcnJheS5sZW5ndGggYSlcblxubGV0IHJhbmRvbV9jaG9vc2UgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LnJhbmRvbV9jaG9vc2VcIjtcbiAgZnVuIHN0IC0+IGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHJhbmRvbV9sZW4gbiBnIHN0ID0gQXJyYXkuaW5pdCBuIChmdW4gXyAtPiBnIHN0KVxuXG5sZXQgcmFuZG9tIGcgc3QgPVxuICBsZXQgbiA9IFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBuID0gMSArIFJhbmRvbS5TdGF0ZS5pbnQgc3QgMV8wMDAgaW5cbiAgcmFuZG9tX2xlbiBuIGcgc3RcblxubGV0IHBwID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gb3V0IGEuKGspXG4gIGRvbmU7XG4gIHBwX3N0b3Agb3V0ICgpXG5cbmxldCBwcF9pID8ocHBfc3RhcnQgPSBmdW4gXyAoKSAtPiAoKSkgPyhwcF9zdG9wID0gZnVuIF8gKCkgLT4gKCkpXG4gICAgPyhwcF9zZXAgPSBmdW4gb3V0ICgpIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIixAIFwiKSBwcF9pdGVtIG91dCBhID1cbiAgcHBfc3RhcnQgb3V0ICgpO1xuICBmb3IgayA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgaWYgayA+IDAgdGhlbiBwcF9zZXAgb3V0ICgpO1xuICAgIHBwX2l0ZW0gayBvdXQgYS4oaylcbiAgZG9uZTtcbiAgcHBfc3RvcCBvdXQgKClcblxubGV0IHRvX3N0cmluZyA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgYSA9XG4gIEFycmF5LnRvX2xpc3QgYSB8PiBMaXN0Lm1hcCBpdGVtX3RvX3N0cmluZyB8PiBTdHJpbmcuY29uY2F0IHNlcFxuXG5sZXQgdG9fc2VxIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID49IGxlbmd0aCBhIHRoZW5cbiAgICAgIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBTZXEuQ29ucyAoYS4oaSksIGF1eCAoaSArIDEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgdG9faXRlciBhIGsgPSBpdGVyIGsgYVxuXG5sZXQgdG9fZ2VuIGEgPVxuICBsZXQgayA9IHJlZiAwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFrIDwgQXJyYXkubGVuZ3RoIGEgdGhlbiAoXG4gICAgICBsZXQgeCA9IGEuKCFrKSBpblxuICAgICAgaW5jciBrO1xuICAgICAgU29tZSB4XG4gICAgKSBlbHNlXG4gICAgICBOb25lXG5cbigqKiB7MiBHZW5lcmljIEZ1bmN0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OT19BUlJBWSA9IHNpZ1xuICB0eXBlIGVsdFxuICB0eXBlIHRcblxuICB2YWwgbGVuZ3RoIDogdCAtPiBpbnRcbiAgdmFsIGdldCA6IHQgLT4gaW50IC0+IGVsdFxuICB2YWwgc2V0IDogdCAtPiBpbnQgLT4gZWx0IC0+IHVuaXRcbmVuZFxuXG4oKiBEdWFsIFBpdm90IFF1aWNrc29ydCAoWWFyb3NsYXZza2l5KVxuICAgZnJvbSBcImF2ZXJhZ2UgY2FzZSBhbmFseXNpcyBvZiBKYXZhIDcncyBEdWFsIFBpdm90IFF1aWNrc29ydFwiICopXG5tb2R1bGUgU29ydEdlbmVyaWMgKEEgOiBNT05PX0FSUkFZKSA9IHN0cnVjdFxuICBtb2R1bGUgUmFuZCA9IFJhbmRvbS5TdGF0ZVxuXG4gIGxldCBzZWVkXyA9IFt8IDEyMzQ1NiB8XVxuXG4gIHR5cGUgc3RhdGUgPSB7XG4gICAgbXV0YWJsZSBsOiBpbnQ7ICgqIGxlZnQgcG9pbnRlciAqKVxuICAgIG11dGFibGUgZzogaW50OyAoKiByaWdodCBwb2ludGVyICopXG4gICAgbXV0YWJsZSBrOiBpbnQ7XG4gIH1cblxuICBsZXQgcmFuZF9pZHhfIHJhbmQgaSBqID0gaSArIFJhbmQuaW50IHJhbmQgKGogLSBpKVxuXG4gIGxldCBzd2FwXyBhIGkgaiA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgKClcbiAgICBlbHNlIChcbiAgICAgIGxldCB0bXAgPSBBLmdldCBhIGkgaW5cbiAgICAgIEEuc2V0IGEgaSAoQS5nZXQgYSBqKTtcbiAgICAgIEEuc2V0IGEgaiB0bXBcbiAgICApXG5cbiAgbGV0IHNvcnQgfmNtcCBhID1cbiAgICBsZXQgcmVjIGluc2VydF8gYSBpIGsgPVxuICAgICAgaWYgayA8IGkgdGhlblxuICAgICAgICAoKVxuICAgICAgZWxzZSBpZiBjbXAgKEEuZ2V0IGEgaykgKEEuZ2V0IGEgKGsgKyAxKSkgPiAwIHRoZW4gKFxuICAgICAgICBzd2FwXyBhIGsgKGsgKyAxKTtcbiAgICAgICAgaW5zZXJ0XyBhIGkgKGsgLSAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogcmVjdXJzaXZlIHBhcnQgb2YgaW5zZXJ0aW9uIHNvcnQgKilcbiAgICBsZXQgcmVjIHNvcnRfaW5zZXJ0aW9uX3JlYyBhIGkgaiBrID1cbiAgICAgIGlmIGsgPCBqIHRoZW4gKFxuICAgICAgICBpbnNlcnRfIGEgaSAoayAtIDEpO1xuICAgICAgICBzb3J0X2luc2VydGlvbl9yZWMgYSBpIGogKGsgKyAxKVxuICAgICAgKVxuICAgIGluXG4gICAgKCogaW5zZXJ0aW9uIHNvcnQsIGZvciBzbWFsbCBzbGljZXMgKilcbiAgICBsZXQgc29ydF9pbnNlcnRpb24gYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxIHRoZW4gc29ydF9pbnNlcnRpb25fcmVjIGEgaSBqIChpICsgMSlcbiAgICBpblxuICAgIGxldCByYW5kID0gUmFuZC5tYWtlIHNlZWRfIGluXG4gICAgKCogc29ydCBzbGljZS5cbiAgICAgICBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSB0d28gcGl2b3RzIGFyZSBlcXVhbCwgYnV0IGl0J3MgdW5saWtlbHkuICopXG4gICAgbGV0IHJlYyBzb3J0X3NsaWNlXyB+c3QgYSBpIGogPVxuICAgICAgaWYgaiAtIGkgPiAxMCB0aGVuIChcbiAgICAgICAgc3QubCA8LSBpO1xuICAgICAgICBzdC5nIDwtIGogLSAxO1xuICAgICAgICBzdC5rIDwtIGk7XG4gICAgICAgICgqIGNob29zZSBwaXZvdHMgKilcbiAgICAgICAgbGV0IHAgPSBBLmdldCBhIChyYW5kX2lkeF8gcmFuZCBpIGopIGluXG4gICAgICAgIGxldCBxID0gQS5nZXQgYSAocmFuZF9pZHhfIHJhbmQgaSBqKSBpblxuICAgICAgICAoKiBpbnZhcmlhbnQ6IHN0LnAgPD0gc3QucSwgc3dhcCB0aGVtIG90aGVyd2lzZSAqKVxuICAgICAgICBsZXQgcCwgcSA9XG4gICAgICAgICAgaWYgY21wIHAgcSA+IDAgdGhlblxuICAgICAgICAgICAgcSwgcFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHAsIHFcbiAgICAgICAgaW5cbiAgICAgICAgd2hpbGUgc3QuayA8PSBzdC5nIGRvXG4gICAgICAgICAgbGV0IGN1ciA9IEEuZ2V0IGEgc3QuayBpblxuICAgICAgICAgIGlmIGNtcCBjdXIgcCA8IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gbGVmdG1vc3QgYmFuZCAqKVxuICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICBzdC5sIDwtIHN0LmwgKyAxXG4gICAgICAgICAgKSBlbHNlIGlmIGNtcCBjdXIgcSA+IDAgdGhlbiAoXG4gICAgICAgICAgICAoKiBpbnNlcnQgaW4gcmlnaHRtb3N0IGJhbmQgKilcbiAgICAgICAgICAgIHdoaWxlIHN0LmsgPCBzdC5nICYmIGNtcCAoQS5nZXQgYSBzdC5nKSBxID4gMCBkb1xuICAgICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxXG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgc3dhcF8gYSBzdC5rIHN0Lmc7XG4gICAgICAgICAgICBzdC5nIDwtIHN0LmcgLSAxO1xuICAgICAgICAgICAgKCogdGhlIGVsZW1lbnQgc3dhcHBlZCBmcm9tIHRoZSByaWdodCBtaWdodCBiZSBpbiB0aGUgZmlyc3Qgc2l0dWF0aW9uLlxuICAgICAgICAgICAgICAgdGhhdCBpcywgPCBwICAod2Uga25vdyBpdCdzIDw9IHEgYWxyZWFkeSkgKilcbiAgICAgICAgICAgIGlmIGNtcCAoQS5nZXQgYSBzdC5rKSBwIDwgMCB0aGVuIChcbiAgICAgICAgICAgICAgaWYgc3QuayA8PiBzdC5sIHRoZW4gc3dhcF8gYSBzdC5rIHN0Lmw7XG4gICAgICAgICAgICAgIHN0LmwgPC0gc3QubCArIDFcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICAgIHN0LmsgPC0gc3QuayArIDFcbiAgICAgICAgZG9uZTtcbiAgICAgICAgKCogc2F2ZSB2YWx1ZXMgYmVmb3JlIHJlY3Vyc2luZyAqKVxuICAgICAgICBsZXQgbCA9IHN0LmwgYW5kIGcgPSBzdC5nIGFuZCBzb3J0X21pZGRsZSA9IGNtcCBwIHEgPCAwIGluXG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIGkgbDtcbiAgICAgICAgaWYgc29ydF9taWRkbGUgdGhlbiBzb3J0X3NsaWNlXyB+c3QgYSBsIChnICsgMSk7XG4gICAgICAgIHNvcnRfc2xpY2VfIH5zdCBhIChnICsgMSkgalxuICAgICAgKSBlbHNlXG4gICAgICAgIHNvcnRfaW5zZXJ0aW9uIGEgaSBqXG4gICAgaW5cbiAgICBpZiBBLmxlbmd0aCBhID4gMCB0aGVuIChcbiAgICAgIGxldCBzdCA9IHsgbCA9IDA7IGcgPSBBLmxlbmd0aCBhOyBrID0gMCB9IGluXG4gICAgICBzb3J0X3NsaWNlXyB+c3QgYSAwIChBLmxlbmd0aCBhKVxuICAgIClcbmVuZFxuXG5sZXQgc29ydF9nZW5lcmljICh0eXBlIGFyciBlbHQpXG4gICAgKG1vZHVsZSBBIDogTU9OT19BUlJBWSB3aXRoIHR5cGUgdCA9IGFyciBhbmQgdHlwZSBlbHQgPSBlbHQpIH5jbXAgYSA9XG4gIGxldCBtb2R1bGUgUyA9IFNvcnRHZW5lcmljIChBKSBpblxuICBTLnNvcnQgfmNtcCBhXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+Pj0gKSBhIGYgPSBmbGF0X21hcCBmIGFcbiAgbGV0ICggPj58ICkgYSBmID0gbWFwIGYgYVxuICBsZXQgKCA+fD0gKSBhIGYgPSBtYXAgZiBhXG4gIGxldCAoIC0tICkgPSAoIC0tIClcbiAgbGV0ICggLS1eICkgPSAoIC0tXiApXG5cbiAgdHlwZSAnYSB0ID0gJ2EgYXJyYXlcblxuICBsZXQgKCBsZXQqICkgPSAoID4+PSApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyID0gbW9ub2lkX3Byb2R1Y3QgKGZ1biB4IHkgLT4geCwgeSkgYTEgYTJcbiAgbGV0ICggYW5kKiApID0gKCBhbmQrIClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG5cblxudHlwZSB0ID0gZmxvYXRcblxudHlwZSBmcGNsYXNzID0gU3RkbGliLmZwY2xhc3MgPVxuICB8IEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuXG5tb2R1bGUgSW5maXggPSBzdHJ1Y3RcbiAgbGV0ICggPSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA9IClcbiAgbGV0ICggPD4gKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPD4gKVxuICBsZXQgKCA8ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDwgKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA8PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA8PSApXG4gIGxldCAoID49ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID49IClcbiAgbGV0ICggfi0gKSA6IHQgLT4gdCA9IFN0ZGxpYi4oIH4tLiApXG4gIGxldCAoICsgKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggKy4gKVxuICBsZXQgKCAtICkgOiB0IC0+IHQgLT4gdCA9IFN0ZGxpYi4oIC0uIClcbiAgbGV0ICggKiApIDogdCAtPiB0IC0+IHQgPSBTdGRsaWIuKCAqLiApXG4gIGxldCAoIC8gKSA6IHQgLT4gdCAtPiB0ID0gU3RkbGliLiggLy4gKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cblxubGV0IG5hbiA9IFN0ZGxpYi5uYW5cbmxldCBpbmZpbml0eSA9IFN0ZGxpYi5pbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IFN0ZGxpYi5uZWdfaW5maW5pdHlcbmxldCBtYXhfdmFsdWUgPSBpbmZpbml0eVxubGV0IG1pbl92YWx1ZSA9IG5lZ19pbmZpbml0eVxubGV0IG1heF9maW5pdGVfdmFsdWUgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgZXBzaWxvbiA9IFN0ZGxpYi5lcHNpbG9uX2Zsb2F0XG5sZXQgcGkgPSAweDEuOTIxZmI1NDQ0MmQxOHArMVxubGV0IGlzX25hbiB4ID0gU3RkbGliLihjbGFzc2lmeV9mbG9hdCB4ID0gU3RkbGliLkZQX25hbilcbmxldCBhZGQgPSAoICsuIClcbmxldCBzdWIgPSAoIC0uIClcbmxldCBtdWwgPSAoICouIClcbmxldCBkaXYgPSAoIC8uIClcbmxldCBuZWcgPSAoIH4tLiApXG5sZXQgYWJzID0gU3RkbGliLmFic19mbG9hdFxubGV0IHNjYWxlID0gKCAqLiApXG5cbmxldCBtaW4gKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPCB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBtYXggKHggOiB0KSB5ID1cbiAgbWF0Y2ggU3RkbGliLmNsYXNzaWZ5X2Zsb2F0IHgsIFN0ZGxpYi5jbGFzc2lmeV9mbG9hdCB5IHdpdGhcbiAgfCBGUF9uYW4sIF8gLT4geVxuICB8IF8sIEZQX25hbiAtPiB4XG4gIHwgXyAtPlxuICAgIGlmIHggPiB5IHRoZW5cbiAgICAgIHhcbiAgICBlbHNlXG4gICAgICB5XG5cbmxldCBlcXVhbCAoYSA6IGZsb2F0KSBiID0gYSA9IGJcbmxldCBoYXNoIDogdCAtPiBpbnQgPSBIYXNodGJsLmhhc2hcbmxldCBjb21wYXJlIChhIDogZmxvYXQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcblxuW0BAQG9jYW1sLndhcm5pbmcgXCIrMzJcIl1cblxudHlwZSAnYSBwcmludGVyID0gRm9ybWF0LmZvcm1hdHRlciAtPiAnYSAtPiB1bml0XG50eXBlICdhIHJhbmRvbV9nZW4gPSBSYW5kb20uU3RhdGUudCAtPiAnYVxuXG5sZXQgcHAgPSBGb3JtYXQucHBfcHJpbnRfZmxvYXRcblxubGV0IGZzaWduIGEgPVxuICBpZiBpc19uYW4gYSB0aGVuXG4gICAgbmFuXG4gIGVsc2UgaWYgYSA9IDAuIHRoZW5cbiAgICBhXG4gIGVsc2VcbiAgICBTdGRsaWIuY29weXNpZ24gMS4gYVxuXG5leGNlcHRpb24gVHJhcE5hTiBvZiBzdHJpbmdcblxubGV0IHNpZ25fZXhuIChhIDogZmxvYXQpID1cbiAgaWYgaXNfbmFuIGEgdGhlblxuICAgIHJhaXNlIChUcmFwTmFOIFwic2lnbl9leG5cIilcbiAgZWxzZVxuICAgIGNvbXBhcmUgYSAwLlxuXG5sZXQgcm91bmQgeCA9XG4gIGxldCBsb3cgPSBmbG9vciB4IGluXG4gIGxldCBoaWdoID0gY2VpbCB4IGluXG4gIGlmIHggLS4gbG93ID4gaGlnaCAtLiB4IHRoZW5cbiAgICBoaWdoXG4gIGVsc2VcbiAgICBsb3dcblxubGV0IHRvX2ludCAoYSA6IGZsb2F0KSA9IFN0ZGxpYi5pbnRfb2ZfZmxvYXQgYVxubGV0IG9mX2ludCAoYSA6IGludCkgPSBTdGRsaWIuZmxvYXRfb2ZfaW50IGFcbmxldCB0b19zdHJpbmcgKGEgOiBmbG9hdCkgPSBTdGRsaWIuc3RyaW5nX29mX2Zsb2F0IGFcbmxldCBvZl9zdHJpbmdfZXhuIChhIDogc3RyaW5nKSA9IFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmcgYVxuXG5sZXQgb2Zfc3RyaW5nX29wdCAoYSA6IHN0cmluZykgPVxuICB0cnkgU29tZSAoU3RkbGliLmZsb2F0X29mX3N0cmluZyBhKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCByYW5kb20gbiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBuXG5sZXQgcmFuZG9tX3NtYWxsID0gcmFuZG9tIDEwMC4wXG5sZXQgcmFuZG9tX3JhbmdlIGkgaiBzdCA9IGkgKy4gcmFuZG9tIChqIC0uIGkpIHN0XG5sZXQgZXF1YWxfcHJlY2lzaW9uIH5lcHNpbG9uIGEgYiA9IGFic19mbG9hdCAoYSAtLiBiKSA8IGVwc2lsb25cbmxldCBjbGFzc2lmeSA9IFN0ZGxpYi5jbGFzc2lmeV9mbG9hdFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEV4dGVuc2lvbiB0byB0aGUgc3RhbmRhcmQgSGFzaHRibH0gICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGVxID0gJ2EgLT4gJ2EgLT4gYm9vbFxudHlwZSAnYSBoYXNoID0gJ2EgLT4gaW50XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIFBvbHltb3JwaGljIHRhYmxlc30gKilcblxubW9kdWxlIFBvbHkgPSBzdHJ1Y3RcbiAgbGV0IGdldCB0YmwgeCA9IHRyeSBTb21lIChIYXNodGJsLmZpbmQgdGJsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGdldF9vciB0YmwgeCB+ZGVmYXVsdCA9IHRyeSBIYXNodGJsLmZpbmQgdGJsIHggd2l0aCBOb3RfZm91bmQgLT4gZGVmYXVsdFxuICBsZXQga2V5cyB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIGtleSBfIC0+IGsga2V5KSB0YmxcbiAgbGV0IHZhbHVlcyB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIF8gdiAtPiBrIHYpIHRibFxuICBsZXQga2V5c19saXN0IHRibCA9IEhhc2h0YmwuZm9sZCAoZnVuIGsgXyBhIC0+IGsgOjogYSkgdGJsIFtdXG4gIGxldCB2YWx1ZXNfbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBfIHYgYSAtPiB2IDo6IGEpIHRibCBbXVxuXG4gIGxldCBhZGRfbGlzdCB0YmwgayB2ID1cbiAgICBsZXQgbCA9IHRyeSBIYXNodGJsLmZpbmQgdGJsIGsgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKHYgOjogbClcblxuICBsZXQgaW5jciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIGxldCBuID0gZ2V0X29yIHRibCB4IH5kZWZhdWx0OjAgaW5cbiAgICBpZiBuICsgYnkgPD0gMCB0aGVuXG4gICAgICBIYXNodGJsLnJlbW92ZSB0YmwgeFxuICAgIGVsc2VcbiAgICAgIEhhc2h0YmwucmVwbGFjZSB0YmwgeCAobiArIGJ5KVxuXG4gIGxldCBkZWNyID8oYnkgPSAxKSB0YmwgeCA9XG4gICAgdHJ5XG4gICAgICBsZXQgbiA9IEhhc2h0YmwuZmluZCB0YmwgeCBpblxuICAgICAgaWYgbiAtIGJ5IDw9IDAgdGhlblxuICAgICAgICBIYXNodGJsLnJlbW92ZSB0YmwgeFxuICAgICAgZWxzZVxuICAgICAgICBIYXNodGJsLnJlcGxhY2UgdGJsIHggKG4gLSBieSlcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAoKVxuXG4gIGxldCBtYXBfbGlzdCBmIGggPSBIYXNodGJsLmZvbGQgKGZ1biB4IHkgYWNjIC0+IGYgeCB5IDo6IGFjYykgaCBbXVxuICBsZXQgdG9faXRlciB0YmwgayA9IEhhc2h0YmwuaXRlciAoZnVuIGtleSB2IC0+IGsgKGtleSwgdikpIHRibFxuICBsZXQgYWRkX2l0ZXIgdGJsIGkgPSBpIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpXG5cbiAgbGV0IGFkZF9pdGVyX3dpdGggfmYgdGJsIGkgPVxuICAgIGkgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcblxuICBsZXQgYWRkX3NlcSB0Ymwgc2VxID0gU2VxLml0ZXIgKGZ1biAoaywgdikgLT4gSGFzaHRibC5hZGQgdGJsIGsgdikgc2VxXG5cbiAgbGV0IGFkZF9zZXFfd2l0aCB+ZiB0Ymwgc2VxID1cbiAgICBTZXEuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggSGFzaHRibC5maW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IEhhc2h0YmwuYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIHNlcVxuXG4gICgqIGhlbHBlciBmb3IgYnVpbGRpbmcgaGFzaHRhYmxlcyBieSBidWxrIG11dGF0aW9uICopXG4gIGxldFtAaW5saW5lXSBta190YmxfIGYgeCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgZiB0YmwgeDtcbiAgICB0YmxcblxuICBsZXQgb2ZfaXRlciBpID0gbWtfdGJsXyBhZGRfaXRlciBpXG4gIGxldCBvZl9zZXEgaSA9IG1rX3RibF8gYWRkX3NlcSBpXG4gIGxldCBvZl9pdGVyX3dpdGggfmYgaSA9IG1rX3RibF8gKGFkZF9pdGVyX3dpdGggfmYpIGlcbiAgbGV0IG9mX3NlcV93aXRoIH5mIGkgPSBta190YmxfIChhZGRfc2VxX3dpdGggfmYpIGlcbiAgbGV0IGFkZF9pdGVyX2NvdW50IHRibCBpID0gaSAoZnVuIGsgLT4gaW5jciB0YmwgaylcbiAgbGV0IGFkZF9zZXFfY291bnQgdGJsIHNlcSA9IFNlcS5pdGVyIChmdW4gayAtPiBpbmNyIHRibCBrKSBzZXFcbiAgbGV0IG9mX2l0ZXJfY291bnQgaSA9IG1rX3RibF8gYWRkX2l0ZXJfY291bnQgaVxuICBsZXQgb2Zfc2VxX2NvdW50IGkgPSBta190YmxfIGFkZF9zZXFfY291bnQgaVxuICBsZXQgdG9fbGlzdCB0YmwgPSBIYXNodGJsLmZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHRibCA9IEhhc2h0YmwuY3JlYXRlIDMyIGluXG4gICAgTGlzdC5pdGVyIChmdW4gKGssIHYpIC0+IEhhc2h0YmwuYWRkIHRibCBrIHYpIGw7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2xpc3Rfd2l0aCB+ZiBsID1cbiAgICBsZXQgdGJsID0gSGFzaHRibC5jcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIEhhc2h0YmwuZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBIYXNodGJsLmFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gSGFzaHRibC5yZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBsO1xuICAgIHRibFxuXG4gIGxldCB1cGRhdGUgdGJsIH5mIH5rID1cbiAgICBsZXQgdiA9IGdldCB0YmwgayBpblxuICAgIG1hdGNoIHYsIGYgayB2IHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gKClcbiAgICB8IE5vbmUsIFNvbWUgdicgLT4gSGFzaHRibC5hZGQgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgU29tZSB2JyAtPiBIYXNodGJsLnJlcGxhY2UgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgTm9uZSAtPiBIYXNodGJsLnJlbW92ZSB0Ymwga1xuXG4gIGxldCBnZXRfb3JfYWRkIHRibCB+ZiB+ayA9XG4gICAgdHJ5IEhhc2h0YmwuZmluZCB0Ymwga1xuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgdiA9IGYgayBpblxuICAgICAgSGFzaHRibC5hZGQgdGJsIGsgdjtcbiAgICAgIHZcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIilcbiAgICAgID8ocHBfYXJyb3cgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkAgLT4gXCIpIHBwX2sgcHBfdiBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgSGFzaHRibC5pdGVyXG4gICAgICAoZnVuIGsgdiAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF9rIGZtdCBrO1xuICAgICAgICBwcF9hcnJvdyBmbXQgKCk7XG4gICAgICAgIHBwX3YgZm10IHYpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcblxuaW5jbHVkZSBQb2x5XG5cbigqKiB7MiBGdW5jdG9yfSAqKVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIGluY2x1ZGUgSGFzaHRibC5TXG5cbiAgdmFsIGdldCA6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAoKiogW2dldCB0Ymwga10gZmluZHMgYSBiaW5kaW5nIGZvciB0aGUga2V5IFtrXSBpZiBwcmVzZW50LFxuICAgICAgb3IgcmV0dXJucyBbTm9uZV0gaWYgbm8gdmFsdWUgaXMgZm91bmQuXG4gICAgICBTYWZlIHZlcnNpb24gb2YgeyFIYXNodGJsLmZpbmR9LiAqKVxuXG4gIHZhbCBnZXRfb3IgOiAnYSB0IC0+IGtleSAtPiBkZWZhdWx0OidhIC0+ICdhXG4gICgqKiBbZ2V0X29yIHRibCBrIH5kZWZhdWx0XSByZXR1cm5zIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHRvIFtrXSBpZiBwcmVzZW50LFxuICAgICAgYW5kIHJldHVybnMgW2RlZmF1bHRdIG90aGVyd2lzZSAoaWYgW2tdIGRvZXNuJ3QgYmVsb25nIGluIFt0YmxdKS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGFkZF9saXN0IDogJ2EgbGlzdCB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICgqKiBbYWRkX2xpc3QgdGJsIHggeV0gYWRkcyBbeV0gdG8gdGhlIGxpc3QgW3hdIGlzIGJvdW5kIHRvLiBJZiBbeF0gaXNcbiAgICAgIG5vdCBib3VuZCwgaXQgYmVjb21lcyBib3VuZCB0byBbeV0uXG4gICAgICBAc2luY2UgMC4xNiAqKVxuXG4gIHZhbCBpbmNyIDogP2J5OmludCAtPiBpbnQgdCAtPiBrZXkgLT4gdW5pdFxuICAoKiogW2luY3IgP2J5IHRibCB4XSBpbmNyZW1lbnRzIG9yIGluaXRpYWxpemVzIHRoZSBjb3VudGVyIGFzc29jaWF0ZWQgd2l0aCBbeF0uXG4gICAgICBJZiBbZ2V0IHRibCB4ID0gTm9uZV0sIHRoZW4gYWZ0ZXIgdXBkYXRlLCBbZ2V0IHRibCB4ID0gU29tZSAxXTtcbiAgICAgIG90aGVyd2lzZSwgaWYgW2dldCB0YmwgeCA9IFNvbWUgbl0sIG5vdyBbZ2V0IHRibCB4ID0gU29tZSAobisxKV0uXG4gICAgICBAcGFyYW0gYnkgaWYgc3BlY2lmaWVkLCB0aGUgaW50IHZhbHVlIGlzIGluY3JlbWVudGVkIGJ5IFtieV0gcmF0aGVyIHRoYW4gMS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGRlY3IgOiA/Ynk6aW50IC0+IGludCB0IC0+IGtleSAtPiB1bml0XG4gICgqKiBbZGVjciA/YnkgdGJsIHhdIGlzIGxpa2UgeyFpbmNyfSBidXQgc3VidHJhY3QgMSAob3IgdGhlIHZhbHVlIG9mIFtieV0pLlxuICAgICAgSWYgdGhlIHZhbHVlIHJlYWNoZXMgMCwgdGhlIGtleSBpcyByZW1vdmVkIGZyb20gdGhlIHRhYmxlLlxuICAgICAgVGhpcyBkb2VzIG5vdGhpbmcgaWYgdGhlIGtleSBpcyBub3QgYWxyZWFkeSBwcmVzZW50IGluIHRoZSB0YWJsZS5cbiAgICAgIEBzaW5jZSAwLjE2ICopXG5cbiAgdmFsIGtleXMgOiAnYSB0IC0+IGtleSBpdGVyXG4gICgqKiAgW2tleXMgdGJsIGZdIGl0ZXJhdGVzIG9uIGtleXMgKHNpbWlsYXIgb3JkZXIgYXMgeyFIYXNodGJsLml0ZXJ9KS4gKilcblxuICB2YWwgdmFsdWVzIDogJ2EgdCAtPiAnYSBpdGVyXG4gICgqKiAgW3ZhbHVlcyB0YmwgZl0gaXRlcmF0ZXMgb24gdmFsdWVzIGluIHRoZSB0YWJsZS4gKilcblxuICB2YWwga2V5c19saXN0IDogXyB0IC0+IGtleSBsaXN0XG4gICgqKiBba2V5c19saXN0IHRibF0gaXMgdGhlIGxpc3Qgb2Yga2V5cyBpbiBbdGJsXS5cbiAgICAgIElmIHRoZSBrZXkgaXMgaW4gdGhlIEhhc2h0YWJsZSBtdWx0aXBsZSB0aW1lcywgYWxsIG9jY3VycmVuY2VzIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICBAc2luY2UgMC44ICopXG5cbiAgdmFsIHZhbHVlc19saXN0IDogJ2EgdCAtPiAnYSBsaXN0XG4gICgqKiBbdmFsdWVzX2xpc3QgdF0gaXMgdGhlIGxpc3Qgb2YgdmFsdWVzIGluIFt0XS5cbiAgICAgIEBzaW5jZSAwLjggKilcblxuICB2YWwgbWFwX2xpc3QgOiAoa2V5IC0+ICdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIGxpc3RcbiAgKCoqIE1hcCBvbiBhIGhhc2h0YWJsZSdzIGl0ZW1zLCBjb2xsZWN0IGludG8gYSBsaXN0LiAqKVxuXG4gIHZhbCB0b19pdGVyIDogJ2EgdCAtPiAoa2V5ICogJ2EpIGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgaW4gdGhlIHRhYmxlLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfaXRlciA6ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyIC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfaXRlcl93aXRoIDpcbiAgICBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBpdGVyIC0+IHVuaXRcbiAgKCoqIEFkZCB0aGUgY29ycmVzcG9uZGluZyBwYWlycyB0byB0aGUgdGFibGUsIHVzaW5nIHshSGFzaHRibC5hZGR9LlxuICAgICAgSWYgYSBrZXkgb2NjdXJzIG11bHRpcGxlIHRpbWVzIGluIHRoZSBpbnB1dCwgdGhlIHZhbHVlcyBhcmUgY29tYmluZWRcbiAgICAgIHVzaW5nIFtmXSBpbiBhbiB1bnNwZWNpZmllZCBvcmRlci5cbiAgICAgIEBzaW5jZSAzLjMgKilcblxuICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIFJlbmFtZWQgZnJvbSBbYWRkX3N0ZF9zZXFdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgYWRkX3NlcV93aXRoIDpcbiAgICBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICgqKiBBZGQgdGhlIGNvcnJlc3BvbmRpbmcgcGFpcnMgdG8gdGhlIHRhYmxlLCB1c2luZyB7IUhhc2h0YmwuYWRkfS5cbiAgICAgIElmIGEga2V5IG9jY3VycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgaW5wdXQsIHRoZSB2YWx1ZXMgYXJlIGNvbWJpbmVkXG4gICAgICB1c2luZyBbZl0gaW4gYW4gdW5zcGVjaWZpZWQgb3JkZXIuXG4gICAgICBAc2luY2UgMy4zICopXG5cbiAgdmFsIG9mX2l0ZXIgOiAoa2V5ICogJ2EpIGl0ZXIgLT4gJ2EgdFxuICAoKiogRnJvbSB0aGUgZ2l2ZW4gYmluZGluZ3MsIGFkZGVkIGluIG9yZGVyLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBvZl9pdGVyX3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgaXRlciAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgKCoqIEZyb20gdGhlIGdpdmVuIGJpbmRpbmdzLCBhZGRlZCBpbiBvcmRlci5cbiAgICAgIFJlbmFtZWQgZnJvbSBbb2Zfc3RkX3NlcV0gc2luY2UgMy4wLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBvZl9zZXFfd2l0aCA6IGY6KGtleSAtPiAnYSAtPiAnYSAtPiAnYSkgLT4gKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gICgqKiBGcm9tIHRoZSBnaXZlbiBiaW5kaW5ncywgYWRkZWQgaW4gb3JkZXIuXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCBhZGRfaXRlcl9jb3VudCA6IGludCB0IC0+IGtleSBpdGVyIC0+IHVuaXRcbiAgKCoqIFthZGRfaXRlcl9jb3VudCB0YmwgaV0gaW5jcmVtZW50cyB0aGUgY291bnQgb2YgZWFjaCBlbGVtZW50IG9mIFtpXVxuICAgICAgYnkgY2FsbGluZyB7IWluY3J9LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY291bnRpbmcgaG93IG1hbnkgdGltZXMgZWFjaFxuICAgICAgZWxlbWVudCBvZiBbaV0gb2NjdXJzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfc2VxX2NvdW50IDogaW50IHQgLT4ga2V5IFNlcS50IC0+IHVuaXRcbiAgKCoqIFthZGRfc2VxX2NvdW50IHRibCBzZXFdIGluY3JlbWVudHMgdGhlIGNvdW50IG9mIGVhY2ggZWxlbWVudCBvZiBbc2VxXVxuICAgICAgYnkgY2FsbGluZyB7IWluY3J9LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY291bnRpbmcgaG93IG1hbnkgdGltZXMgZWFjaFxuICAgICAgZWxlbWVudCBvZiBbc2VxXSBvY2N1cnMuXG4gICAgICBSZW5hbWVkIGZyb20gW29mX3N0ZF9zZXFfY291bnRdIHNpbmNlIDMuMC5cbiAgICAgIEBzaW5jZSAzLjAgKilcblxuICB2YWwgb2ZfaXRlcl9jb3VudCA6IGtleSBpdGVyIC0+IGludCB0XG4gICgqKiBMaWtlIHshYWRkX3NlcV9jb3VudH0sIGJ1dCBhbGxvY2F0ZXMgYSBuZXcgdGFibGUgYW5kIHJldHVybnMgaXQuXG4gICAgICBAc2luY2UgMi44ICopXG5cbiAgdmFsIG9mX3NlcV9jb3VudCA6IGtleSBTZXEudCAtPiBpbnQgdFxuICAoKiogTGlrZSB7IWFkZF9zZXFfY291bnR9LCBidXQgYWxsb2NhdGVzIGEgbmV3IHRhYmxlIGFuZCByZXR1cm5zIGl0LlxuICAgICAgUmVuYW1lZCBmcm9tIFtvZl9zdGRfc2VxX2NvdW50XSBzaW5jZSAzLjAuXG4gICAgICBAc2luY2UgMy4wICopXG5cbiAgdmFsIHRvX2xpc3QgOiAnYSB0IC0+IChrZXkgKiAnYSkgbGlzdFxuICAoKiogW3RvX2xpc3QgdGJsXSByZXR1cm5zIHRoZSBsaXN0IG9mIChrZXksdmFsdWUpIGJpbmRpbmdzIChvcmRlciB1bnNwZWNpZmllZCkuICopXG5cbiAgdmFsIG9mX2xpc3QgOiAoa2V5ICogJ2EpIGxpc3QgLT4gJ2EgdFxuICAoKiogW29mX2xpc3QgbF0gYnVpbGRzIGEgdGFibGUgZnJvbSB0aGUgZ2l2ZW4gbGlzdCBbbF0gb2YgYmluZGluZ3MgW2tfaSAtPiB2X2ldLFxuICAgICAgYWRkZWQgaW4gb3JkZXIgdXNpbmcgeyFhZGR9LiBJZiBhIGtleSBvY2N1cnMgc2V2ZXJhbCB0aW1lcyxcbiAgICAgIGl0IHdpbGwgYmUgYWRkZWQgc2V2ZXJhbCB0aW1lcywgYW5kIHRoZSB2aXNpYmxlIGJpbmRpbmdcbiAgICAgIHdpbGwgYmUgdGhlIGxhc3Qgb25lLiAqKVxuXG4gIHZhbCBvZl9saXN0X3dpdGggOiBmOihrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2EpIC0+IChrZXkgKiAnYSkgbGlzdCAtPiAnYSB0XG4gICgqKiBbb2ZfbGlzdCBsXSBidWlsZHMgYSB0YWJsZSBmcm9tIHRoZSBnaXZlbiBsaXN0IFtsXSBvZiBiaW5kaW5ncyBba19pIC0+IHZfaV0uXG4gICAgICBJZiBhIGtleSBvY2N1cnMgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGlucHV0LCB0aGUgdmFsdWVzIGFyZSBjb21iaW5lZFxuICAgICAgdXNpbmcgW2ZdIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgQHNpbmNlIDMuMyAqKVxuXG4gIHZhbCB1cGRhdGUgOiAnYSB0IC0+IGY6KGtleSAtPiAnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiBrOmtleSAtPiB1bml0XG4gICgqKiBbdXBkYXRlIHRibCB+ZiB+a10gdXBkYXRlcyBrZXkgW2tdIGJ5IGNhbGxpbmcgW2YgayAoU29tZSB2KV0gaWZcbiAgICAgIFtrXSB3YXMgbWFwcGVkIHRvIFt2XSwgb3IgW2YgayBOb25lXSBvdGhlcndpc2U7IGlmIHRoZSBjYWxsXG4gICAgICByZXR1cm5zIFtOb25lXSB0aGVuIFtrXSBpcyByZW1vdmVkL3N0YXlzIHJlbW92ZWQsIGlmIHRoZSBjYWxsXG4gICAgICByZXR1cm5zIFtTb21lIHYnXSB0aGVuIHRoZSBiaW5kaW5nIFtrIC0+IHYnXSBpcyBpbnNlcnRlZFxuICAgICAgdXNpbmcgeyFIYXNodGJsLnJlcGxhY2V9LlxuICAgICAgQHNpbmNlIDAuMTQgKilcblxuICB2YWwgZ2V0X29yX2FkZCA6ICdhIHQgLT4gZjooa2V5IC0+ICdhKSAtPiBrOmtleSAtPiAnYVxuICAoKiogW2dldF9vcl9hZGQgdGJsIH5rIH5mXSBmaW5kcyBhbmQgcmV0dXJucyB0aGUgYmluZGluZyBvZiBba11cbiAgICAgIGluIFt0YmxdLCBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgbm90IGV4aXN0LCB0aGVuIFtmIGtdXG4gICAgICBpcyBjYWxsZWQgdG8gb2J0YWluIGEgbmV3IGJpbmRpbmcgW3ZdOyBbayAtPiB2XSBpcyBhZGRlZFxuICAgICAgdG8gW3RibF0gYW5kIFt2XSBpcyByZXR1cm5lZC5cbiAgICAgIEBzaW5jZSAxLjAgKilcblxuICB2YWwgcHAgOlxuICAgID9wcF9zdGFydDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc3RvcDp1bml0IHByaW50ZXIgLT5cbiAgICA/cHBfc2VwOnVuaXQgcHJpbnRlciAtPlxuICAgID9wcF9hcnJvdzp1bml0IHByaW50ZXIgLT5cbiAgICBrZXkgcHJpbnRlciAtPlxuICAgICdhIHByaW50ZXIgLT5cbiAgICAnYSB0IHByaW50ZXJcbiAgKCoqIFtwcCB+cHBfc3RhcnQgfnBwX3N0b3AgfnBwX3NlcCB+cHAgYXJyb3cgcHBfayBwcF92XSByZXR1cm5zIGEgdGFibGUgcHJpbnRlclxuICAgICAgZ2l2ZW4gYSBbcHBfa10gcHJpbnRlclxuICAgICAgZm9yIGluZGl2aWR1YWwga2V5IGFuZCBhIFtwcF92XSBwcmludGVyIGZvciBpbmRpdmlkdWFsIHZhbHVlLlxuICAgICAgW3BwX3N0YXJ0XSBhbmQgW3BwX3N0b3BdIGNvbnRyb2wgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGVsaW1pdGVycyxcbiAgICAgIGJ5IGRlZmF1bHQgcHJpbnQgbm90aGluZy4gW3BwX3NlcF0gY29udHJvbCB0aGUgc2VwYXJhdG9yIGJldHdlZW4gYmluZGluZy5cbiAgICAgIFtwcF9hcnJvd10gY29udHJvbCB0aGUgYXJyb3cgYmV0d2VlbiB0aGUga2V5IGFuZCB2YWx1ZS5cbiAgICAgIFJlbmFtZWQgZnJvbSBbcHJpbnRdIHNpbmNlIDIuMC5cbiAgICAgIEBzaW5jZSAwLjEzICopXG5lbmRcblxubW9kdWxlIE1ha2UgKFggOiBIYXNodGJsLkhhc2hlZFR5cGUpIDpcbiAgUyB3aXRoIHR5cGUga2V5ID0gWC50IGFuZCB0eXBlICdhIHQgPSAnYSBIYXNodGJsLk1ha2UoWCkudCA9IHN0cnVjdFxuICBpbmNsdWRlIEhhc2h0YmwuTWFrZSAoWClcblxuICBsZXQgZ2V0IHRibCB4ID0gdHJ5IFNvbWUgKGZpbmQgdGJsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcbiAgbGV0IGdldF9vciB0YmwgeCB+ZGVmYXVsdCA9IHRyeSBmaW5kIHRibCB4IHdpdGggTm90X2ZvdW5kIC0+IGRlZmF1bHRcblxuICBsZXQgaW5jciA/KGJ5ID0gMSkgdGJsIHggPVxuICAgIGxldCBuID0gZ2V0X29yIHRibCB4IH5kZWZhdWx0OjAgaW5cbiAgICBpZiBuICsgYnkgPD0gMCB0aGVuXG4gICAgICByZW1vdmUgdGJsIHhcbiAgICBlbHNlXG4gICAgICByZXBsYWNlIHRibCB4IChuICsgYnkpXG5cbiAgbGV0IGFkZF9saXN0IHRibCBrIHYgPVxuICAgIGxldCBsID0gdHJ5IGZpbmQgdGJsIGsgd2l0aCBOb3RfZm91bmQgLT4gW10gaW5cbiAgICByZXBsYWNlIHRibCBrICh2IDo6IGwpXG5cbiAgbGV0IGRlY3IgPyhieSA9IDEpIHRibCB4ID1cbiAgICB0cnlcbiAgICAgIGxldCBuID0gZmluZCB0YmwgeCBpblxuICAgICAgaWYgbiAtIGJ5IDw9IDAgdGhlblxuICAgICAgICByZW1vdmUgdGJsIHhcbiAgICAgIGVsc2VcbiAgICAgICAgcmVwbGFjZSB0YmwgeCAobiAtIGJ5KVxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IGtleXMgdGJsIGsgPSBpdGVyIChmdW4ga2V5IF8gLT4gayBrZXkpIHRibFxuICBsZXQgdmFsdWVzIHRibCBrID0gaXRlciAoZnVuIF8gdiAtPiBrIHYpIHRibFxuICBsZXQga2V5c19saXN0IHRibCA9IGZvbGQgKGZ1biBrIF8gYSAtPiBrIDo6IGEpIHRibCBbXVxuICBsZXQgdmFsdWVzX2xpc3QgdGJsID0gZm9sZCAoZnVuIF8gdiBhIC0+IHYgOjogYSkgdGJsIFtdXG4gIGxldCBtYXBfbGlzdCBmIGggPSBmb2xkIChmdW4geCB5IGFjYyAtPiBmIHggeSA6OiBhY2MpIGggW11cblxuICBsZXQgdXBkYXRlIHRibCB+ZiB+ayA9XG4gICAgbGV0IHYgPSBnZXQgdGJsIGsgaW5cbiAgICBtYXRjaCB2LCBmIGsgdiB3aXRoXG4gICAgfCBOb25lLCBOb25lIC0+ICgpXG4gICAgfCBOb25lLCBTb21lIHYnIC0+IGFkZCB0YmwgayB2J1xuICAgIHwgU29tZSBfLCBTb21lIHYnIC0+IHJlcGxhY2UgdGJsIGsgdidcbiAgICB8IFNvbWUgXywgTm9uZSAtPiByZW1vdmUgdGJsIGtcblxuICBsZXQgZ2V0X29yX2FkZCB0YmwgfmYgfmsgPVxuICAgIHRyeSBmaW5kIHRibCBrXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCB2ID0gZiBrIGluXG4gICAgICBhZGQgdGJsIGsgdjtcbiAgICAgIHZcblxuICBsZXQgdG9faXRlciB0YmwgayA9IGl0ZXIgKGZ1biBrZXkgdiAtPiBrIChrZXksIHYpKSB0YmxcbiAgbGV0IGFkZF9pdGVyIHRibCBpID0gaSAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdilcblxuICBsZXQgYWRkX2l0ZXJfd2l0aCB+ZiB0YmwgaSA9XG4gICAgaSAoZnVuIChrLCB2KSAtPlxuICAgICAgICBtYXRjaCBmaW5kIHRibCBrIHdpdGhcbiAgICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGFkZCB0YmwgayB2XG4gICAgICAgIHwgdjIgLT4gcmVwbGFjZSB0YmwgayAoZiBrIHYgdjIpKVxuXG4gIGxldCBhZGRfc2VxIHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdikgc2VxXG5cbiAgbGV0IGFkZF9zZXFfd2l0aCB+ZiB0Ymwgc2VxID1cbiAgICBTZXEuaXRlclxuICAgICAgKGZ1biAoaywgdikgLT5cbiAgICAgICAgbWF0Y2ggZmluZCB0YmwgayB3aXRoXG4gICAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBhZGQgdGJsIGsgdlxuICAgICAgICB8IHYyIC0+IHJlcGxhY2UgdGJsIGsgKGYgayB2IHYyKSlcbiAgICAgIHNlcVxuXG4gICgqIGhlbHBlciBmb3IgYnVpbGRpbmcgaGFzaHRhYmxlcyBieSBidWxrIG11dGF0aW9uICopXG4gIGxldFtAaW5saW5lXSBta190YmxfIGYgeCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIGYgdGJsIHg7XG4gICAgdGJsXG5cbiAgbGV0IG9mX2l0ZXIgaSA9IG1rX3RibF8gYWRkX2l0ZXIgaVxuICBsZXQgb2Zfc2VxIGkgPSBta190YmxfIGFkZF9zZXEgaVxuICBsZXQgb2ZfaXRlcl93aXRoIH5mIGkgPSBta190YmxfIChhZGRfaXRlcl93aXRoIH5mKSBpXG4gIGxldCBvZl9zZXFfd2l0aCB+ZiBpID0gbWtfdGJsXyAoYWRkX3NlcV93aXRoIH5mKSBpXG4gIGxldCBhZGRfaXRlcl9jb3VudCB0YmwgaSA9IGkgKGZ1biBrIC0+IGluY3IgdGJsIGspXG4gIGxldCBhZGRfc2VxX2NvdW50IHRibCBzZXEgPSBTZXEuaXRlciAoZnVuIGsgLT4gaW5jciB0Ymwgaykgc2VxXG5cbiAgbGV0IG9mX2l0ZXJfY291bnQgc2VxID1cbiAgICBsZXQgdGJsID0gY3JlYXRlIDMyIGluXG4gICAgYWRkX2l0ZXJfY291bnQgdGJsIHNlcTtcbiAgICB0YmxcblxuICBsZXQgb2Zfc2VxX2NvdW50IGkgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBhZGRfc2VxX2NvdW50IHRibCBpO1xuICAgIHRibFxuXG4gIGxldCB0b19saXN0IHRibCA9IGZvbGQgKGZ1biBrIHYgbCAtPiAoaywgdikgOjogbCkgdGJsIFtdXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHRibCA9IGNyZWF0ZSAzMiBpblxuICAgIExpc3QuaXRlciAoZnVuIChrLCB2KSAtPiBhZGQgdGJsIGsgdikgbDtcbiAgICB0YmxcblxuICBsZXQgb2ZfbGlzdF93aXRoIH5mIGwgPVxuICAgIGxldCB0YmwgPSBjcmVhdGUgMzIgaW5cbiAgICBMaXN0Lml0ZXJcbiAgICAgIChmdW4gKGssIHYpIC0+XG4gICAgICAgIG1hdGNoIGZpbmQgdGJsIGsgd2l0aFxuICAgICAgICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT4gYWRkIHRibCBrIHZcbiAgICAgICAgfCB2MiAtPiByZXBsYWNlIHRibCBrIChmIGsgdiB2MikpXG4gICAgICBsO1xuICAgIHRibFxuXG4gIGxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgICAgPyhwcF9zZXAgPSBmdW4gZm10ICgpIC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIixAIFwiKVxuICAgICAgPyhwcF9hcnJvdyA9IGZ1biBmbXQgKCkgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQCAtPiBcIikgcHBfayBwcF92IGZtdCBtID1cbiAgICBwcF9zdGFydCBmbXQgKCk7XG4gICAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgICBpdGVyXG4gICAgICAoZnVuIGsgdiAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBwcF9zZXAgZm10ICgpO1xuICAgICAgICBwcF9rIGZtdCBrO1xuICAgICAgICBwcF9hcnJvdyBmbXQgKCk7XG4gICAgICAgIHBwX3YgZm10IHYpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcbiIsIigqIGJhY2twb3J0IG5ldyBmdW5jdGlvbnMgZnJvbSBzdGRsaWIgaGVyZSAqKVxuXG5bQEBAb2NhbWwud2FybmluZyBcIi0zMlwiXVxuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RocyBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IDBcbiAgfCBbXSwgXyA6OiBfIC0+IC0xXG4gIHwgXyA6OiBfLCBbXSAtPiAxXG4gIHwgXyA6OiB0YWlsMSwgXyA6OiB0YWlsMiAtPiBjb21wYXJlX2xlbmd0aHMgdGFpbDEgdGFpbDJcblxubGV0IHJlYyBjb21wYXJlX2xlbmd0aF93aXRoIGwgbiA9XG4gIG1hdGNoIGwsIG4gd2l0aFxuICB8IF8gd2hlbiBuIDwgMCAtPiAxXG4gIHwgW10sIDAgLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXyA6OiB0YWlsLCBfIC0+IGNvbXBhcmVfbGVuZ3RoX3dpdGggdGFpbCAobiAtIDEpXG5cbmxldCByZWMgYXNzb2Nfb3B0IHggPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCAoeSwgdikgOjogXyB3aGVuIFN0ZGxpYi4oID0gKSB4IHkgLT4gU29tZSB2XG4gIHwgXyA6OiB0YWlsIC0+IGFzc29jX29wdCB4IHRhaWxcblxubGV0IHJlYyBhc3NxX29wdCB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgKHksIHYpIDo6IF8gd2hlbiBTdGRsaWIuKCA9PSApIHggeSAtPiBTb21lIHZcbiAgfCBfIDo6IHRhaWwgLT4gYXNzcV9vcHQgeCB0YWlsXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiKzMyXCJdXG5cbigqIGVuZCBvZiBiYWNrcG9ydCAqKVxuXG5pbmNsdWRlIExpc3RcblxubGV0IGVtcHR5ID0gW11cblxubGV0IGlzX2VtcHR5ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiB0cnVlXG4gIHwgXyA6OiBfIC0+IGZhbHNlXG5cbmxldCBtZ3VhcmQgYyA9XG4gIGlmIGMgdGhlblxuICAgIFsgKCkgXVxuICBlbHNlXG4gICAgW11cblxuKCoqIG1heCBkZXB0aCBmb3IgZGlyZWN0IHJlY3Vyc2lvbiAqKVxubGV0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyA9IDEwMDBcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRhaWxfbWFwIGYgbCA9XG4gICgqIFVud2luZCB0aGUgbGlzdCBvZiB0dXBsZXMsIHJlY29uc3RydWN0aW5nIHRoZSBmdWxsIGxpc3QgZnJvbnQtdG8tYmFjay5cbiAgICAgQHBhcmFtIHRhaWxfYWNjIGEgc3VmZml4IG9mIHRoZSBmaW5hbCBsaXN0OyB3ZSBhcHBlbmQgdHVwbGVzJyBjb250ZW50XG4gICAgIGF0IHRoZSBmcm9udCBvZiBpdCAqKVxuICBsZXQgcmVjIHJlYnVpbGQgdGFpbF9hY2MgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gdGFpbF9hY2NcbiAgICB8ICh5MCwgeTEsIHkyLCB5MywgeTQsIHk1LCB5NiwgeTcsIHk4KSA6OiBicyAtPlxuICAgICAgcmVidWlsZFxuICAgICAgICAoeTAgOjogeTEgOjogeTIgOjogeTMgOjogeTQgOjogeTUgOjogeTYgOjogeTcgOjogeTggOjogdGFpbF9hY2MpXG4gICAgICAgIGJzXG4gIGluXG4gICgqIENyZWF0ZSBhIGNvbXByZXNzZWQgcmV2ZXJzZS1saXN0IHJlcHJlc2VudGF0aW9uIHVzaW5nIHR1cGxlc1xuICAgICBAcGFyYW0gdHVwbGVfYWNjIGEgcmV2ZXJzZSBsaXN0IG9mIGNodW5rcyBtYXBwZWQgd2l0aCBbZl0gKilcbiAgbGV0IHJlYyBkaXZlIHR1cGxlX2FjYyA9IGZ1bmN0aW9uXG4gICAgfCB4MCA6OiB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiB4NSA6OiB4NiA6OiB4NyA6OiB4OCA6OiB4cyAtPlxuICAgICAgbGV0IHkwID0gZiB4MCBpblxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgbGV0IHk1ID0gZiB4NSBpblxuICAgICAgbGV0IHk2ID0gZiB4NiBpblxuICAgICAgbGV0IHk3ID0gZiB4NyBpblxuICAgICAgbGV0IHk4ID0gZiB4OCBpblxuICAgICAgZGl2ZSAoKHkwLCB5MSwgeTIsIHkzLCB5NCwgeTUsIHk2LCB5NywgeTgpIDo6IHR1cGxlX2FjYykgeHNcbiAgICB8IHhzIC0+XG4gICAgICAoKiBSZXZlcnNlIGRpcmVjdGlvbiwgZmluaXNoaW5nIG9mZiB3aXRoIGEgZGlyZWN0IG1hcCAqKVxuICAgICAgbGV0IHRhaWwgPSBMaXN0Lm1hcCBmIHhzIGluXG4gICAgICByZWJ1aWxkIHRhaWwgdHVwbGVfYWNjXG4gIGluXG4gIGRpdmUgW10gbFxuXG5sZXQgbWFwIGYgbCA9XG4gIGxldCByZWMgZGlyZWN0IGYgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBbIHggXSAtPiBbIGYgeCBdXG4gICAgfCBbIHgxOyB4MiBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBbIHkxOyBmIHgyIF1cbiAgICB8IFsgeDE7IHgyOyB4MyBdIC0+XG4gICAgICBsZXQgeTEgPSBmIHgxIGluXG4gICAgICBsZXQgeTIgPSBmIHgyIGluXG4gICAgICBbIHkxOyB5MjsgZiB4MyBdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gdGFpbF9tYXAgZiBsXG4gICAgfCB4MSA6OiB4MiA6OiB4MyA6OiB4NCA6OiBsJyAtPlxuICAgICAgbGV0IHkxID0gZiB4MSBpblxuICAgICAgbGV0IHkyID0gZiB4MiBpblxuICAgICAgbGV0IHkzID0gZiB4MyBpblxuICAgICAgbGV0IHk0ID0gZiB4NCBpblxuICAgICAgeTEgOjogeTIgOjogeTMgOjogeTQgOjogZGlyZWN0IGYgKGkgLSAxKSBsJ1xuICBpblxuICBkaXJlY3QgZiBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbFxuXG5sZXQgYXBwZW5kIGwxIGwyID1cbiAgbGV0W0BpbmxpbmVdIHNhZmUgbDEgbDIgPSBMaXN0LnJldl9hcHBlbmQgKExpc3QucmV2IGwxKSBsMiBpblxuICBsZXQgcmVjIGRpcmVjdCBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSB3aXRoXG4gICAgfCBbXSAtPiBsMlxuICAgIHwgWyB4IF0gLT4geCA6OiBsMlxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgbDEgbDJcbiAgICB8IHggOjogeSA6OiB0bDEgLT4geCA6OiB5IDo6IGRpcmVjdCAoaSAtIDEpIHRsMSBsMlxuICBpblxuICBkaXJlY3QgMTAwMCBsMSBsMlxuXG5bQEBAZWxpZmx0IDUuMV1cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgbWFwIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiB0bCAtPlxuICAgIGxldCB4ID0gZiB4IGluXG4gICAgeCA6OiBtYXAgZiB0bFxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBhcHBlbmQgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gIHwgW10gLT4gbDJcbiAgfCB4IDo6IHRsMSAtPiB4IDo6IGFwcGVuZCB0bDEgbDJcblxuW0BAQGVsc2VfXVxuXG4oKiBUUk1DIGZ1bmN0aW9ucyBvbiA+PSA1LjEsIG5vIG5lZWQgdG8gYnJpbmcgb3VyIG93biAqKVxuXG5bQEBAZW5kaWZdXG5cbigqIFdyYXBwZXIgYXJvdW5kIFthcHBlbmRdIHRvIG9wdGltaXplIGZvciB0aGUgY2FzZSBvZiBzaG9ydCBbbDFdLFxuICAgYW5kIGZvciB0aGUgY2FzZSBvZiBbbDIgPSBbXV0gKHNhdmVzIHRoZSB3aG9sZSBjb3B5IG9mIFtsMV0hKSAqKVxubGV0W0BpbmxpbmVdIGFwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIF8gLT4gbDJcbiAgfCBfLCBbXSAtPiBsMVxuICB8IFsgeCBdLCBfIC0+IHggOjogbDJcbiAgfCB4IDo6IHkgOjogdGwxLCBfIC0+IHggOjogeSA6OiBhcHBlbmQgdGwxIGwyXG5cbmxldCAoIEAgKSA9IGFwcGVuZFxubGV0W0BpbmxpbmVdIGNvbnMnIGwgeCA9IHggOjogbFxuXG5sZXQgY29uc19tYXliZSBvIGwgPVxuICBtYXRjaCBvIHdpdGhcbiAgfCBTb21lIHggLT4geCA6OiBsXG4gIHwgTm9uZSAtPiBsXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBkaXJlY3RfZGVwdGhfZmlsdGVyXyA9IDEwXzAwMFxuXG5sZXQgZmlsdGVyIHAgbCA9XG4gIGxldCByZWMgZGlyZWN0IGkgcCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBwIGwgW11cbiAgICB8IHggOjogbCcgd2hlbiBub3QgKHAgeCkgLT4gZGlyZWN0IGkgcCBsJ1xuICAgIHwgeCA6OiBsJyAtPiB4IDo6IGRpcmVjdCAoaSAtIDEpIHAgbCdcbiAgYW5kIHNhZmUgcCBsIGFjYyA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgd2hlbiBub3QgKHAgeCkgLT4gc2FmZSBwIGwnIGFjY1xuICAgIHwgeCA6OiBsJyAtPiBzYWZlIHAgbCcgKHggOjogYWNjKVxuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2ZpbHRlcl8gcCBsXG5cbltAQEBlbGlmbHQgNS4xXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBmaWx0ZXIgZiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IHRsIC0+XG4gICAgbGV0IGtlZXAgPSBmIHggaW5cbiAgICBpZiBrZWVwIHRoZW5cbiAgICAgIHggOjogZmlsdGVyIGYgdGxcbiAgICBlbHNlXG4gICAgICBmaWx0ZXIgZiB0bFxuXG5bQEBAZWxzZV9dXG4oKiBzdGRsaWIncyBmaWx0ZXIgdXNlcyBUUk1DIGFmdGVyIDUuMSAqKVxuXG5bQEBAZW5kaWZdXG5cbmxldCBmb2xkX3JpZ2h0IGYgbCBhY2MgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGYgbCBhY2MgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCBfIHdoZW4gaSA9IDAgLT4gc2FmZSBmIChMaXN0LnJldiBsKSBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBkaXJlY3QgKGkgLSAxKSBmIGwnIGFjYyBpblxuICAgICAgZiB4IGFjY1xuICBhbmQgc2FmZSBmIGwgYWNjID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgeCBhY2MgaW5cbiAgICAgIHNhZmUgZiBsJyBhY2NcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBmIGwgYWNjXG5cbmxldCByZWMgZm9sZF93aGlsZSBmIGFjYyA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgZSA6OiBsIC0+XG4gICAgbGV0IGFjYywgY29udCA9IGYgYWNjIGUgaW5cbiAgICAobWF0Y2ggY29udCB3aXRoXG4gICAgfCBgU3RvcCAtPiBhY2NcbiAgICB8IGBDb250aW51ZSAtPiBmb2xkX3doaWxlIGYgYWNjIGwpXG5cbmxldCBmb2xkX21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoeSA6OiBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgW10gbFxuXG5sZXQgZm9sZF9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoeSA6OiBtYXBfYWNjKSBsJ1xuICBpblxuICBhdXggZiBhY2MgMCBbXSBsXG5cbmxldCBmb2xkX29uX21hcCB+ZiB+cmVkdWNlIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjID0gcmVkdWNlIGFjYyAoZiB4KSBpblxuICAgICAgYXV4IGFjYyBsJ1xuICBpblxuICBhdXggYWNjIGxcblxubGV0IHNjYW5fbGVmdCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsX2FjY1xuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsZXQgYWNjID0gZiBhY2MgeCBpblxuICAgICAgbGV0IGxfYWNjID0gYWNjIDo6IGxfYWNjIGluXG4gICAgICBhdXggZiBhY2MgbF9hY2MgdGFpbFxuICBpblxuICBhdXggZiBhY2MgWyBhY2MgXSBsXG5cbmxldCByZWR1Y2UgZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IHggOjogbCAtPiBTb21lIChmb2xkX2xlZnQgZiB4IGwpXG5cbmxldCByZWR1Y2VfZXhuIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQ0NMaXN0LnJlZHVjZV9leG5cIilcbiAgfCB4IDo6IGwgLT4gZm9sZF9sZWZ0IGYgeCBsXG5cbmxldCBmb2xkX21hcDIgZiBhY2MgbDEgbDIgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBtYXBfYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBpbnZhbGlkX2FyZyBcImZvbGRfbWFwMlwiXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHgxIHgyIGluXG4gICAgICBhdXggZiBhY2MgKHkgOjogbWFwX2FjYykgbDEnIGwyJ1xuICBpblxuICBhdXggZiBhY2MgW10gbDEgbDJcblxubGV0IGZvbGRfZmlsdGVyX21hcCBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIHggaW5cbiAgICAgIGF1eCBmIGFjYyAoY29uc19tYXliZSB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX2ZpbHRlcl9tYXBfaSBmIGFjYyBsID1cbiAgbGV0IHJlYyBhdXggZiBhY2MgaSBtYXBfYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gYWNjLCBMaXN0LnJldiBtYXBfYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjLCB5ID0gZiBhY2MgaSB4IGluXG4gICAgICBhdXggZiBhY2MgKGkgKyAxKSAoY29uc19tYXliZSB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxubGV0IGZvbGRfZmxhdF9tYXAgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIG1hcF9hY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2MsIExpc3QucmV2IG1hcF9hY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MsIHkgPSBmIGFjYyB4IGluXG4gICAgICBhdXggZiBhY2MgKExpc3QucmV2X2FwcGVuZCB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyBbXSBsXG5cbmxldCBmb2xkX2ZsYXRfbWFwX2kgZiBhY2MgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjIGkgbWFwX2FjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjYywgTGlzdC5yZXYgbWFwX2FjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYywgeSA9IGYgYWNjIGkgeCBpblxuICAgICAgYXV4IGYgYWNjIChpICsgMSkgKExpc3QucmV2X2FwcGVuZCB5IG1hcF9hY2MpIGwnXG4gIGluXG4gIGF1eCBmIGFjYyAwIFtdIGxcblxuW0BAQGlmbHQgNC4xNF1cblxuKCoga2VlcCB0aGlzIGJlY2F1c2UgaXQncyB0YWlscmVjIGZvciA8IDUuMSAqKVxubGV0IGluaXQgbGVuIGYgPVxuICBsZXQgcmVjIGluZGlyZWN0XyBpIGFjYyA9XG4gICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICBpbmRpcmVjdF8gKGkgKyAxKSAoeCA6OiBhY2MpXG4gICAgKVxuICBpblxuICBsZXQgcmVjIGRpcmVjdF8gaSA9XG4gICAgaWYgaSA9IGxlbiB0aGVuXG4gICAgICBbXVxuICAgIGVsc2UgaWYgaSA8IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyB0aGVuIChcbiAgICAgIGxldCB4ID0gZiBpIGluXG4gICAgICB4IDo6IGRpcmVjdF8gKGkgKyAxKVxuICAgICkgZWxzZVxuICAgICAgaW5kaXJlY3RfIGkgW11cbiAgaW5cbiAgaWYgbGVuIDwgMCB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJpbml0XCJcbiAgZWxzZSBpZiBsZW4gPSAwIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgZGlyZWN0XyAwXG5cbmxldCByZWMgdW5mb2xkX2tvbnQgZiBzZWVkIGsgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gayBbXVxuICB8IFNvbWUgKHYsIG5leHQpIC0+XG4gICAgbGV0IGsnIHRsID0gayAodiA6OiB0bCkgaW5cbiAgICB1bmZvbGRfa29udCBmIG5leHQgaydcblxubGV0W0BpbmxpbmVdIHVuZm9sZCBmIHNlZWQgPVxuICBsZXQgcmVjIGRpcmVjdCBpIGYgc2VlZCA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgdW5mb2xkX2tvbnQgZiBzZWVkIChmdW4geCAtPiB4KVxuICAgIGVsc2UgKFxuICAgICAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IGRpcmVjdCAoaSAtIDEpIGYgbmV4dFxuICAgIClcbiAgaW5cbiAgZGlyZWN0IDEwMCBmIHNlZWRcblxuW0BAQGVsaWZsdCA1LjFdXG5cbmxldCBpbml0IG4gZiA9XG4gIGxldFtAdGFpbF9tb2RfY29uc10gcmVjIGluaXRfIGkgbiBmID1cbiAgICBpZiBpID0gbiB0aGVuXG4gICAgICBbXVxuICAgIGVsc2UgKFxuICAgICAgbGV0IHggPSBmIGkgaW5cbiAgICAgIHggOjogaW5pdF8gKGkgKyAxKSBuIGZcbiAgICApXG4gIGluXG4gIGluaXRfIDAgbiBmXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHVuZm9sZCBmIHNlZWQgPVxuICBtYXRjaCBmIHNlZWQgd2l0aFxuICB8IE5vbmUgLT4gW11cbiAgfCBTb21lICh2LCBuZXh0KSAtPiB2IDo6IHVuZm9sZCBmIG5leHRcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB1bmZvbGQgZiBzZWVkID1cbiAgbWF0Y2ggZiBzZWVkIHdpdGhcbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSAodiwgbmV4dCkgLT4gdiA6OiB1bmZvbGQgZiBuZXh0XG5cbltAQEBlbmRpZl1cblxubGV0IHJlYyBjb21wYXJlIGYgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgXywgW10gLT4gMVxuICB8IFtdLCBfIC0+IC0xXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICBsZXQgYyA9IGYgeDEgeDIgaW5cbiAgICBpZiBjIDw+IDAgdGhlblxuICAgICAgY1xuICAgIGVsc2VcbiAgICAgIGNvbXBhcmUgZiBsMScgbDInXG5cbmxldCByZWMgZXF1YWwgZiBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIFtdIC0+IHRydWVcbiAgfCBbXSwgXyB8IF8sIFtdIC0+IGZhbHNlXG4gIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT4gZiB4MSB4MiAmJiBlcXVhbCBmIGwxJyBsMidcblxuW0BAQGlmbHQgNS4xXVxuXG5sZXQgcmVjIGZsYXRfbWFwX2tvbnQgZiBsIGtvbnQgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiBrb250IFtdXG4gIHwgWyB4IF0gLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIGtvbnQgeFxuICB8IHggOjogbCcgLT5cbiAgICBsZXQgeCA9IGYgeCBpblxuICAgIGxldCBrb250JyB0YWlsID0ga29udCAoYXBwZW5kIHggdGFpbCkgaW5cbiAgICBmbGF0X21hcF9rb250IGYgbCcga29udCdcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwIGYgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgWyB4IF0gLT4gZiB4XG4gIHwgXyA6OiBfIC0+IGZsYXRfbWFwX2tvbnQgZiBsIEZ1bi5pZFxuXG5bQEBAZWxzZV9dXG5cbmxldCBmbGF0X21hcCA9IGNvbmNhdF9tYXBcblxuW0BAQGVuZGlmXVxuXG5sZXQgZmxhdF9tYXBfaSBmIGwgPVxuICBsZXQgcmVjIGF1eCBmIGkgbCBrb250ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGtvbnQgW11cbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCB5ID0gZiBpIHggaW5cbiAgICAgIGxldCBrb250JyB0YWlsID1cbiAgICAgICAgbWF0Y2ggeSB3aXRoXG4gICAgICAgIHwgW10gLT4ga29udCB0YWlsXG4gICAgICAgIHwgWyB4IF0gLT4ga29udCAoeCA6OiB0YWlsKVxuICAgICAgICB8IFsgeDsgeSBdIC0+IGtvbnQgKHggOjogeSA6OiB0YWlsKVxuICAgICAgICB8IGwgLT4ga29udCAoYXBwZW5kIGwgdGFpbClcbiAgICAgIGluXG4gICAgICBhdXggZiAoaSArIDEpIGwnIGtvbnQnXG4gIGluXG4gIGF1eCBmIDAgbCAoZnVuIGwgLT4gbClcblxubGV0IGZsYXR0ZW4gbCA9IGZvbGRfcmlnaHQgYXBwZW5kIGwgW11cblxubGV0IGNvdW50IGYgbCA9XG4gIGZvbGRfbGVmdFxuICAgIChmdW4gbiB4IC0+XG4gICAgICBpZiBmIHggdGhlblxuICAgICAgICBzdWNjIG5cbiAgICAgIGVsc2VcbiAgICAgICAgbilcbiAgICAwIGxcblxubGV0IGNvdW50X3RydWVfZmFsc2UgcCBsID1cbiAgZm9sZF9sZWZ0XG4gICAgKGZ1biAob2ssIGtvKSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBvayArIDEsIGtvXG4gICAgICBlbHNlXG4gICAgICAgIG9rLCBrbyArIDEpXG4gICAgKDAsIDApIGxcblxubGV0W0BpbmxpbmVdIHByb2R1Y3QgZiBsMSBsMiA9IGZsYXRfbWFwIChmdW4geCAtPiBtYXAgKGZ1biB5IC0+IGYgeCB5KSBsMikgbDFcblxubGV0IGZvbGRfcHJvZHVjdCBmIGFjYyBsMSBsMiA9XG4gIExpc3QuZm9sZF9sZWZ0XG4gICAgKGZ1biBhY2MgeDEgLT4gTGlzdC5mb2xkX2xlZnQgKGZ1biBhY2MgeDIgLT4gZiBhY2MgeDEgeDIpIGFjYyBsMilcbiAgICBhY2MgbDFcblxubGV0IGRpYWdvbmFsIGwgPVxuICBsZXQgcmVjIGdlbiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGxldCBhY2MgPSBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB5IC0+ICh4LCB5KSA6OiBhY2MpIGFjYyBsJyBpblxuICAgICAgZ2VuIGFjYyBsJ1xuICBpblxuICBnZW4gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcF9laXRoZXIgZiBsID1cbiAgbGV0IHJlYyBpdGVyIGYgbDEgbDIgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBsMSwgTGlzdC5yZXYgbDJcbiAgICB8IHggOjogdGwgLT5cbiAgICAgIChtYXRjaCBmIHggd2l0aFxuICAgICAgfCBDQ0VpdGhlci5MZWZ0IHkgLT4gaXRlciBmICh5IDo6IGwxKSBsMiB0bFxuICAgICAgfCBDQ0VpdGhlci5SaWdodCB5IC0+IGl0ZXIgZiBsMSAoeSA6OiBsMikgdGwpXG4gIGluXG4gIGl0ZXIgZiBbXSBbXSBsXG5cbmxldCBwYXJ0aXRpb25fZmlsdGVyX21hcCBmIGwgPVxuICBsZXQgcmVjIGl0ZXIgZiBsMSBsMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGwxLCBMaXN0LnJldiBsMlxuICAgIHwgeCA6OiB0bCAtPlxuICAgICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IGBMZWZ0IHkgLT4gaXRlciBmICh5IDo6IGwxKSBsMiB0bFxuICAgICAgfCBgUmlnaHQgeSAtPiBpdGVyIGYgbDEgKHkgOjogbDIpIHRsXG4gICAgICB8IGBEcm9wIC0+IGl0ZXIgZiBsMSBsMiB0bClcbiAgaW5cbiAgaXRlciBmIFtdIFtdIGxcblxubGV0IHBhcnRpdGlvbl9tYXAgPSBwYXJ0aXRpb25fZmlsdGVyX21hcFxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgY29tYmluZSBsMSBsMiA9XG4gIGxldCByZWMgZGlyZWN0IGkgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyIFtdXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBkaXJlY3QgKGkgLSAxKSBsMScgbDInXG4gICAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuICBhbmQgc2FmZSBsMSBsMiBhY2MgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiBzYWZlIGwxJyBsMicgQEAgKCh4MSwgeDIpIDo6IGFjYylcbiAgICB8IF8sIF8gLT4gaW52YWxpZF9hcmcgXCJDQ0xpc3QuY29tYmluZVwiXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gbDEgbDJcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyBjb21iaW5lIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gW11cbiAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBjb21iaW5lIGwxJyBsMidcbiAgfCBfLCBfIC0+IGludmFsaWRfYXJnIFwiQ0NMaXN0LmNvbWJpbmVcIlxuXG5bQEBAZW5kaWZdXG5cbmxldCBjb21iaW5lX2dlbiBsMSBsMiA9XG4gIGxldCBsMSA9IHJlZiBsMSBpblxuICBsZXQgbDIgPSByZWYgbDIgaW5cbiAgZnVuICgpIC0+XG4gICAgbWF0Y2ggIWwxLCAhbDIgd2l0aFxuICAgIHwgW10sIF8gfCBfLCBbXSAtPiBOb25lXG4gICAgfCB4MSA6OiB0YWlsMSwgeDIgOjogdGFpbDIgLT5cbiAgICAgIGwxIDo9IHRhaWwxO1xuICAgICAgbDIgOj0gdGFpbDI7XG4gICAgICBTb21lICh4MSwgeDIpXG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBjb21iaW5lX3Nob3J0ZXN0IGwxIGwyID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IF8sIFtdIHwgW10sIF8gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIGwxIGwyIFtdXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPiAoeDEsIHgyKSA6OiBkaXJlY3QgKGkgLSAxKSBsMScgbDInXG4gIGFuZCBzYWZlIGwxIGwyIGFjYyA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4MSA6OiBsMScsIHgyIDo6IGwyJyAtPlxuICAgICAgbGV0IGFjYyA9ICh4MSwgeDIpIDo6IGFjYyBpblxuICAgICAgc2FmZSBsMScgbDInIGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIGwxIGwyXG5cbltAQEBlbHNlX11cblxubGV0W0B0YWlsX21vZF9jb25zXSByZWMgY29tYmluZV9zaG9ydGVzdCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgXywgW10gfCBbXSwgXyAtPiBbXVxuICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+ICh4MSwgeDIpIDo6IGNvbWJpbmVfc2hvcnRlc3QgbDEnIGwyJ1xuXG5bQEBAZW5kaWZdXG5cbmxldCBzcGxpdCBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFtdLCBbXVxuICAgIHwgWyAoeDEsIHkxKSBdIC0+IFsgeDEgXSwgWyB5MSBdXG4gICAgfCBbICh4MSwgeTEpOyAoeDIsIHkyKSBdIC0+IFsgeDE7IHgyIF0sIFsgeTE7IHkyIF1cbiAgICB8IFsgKHgxLCB5MSk7ICh4MiwgeTIpOyAoeDMsIHkzKSBdIC0+IFsgeDE7IHgyOyB4MyBdLCBbIHkxOyB5MjsgeTMgXVxuICAgIHwgWyAoeDEsIHkxKTsgKHgyLCB5Mik7ICh4MywgeTMpOyAoeDQsIHk0KSBdIC0+XG4gICAgICBbIHgxOyB4MjsgeDM7IHg0IF0sIFsgeTE7IHkyOyB5MzsgeTQgXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNwbGl0X3Nsb3cgW10gW10gbFxuICAgIHwgKHgxLCB5MSkgOjogKHgyLCB5MikgOjogKHgzLCB5MykgOjogKHg0LCB5NCkgOjogKHg1LCB5NSkgOjogbCcgLT5cbiAgICAgIGxldCByeCwgcnkgPSBkaXJlY3QgKGkgLSAxKSBsJyBpblxuICAgICAgeDEgOjogeDIgOjogeDMgOjogeDQgOjogeDUgOjogcngsIHkxIDo6IHkyIDo6IHkzIDo6IHk0IDo6IHk1IDo6IHJ5XG4gIGFuZCBzcGxpdF9zbG93IGFjYzEgYWNjMiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjYzEsIExpc3QucmV2IGFjYzJcbiAgICB8ICh4MSwgeDIpIDo6IHRhaWwgLT5cbiAgICAgIGxldCBhY2MxID0geDEgOjogYWNjMSBhbmQgYWNjMiA9IHgyIDo6IGFjYzIgaW5cbiAgICAgIHNwbGl0X3Nsb3cgYWNjMSBhY2MyIHRhaWxcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbmxldCByZXR1cm4geCA9IFsgeCBdXG5sZXQgcHVyZSA9IHJldHVyblxubGV0ICggPCo+ICkgZnVucyBsID0gcHJvZHVjdCAoZnVuIGYgeCAtPiBmIHgpIGZ1bnMgbFxuXG5sZXQgY2FydGVzaWFuX3Byb2R1Y3QgbCA9XG4gICgqIFtsZWZ0XTogZWxlbWVudHMgcGlja2VkIHNvIGZhclxuICAgICBbcmlnaHRdOiBzZXRzIHRvIHBpY2sgZWxlbWVudHMgZnJvbVxuICAgICBbYWNjXTogYWNjdW11bGF0b3IgZm9yIHRoZSByZXN1bHQsIHRvIHBhc3MgdG8gY29udGludWF0aW9uXG4gICAgIFtrXTogY29udGludWF0aW9uICopXG4gIGxldCByZWMgcHJvZF9yZWMgbGVmdCByaWdodCBrIGFjYyA9XG4gICAgbWF0Y2ggcmlnaHQgd2l0aFxuICAgIHwgW10gLT4gayBhY2MgKExpc3QucmV2IGxlZnQpXG4gICAgfCBsMSA6OiB0YWlsIC0+XG4gICAgICBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHByb2RfcmVjICh4IDo6IGxlZnQpIHRhaWwgayBhY2MpIGFjYyBsMVxuICBpblxuICBwcm9kX3JlYyBbXSBsIChmdW4gYWNjIGwnIC0+IGwnIDo6IGFjYykgW11cblxuKCogY2FydGVzaWFuIHByb2R1Y3Qgb2YgbGlzdHMgb2YgbGlzdHMgKilcbmxldCBtYXBfcHJvZHVjdF9sIGYgbCA9XG4gIGxldCBsID0gTGlzdC5tYXAgZiBsIGluXG4gIGNhcnRlc2lhbl9wcm9kdWN0IGxcblxubGV0IHJlYyBzb3J0ZWRfbWVtIH5jbXAgeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gZmFsc2VcbiAgfCB5IDo6IHRhaWwgLT5cbiAgICAobWF0Y2ggY21wIHggeSB3aXRoXG4gICAgfCAwIC0+IHRydWVcbiAgICB8IG4gd2hlbiBuIDwgMCAtPiBmYWxzZVxuICAgIHwgXyAtPiAoc29ydGVkX21lbSBbQHRhaWxjYWxsXSkgfmNtcCB4IHRhaWwpXG5cbmxldCBzb3J0ZWRfbWVyZ2UgfmNtcCBsMSBsMiA9XG4gIGxldCByZWMgcmVjdXJzZSBjbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMlxuICAgIHwgXywgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMVxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICBpZiBjIDwgMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MSA6OiBhY2MpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgY21wICh4MiA6OiBhY2MpIGwxIGwyJ1xuICAgICAgZWxzZVxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogeDIgOjogYWNjKSBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgY21wIFtdIGwxIGwyXG5cbmxldCBzb3J0ZWRfZGlmZiB+Y21wIGwxIGwyID1cbiAgbGV0IHJlYyByZWN1cnNlIGNtcCBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxLCBsMiB3aXRoXG4gICAgfCBbXSwgXyAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8sIFtdIC0+IExpc3QucmV2X2FwcGVuZCBhY2MgbDFcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCAoeDEgOjogYWNjKSBsMScgbDJcbiAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICByZWN1cnNlIGNtcCBhY2MgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgY21wIGFjYyBsMScgbDInXG4gIGluXG4gIHJlY3Vyc2UgY21wIFtdIGwxIGwyXG5cbmxldCBzb3J0X3VuaXEgfmNtcCBsID0gTGlzdC5zb3J0X3VuaXEgY21wIGxcblxubGV0IGlzX3NvcnRlZCB+Y21wIGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgPSBmdW5jdGlvblxuICAgIHwgW10gfCBbIF8gXSAtPiB0cnVlXG4gICAgfCB4IDo6ICh5IDo6IF8gYXMgdGFpbCkgLT4gY21wIHggeSA8PSAwICYmIGF1eCBjbXAgdGFpbFxuICBpblxuICBhdXggY21wIGxcblxubGV0IHNvcnRlZF9pbnNlcnQgfmNtcCA/KHVuaXEgPSBmYWxzZSkgeCBsID1cbiAgbGV0IHJlYyBhdXggY21wIHVuaXEgeCBsZWZ0IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGxlZnQgWyB4IF1cbiAgICB8IHkgOjogdGFpbCAtPlxuICAgICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgICAgfCAwIC0+XG4gICAgICAgIGxldCBsJyA9XG4gICAgICAgICAgaWYgdW5pcSB0aGVuXG4gICAgICAgICAgICBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgeCA6OiBsXG4gICAgICAgIGluXG4gICAgICAgIExpc3QucmV2X2FwcGVuZCBsZWZ0IGwnXG4gICAgICB8IG4gd2hlbiBuIDwgMCAtPiBMaXN0LnJldl9hcHBlbmQgbGVmdCAoeCA6OiBsKVxuICAgICAgfCBfIC0+IGF1eCBjbXAgdW5pcSB4ICh5IDo6IGxlZnQpIHRhaWwpXG4gIGluXG4gIGF1eCBjbXAgdW5pcSB4IFtdIGxcblxubGV0IHNvcnRlZF9yZW1vdmUgfmNtcCA/KGFsbCA9IGZhbHNlKSB4IGwgPVxuICBsZXQgcmVjIGF1eCBjbXAgYWxsIHggbGVmdCBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGxlZnRcbiAgICB8IHkgOjogdGFpbCAtPlxuICAgICAgKG1hdGNoIGNtcCB4IHkgd2l0aFxuICAgICAgfCAwIC0+XG4gICAgICAgIGlmIGFsbCB0aGVuXG4gICAgICAgICAgYXV4IGNtcCBhbGwgeCBsZWZ0IHRhaWxcbiAgICAgICAgZWxzZVxuICAgICAgICAgIExpc3QucmV2X2FwcGVuZCBsZWZ0IHRhaWxcbiAgICAgIHwgbiB3aGVuIG4gPCAwIC0+IExpc3QucmV2X2FwcGVuZCBsZWZ0IGxcbiAgICAgIHwgXyAtPiBhdXggY21wIGFsbCB4ICh5IDo6IGxlZnQpIHRhaWwpXG4gIGluXG4gIGF1eCBjbXAgYWxsIHggW10gbFxuXG5sZXQgdW5pcV9zdWNjIH5lcSBsID1cbiAgbGV0IHJlYyBmIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgWyB4IF0gLT4gTGlzdC5yZXYgKHggOjogYWNjKVxuICAgIHwgeCA6OiAoeSA6OiBfIGFzIHRhaWwpIHdoZW4gZXEgeCB5IC0+IGYgYWNjIHRhaWxcbiAgICB8IHggOjogdGFpbCAtPiBmICh4IDo6IGFjYykgdGFpbFxuICBpblxuICBmIFtdIGxcblxubGV0IGdyb3VwX3N1Y2MgfmVxIGwgPVxuICBsZXQgcmVjIGYgfmVxIGFjYyBjdXIgbCA9XG4gICAgbWF0Y2ggY3VyLCBsIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8gOjogXywgW10gLT4gTGlzdC5yZXYgKExpc3QucmV2IGN1ciA6OiBhY2MpXG4gICAgfCBbXSwgeCA6OiB0bCAtPiBmIH5lcSBhY2MgWyB4IF0gdGxcbiAgICB8IHkgOjogXywgeCA6OiB0bCB3aGVuIGVxIHggeSAtPiBmIH5lcSBhY2MgKHggOjogY3VyKSB0bFxuICAgIHwgXywgeCA6OiB0bCAtPiBmIH5lcSAoTGlzdC5yZXYgY3VyIDo6IGFjYykgWyB4IF0gdGxcbiAgaW5cbiAgZiB+ZXEgW10gW10gbFxuXG5sZXQgc29ydGVkX21lcmdlX3VuaXEgfmNtcCBsMSBsMiA9XG4gIGxldCBwdXNoIH5jbXAgYWNjIHggPVxuICAgIG1hdGNoIGFjYyB3aXRoXG4gICAgfCBbXSAtPiBbIHggXVxuICAgIHwgeSA6OiBfIHdoZW4gY21wIHggeSA+IDAgLT4geCA6OiBhY2NcbiAgICB8IF8gLT4gYWNjXG4gICAgKCogZHVwbGljYXRlLCBkbyBub3QgeWllbGQgKilcbiAgaW5cbiAgbGV0IHJlYyByZWN1cnNlIH5jbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwgfCBsLCBbXSAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChwdXNoIH5jbXApIGFjYyBsIGluXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDEpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCAocHVzaCB+Y21wIGFjYyB4MikgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDInXG4gICAgKCogZHJvcCBvbmUgb2YgdGhlIFt4XSAqKVxuICBpblxuICByZWN1cnNlIH5jbXAgW10gbDEgbDJcblxubGV0IHNvcnRlZF9kaWZmX3VuaXEgfmNtcCBsMSBsMiA9XG4gIGxldCBwdXNoIH5jbXAgYWNjIHggPVxuICAgIG1hdGNoIGFjYyB3aXRoXG4gICAgfCBbXSAtPiBbIHggXVxuICAgIHwgeSA6OiBfIHdoZW4gY21wIHggeSA+IDAgLT4geCA6OiBhY2NcbiAgICB8IF8gLT4gYWNjXG4gICAgKCogZHVwbGljYXRlLCBkbyBub3QgeWllbGQgKilcbiAgaW5cbiAgbGV0IHJlYyByZWN1cnNlIH5jbXAgYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCBsLCBbXSAtPlxuICAgICAgbGV0IGFjYyA9IExpc3QuZm9sZF9sZWZ0IChwdXNoIH5jbXApIGFjYyBsIGluXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBsZXQgYyA9IGNtcCB4MSB4MiBpblxuICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICByZWN1cnNlIH5jbXAgKHB1c2ggfmNtcCBhY2MgeDEpIGwxJyBsMlxuICAgICAgZWxzZSBpZiBjID4gMCB0aGVuXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEgbDInXG4gICAgICBlbHNlXG4gICAgICAgIHJlY3Vyc2UgfmNtcCBhY2MgbDEnIGwyJ1xuICBpblxuICByZWN1cnNlIH5jbXAgW10gbDEgbDJcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IHRha2UgbiBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBuIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIG4gW10gbFxuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgaWYgbiA+IDAgdGhlblxuICAgICAgICB4IDo6IGRpcmVjdCAoaSAtIDEpIChuIC0gMSkgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgW11cbiAgYW5kIHNhZmUgbiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IF8gd2hlbiBuID0gMCAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT4gc2FmZSAobiAtIDEpICh4IDo6IGFjYykgbCdcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBuIGxcblxuW0BAQGVsc2VfXVxuXG5sZXRbQHRhaWxfbW9kX2NvbnNdIHJlYyB0YWtlIG4gbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFtdXG4gIHwgeCA6OiBsJyAtPlxuICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgIHggOjogdGFrZSAobiAtIDEpIGwnXG4gICAgZWxzZVxuICAgICAgW11cblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGRyb3AgbiBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCBfIHdoZW4gbiA9IDAgLT4gbFxuICB8IF8gOjogbCcgLT4gZHJvcCAobiAtIDEpIGwnXG5cbmxldCBoZF90bCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFpbHdpdGggXCJoZF90bFwiXG4gIHwgeCA6OiBsIC0+IHgsIGxcblxubGV0IHRha2VfZHJvcCBuIGwgPSB0YWtlIG4gbCwgZHJvcCBuIGxcblxubGV0IHN1Ymxpc3RzX29mX2xlbiA/KGxhc3QgPSBmdW4gXyAtPiBOb25lKSA/b2Zmc2V0IG4gbCA9XG4gIGlmIG4gPCAxIHRoZW4gaW52YWxpZF9hcmcgXCJzdWJsaXN0c19vZl9sZW46IG4gbXVzdCBiZSA+IDBcIjtcbiAgbGV0IG9mZnNldCA9XG4gICAgbWF0Y2ggb2Zmc2V0IHdpdGhcbiAgICB8IE5vbmUgLT4gblxuICAgIHwgU29tZSBvIHdoZW4gbyA8IDEgLT4gaW52YWxpZF9hcmcgXCJzdWJsaXN0c19vZl9sZW46IG9mZnNldCBtdXN0IGJlID4gMFwiXG4gICAgfCBTb21lIG8gLT4gb1xuICBpblxuICAoKiBhZGQgc3ViLWxpc3RzIG9mIFtsXSB0byBbYWNjXSAqKVxuICBsZXQgcmVjIGF1eCBhY2MgbCA9XG4gICAgbGV0IGdyb3VwID0gdGFrZSBuIGwgaW5cbiAgICBpZiBpc19lbXB0eSBncm91cCB0aGVuXG4gICAgICBhY2NcbiAgICAoKiB0aGlzIHdhcyB0aGUgbGFzdCBncm91cCwgd2UgYXJlIGRvbmUgKilcbiAgICBlbHNlIGlmIExpc3QubGVuZ3RoIGdyb3VwIDwgbiAoKiBsYXN0IGdyb3VwLCB3aXRoIG1pc3NpbmcgZWxlbWVudHMgKikgdGhlbiAoXG4gICAgICBtYXRjaCBsYXN0IGdyb3VwIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBhY2NcbiAgICAgIHwgU29tZSBncm91cCcgLT4gZ3JvdXAnIDo6IGFjY1xuICAgICkgZWxzZSAoXG4gICAgICBsZXQgbCcgPSBkcm9wIG9mZnNldCBsIGluXG4gICAgICBhdXggKGdyb3VwIDo6IGFjYykgbCcgKCogY29udGludWUgKilcbiAgICApXG4gIGluXG4gIExpc3QucmV2IChhdXggW10gbClcblxubGV0IGNodW5rcyBuIGwgPSBzdWJsaXN0c19vZl9sZW4gfmxhc3Q6KGZ1biB4IC0+IFNvbWUgeCkgbiBsXG5cbmxldCBpbnRlcnNwZXJzZSB4IGwgPVxuICBsZXQgcmVjIGF1eF9kaXJlY3QgaSB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gW11cbiAgICB8IFsgXyBdIC0+IGxcbiAgICB8IF8gd2hlbiBpID0gMCAtPiBhdXhfdGFpbHJlYyBbXSB4IGxcbiAgICB8IHkgOjogdGFpbCAtPiB5IDo6IHggOjogYXV4X2RpcmVjdCAoaSAtIDEpIHggdGFpbFxuICBhbmQgYXV4X3RhaWxyZWMgYWNjIHggbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFsgeSBdIC0+IExpc3QucmV2ICh5IDo6IGFjYylcbiAgICB8IHkgOjogdGFpbCAtPiBhdXhfdGFpbHJlYyAoeCA6OiB5IDo6IGFjYykgeCB0YWlsXG4gIGluXG4gIGF1eF9kaXJlY3QgMV8wMDAgeCBsXG5cbmxldCBpbnRlcmxlYXZlIGwxIGwyIDogXyBsaXN0ID1cbiAgbGV0IHJlYyBhdXggYWNjIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgW10sIF8gLT4gTGlzdC5yZXYgKExpc3QucmV2X2FwcGVuZCBsMiBhY2MpXG4gICAgfCBfLCBbXSAtPiBMaXN0LnJldiAoTGlzdC5yZXZfYXBwZW5kIGwxIGFjYylcbiAgICB8IHgxIDo6IHRsMSwgeDIgOjogdGwyIC0+IGF1eCAoeDIgOjogeDEgOjogYWNjKSB0bDEgdGwyXG4gIGluXG4gIGF1eCBbXSBsMSBsMlxuXG5bQEBAaWZsdCA0LjE0XVxuXG5sZXQgdGFrZV93aGlsZSBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXVxuICAgIHwgXyB3aGVuIGkgPSAwIC0+IHNhZmUgcCBbXSBsXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICB4IDo6IGRpcmVjdCAoaSAtIDEpIHAgbCdcbiAgICAgIGVsc2VcbiAgICAgICAgW11cbiAgYW5kIHNhZmUgcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGlmIHAgeCB0aGVuXG4gICAgICAgIHNhZmUgcCAoeCA6OiBhY2MpIGwnXG4gICAgICBlbHNlXG4gICAgICAgIExpc3QucmV2IGFjY1xuICBpblxuICBkaXJlY3QgZGlyZWN0X2RlcHRoX2RlZmF1bHRfIHAgbFxuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIHRha2Vfd2hpbGUgcCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgcCB4IHRoZW5cbiAgICAgIHggOjogdGFrZV93aGlsZSBwIGwnXG4gICAgZWxzZVxuICAgICAgW11cblxuW0BAQGVuZGlmXVxuXG5sZXQgcmVjIGRyb3Bfd2hpbGUgcCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gW11cbiAgfCB4IDo6IGwnIC0+XG4gICAgaWYgcCB4IHRoZW5cbiAgICAgIGRyb3Bfd2hpbGUgcCBsJ1xuICAgIGVsc2VcbiAgICAgIGxcblxubGV0IHRha2VfZHJvcF93aGlsZSBwIGwgPVxuICBsZXQgcmVjIGRpcmVjdCBpIHAgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBbXSwgW11cbiAgICB8IF8gd2hlbiBpID0gMCAtPiBzYWZlIHAgW10gbFxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBpZiBwIHggdGhlbiAoXG4gICAgICAgIGxldCBsMSwgbDIgPSBkaXJlY3QgKGkgLSAxKSBwIHRhaWwgaW5cbiAgICAgICAgeCA6OiBsMSwgbDJcbiAgICAgICkgZWxzZVxuICAgICAgICBbXSwgbFxuICBhbmQgc2FmZSBwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjYywgW11cbiAgICB8IHggOjogdGFpbCAtPlxuICAgICAgaWYgcCB4IHRoZW5cbiAgICAgICAgc2FmZSBwICh4IDo6IGFjYykgdGFpbFxuICAgICAgZWxzZVxuICAgICAgICBMaXN0LnJldiBhY2MsIGxcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBwIGxcblxubGV0IGxhc3QgbiBsID1cbiAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgbiB0aGVuXG4gICAgbFxuICBlbHNlXG4gICAgZHJvcCAobGVuIC0gbikgbFxuXG5sZXQgaGVhZF9vcHQgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IF8gLT4gU29tZSB4XG5cbmxldCB0YWlsX29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IF8gOjogdGFpbCAtPiBTb21lIHRhaWxcblxubGV0IHJlYyBsYXN0X29wdCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gTm9uZVxuICB8IFsgeCBdIC0+IFNvbWUgeFxuICB8IF8gOjogdGFpbCAtPiBsYXN0X29wdCB0YWlsXG5cbmxldCBmaW5kX3ByZWQgPSBmaW5kX29wdFxuXG5sZXQgZmluZF9wcmVkX2V4biBwIGwgPVxuICBtYXRjaCBmaW5kX3ByZWQgcCBsIHdpdGhcbiAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IFNvbWUgeCAtPiB4XG5cbmxldCBmaW5kX21hcGkgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IE5vbmVcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIChtYXRjaCBmIGkgeCB3aXRoXG4gICAgICB8IFNvbWUgXyBhcyByZXMgLT4gcmVzXG4gICAgICB8IE5vbmUgLT4gYXV4IGYgKGkgKyAxKSBsJylcbiAgaW5cbiAgYXV4IGYgMCBsXG5cbmxldCBmaW5kX21hcCBmIGwgPSBmaW5kX21hcGkgKGZ1biBfIC0+IGYpIGxcblxubGV0IGZpbmRfaWR4IHAgbCA9XG4gIGZpbmRfbWFwaVxuICAgIChmdW4gaSB4IC0+XG4gICAgICBpZiBwIHggdGhlblxuICAgICAgICBTb21lIChpLCB4KVxuICAgICAgZWxzZVxuICAgICAgICBOb25lKVxuICAgIGxcblxubGV0IHJlbW92ZSB+ZXEgeCBsID1cbiAgbGV0IHJlYyByZW1vdmUnIGVxIHggYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB5IDo6IHRhaWwgd2hlbiBlcSB4IHkgLT4gcmVtb3ZlJyBlcSB4IGFjYyB0YWlsXG4gICAgfCB5IDo6IHRhaWwgLT4gcmVtb3ZlJyBlcSB4ICh5IDo6IGFjYykgdGFpbFxuICBpblxuICByZW1vdmUnIGVxIHggW10gbFxuXG5sZXQgZmlsdGVyX21hcCBmIGwgPVxuICBsZXQgcmVjIHJlY3Vyc2UgYWNjIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXYgYWNjXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsZXQgYWNjJyA9XG4gICAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiBhY2NcbiAgICAgICAgfCBTb21lIHkgLT4geSA6OiBhY2NcbiAgICAgIGluXG4gICAgICByZWN1cnNlIGFjYycgbCdcbiAgaW5cbiAgcmVjdXJzZSBbXSBsXG5cbmxldCBrZWVwX3NvbWUgbCA9IGZpbHRlcl9tYXAgKGZ1biB4IC0+IHgpIGxcblxubGV0IGtlZXBfb2sgbCA9XG4gIGZpbHRlcl9tYXBcbiAgICAoZnVuY3Rpb25cbiAgICAgIHwgT2sgeCAtPiBTb21lIHhcbiAgICAgIHwgRXJyb3IgXyAtPiBOb25lKVxuICAgIGxcblxubGV0IGFsbF9zb21lIGwgPVxuICB0cnlcbiAgICBTb21lXG4gICAgICAobWFwXG4gICAgICAgICAoZnVuY3Rpb25cbiAgICAgICAgICAgfCBTb21lIHggLT4geFxuICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgRXhpdClcbiAgICAgICAgIGwpXG4gIHdpdGggRXhpdCAtPiBOb25lXG5cbmxldCBhbGxfb2sgbCA9XG4gIGxldCBlcnIgPSByZWYgTm9uZSBpblxuICB0cnlcbiAgICBPa1xuICAgICAgKG1hcFxuICAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgIHwgT2sgeCAtPiB4XG4gICAgICAgICAgIHwgRXJyb3IgZSAtPlxuICAgICAgICAgICAgIGVyciA6PSBTb21lIGU7XG4gICAgICAgICAgICAgcmFpc2UgRXhpdClcbiAgICAgICAgIGwpXG4gIHdpdGggRXhpdCAtPlxuICAgIChtYXRjaCAhZXJyIHdpdGhcbiAgICB8IE5vbmUgLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBTb21lIGUgLT4gRXJyb3IgZSlcblxubGV0IGdyb3VwX2J5ICh0eXBlIGspID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgPyhlcSA9IFN0ZGxpYi4oID0gKSkgbCA9XG4gIGxldCBtb2R1bGUgVGJsID0gSGFzaHRibC5NYWtlIChzdHJ1Y3RcbiAgICB0eXBlIHQgPSBrXG5cbiAgICBsZXQgZXF1YWwgPSBlcVxuICAgIGxldCBoYXNoID0gaGFzaFxuICBlbmQpIGluXG4gICgqIGNvbXB1dGUgZ3JvdXAgdGFibGUgKilcbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQgbCA9IHRyeSBUYmwuZmluZCB0YmwgeCB3aXRoIE5vdF9mb3VuZCAtPiBbXSBpblxuICAgICAgVGJsLnJlcGxhY2UgdGJsIHggKHggOjogbCkpXG4gICAgbDtcbiAgVGJsLmZvbGQgKGZ1biBfIHggYWNjIC0+IHggOjogYWNjKSB0YmwgW11cblxubGV0IGpvaW4gfmpvaW5fcm93IHMxIHMyIDogXyB0ID1cbiAgZmxhdF9tYXAgKGZ1biBhIC0+IGZpbHRlcl9tYXAgKGpvaW5fcm93IGEpIHMyKSBzMVxuXG5sZXQgam9pbl9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYxIGYyIH5tZXJnZSBjMVxuICAgIGMyID1cbiAgbGV0IG1vZHVsZSBUYmwgPSBIYXNodGJsLk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGFcblxuICAgIGxldCBlcXVhbCA9IGVxXG4gICAgbGV0IGhhc2ggPSBoYXNoXG4gIGVuZCkgaW5cbiAgbGV0IHRibCA9IFRibC5jcmVhdGUgMzIgaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQga2V5ID0gZjEgeCBpblxuICAgICAgVGJsLmFkZCB0Ymwga2V5IHgpXG4gICAgYzE7XG4gIGxldCByZXMgPSByZWYgW10gaW5cbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICBsZXQga2V5ID0gZjIgeSBpblxuICAgICAgbGV0IHhzID0gVGJsLmZpbmRfYWxsIHRibCBrZXkgaW5cbiAgICAgIExpc3QuaXRlclxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBtZXJnZSBrZXkgeCB5IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgeiAtPiByZXMgOj0geiA6OiAhcmVzKVxuICAgICAgICB4cylcbiAgICBjMjtcbiAgIXJlc1xuXG50eXBlICgnYSwgJ2IpIGpvaW5fYWxsX2NlbGwgPSB7XG4gIG11dGFibGUgamFfbGVmdDogJ2EgbGlzdDtcbiAgbXV0YWJsZSBqYV9yaWdodDogJ2IgbGlzdDtcbn1cblxubGV0IGpvaW5fYWxsX2J5ICh0eXBlIGEpID8oZXEgPSBTdGRsaWIuKCA9ICkpID8oaGFzaCA9IEhhc2h0YmwuaGFzaCkgZjEgZjJcbiAgICB+bWVyZ2UgYzEgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICAoKiBidWlsZCB0aGUgbWFwIFtrZXkgLT4gY2VsbF0gKilcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB4IC0+XG4gICAgICBsZXQga2V5ID0gZjEgeCBpblxuICAgICAgdHJ5XG4gICAgICAgIGxldCBjID0gVGJsLmZpbmQgdGJsIGtleSBpblxuICAgICAgICBjLmphX2xlZnQgPC0geCA6OiBjLmphX2xlZnRcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+IFRibC5hZGQgdGJsIGtleSB7IGphX2xlZnQgPSBbIHggXTsgamFfcmlnaHQgPSBbXSB9KVxuICAgIGMxO1xuICBMaXN0Lml0ZXJcbiAgICAoZnVuIHkgLT5cbiAgICAgIGxldCBrZXkgPSBmMiB5IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGMgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIGMuamFfcmlnaHQgPC0geSA6OiBjLmphX3JpZ2h0XG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBUYmwuYWRkIHRibCBrZXkgeyBqYV9sZWZ0ID0gW107IGphX3JpZ2h0ID0gWyB5IF0gfSlcbiAgICBjMjtcbiAgVGJsLmZvbGRcbiAgICAoZnVuIGtleSBjZWxsIHJlcyAtPlxuICAgICAgbWF0Y2ggbWVyZ2Uga2V5IGNlbGwuamFfbGVmdCBjZWxsLmphX3JpZ2h0IHdpdGhcbiAgICAgIHwgTm9uZSAtPiByZXNcbiAgICAgIHwgU29tZSB6IC0+IHogOjogcmVzKVxuICAgIHRibCBbXVxuXG5sZXQgZ3JvdXBfam9pbl9ieSAodHlwZSBhKSA/KGVxID0gU3RkbGliLiggPSApKSA/KGhhc2ggPSBIYXNodGJsLmhhc2gpIGYgYzEgYzIgPVxuICBsZXQgbW9kdWxlIFRibCA9IEhhc2h0YmwuTWFrZSAoc3RydWN0XG4gICAgdHlwZSB0ID0gYVxuXG4gICAgbGV0IGVxdWFsID0gZXFcbiAgICBsZXQgaGFzaCA9IGhhc2hcbiAgZW5kKSBpblxuICBsZXQgdGJsID0gVGJsLmNyZWF0ZSAzMiBpblxuICBMaXN0Lml0ZXIgKGZ1biB4IC0+IFRibC5yZXBsYWNlIHRibCB4IFtdKSBjMTtcbiAgTGlzdC5pdGVyXG4gICAgKGZ1biB5IC0+XG4gICAgICAoKiBwcm9qZWN0IFt5XSBpbnRvIHNvbWUgZWxlbWVudCBvZiBbYzFdICopXG4gICAgICBsZXQga2V5ID0gZiB5IGluXG4gICAgICB0cnlcbiAgICAgICAgbGV0IGwgPSBUYmwuZmluZCB0Ymwga2V5IGluXG4gICAgICAgIFRibC5yZXBsYWNlIHRibCBrZXkgKHkgOjogbClcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpKVxuICAgIGMyO1xuICBUYmwuZm9sZCAoZnVuIGsgdiBsIC0+IChrLCB2KSA6OiBsKSB0YmwgW11cblxubGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSB4IGwgPVxuICBsZXQgcmVjIHNlYXJjaCBlcSB4IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gZmFsc2VcbiAgICB8IHkgOjogbCcgLT4gZXEgeCB5IHx8IHNlYXJjaCBlcSB4IGwnXG4gIGluXG4gIHNlYXJjaCBlcSB4IGxcblxubGV0IGFkZF9ub2R1cCB+ZXEgeCBsID1cbiAgaWYgbWVtIH5lcSB4IGwgdGhlblxuICAgIGxcbiAgZWxzZVxuICAgIHggOjogbFxuXG5sZXQgcmVtb3ZlX29uZSB+ZXEgeCBsID1cbiAgbGV0IHJlYyByZW1vdmVfb25lIH5lcSB4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFzc2VydCBmYWxzZVxuICAgIHwgeSA6OiB0bCB3aGVuIGVxIHggeSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIHRsXG4gICAgfCB5IDo6IHRsIC0+IHJlbW92ZV9vbmUgfmVxIHggKHkgOjogYWNjKSB0bFxuICBpblxuICBpZiBtZW0gfmVxIHggbCB0aGVuXG4gICAgcmVtb3ZlX29uZSB+ZXEgeCBbXSBsXG4gIGVsc2VcbiAgICBsXG5cbmxldCBzdWJzZXQgfmVxIGwxIGwyID0gTGlzdC5mb3JfYWxsIChmdW4gdCAtPiBtZW0gfmVxIHQgbDIpIGwxXG5cbmxldCB1bmlxIH5lcSBsID1cbiAgbGV0IHJlYyB1bmlxIGVxIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiB4cyB3aGVuIExpc3QuZXhpc3RzIChlcSB4KSB4cyAtPiB1bmlxIGVxIGFjYyB4c1xuICAgIHwgeCA6OiB4cyAtPiB1bmlxIGVxICh4IDo6IGFjYykgeHNcbiAgaW5cbiAgdW5pcSBlcSBbXSBsXG5cbmxldCB1bmlvbiB+ZXEgbDEgbDIgPVxuICBsZXQgcmVjIHVuaW9uIGVxIGFjYyBsMSBsMiA9XG4gICAgbWF0Y2ggbDEgd2l0aFxuICAgIHwgW10gLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsMlxuICAgIHwgeCA6OiB4cyB3aGVuIG1lbSB+ZXEgeCBsMiAtPiB1bmlvbiBlcSBhY2MgeHMgbDJcbiAgICB8IHggOjogeHMgLT4gdW5pb24gZXEgKHggOjogYWNjKSB4cyBsMlxuICBpblxuICB1bmlvbiBlcSBbXSBsMSBsMlxuXG5sZXQgaW50ZXIgfmVxIGwxIGwyID1cbiAgbGV0IHJlYyBpbnRlciBlcSBhY2MgbDEgbDIgPVxuICAgIG1hdGNoIGwxIHdpdGhcbiAgICB8IFtdIC0+IExpc3QucmV2IGFjY1xuICAgIHwgeCA6OiB4cyB3aGVuIG1lbSB+ZXEgeCBsMiAtPiBpbnRlciBlcSAoeCA6OiBhY2MpIHhzIGwyXG4gICAgfCBfIDo6IHhzIC0+IGludGVyIGVxIGFjYyB4cyBsMlxuICBpblxuICBpbnRlciBlcSBbXSBsMSBsMlxuXG5sZXQgbWFwaSBmIGwgPVxuICBsZXQgciA9IHJlZiAwIGluXG4gIG1hcFxuICAgIChmdW4geCAtPlxuICAgICAgbGV0IHkgPSBmICFyIHggaW5cbiAgICAgIGluY3IgcjtcbiAgICAgIHkpXG4gICAgbFxuXG5sZXQgaXRlcmkgZiBsID1cbiAgbGV0IHJlYyBhdXggZiBpIGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gKClcbiAgICB8IHggOjogbCcgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgYXV4IGYgKGkgKyAxKSBsJ1xuICBpblxuICBhdXggZiAwIGxcblxubGV0IGl0ZXJpMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBhdXggZiBpIGwxIGwyID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIFtdIC0+ICgpXG4gICAgfCBbXSwgXyB8IF8sIFtdIC0+IGludmFsaWRfYXJnIFwiaXRlcmkyXCJcbiAgICB8IHgxIDo6IGwxJywgeDIgOjogbDInIC0+XG4gICAgICBmIGkgeDEgeDI7XG4gICAgICBhdXggZiAoaSArIDEpIGwxJyBsMidcbiAgaW5cbiAgYXV4IGYgMCBsMSBsMlxuXG5sZXQgZm9sZGkgZiBhY2MgbCA9XG4gIGxldCByZWMgZm9sZGkgZiBhY2MgaSBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgeCA6OiBsJyAtPlxuICAgICAgbGV0IGFjYyA9IGYgYWNjIGkgeCBpblxuICAgICAgZm9sZGkgZiBhY2MgKGkgKyAxKSBsJ1xuICBpblxuICBmb2xkaSBmIGFjYyAwIGxcblxubGV0IGZvbGRpMiBmIGFjYyBsMSBsMiA9XG4gIGxldCByZWMgZm9sZGkgZiBhY2MgaSBsMSBsMiA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBbXSAtPiBhY2NcbiAgICB8IFtdLCBfIHwgXywgW10gLT4gaW52YWxpZF9hcmcgXCJmb2xkaTJcIlxuICAgIHwgeDEgOjogbDEnLCB4MiA6OiBsMicgLT5cbiAgICAgIGxldCBhY2MgPSBmIGFjYyBpIHgxIHgyIGluXG4gICAgICBmb2xkaSBmIGFjYyAoaSArIDEpIGwxJyBsMidcbiAgaW5cbiAgZm9sZGkgZiBhY2MgMCBsMSBsMlxuXG5sZXQgcmVjIGdldF9hdF9pZHhfcmVjIGkgbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogXyB3aGVuIGkgPSAwIC0+IHhcbiAgfCBfIDo6IGwnIC0+IGdldF9hdF9pZHhfcmVjIChpIC0gMSkgbCdcblxubGV0IGdldF9hdF9pZHhfZXhuIGkgbCA9XG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbCArIGlcbiAgICBlbHNlXG4gICAgICBpXG4gIGluXG4gIGdldF9hdF9pZHhfcmVjIGkgbFxuXG5sZXQgZ2V0X2F0X2lkeCBpIGwgPSB0cnkgU29tZSAoZ2V0X2F0X2lkeF9leG4gaSBsKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5cbmxldCBzZXRfYXRfaWR4IGkgeCBsMCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gbDBcbiAgICB8IF8gOjogbCcgd2hlbiBpID0gMCAtPiBMaXN0LnJldl9hcHBlbmQgYWNjICh4IDo6IGwnKVxuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbDAgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbDAgW10gaVxuXG5sZXQgaW5zZXJ0X2F0X2lkeCBpIHggbCA9XG4gIGxldCByZWMgYXV4IGwgYWNjIGkgeCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBMaXN0LnJldl9hcHBlbmQgYWNjIFsgeCBdXG4gICAgfCB5IDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyAoeCA6OiB5IDo6IGwnKVxuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpIHhcbiAgaW5cbiAgbGV0IGkgPVxuICAgIGlmIGkgPCAwIHRoZW5cbiAgICAgIGxlbmd0aCBsICsgaVxuICAgIGVsc2VcbiAgICAgIGlcbiAgaW5cbiAgYXV4IGwgW10gaSB4XG5cbmxldCByZW1vdmVfYXRfaWR4IGkgbDAgPVxuICBsZXQgcmVjIGF1eCBsIGFjYyBpID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGwwXG4gICAgfCBfIDo6IGwnIHdoZW4gaSA9IDAgLT4gTGlzdC5yZXZfYXBwZW5kIGFjYyBsJ1xuICAgIHwgeSA6OiBsJyAtPiBhdXggbCcgKHkgOjogYWNjKSAoaSAtIDEpXG4gIGluXG4gIGxldCBpID1cbiAgICBpZiBpIDwgMCB0aGVuXG4gICAgICBsZW5ndGggbDAgKyBpXG4gICAgZWxzZVxuICAgICAgaVxuICBpblxuICBhdXggbDAgW10gaVxuXG5sZXQgcmFuZ2VfYnkgfnN0ZXAgaSBqID1cbiAgbGV0IHJlYyByYW5nZSBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIHJhbmdlIGkgKGogLSBzdGVwKSAoaiA6OiBhY2MpXG4gIGluXG4gIGlmIHN0ZXAgPSAwIHRoZW5cbiAgICByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIkNDTGlzdC5yYW5nZV9ieVwiKVxuICBlbHNlIGlmXG4gICAgaWYgc3RlcCA+IDAgdGhlblxuICAgICAgaSA+IGpcbiAgICBlbHNlXG4gICAgICBpIDwgalxuICB0aGVuXG4gICAgW11cbiAgZWxzZVxuICAgIHJhbmdlIGkgKCgoaiAtIGkpIC8gc3RlcCAqIHN0ZXApICsgaSkgW11cblxubGV0IHJhbmdlIGkgaiA9XG4gIGxldCByZWMgdXAgaSBqIGFjYyA9XG4gICAgaWYgaSA9IGogdGhlblxuICAgICAgaSA6OiBhY2NcbiAgICBlbHNlXG4gICAgICB1cCBpIChqIC0gMSkgKGogOjogYWNjKVxuICBhbmQgZG93biBpIGogYWNjID1cbiAgICBpZiBpID0gaiB0aGVuXG4gICAgICBpIDo6IGFjY1xuICAgIGVsc2VcbiAgICAgIGRvd24gaSAoaiArIDEpIChqIDo6IGFjYylcbiAgaW5cbiAgaWYgaSA8PSBqIHRoZW5cbiAgICB1cCBpIGogW11cbiAgZWxzZVxuICAgIGRvd24gaSBqIFtdXG5cbmxldCByYW5nZScgaSBqID1cbiAgaWYgaSA8IGogdGhlblxuICAgIHJhbmdlIGkgKGogLSAxKVxuICBlbHNlIGlmIGkgPSBqIHRoZW5cbiAgICBbXVxuICBlbHNlXG4gICAgcmFuZ2UgaSAoaiArIDEpXG5cbmxldCAoIC0tICkgPSByYW5nZVxubGV0ICggLS1eICkgPSByYW5nZSdcblxubGV0IHJlcGxpY2F0ZSBpIHggPVxuICBsZXQgcmVjIGF1eCBhY2MgaSA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4ICh4IDo6IGFjYykgKGkgLSAxKVxuICBpblxuICBhdXggW10gaVxuXG5sZXQgcmVwZWF0IGkgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBpID1cbiAgICBpZiBpID0gMCB0aGVuXG4gICAgICBMaXN0LnJldiBhY2NcbiAgICBlbHNlXG4gICAgICBhdXggKExpc3QucmV2X2FwcGVuZCBsIGFjYykgKGkgLSAxKVxuICBpblxuICBhdXggW10gaVxuXG5tb2R1bGUgQXNzb2MgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2EsICdiKSB0ID0gKCdhICogJ2IpIGxpc3RcblxuICBsZXQgcmVjIHNlYXJjaF9leG4gZXEgbCB4ID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgKHksIHopIDo6IGwnIC0+XG4gICAgICBpZiBlcSB4IHkgdGhlblxuICAgICAgICB6XG4gICAgICBlbHNlXG4gICAgICAgIHNlYXJjaF9leG4gZXEgbCcgeFxuXG4gIGxldCBnZXRfZXhuIH5lcSB4IGwgPSBzZWFyY2hfZXhuIGVxIGwgeFxuICBsZXQgZ2V0IH5lcSB4IGwgPSB0cnkgU29tZSAoc2VhcmNoX2V4biBlcSBsIHgpIHdpdGggTm90X2ZvdW5kIC0+IE5vbmVcblxuICAoKiBzZWFyY2ggZm9yIGEgYmluZGluZyBmb3IgW3hdIGluIFtsXSwgYW5kIGNhbGxzIFtmIHggKFNvbWUgdikgcmVzdF1cbiAgICAgb3IgW2YgeCBOb25lIHJlc3RdIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGZpbmRzIHRoZSBiaW5kaW5nLlxuICAgICBbcmVzdF0gaXMgdGhlIGxpc3Qgb2YgdGhlIG90aGVyIGJpbmRpbmdzICopXG4gIGxldCByZWMgc2VhcmNoX3NldCBlcSBhY2MgbCB4IH5mID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IGYgeCBOb25lIGFjY1xuICAgIHwgKHgnLCB5JykgOjogbCcgLT5cbiAgICAgIGlmIGVxIHggeCcgdGhlblxuICAgICAgICBmIHggKFNvbWUgeScpIChMaXN0LnJldl9hcHBlbmQgYWNjIGwnKVxuICAgICAgZWxzZVxuICAgICAgICBzZWFyY2hfc2V0IGVxICgoeCcsIHknKSA6OiBhY2MpIGwnIHggfmZcblxuICBsZXQgc2V0IH5lcSB4IHkgbCA9IHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4geCBfIGwgLT4gKHgsIHkpIDo6IGwpXG5cbiAgbGV0IG1lbSA/KGVxID0gU3RkbGliLiggPSApKSB4IGwgPVxuICAgIHRyeVxuICAgICAgaWdub3JlIChzZWFyY2hfZXhuIGVxIGwgeCk7XG4gICAgICB0cnVlXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuICBsZXQgdXBkYXRlIH5lcSBmIHggbCA9XG4gICAgc2VhcmNoX3NldCBlcSBbXSBsIHggfmY6KGZ1biB4IG9wdF95IHJlc3QgLT5cbiAgICAgICAgbWF0Y2ggZiBvcHRfeSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByZXN0ICgqIGRyb3AgKilcbiAgICAgICAgfCBTb21lIHknIC0+ICh4LCB5JykgOjogcmVzdClcblxuICBsZXQgcmVtb3ZlIH5lcSB4IGwgPVxuICAgIHNlYXJjaF9zZXQgZXEgW10gbCB4IH5mOihmdW4gXyBvcHRfeSByZXN0IC0+XG4gICAgICAgIG1hdGNoIG9wdF95IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGwgKCoga2VlcCBhcyBpcyAqKVxuICAgICAgICB8IFNvbWUgXyAtPiByZXN0KVxuXG4gIGxldCBrZXlzIGwgPSBtYXAgKGZ1biAoaywgXykgLT4gaykgbFxuICBsZXQgdmFsdWVzIGwgPSBtYXAgKGZ1biAoXywgdikgLT4gdikgbFxuICBsZXQgbWFwX3ZhbHVlcyBmIGwgPSBtYXAgKGZ1biAoaywgdikgLT4gaywgZiB2KSBsXG5lbmRcblxubGV0IGFzc29jID0gQXNzb2MuZ2V0X2V4blxubGV0IGFzc29jX29wdCA9IEFzc29jLmdldFxubGV0IG1lbV9hc3NvYyA9IEFzc29jLm1lbVxubGV0IHJlbW92ZV9hc3NvYyA9IEFzc29jLnJlbW92ZVxuXG4oKiogezIgUmVmZXJlbmNlcyBvbiBMaXN0c30gKilcblxubW9kdWxlIFJlZiA9IHN0cnVjdFxuICB0eXBlICdhIHQgPSAnYSBsaXN0IHJlZlxuXG4gIGxldCBwdXNoIGwgeCA9IGwgOj0geCA6OiAhbFxuXG4gIGxldCBwb3AgbCA9XG4gICAgbWF0Y2ggIWwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgeCA6OiB0YWlsIC0+XG4gICAgICBsIDo9IHRhaWw7XG4gICAgICBTb21lIHhcblxuICBsZXQgcG9wX2V4biBsID1cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIkNDTGlzdC5SZWYucG9wX2V4blwiXG4gICAgfCB4IDo6IHRhaWwgLT5cbiAgICAgIGwgOj0gdGFpbDtcbiAgICAgIHhcblxuICBsZXQgY3JlYXRlICgpID0gcmVmIFtdXG4gIGxldCBjbGVhciBsID0gbCA6PSBbXVxuICBsZXQgbGlmdCBmIGwgPSBmICFsXG4gIGxldCBwdXNoX2xpc3QgciBsID0gciA6PSBMaXN0LnJldl9hcHBlbmQgbCAhclxuZW5kXG5cbigqKiB7MiBNb25hZGljIE9wZXJhdGlvbnN9ICopXG5tb2R1bGUgdHlwZSBNT05BRCA9IHNpZ1xuICB0eXBlICdhIHRcblxuICB2YWwgcmV0dXJuIDogJ2EgLT4gJ2EgdFxuICB2YWwgKCA+Pj0gKSA6ICdhIHQgLT4gKCdhIC0+ICdiIHQpIC0+ICdiIHRcbmVuZFxuXG5tb2R1bGUgVHJhdmVyc2UgKE0gOiBNT05BRCkgPSBzdHJ1Y3RcbiAgb3BlbiBNXG5cbiAgbGV0IG1hcF9tIGYgbCA9XG4gICAgbGV0IHJlYyBhdXggZiBhY2MgbCA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gcmV0dXJuIChMaXN0LnJldiBhY2MpXG4gICAgICB8IHggOjogdGFpbCAtPiBmIHggPj49IGZ1biB4JyAtPiBhdXggZiAoeCcgOjogYWNjKSB0YWlsXG4gICAgaW5cbiAgICBhdXggZiBbXSBsXG5cbiAgbGV0IHJlYyBtYXBfbV9wYXIgZiBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE0ucmV0dXJuIFtdXG4gICAgfCB4IDo6IHRsIC0+XG4gICAgICBsZXQgeCcgPSBmIHggaW5cbiAgICAgIGxldCB0bCcgPSBtYXBfbV9wYXIgZiB0bCBpblxuICAgICAgeCcgPj49IGZ1biB4JyAtPlxuICAgICAgdGwnID4+PSBmdW4gdGwnIC0+IE0ucmV0dXJuICh4JyA6OiB0bCcpXG5cbiAgbGV0IHNlcXVlbmNlX20gbCA9IG1hcF9tIChmdW4geCAtPiB4KSBsXG5cbiAgbGV0IHJlYyBmb2xkX20gZiBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiByZXR1cm4gYWNjXG4gICAgfCB4IDo6IGwnIC0+IGYgYWNjIHggPj49IGZ1biBhY2MnIC0+IGZvbGRfbSBmIGFjYycgbCdcbmVuZFxuXG4oKiogezIgQ29udmVyc2lvbnN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9IFJhbmRvbS5TdGF0ZS50IC0+ICdhXG5cbmxldCByYW5kb21fbGVuIGxlbiBnIHN0ID0gaW5pdCBsZW4gKGZ1biBfIC0+IGcgc3QpXG5cbmxldCByYW5kb20gZyBzdCA9XG4gIGxldCBsZW4gPSBSYW5kb20uU3RhdGUuaW50IHN0IDFfMDAwIGluXG4gIHJhbmRvbV9sZW4gbGVuIGcgc3RcblxubGV0IHJhbmRvbV9ub25fZW1wdHkgZyBzdCA9XG4gIGxldCBsZW4gPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAxXzAwMCBpblxuICByYW5kb21fbGVuIGxlbiBnIHN0XG5cbmxldCByYW5kb21fY2hvb3NlIGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBfIDo6IF8gLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGZ1biBzdCAtPlxuICAgICAgbGV0IGkgPSBSYW5kb20uU3RhdGUuaW50IHN0IGxlbiBpblxuICAgICAgTGlzdC5udGggbCBpXG5cbmxldCByYW5kb21fc2VxdWVuY2UgbCBzdCA9IG1hcCAoZnVuIGcgLT4gZyBzdCkgbFxuXG5sZXQgdG9fc3RyaW5nID8oc3RhcnQgPSBcIlwiKSA/KHN0b3AgPSBcIlwiKSA/KHNlcCA9IFwiLCBcIikgaXRlbV90b19zdHJpbmcgbCA9XG4gIGxldCBsID0gTGlzdC5tYXAgaXRlbV90b19zdHJpbmcgbCBpblxuICBzdGFydCBeIFN0cmluZy5jb25jYXQgc2VwIGwgXiBzdG9wXG5cbmxldCB0b19pdGVyIGwgayA9IExpc3QuaXRlciBrIGxcblxubGV0IHJlYyB0b19zZXEgbCAoKSA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFNlcS5OaWxcbiAgfCB4IDo6IHRsIC0+IFNlcS5Db25zICh4LCB0b19zZXEgdGwpXG5cbmxldCBvZl9pdGVyIGkgPVxuICBsZXQgbCA9IHJlZiBbXSBpblxuICBpIChmdW4geCAtPiBsIDo9IHggOjogIWwpO1xuICBMaXN0LnJldiAhbFxuXG5sZXQgb2Zfc2VxX3JldiBsID1cbiAgbGV0IHJlYyBsb29wIGFjYyBzID1cbiAgICBtYXRjaCBzICgpIHdpdGhcbiAgICB8IFNlcS5OaWwgLT4gYWNjXG4gICAgfCBTZXEuQ29ucyAoeCwgdGwpIC0+IGxvb3AgKHggOjogYWNjKSB0bFxuICBpblxuICBsb29wIFtdIGxcblxuW0BAQGlmbHQgNC4xNF1cblxubGV0IG9mX3NlcSBsID1cbiAgbGV0IHJlYyBkaXJlY3QgaSBzZXEgPVxuICAgIGlmIGkgPD0gMCB0aGVuXG4gICAgICBMaXN0LnJldiAob2Zfc2VxX3JldiBzZXEpXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBzZXEgKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCB0bCkgLT4geCA6OiBkaXJlY3QgKGkgLSAxKSB0bFxuICAgIClcbiAgaW5cbiAgZGlyZWN0IGRpcmVjdF9kZXB0aF9kZWZhdWx0XyBsXG5cbltAQEBlbmRpZl1cblxubGV0IHRvX2dlbiBsID1cbiAgbGV0IGwgPSByZWYgbCBpblxuICBmdW4gKCkgLT5cbiAgICBtYXRjaCAhbCB3aXRoXG4gICAgfCBbXSAtPiBOb25lXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICBsIDo9IGwnO1xuICAgICAgU29tZSB4XG5cbltAQEBpZmx0IDQuMTRdXG5cbmxldCBvZl9nZW4gZyA9XG4gIGxldCByZWMgZGlyZWN0IGkgZyA9XG4gICAgaWYgaSA9IDAgdGhlblxuICAgICAgc2FmZSBbXSBnXG4gICAgZWxzZSAoXG4gICAgICBtYXRjaCBnICgpIHdpdGhcbiAgICAgIHwgTm9uZSAtPiBbXVxuICAgICAgfCBTb21lIHggLT4geCA6OiBkaXJlY3QgKGkgLSAxKSBnXG4gICAgKVxuICBhbmQgc2FmZSBhY2MgZyA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IExpc3QucmV2IGFjY1xuICAgIHwgU29tZSB4IC0+IHNhZmUgKHggOjogYWNjKSBnXG4gIGluXG4gIGRpcmVjdCBkaXJlY3RfZGVwdGhfZGVmYXVsdF8gZ1xuXG5bQEBAZWxzZV9dXG5cbmxldFtAdGFpbF9tb2RfY29uc10gcmVjIG9mX2dlbiBnID1cbiAgbWF0Y2ggZyAoKSB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiB4IDo6IG9mX2dlbiBnXG5cbltAQEBlbmRpZl1cblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldFtAaW5saW5lXSAoID58PSApIGwgZiA9IG1hcCBmIGxcbiAgbGV0W0BpbmxpbmVdICggPj49ICkgbCBmID0gZmxhdF9tYXAgZiBsXG4gIGxldCAoIEAgKSA9ICggQCApXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCA8JD4gKSA9IG1hcFxuICBsZXQgKCAtLSApID0gKCAtLSApXG4gIGxldCAoIC0tXiApID0gKCAtLV4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcbiAgbGV0W0BpbmxpbmVdICggYW5kKyApIGwxIGwyID0gcHJvZHVjdCAoZnVuIHggeSAtPiB4LCB5KSBsMSBsMlxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuICBsZXQgKCBhbmQmICkgPSBjb21iaW5lX3Nob3J0ZXN0XG5lbmRcblxuaW5jbHVkZSBJbmZpeFxuXG4oKiogezIgSU99ICopXG5cbmxldCBwcCA/KHBwX3N0YXJ0ID0gZnVuIF8gKCkgLT4gKCkpID8ocHBfc3RvcCA9IGZ1biBfICgpIC0+ICgpKVxuICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIikgcHBfaXRlbSBmbXQgbCA9XG4gIGxldCByZWMgcHJpbnQgZm10IGwgPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgeCA6OiAoXyA6OiBfIGFzIGwpIC0+XG4gICAgICBwcF9pdGVtIGZtdCB4O1xuICAgICAgcHBfc2VwIGZtdCAoKTtcbiAgICAgIHByaW50IGZtdCBsXG4gICAgfCBbIHggXSAtPiBwcF9pdGVtIGZtdCB4XG4gICAgfCBbXSAtPiAoKVxuICBpblxuICBwcF9zdGFydCBmbXQgKCk7XG4gIHByaW50IGZtdCBsO1xuICBwcF9zdG9wIGZtdCAoKVxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIE9wdGlvbnN9ICopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvblxuXG5sZXRbQGlubGluZV0gbWFwIGYgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCAtPiBTb21lIChmIHgpXG5cbmxldCBtYXBfb3IgfmRlZmF1bHQgZiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB4IC0+IGYgeFxuXG5sZXQgbWFwX2xhenkgZGVmYXVsdF9mbiBmID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGRlZmF1bHRfZm4gKClcbiAgfCBTb21lIHggLT4gZiB4XG5cbmxldCBpc19zb21lID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IGZhbHNlXG4gIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGlzX25vbmUgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBOb25lIC0+IDBcbiAgfCBTb21lIF8sIE5vbmUgLT4gMVxuICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IGYgeCB5XG5cbmxldCBlcXVhbCBmIG8xIG8yID1cbiAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgfCBOb25lLCBOb25lIC0+IHRydWVcbiAgfCBTb21lIF8sIE5vbmUgfCBOb25lLCBTb21lIF8gLT4gZmFsc2VcbiAgfCBTb21lIHgsIFNvbWUgeSAtPiBmIHggeVxuXG5sZXQgcmV0dXJuIHggPSBTb21lIHhcbmxldCBzb21lID0gcmV0dXJuXG5sZXQgbm9uZSA9IE5vbmVcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwIGYgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0W0BpbmxpbmVdIGZsYXRfbWFwX2wgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0W0BpbmxpbmVdIGJpbmQgbyBmID0gZmxhdF9tYXAgZiBvXG5sZXQgKCA+Pj0gKSA9IGJpbmRcbmxldCBwdXJlIHggPSBTb21lIHhcblxubGV0ICggPCo+ICkgZiB4ID1cbiAgbWF0Y2ggZiwgeCB3aXRoXG4gIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgZiwgU29tZSB4IC0+IFNvbWUgKGYgeClcblxubGV0IG9yXyB+ZWxzZV8gYSA9XG4gIG1hdGNoIGEgd2l0aFxuICB8IE5vbmUgLT4gZWxzZV9cbiAgfCBTb21lIF8gLT4gYVxuXG5sZXQgb3JfbGF6eSB+ZWxzZV8gYSA9XG4gIG1hdGNoIGEgd2l0aFxuICB8IE5vbmUgLT4gZWxzZV8gKClcbiAgfCBTb21lIF8gLT4gYVxuXG5sZXQgKCA8Kz4gKSBhIGIgPSBvcl8gfmVsc2VfOmIgYVxubGV0IGNob2ljZSBsID0gTGlzdC5mb2xkX2xlZnQgKCA8Kz4gKSBOb25lIGxcblxubGV0IG1hcDIgZiBvMSBvMiA9XG4gIG1hdGNoIG8xLCBvMiB3aXRoXG4gIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgeCwgU29tZSB5IC0+IFNvbWUgKGYgeCB5KVxuXG5sZXQgZmlsdGVyIHAgPSBmdW5jdGlvblxuICB8IFNvbWUgeCBhcyBvIHdoZW4gcCB4IC0+IG9cbiAgfCBfIC0+IE5vbmVcblxubGV0IGlmXyBwIHggPVxuICBpZiBwIHggdGhlblxuICAgIFNvbWUgeFxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgZXhpc3RzIHAgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gZmFsc2VcbiAgfCBTb21lIHggLT4gcCB4XG5cbmxldCBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gdHJ1ZVxuICB8IFNvbWUgeCAtPiBwIHhcblxubGV0IGl0ZXIgZiBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBmIHhcblxubGV0IGZvbGQgZiBhY2MgbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gYWNjXG4gIHwgU29tZSB4IC0+IGYgYWNjIHhcblxubGV0IGdldF9vciB+ZGVmYXVsdCB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0XG4gIHwgU29tZSB5IC0+IHlcblxubGV0IHZhbHVlIHggfmRlZmF1bHQgPVxuICBtYXRjaCB4IHdpdGhcbiAgfCBOb25lIC0+IGRlZmF1bHRcbiAgfCBTb21lIHkgLT4geVxuXG5sZXQgZ2V0X2V4biA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIFwiQ0NPcHRpb24uZ2V0X2V4blwiXG5cbmxldCBnZXRfZXhuX29yIG1zZyA9IGZ1bmN0aW9uXG4gIHwgU29tZSB4IC0+IHhcbiAgfCBOb25lIC0+IGludmFsaWRfYXJnIG1zZ1xuXG5sZXQgZ2V0X2xhenkgZGVmYXVsdF9mbiB4ID1cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiBkZWZhdWx0X2ZuICgpXG4gIHwgU29tZSB5IC0+IHlcblxubGV0IHNlcXVlbmNlX2wgbCA9XG4gIGxldCByZWMgYXV4IGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNvbWUgKExpc3QucmV2IGFjYylcbiAgICB8IFNvbWUgeCA6OiBsJyAtPiBhdXggKHggOjogYWNjKSBsJ1xuICAgIHwgTm9uZSA6OiBfIC0+IHJhaXNlIEV4aXRcbiAgaW5cbiAgdHJ5IGF1eCBbXSBsIHdpdGggRXhpdCAtPiBOb25lXG5cbmxldCB3cmFwID8oaGFuZGxlciA9IGZ1biBfIC0+IHRydWUpIGYgeCA9XG4gIHRyeSBTb21lIChmIHgpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgd3JhcDIgPyhoYW5kbGVyID0gZnVuIF8gLT4gdHJ1ZSkgZiB4IHkgPVxuICB0cnkgU29tZSAoZiB4IHkpXG4gIHdpdGggZSAtPlxuICAgIGlmIGhhbmRsZXIgZSB0aGVuXG4gICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgcmFpc2UgZVxuXG5sZXQgdG9fbGlzdCBvID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgeCAtPiBbIHggXVxuXG5sZXQgb2ZfbGlzdCA9IGZ1bmN0aW9uXG4gIHwgeCA6OiBfIC0+IFNvbWUgeFxuICB8IFtdIC0+IE5vbmVcblxubGV0IHRvX3Jlc3VsdCBlcnIgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgZXJyXG4gIHwgU29tZSB4IC0+IE9rIHhcblxubGV0IHRvX3Jlc3VsdF9sYXp5IGVycl9mbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBFcnJvciAoZXJyX2ZuICgpKVxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCBvZl9yZXN1bHQgPSBmdW5jdGlvblxuICB8IEVycm9yIF8gLT4gTm9uZVxuICB8IE9rIHggLT4gU29tZSB4XG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA+fD0gKSB4IGYgPSBtYXAgZiB4XG4gIGxldCAoID4+PSApID0gKCA+Pj0gKVxuICBsZXQgKCA8Kj4gKSA9ICggPCo+IClcbiAgbGV0ICggPCQ+ICkgPSBtYXBcbiAgbGV0ICggPCs+ICkgPSAoIDwrPiApXG4gIGxldCAoIGxldCsgKSA9ICggPnw9IClcbiAgbGV0ICggbGV0KiApID0gKCA+Pj0gKVxuXG4gIGxldFtAaW5saW5lXSAoIGFuZCsgKSBvMSBvMiA9XG4gICAgbWF0Y2ggbzEsIG8yIHdpdGhcbiAgICB8IFNvbWUgeCwgU29tZSB5IC0+IFNvbWUgKHgsIHkpXG4gICAgfCBfIC0+IE5vbmVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxudHlwZSAnYSBpdGVyID0gKCdhIC0+IHVuaXQpIC0+IHVuaXRcbnR5cGUgJ2EgZ2VuID0gdW5pdCAtPiAnYSBvcHRpb25cbnR5cGUgJ2EgcHJpbnRlciA9IEZvcm1hdC5mb3JtYXR0ZXIgLT4gJ2EgLT4gdW5pdFxudHlwZSAnYSByYW5kb21fZ2VuID0gUmFuZG9tLlN0YXRlLnQgLT4gJ2FcblxubGV0IHJhbmRvbSBnIHN0ID1cbiAgaWYgUmFuZG9tLlN0YXRlLmJvb2wgc3QgdGhlblxuICAgIFNvbWUgKGcgc3QpXG4gIGVsc2VcbiAgICBOb25lXG5cbmV4Y2VwdGlvbiBFeGl0Q2hvaWNlXG5cbmxldCBjaG9pY2VfaXRlciBzID1cbiAgbGV0IHIgPSByZWYgTm9uZSBpblxuICAodHJ5XG4gICAgIHMgKGZ1bmN0aW9uXG4gICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgfCBTb21lIF8gYXMgbyAtPlxuICAgICAgICAgciA6PSBvO1xuICAgICAgICAgcmFpc2UgRXhpdENob2ljZSlcbiAgIHdpdGggRXhpdENob2ljZSAtPiAoKSk7XG4gICFyXG5cbmxldCByZWMgY2hvaWNlX3NlcSBzID1cbiAgbWF0Y2ggcyAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiBOb25lXG4gIHwgU2VxLkNvbnMgKFNvbWUgeCwgXykgLT4gU29tZSB4XG4gIHwgU2VxLkNvbnMgKE5vbmUsIHRsKSAtPiBjaG9pY2Vfc2VxIHRsXG5cbmxldCB0b19nZW4gbyA9XG4gIG1hdGNoIG8gd2l0aFxuICB8IE5vbmUgLT4gZnVuICgpIC0+IE5vbmVcbiAgfCBTb21lIF8gLT5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGZ1biAoKSAtPlxuICAgICAgaWYgIWZpcnN0IHRoZW4gKFxuICAgICAgICBmaXJzdCA6PSBmYWxzZTtcbiAgICAgICAgb1xuICAgICAgKSBlbHNlXG4gICAgICAgIE5vbmVcblxubGV0IHRvX2l0ZXIgbyBrID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgeCAtPiBrIHhcblxubGV0IHRvX3NlcSBvICgpID1cbiAgbWF0Y2ggbyB3aXRoXG4gIHwgTm9uZSAtPiBTZXEuTmlsXG4gIHwgU29tZSB4IC0+IFNlcS5Db25zICh4LCBTZXEuZW1wdHkpXG5cbmxldCBwcCBwcHggb3V0ID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiTm9uZVwiXG4gIHwgU29tZSB4IC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbU29tZSAlYUBdXCIgcHB4IHhcblxubGV0IGZsYXR0ZW4gPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB4XG4gIHwgTm9uZSAtPiBOb25lXG5cbmxldCByZXR1cm5faWYgYiB4ID1cbiAgaWYgYiB0aGVuXG4gICAgU29tZSB4XG4gIGVsc2VcbiAgICBOb25lXG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgUmFuZG9tIEdlbmVyYXRvcnN9ICopXG5cbmluY2x1ZGUgUmFuZG9tXG5cbnR5cGUgc3RhdGUgPSBSYW5kb20uU3RhdGUudFxudHlwZSAnYSB0ID0gc3RhdGUgLT4gJ2FcbnR5cGUgJ2EgcmFuZG9tX2dlbiA9ICdhIHRcblxubGV0IHJldHVybiB4IF9zdCA9IHhcbmxldCBmbGF0X21hcCBmIGcgc3QgPSBmIChnIHN0KSBzdFxubGV0ICggPj49ICkgZyBmIHN0ID0gZmxhdF9tYXAgZiBnIHN0XG5sZXQgbWFwIGYgZyBzdCA9IGYgKGcgc3QpXG5sZXQgKCA+fD0gKSBnIGYgc3QgPSBtYXAgZiBnIHN0XG5sZXQgZGVsYXkgZiBzdCA9IGYgKCkgc3RcblxubGV0IF9jaG9vc2VfYXJyYXkgYSBzdCA9XG4gIGlmIEFycmF5Lmxlbmd0aCBhID0gMCB0aGVuIGludmFsaWRfYXJnIFwiQ0NSYW5kb20uY2hvb3NlX2FycmF5XCI7XG4gIGEuKFJhbmRvbS5TdGF0ZS5pbnQgc3QgKEFycmF5Lmxlbmd0aCBhKSlcblxubGV0IGNob29zZV9hcnJheSBhIHN0ID1cbiAgdHJ5IFNvbWUgKF9jaG9vc2VfYXJyYXkgYSBzdCBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgY2hvb3NlIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBjaG9vc2VfYXJyYXkgYVxuXG5sZXQgY2hvb3NlX2V4biBsID1cbiAgbGV0IGEgPSBBcnJheS5vZl9saXN0IGwgaW5cbiAgZnVuIHN0IC0+IF9jaG9vc2VfYXJyYXkgYSBzdCBzdFxuXG5sZXQgY2hvb3NlX3JldHVybiBsID0gX2Nob29zZV9hcnJheSAoQXJyYXkub2ZfbGlzdCBsKVxuXG5leGNlcHRpb24gUGlja19mcm9tX2VtcHR5XG5cbmxldCBwaWNrX2xpc3QgbCA9XG4gIGxldCBuID0gTGlzdC5sZW5ndGggbCBpblxuICBpZiBuID0gMCB0aGVuIHJhaXNlIFBpY2tfZnJvbV9lbXB0eTtcbiAgZnVuIHN0IC0+IExpc3QubnRoIGwgKFJhbmRvbS5TdGF0ZS5pbnQgc3QgbilcblxubGV0IHBpY2tfYXJyYXkgYSA9XG4gIGxldCBuID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgaWYgbiA9IDAgdGhlbiByYWlzZSBQaWNrX2Zyb21fZW1wdHk7XG4gIGZ1biBzdCAtPiBBcnJheS5nZXQgYSAoUmFuZG9tLlN0YXRlLmludCBzdCBuKVxuXG5sZXQgaW50IGkgc3QgPSBSYW5kb20uU3RhdGUuaW50IHN0IGlcbmxldCBzbWFsbF9pbnQgPSBpbnQgMTAwXG5sZXQgaW50X3JhbmdlIGkgaiBzdCA9IGkgKyBSYW5kb20uU3RhdGUuaW50IHN0IChqIC0gaSArIDEpXG5sZXQgZmxvYXQgZiBzdCA9IFJhbmRvbS5TdGF0ZS5mbG9hdCBzdCBmXG5sZXQgc21hbGxfZmxvYXQgPSBmbG9hdCAxMDAuMFxubGV0IGZsb2F0X3JhbmdlIGkgaiBzdCA9IGkgKy4gUmFuZG9tLlN0YXRlLmZsb2F0IHN0IChqIC0uIGkpXG5cbigqIFRPRE86IHNhbXBsZSBmdW5jdGlvbnMgKilcblxubGV0IHJlcGxpY2F0ZSBuIGcgc3QgPVxuICBsZXQgcmVjIGF1eCBhY2MgbiA9XG4gICAgaWYgbiA9IDAgdGhlblxuICAgICAgYWNjXG4gICAgZWxzZVxuICAgICAgYXV4IChnIHN0IDo6IGFjYykgKG4gLSAxKVxuICBpblxuICBhdXggW10gblxuXG4oKiBTYW1wbGUgd2l0aG91dCByZXBsYWNlbWVudCB1c2luZyByZWplY3Rpb24gc2FtcGxpbmcuICopXG5sZXQgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyAodHlwZSBlbHQpIH5jbXAgayAocm5nIDogZWx0IHQpIHN0ID1cbiAgbGV0IG1vZHVsZSBTID0gU2V0Lk1ha2UgKHN0cnVjdFxuICAgIHR5cGUgdCA9IGVsdFxuXG4gICAgbGV0IGNvbXBhcmUgPSBjbXBcbiAgZW5kKSBpblxuICBsZXQgcmVjIGF1eCBzIGsgPVxuICAgIGlmIGsgPD0gMCB0aGVuXG4gICAgICBTLmVsZW1lbnRzIHNcbiAgICBlbHNlIChcbiAgICAgIGxldCB4ID0gcm5nIHN0IGluXG4gICAgICBpZiBTLm1lbSB4IHMgdGhlblxuICAgICAgICBhdXggcyBrXG4gICAgICBlbHNlXG4gICAgICAgIGF1eCAoUy5hZGQgeCBzKSAoayAtIDEpXG4gICAgKVxuICBpblxuICBpZiBrIDw9IDAgdGhlbiBpbnZhbGlkX2FyZyBcInNhbXBsZV93aXRob3V0X2R1cGxpY2F0ZXNcIjtcbiAgYXV4IFMuZW1wdHkga1xuXG5sZXQgbGlzdF9zZXEgbCBzdCA9IExpc3QubWFwIChmdW4gZiAtPiBmIHN0KSBsXG5cbmxldCBzcGxpdCBpIHN0ID1cbiAgaWYgaSA8IDIgdGhlblxuICAgIE5vbmVcbiAgZWxzZSAoXG4gICAgbGV0IGogPSAxICsgUmFuZG9tLlN0YXRlLmludCBzdCAoaSAtIDEpIGluXG4gICAgU29tZSAoaiwgaSAtIGopXG4gIClcblxubGV0IF9kaWZmX2xpc3Qgfmxhc3QgbCA9XG4gIGxldCByZWMgZGlmZl9saXN0IGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbIGEgXSAtPiBTb21lICgobGFzdCAtIGEpIDo6IGFjYylcbiAgICB8IGEgOjogKGIgOjogXyBhcyByKSAtPiBkaWZmX2xpc3QgKChiIC0gYSkgOjogYWNjKSByXG4gICAgfCBbXSAtPiBOb25lXG4gIGluXG4gIGRpZmZfbGlzdCBbXSBsXG5cbigqIFBhcnRpdGlvbiBvZiBhbiBpbnQgaW50byBbbGVuXSBpbnRlZ2VycyB1bmlmb3JtbHkuXG4gICBXZSBmaXJzdCBzYW1wbGUgKGxlbi0xKSBwb2ludHMgZnJvbSB0aGUgc2V0IHsxLC4uaS0xfSB3aXRob3V0IHJlcGxhY2VtZW50LlxuICAgV2Ugc29ydCB0aGVzZSBwb2ludHMgYW5kIGFkZCBiYWNrIDAgYW5kIGksIHdlIGhhdmUgdGh1c1xuICAgeF8wID0gMCA8IHhfMSA8IHhfMiA8IOKApiA8IHhfe2xlbi0xfSA8IGkgPSB4X3tsZW59LlxuICAgSWYgd2UgZGVmaW5lLCB5X2sgPSB4X3trKzF9IC0geF97a30gZm9yIGsgaW4gMCDigKYgKGxlbi0xKSwgdGhlbiBieSBjb25zdHJ1Y3Rpb25cbiAgIOKIkV9rIHlfayA9IOKIkV9rICh4X3trKzF9IC0geF9rICkgPSB4X3tsZW59IC0geF8wID0gaS4gKilcbmxldCBzcGxpdF9saXN0IGkgfmxlbiBzdCA9XG4gIGlmIGxlbiA8PSAxIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uc3BsaXRfbGlzdFwiO1xuICBpZiBpID49IGxlbiB0aGVuIChcbiAgICBsZXQgeHMgPVxuICAgICAgc2FtcGxlX3dpdGhvdXRfZHVwbGljYXRlcyB+Y21wOmNvbXBhcmUgKGxlbiAtIDEpIChpbnRfcmFuZ2UgMSAoaSAtIDEpKSBzdFxuICAgIGluXG4gICAgX2RpZmZfbGlzdCB+bGFzdDppICgwIDo6IHhzKVxuICApIGVsc2VcbiAgICBOb25lXG5cbmxldCByZXRyeSA/KG1heCA9IDEwKSBnIHN0ID1cbiAgbGV0IHJlYyBhdXggbiA9XG4gICAgbWF0Y2ggZyBzdCB3aXRoXG4gICAgfCBOb25lIHdoZW4gbiA9IDAgLT4gTm9uZVxuICAgIHwgTm9uZSAtPiBhdXggKG4gLSAxKSAoKiByZXRyeSAqKVxuICAgIHwgU29tZSBfIGFzIHJlcyAtPiByZXNcbiAgaW5cbiAgYXV4IG1heFxuXG5sZXQgcmVjIHRyeV9zdWNjZXNzaXZlbHkgbCBzdCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IE5vbmVcbiAgfCBnIDo6IGwnIC0+XG4gICAgKG1hdGNoIGcgc3Qgd2l0aFxuICAgIHwgTm9uZSAtPiB0cnlfc3VjY2Vzc2l2ZWx5IGwnIHN0XG4gICAgfCBTb21lIF8gYXMgcmVzIC0+IHJlcylcblxubGV0ICggPD8+ICkgYSBiID0gdHJ5X3N1Y2Nlc3NpdmVseSBbIGE7IGIgXVxuXG5leGNlcHRpb24gQmFja3RyYWNrXG5cbmxldCBfY2hvb3NlX2FycmF5X2NhbGwgYSBmIHN0ID1cbiAgdHJ5IGYgKF9jaG9vc2VfYXJyYXkgYSBzdCkgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gcmFpc2UgQmFja3RyYWNrXG5cbmxldCBmaXggPyhzdWIxID0gW10pID8oc3ViMiA9IFtdKSA/KHN1Ym4gPSBbXSkgfmJhc2UgZnVlbCBzdCA9XG4gIGxldCBzdWIxID0gQXJyYXkub2ZfbGlzdCBzdWIxXG4gIGFuZCBzdWIyID0gQXJyYXkub2ZfbGlzdCBzdWIyXG4gIGFuZCBzdWJuID0gQXJyYXkub2ZfbGlzdCBzdWJuIGluXG4gICgqIHJlY3Vyc2l2ZSBmdW5jdGlvbiB3aXRoIGZ1ZWwgKilcbiAgbGV0IHJlYyBtYWtlIGZ1ZWwgc3QgPVxuICAgIGlmIGZ1ZWwgPSAwIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgaWYgZnVlbCA9IDEgdGhlblxuICAgICAgYmFzZSBzdFxuICAgIGVsc2VcbiAgICAgIF90cnlfb3RoZXJ3aXNlIDBcbiAgICAgICAgW3xcbiAgICAgICAgICBfY2hvb3NlX2FycmF5X2NhbGwgc3ViMSAoZnVuIGYgLT4gZiAobWFrZSAoZnVlbCAtIDEpKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1YjIgKGZ1biBmIC0+XG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0IGZ1ZWwgc3Qgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgQmFja3RyYWNrXG4gICAgICAgICAgICAgIHwgU29tZSAoaSwgaikgLT4gZiAobWFrZSBpKSAobWFrZSBqKSBzdCk7XG4gICAgICAgICAgX2Nob29zZV9hcnJheV9jYWxsIHN1Ym4gKGZ1biAobGVuLCBmKSAtPlxuICAgICAgICAgICAgICBsZXQgbGVuID0gbGVuIHN0IGluXG4gICAgICAgICAgICAgIG1hdGNoIHNwbGl0X2xpc3QgZnVlbCB+bGVuIHN0IHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIEJhY2t0cmFja1xuICAgICAgICAgICAgICB8IFNvbWUgbCcgLT4gZiAoZnVuIHN0IC0+IExpc3QubWFwIChmdW4geCAtPiBtYWtlIHggc3QpIGwnKSBzdCk7XG4gICAgICAgICAgYmFzZSAoKiBiYXNlIGNhc2UgdGhlbiAqKTtcbiAgICAgICAgfF1cbiAgYW5kIF90cnlfb3RoZXJ3aXNlIGkgYSA9XG4gICAgaWYgaSA9IEFycmF5Lmxlbmd0aCBhIHRoZW5cbiAgICAgIHJhaXNlIEJhY2t0cmFja1xuICAgIGVsc2UgKFxuICAgICAgdHJ5IGEuKGkpIHN0IHdpdGggQmFja3RyYWNrIC0+IF90cnlfb3RoZXJ3aXNlIChpICsgMSkgYVxuICAgIClcbiAgaW5cbiAgbWFrZSAoZnVlbCBzdCkgc3RcblxubGV0IHB1cmUgeCBfc3QgPSB4XG5sZXQgKCA8Kj4gKSBmIGcgc3QgPSBmIHN0IChnIHN0KVxubGV0ICggbGV0KyApID0gKCA+fD0gKVxubGV0ICggbGV0KiApID0gKCA+Pj0gKVxubGV0W0BpbmxpbmVdICggYW5kKyApIGExIGEyIHN0ID0gYTEgc3QsIGEyIHN0XG5sZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxubGV0IF9fZGVmYXVsdF9zdGF0ZSA9IFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCAoKVxubGV0IHJ1biA/KHN0ID0gX19kZWZhdWx0X3N0YXRlKSBnID0gZyBzdFxuIiwiKCogVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmUsIHBhcnQgb2YgY29udGFpbmVycy4gU2VlIGZpbGUgXCJsaWNlbnNlXCIgZm9yIG1vcmUgZGV0YWlscy4gKilcblxuKCoqIHsxIEVycm9yIE1vbmFkfSAqKVxuXG50eXBlICdhIGl0ZXIgPSAoJ2EgLT4gdW5pdCkgLT4gdW5pdFxudHlwZSAnYSBlcXVhbCA9ICdhIC0+ICdhIC0+IGJvb2xcbnR5cGUgJ2Egb3JkID0gJ2EgLT4gJ2EgLT4gaW50XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxuKCoqIHsyIEJhc2ljc30gKilcblxudHlwZSBub25yZWMgKCsnZ29vZCwgKydiYWQpIHJlc3VsdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID1cbiAgfCBPayBvZiAnZ29vZFxuICB8IEVycm9yIG9mICdiYWRcblxudHlwZSAoKydnb29kLCArJ2JhZCkgdCA9ICgnZ29vZCwgJ2JhZCkgcmVzdWx0ID0gT2sgb2YgJ2dvb2QgfCBFcnJvciBvZiAnYmFkXG5cbmxldCByZXR1cm4geCA9IE9rIHhcbmxldCBmYWlsIHMgPSBFcnJvciBzXG5cbmxldCBmYWlsX3ByaW50ZiBmb3JtYXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBQcmludGYua2JwcmludGYgKGZ1biBidWYgLT4gZmFpbCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpIGJ1ZiBmb3JtYXRcblxubGV0IGZhaWxfZnByaW50ZiBmb3JtYXQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gb3V0IC0+XG4gICAgICBGb3JtYXQucHBfcHJpbnRfZmx1c2ggb3V0ICgpO1xuICAgICAgZmFpbCAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikpXG4gICAgb3V0IGZvcm1hdFxuXG5sZXQgYWRkX2N0eCBtc2cgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IEVycm9yIGUgLT4gRXJyb3IgKGUgXiBcIlxcbmNvbnRleHQ6XCIgXiBtc2cpXG4gIHwgT2sgeCAtPiBPayB4XG5cbmxldCBhZGRfY3R4ZiBtc2cgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSA2NCBpblxuICBsZXQgb3V0ID0gRm9ybWF0LmZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIEZvcm1hdC5rZnByaW50ZlxuICAgIChmdW4gb3V0IGUgLT5cbiAgICAgIEZvcm1hdC5wcF9wcmludF9mbHVzaCBvdXQgKCk7XG4gICAgICBhZGRfY3R4IChCdWZmZXIuY29udGVudHMgYnVmKSBlKVxuICAgIG91dCBtc2dcblxubGV0IG9mX2V4biBlID1cbiAgbGV0IG1zZyA9IFByaW50ZXhjLnRvX3N0cmluZyBlIGluXG4gIEVycm9yIG1zZ1xuXG5sZXQgb2ZfZXhuX3RyYWNlIGUgPVxuICBsZXQgcmVzID1cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzXFxuJXNcIiAoUHJpbnRleGMudG9fc3RyaW5nIGUpIChQcmludGV4Yy5nZXRfYmFja3RyYWNlICgpKVxuICBpblxuICBFcnJvciByZXNcblxubGV0IG9wdF9tYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgTm9uZSAtPiBPayBOb25lXG4gIHwgU29tZSB4IC0+XG4gICAgKG1hdGNoIGYgeCB3aXRoXG4gICAgfCBPayB4IC0+IE9rIChTb21lIHgpXG4gICAgfCBFcnJvciBlIC0+IEVycm9yIGUpXG5cbmxldCBtYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBPayAoZiB4KVxuICB8IEVycm9yIHMgLT4gRXJyb3Igc1xuXG5sZXQgbWFwX2VyciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayBfIGFzIHJlcyAtPiByZXNcbiAgfCBFcnJvciB5IC0+IEVycm9yIChmIHkpXG5cbmxldCBtYXAyIGYgZyBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBPayAoZiB4KVxuICB8IEVycm9yIHMgLT4gRXJyb3IgKGcgcylcblxubGV0IGl0ZXIgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBfIC0+ICgpXG5cbmxldCBpdGVyX2VyciBmIGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayBfIC0+ICgpXG4gIHwgRXJyb3IgZXJyIC0+IGYgZXJyXG5cbmV4Y2VwdGlvbiBHZXRfZXJyb3JcblxubGV0IGdldF9leG4gPSBmdW5jdGlvblxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIF8gLT4gcmFpc2UgR2V0X2Vycm9yXG5cbmxldCBnZXRfb3IgZSB+ZGVmYXVsdCA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4geFxuICB8IEVycm9yIF8gLT4gZGVmYXVsdFxuXG5sZXQgZ2V0X2xhenkgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgZSAtPiBmIGVcblxubGV0IGdldF9vcl9mYWlsd2l0aCA9IGZ1bmN0aW9uXG4gIHwgT2sgeCAtPiB4XG4gIHwgRXJyb3IgbXNnIC0+IGZhaWx3aXRoIG1zZ1xuXG5sZXQgbWFwX29yIGYgZSB+ZGVmYXVsdCA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gZiB4XG4gIHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5cbmxldCBjYXRjaCBlIH5vayB+ZXJyID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBvayB4XG4gIHwgRXJyb3IgeSAtPiBlcnIgeVxuXG5sZXQgZmxhdF9tYXAgZiBlID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBmIHhcbiAgfCBFcnJvciBzIC0+IEVycm9yIHNcblxubGV0IGVxdWFsIH5lcnIgZXEgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBlcSB4IHlcbiAgfCBFcnJvciBzLCBFcnJvciBzJyAtPiBlcnIgcyBzJ1xuICB8IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfmVyciBjbXAgYSBiID1cbiAgbWF0Y2ggYSwgYiB3aXRoXG4gIHwgT2sgeCwgT2sgeSAtPiBjbXAgeCB5XG4gIHwgT2sgXywgXyAtPiAxXG4gIHwgXywgT2sgXyAtPiAtMVxuICB8IEVycm9yIHMsIEVycm9yIHMnIC0+IGVyciBzIHMnXG5cbmxldCBmb2xkIH5vayB+ZXJyb3IgeCA9XG4gIG1hdGNoIHggd2l0aFxuICB8IE9rIHggLT4gb2sgeFxuICB8IEVycm9yIHMgLT4gZXJyb3Igc1xuXG5sZXQgZm9sZF9vayBmIGFjYyByID1cbiAgbWF0Y2ggciB3aXRoXG4gIHwgT2sgeCAtPiBmIGFjYyB4XG4gIHwgRXJyb3IgXyAtPiBhY2NcblxubGV0IGlzX29rID0gZnVuY3Rpb25cbiAgfCBPayBfIC0+IHRydWVcbiAgfCBFcnJvciBfIC0+IGZhbHNlXG5cbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uXG4gIHwgT2sgXyAtPiBmYWxzZVxuICB8IEVycm9yIF8gLT4gdHJ1ZVxuXG4oKiogezIgV3JhcHBlcnN9ICopXG5cbmxldCBndWFyZCBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IGd1YXJkX3N0ciBmID0gdHJ5IE9rIChmICgpKSB3aXRoIGUgLT4gb2ZfZXhuIGVcbmxldCBndWFyZF9zdHJfdHJhY2UgZiA9IHRyeSBPayAoZiAoKSkgd2l0aCBlIC0+IG9mX2V4bl90cmFjZSBlXG5sZXQgd3JhcDEgZiB4ID0gdHJ5IHJldHVybiAoZiB4KSB3aXRoIGUgLT4gRXJyb3IgZVxubGV0IHdyYXAyIGYgeCB5ID0gdHJ5IHJldHVybiAoZiB4IHkpIHdpdGggZSAtPiBFcnJvciBlXG5sZXQgd3JhcDMgZiB4IHkgeiA9IHRyeSByZXR1cm4gKGYgeCB5IHopIHdpdGggZSAtPiBFcnJvciBlXG5cbigqKiB7MiBBcHBsaWNhdGl2ZX0gKilcblxubGV0IHB1cmUgPSByZXR1cm5cblxubGV0ICggPCo+ICkgZiB4ID1cbiAgbWF0Y2ggZiB3aXRoXG4gIHwgRXJyb3IgcyAtPiBmYWlsIHNcbiAgfCBPayBmIC0+IG1hcCBmIHhcblxubGV0IGpvaW4gdCA9XG4gIG1hdGNoIHQgd2l0aFxuICB8IE9rIChPayBvKSAtPiBPayBvXG4gIHwgT2sgKEVycm9yIGUpIC0+IEVycm9yIGVcbiAgfCBFcnJvciBfIGFzIGUgLT4gZVxuXG5sZXQgYm90aCB4IHkgPVxuICBtYXRjaCB4LCB5IHdpdGhcbiAgfCBPayBvLCBPayBvJyAtPiBPayAobywgbycpXG4gIHwgT2sgXywgRXJyb3IgZSAtPiBFcnJvciBlXG4gIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG5cbigqKiB7MiBDb2xsZWN0aW9uc30gKilcblxubGV0IG1hcF9sIGYgbCA9XG4gIGxldCByZWMgbWFwIGFjYyBsID1cbiAgICBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IE9rIChMaXN0LnJldiBhY2MpXG4gICAgfCB4IDo6IGwnIC0+XG4gICAgICAobWF0Y2ggZiB4IHdpdGhcbiAgICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG4gICAgICB8IE9rIHkgLT4gbWFwICh5IDo6IGFjYykgbCcpXG4gIGluXG4gIG1hcCBbXSBsXG5cbmxldCBmbGF0dGVuX2wgbCA9XG4gIGxldCByZWMgbG9vcCBhY2MgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBPayAoTGlzdC5yZXYgYWNjKVxuICAgIHwgT2sgeCA6OiBsJyAtPiBsb29wICh4IDo6IGFjYykgbCdcbiAgICB8IEVycm9yIGUgOjogXyAtPiBFcnJvciBlXG4gIGluXG4gIGxvb3AgW10gbFxuXG5leGNlcHRpb24gTG9jYWxFeGl0XG5cbmxldCBmb2xkX2l0ZXIgZiBhY2Mgc2VxID1cbiAgbGV0IGVyciA9IHJlZiBOb25lIGluXG4gIHRyeVxuICAgIGxldCBhY2MgPSByZWYgYWNjIGluXG4gICAgc2VxIChmdW4geCAtPlxuICAgICAgICBtYXRjaCBmICFhY2MgeCB3aXRoXG4gICAgICAgIHwgRXJyb3IgcyAtPlxuICAgICAgICAgIGVyciA6PSBTb21lIHM7XG4gICAgICAgICAgcmFpc2UgTG9jYWxFeGl0XG4gICAgICAgIHwgT2sgeSAtPiBhY2MgOj0geSk7XG4gICAgT2sgIWFjY1xuICB3aXRoIExvY2FsRXhpdCAtPlxuICAgIChtYXRjaCAhZXJyIHdpdGhcbiAgICB8IE5vbmUgLT4gYXNzZXJ0IGZhbHNlXG4gICAgfCBTb21lIHMgLT4gRXJyb3IgcylcblxubGV0IGZvbGRfbCBmIGFjYyBsID0gZm9sZF9pdGVyIGYgYWNjIChmdW4gayAtPiBMaXN0Lml0ZXIgayBsKVxuXG4oKiogezIgTWlzY30gKilcblxubGV0IGNob29zZSBsID1cbiAgbGV0IHJlYyBmaW5kXyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IChPayBfIGFzIHJlcykgOjogXyAtPiByZXNcbiAgICB8IEVycm9yIF8gOjogbCcgLT4gZmluZF8gbCdcbiAgaW5cbiAgdHJ5IGZpbmRfIGxcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgbCcgPVxuICAgICAgTGlzdC5tYXBcbiAgICAgICAgKGZ1bmN0aW9uXG4gICAgICAgICAgfCBFcnJvciBzIC0+IHNcbiAgICAgICAgICB8IE9rIF8gLT4gYXNzZXJ0IGZhbHNlKVxuICAgICAgICBsXG4gICAgaW5cbiAgICBFcnJvciBsJ1xuXG5sZXQgcmV0cnkgbiBmID1cbiAgbGV0IHJlYyByZXRyeSBuIGFjYyA9XG4gICAgbWF0Y2ggbiB3aXRoXG4gICAgfCAwIC0+IGZhaWwgKExpc3QucmV2IGFjYylcbiAgICB8IF8gLT5cbiAgICAgIChtYXRjaCBmICgpIHdpdGhcbiAgICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpKVxuICBpblxuICByZXRyeSBuIFtdXG5cbigqKiB7MiBJbmZpeH0gKilcblxubW9kdWxlIEluZml4ID0gc3RydWN0XG4gIGxldCAoIDwkPiApID0gbWFwXG4gIGxldCAoID58PSApIGUgZiA9IG1hcCBmIGVcbiAgbGV0ICggPj49ICkgZSBmID0gZmxhdF9tYXAgZiBlXG4gIGxldCAoIDwqPiApID0gKCA8Kj4gKVxuICBsZXQgKCBsZXQrICkgPSAoID58PSApXG4gIGxldCAoIGxldCogKSA9ICggPj49IClcblxuICBsZXRbQGlubGluZV0gKCBhbmQrICkgeDEgeDIgPVxuICAgIG1hdGNoIHgxLCB4MiB3aXRoXG4gICAgfCBPayB4LCBPayB5IC0+IE9rICh4LCB5KVxuICAgIHwgRXJyb3IgZSwgXyAtPiBFcnJvciBlXG4gICAgfCBfLCBFcnJvciBlIC0+IEVycm9yIGVcblxuICBsZXQgKCBhbmQqICkgPSAoIGFuZCsgKVxuZW5kXG5cbmluY2x1ZGUgSW5maXhcblxuKCoqIHsyIE1vbmFkaWMgT3BlcmF0aW9uc30gKilcblxubW9kdWxlIHR5cGUgTU9OQUQgPSBzaWdcbiAgdHlwZSAnYSB0XG5cbiAgdmFsIHJldHVybiA6ICdhIC0+ICdhIHRcbiAgdmFsICggPj49ICkgOiAnYSB0IC0+ICgnYSAtPiAnYiB0KSAtPiAnYiB0XG5lbmRcblxubW9kdWxlIFRyYXZlcnNlIChNIDogTU9OQUQpID0gc3RydWN0XG4gIGxldCAoID4+PSApID0gTS4oID4+PSApXG5cbiAgbGV0IG1hcF9tIGYgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBzIC0+IE0ucmV0dXJuIChFcnJvciBzKVxuICAgIHwgT2sgeCAtPiBmIHggPj49IGZ1biB5IC0+IE0ucmV0dXJuIChPayB5KVxuXG4gIGxldCBzZXF1ZW5jZV9tIG0gPSBtYXBfbSAoZnVuIHggLT4geCkgbVxuXG4gIGxldCBmb2xkX20gZiBhY2MgZSA9XG4gICAgbWF0Y2ggZSB3aXRoXG4gICAgfCBFcnJvciBfIC0+IE0ucmV0dXJuIGFjY1xuICAgIHwgT2sgeCAtPiBmIGFjYyB4ID4+PSBmdW4geSAtPiBNLnJldHVybiB5XG5cbiAgbGV0IHJldHJ5X20gbiBmID1cbiAgICBsZXQgcmVjIHJldHJ5IG4gYWNjID1cbiAgICAgIG1hdGNoIG4gd2l0aFxuICAgICAgfCAwIC0+IE0ucmV0dXJuIChmYWlsIChMaXN0LnJldiBhY2MpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIGYgKCkgPj49ICggZnVuY3Rpb25cbiAgICAgICAgfCBPayB4IC0+IE0ucmV0dXJuIChPayB4KVxuICAgICAgICB8IEVycm9yIGUgLT4gcmV0cnkgKG4gLSAxKSAoZSA6OiBhY2MpIClcbiAgICBpblxuICAgIHJldHJ5IG4gW11cbmVuZFxuXG4oKiogezIgQ29udmVyc2lvbnN9ICopXG5cbmxldCB0b19vcHQgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gU29tZSB4XG4gIHwgRXJyb3IgXyAtPiBOb25lXG5cbmxldCBvZl9vcHQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gRXJyb3IgXCJvZl9vcHRcIlxuICB8IFNvbWUgeCAtPiBPayB4XG5cbmxldCB0b19zZXEgZSAoKSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gU2VxLkNvbnMgKHgsIFNlcS5lbXB0eSlcbiAgfCBFcnJvciBfIC0+IFNlcS5OaWxcblxubGV0IHRvX2l0ZXIgZSBrID1cbiAgbWF0Y2ggZSB3aXRoXG4gIHwgT2sgeCAtPiBrIHhcbiAgfCBFcnJvciBfIC0+ICgpXG5cbnR5cGUgKCdhLCAnYikgZXJyb3IgPSBbIGBPayBvZiAnYSB8IGBFcnJvciBvZiAnYiBdXG5cbmxldCBvZl9lcnIgPSBmdW5jdGlvblxuICB8IGBPayB4IC0+IE9rIHhcbiAgfCBgRXJyb3IgeSAtPiBFcnJvciB5XG5cbmxldCB0b19lcnIgPSBmdW5jdGlvblxuICB8IE9rIHggLT4gYE9rIHhcbiAgfCBFcnJvciB5IC0+IGBFcnJvciB5XG5cbigqKiB7MiBJT30gKilcblxubGV0IHBwIHBwX3ggZm10IGUgPVxuICBtYXRjaCBlIHdpdGhcbiAgfCBPayB4IC0+IEZvcm1hdC5mcHJpbnRmIGZtdCBcIkBbb2soQCwlYSlAXVwiIHBwX3ggeFxuICB8IEVycm9yIHMgLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtlcnJvcihALCVzKUBdXCIgc1xuXG5sZXQgcHAnIHBwX3ggcHBfZSBmbXQgZSA9XG4gIG1hdGNoIGUgd2l0aFxuICB8IE9rIHggLT4gRm9ybWF0LmZwcmludGYgZm10IFwiQFtvayhALCVhKUBdXCIgcHBfeCB4XG4gIHwgRXJyb3IgcyAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCJAW2Vycm9yKEAsJWEpQF1cIiBwcF9lIHNcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBXcmFwcGVyIGFyb3VuZCBTZXR9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIHByaW50ZXIgPSBGb3JtYXQuZm9ybWF0dGVyIC0+ICdhIC0+IHVuaXRcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPSBTZXQuT3JkZXJlZFR5cGVcblxubW9kdWxlIHR5cGUgUyA9IHNpZ1xuICBpbmNsdWRlIFNldC5TXG5cbiAgdmFsIG1pbl9lbHRfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFtaW5fZWx0fS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgbWF4X2VsdF9vcHQgOiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IW1heF9lbHR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBjaG9vc2Vfb3B0IDogdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFjaG9vc2V9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX29wdCA6IGVsdCAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmR9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdFxuICAoKiogRmluZCBtaW5pbXVtIGVsZW1lbnQgc2F0aXNmeWluZyBwcmVkaWNhdGUuXG4gICAgICBAc2luY2UgMS41ICopXG5cbiAgdmFsIGZpbmRfZmlyc3Rfb3B0IDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgKCoqIFNhZmUgdmVyc2lvbiBvZiB7IWZpbmRfZmlyc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2ZpcnN0X21hcCA6IChlbHQgLT4gJ2Egb3B0aW9uKSAtPiB0IC0+ICdhIG9wdGlvblxuICAoKiogW2ZpbmRfZmlyc3RfbWFwIGYgc10gZmluZCB0aGUgbWluaW11bSBlbGVtZW50IFt4XSBvZiBbc10gc3VjaCB0aGF0IFtmIHggPSBTb21lIHldXG4gICAgICBhbmQgcmV0dXJuIFtTb21lIHldLiBPdGhlcndpc2UgcmV0dXJucyBbTm9uZV0uXG4gICAgICBAc2luY2UgMy4xMiAqKVxuXG4gIHZhbCBmaW5kX2xhc3QgOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICgqKiBGaW5kIG1heGltdW0gZWxlbWVudCBzYXRpc2Z5aW5nIHByZWRpY2F0ZS5cbiAgICAgIEBzaW5jZSAxLjUgKilcblxuICB2YWwgZmluZF9sYXN0X29wdCA6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHQgb3B0aW9uXG4gICgqKiBTYWZlIHZlcnNpb24gb2YgeyFmaW5kX2xhc3R9LlxuICAgICAgQHNpbmNlIDEuNSAqKVxuXG4gIHZhbCBmaW5kX2xhc3RfbWFwIDogKGVsdCAtPiAnYSBvcHRpb24pIC0+IHQgLT4gJ2Egb3B0aW9uXG4gICgqKiBbZmluZF9sYXN0X21hcCBmIHNdIGZpbmQgdGhlIG1heGltdW0gZWxlbWVudCBbeF0gb2YgW3NdIHN1Y2ggdGhhdCBbZiB4ID0gU29tZSB5XVxuICAgICAgYW5kIHJldHVybiBbU29tZSB5XS4gT3RoZXJ3aXNlIHJldHVybnMgW05vbmVdLlxuICAgICAgQHNpbmNlIDMuMTIgKilcblxuICB2YWwgb2ZfaXRlciA6IGVsdCBpdGVyIC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtpdGVyXSBvZiBlbGVtZW50cy5cbiAgICAgIEBzaW5jZSAyLjggKilcblxuICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgKCoqIEJ1aWxkIGEgc2V0IGZyb20gdGhlIGdpdmVuIFtzZXFdIG9mIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCBhZGRfaXRlciA6IHQgLT4gZWx0IGl0ZXIgLT4gdFxuICAoKiogQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfc2VxIDogZWx0IFNlcS50IC0+IHQgLT4gdFxuICAoKiogQHNpbmNlIDMuMCAqKVxuXG4gIHZhbCB0b19pdGVyIDogdCAtPiBlbHQgaXRlclxuICAoKiogW3RvX2l0ZXIgdF0gY29udmVydHMgdGhlIHNldCBbdF0gdG8gYSBbaXRlcl0gb2YgdGhlIGVsZW1lbnRzLlxuICAgICAgQHNpbmNlIDIuOCAqKVxuXG4gIHZhbCBhZGRfbGlzdCA6IHQgLT4gZWx0IGxpc3QgLT4gdFxuICAoKiogQHNpbmNlIDAuMTQgKilcblxuICB2YWwgdG9fbGlzdCA6IHQgLT4gZWx0IGxpc3RcbiAgKCoqIFt0b19saXN0IHRdIGNvbnZlcnRzIHRoZSBzZXQgW3RdIHRvIGEgbGlzdCBvZiB0aGUgZWxlbWVudHMuICopXG5cbiAgdmFsIHRvX3N0cmluZyA6XG4gICAgP3N0YXJ0OnN0cmluZyAtPlxuICAgID9zdG9wOnN0cmluZyAtPlxuICAgID9zZXA6c3RyaW5nIC0+XG4gICAgKGVsdCAtPiBzdHJpbmcpIC0+XG4gICAgdCAtPlxuICAgIHN0cmluZ1xuICAoKiogIFByaW50IHRoZSBzZXQgaW4gYSBzdHJpbmdcbiAgICAgICBAc2luY2UgMi43ICopXG5cbiAgdmFsIHBwIDpcbiAgICA/cHBfc3RhcnQ6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3N0b3A6dW5pdCBwcmludGVyIC0+XG4gICAgP3BwX3NlcDp1bml0IHByaW50ZXIgLT5cbiAgICBlbHQgcHJpbnRlciAtPlxuICAgIHQgcHJpbnRlclxuICAoKiogUHJpbnQgdGhlIHNldC4gKilcbmVuZFxuXG5tb2R1bGUgTWFrZSAoTyA6IE1hcC5PcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgbW9kdWxlIFMgPSBTZXQuTWFrZSAoTylcblxuICAoKiBiYWNrcG9ydCBmdW5jdGlvbnMgZnJvbSByZWNlbnQgc3RkbGliLlxuICAgICB0aGV5IHdpbGwgYmUgc2hhZG93ZWQgYnkgaW5jbHVzaW9uIG9mIFtTXSBpZiBwcmVzZW50LiAqKVxuXG4gIFtAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbiAgbGV0IGZpbmRfb3B0IHggcyA9IHRyeSBTb21lIChTLmZpbmQgeCBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG4gIGxldCBjaG9vc2Vfb3B0IHMgPSB0cnkgU29tZSAoUy5jaG9vc2Ugcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWluX2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1pbl9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuICBsZXQgbWF4X2VsdF9vcHQgcyA9IHRyeSBTb21lIChTLm1heF9lbHQgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGV4Y2VwdGlvbiBGaW5kX2JpbmRpbmdfZXhpdFxuXG4gIGxldCBmaW5kX2ZpcnN0X29wdCBmIG0gPVxuICAgIGxldCByZXMgPSByZWYgTm9uZSBpblxuICAgIHRyeVxuICAgICAgUy5pdGVyXG4gICAgICAgIChmdW4geCAtPlxuICAgICAgICAgIGlmIGYgeCB0aGVuIChcbiAgICAgICAgICAgIHJlcyA6PSBTb21lIHg7XG4gICAgICAgICAgICByYWlzZSBGaW5kX2JpbmRpbmdfZXhpdFxuICAgICAgICAgICkpXG4gICAgICAgIG07XG4gICAgICBOb25lXG4gICAgd2l0aCBGaW5kX2JpbmRpbmdfZXhpdCAtPiAhcmVzXG5cbiAgbGV0IGZpbmRfZmlyc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2ZpcnN0X29wdCBmIG0gd2l0aFxuICAgIHwgTm9uZSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICB8IFNvbWUgeCAtPiB4XG5cbiAgbGV0IGZpbmRfZmlyc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgdHJ5XG4gICAgICBTLml0ZXJcbiAgICAgICAgKGZ1biB4IC0+XG4gICAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgeSAtPlxuICAgICAgICAgICAgcmVzIDo9IFNvbWUgeTtcbiAgICAgICAgICAgIHJhaXNlIEZpbmRfYmluZGluZ19leGl0KVxuICAgICAgICBtO1xuICAgICAgTm9uZVxuICAgIHdpdGggRmluZF9iaW5kaW5nX2V4aXQgLT4gIXJlc1xuXG4gICgqIGxpbmVhciB0aW1lLCBtdXN0IHRyYXZlcnNlIHRoZSB3aG9sZSBzZXTigKYgKilcbiAgbGV0IGZpbmRfbGFzdF9vcHQgZiBtID1cbiAgICBsZXQgcmVzID0gcmVmIE5vbmUgaW5cbiAgICBTLml0ZXIgKGZ1biB4IC0+IGlmIGYgeCB0aGVuIHJlcyA6PSBTb21lIHgpIG07XG4gICAgIXJlc1xuXG4gIGxldCBmaW5kX2xhc3QgZiBtID1cbiAgICBtYXRjaCBmaW5kX2xhc3Rfb3B0IGYgbSB3aXRoXG4gICAgfCBOb25lIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgIHwgU29tZSB4IC0+IHhcblxuICBbQEBAb2NhbWwud2FybmluZyBcIiszMlwiXVxuXG4gIGluY2x1ZGUgU1xuXG4gICgqIFVzZSBmaW5kX2xhc3Qgd2hpY2ggaXMgbGluZWFyIHRpbWUgb24gT0NhbWwgPCA0LjA1ICopXG4gIGxldCBmaW5kX2xhc3RfbWFwIGYgbSA9XG4gICAgbGV0IHJlcyA9IHJlZiBOb25lIGluXG4gICAgbGV0IF8gPVxuICAgICAgZmluZF9sYXN0X29wdFxuICAgICAgICAoZnVuIHggLT5cbiAgICAgICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiBmYWxzZVxuICAgICAgICAgIHwgU29tZSB5IC0+XG4gICAgICAgICAgICByZXMgOj0gU29tZSB5O1xuICAgICAgICAgICAgdHJ1ZSlcbiAgICAgICAgbVxuICAgIGluXG4gICAgIXJlc1xuXG4gIGxldCBhZGRfc2VxIHNlcSBzZXQgPVxuICAgIGxldCBzZXQgPSByZWYgc2V0IGluXG4gICAgU2VxLml0ZXIgKGZ1biB4IC0+IHNldCA6PSBhZGQgeCAhc2V0KSBzZXE7XG4gICAgIXNldFxuXG4gIGxldCBvZl9zZXEgcyA9IGFkZF9zZXEgcyBlbXB0eVxuXG4gIGxldCBhZGRfaXRlciBzZXQgaSA9XG4gICAgbGV0IHNldCA9IHJlZiBzZXQgaW5cbiAgICBpIChmdW4geCAtPiBzZXQgOj0gYWRkIHggIXNldCk7XG4gICAgIXNldFxuXG4gIGxldCBvZl9pdGVyIHMgPSBhZGRfaXRlciBlbXB0eSBzXG4gIGxldCB0b19pdGVyIHMgeWllbGQgPSBpdGVyIHlpZWxkIHNcbiAgbGV0IGFkZF9saXN0ID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBzZXQgeCAtPiBhZGQgeCBzZXQpXG4gIGxldCB0b19saXN0ID0gZWxlbWVudHNcblxuICBsZXQgdG9fc3RyaW5nID8oc3RhcnQgPSBcIlwiKSA/KHN0b3AgPSBcIlwiKSA/KHNlcCA9IFwiLFwiKSBlbHRfdG9fc3RyaW5nIGggPVxuICAgIHRvX2xpc3QgaCB8PiBDQ0xpc3QudG9fc3RyaW5nIH5zdGFydCB+c3RvcCB+c2VwIGVsdF90b19zdHJpbmdcblxuICBsZXQgcHAgPyhwcF9zdGFydCA9IGZ1biBfICgpIC0+ICgpKSA/KHBwX3N0b3AgPSBmdW4gXyAoKSAtPiAoKSlcbiAgICAgID8ocHBfc2VwID0gZnVuIGZtdCAoKSAtPiBGb3JtYXQuZnByaW50ZiBmbXQgXCIsQCBcIikgcHBfeCBmbXQgbSA9XG4gICAgcHBfc3RhcnQgZm10ICgpO1xuICAgIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gICAgaXRlclxuICAgICAgKGZ1biB4IC0+XG4gICAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHBwX3NlcCBmbXQgKCk7XG4gICAgICAgIHBwX3ggZm10IHgpXG4gICAgICBtO1xuICAgIHBwX3N0b3AgZm10ICgpXG5lbmRcbiIsIigqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlLCBwYXJ0IG9mIGNvbnRhaW5lcnMuIFNlZSBmaWxlIFwibGljZW5zZVwiIGZvciBtb3JlIGRldGFpbHMuICopXG5cbigqKiB7MSBCYXNpYyBTdHJpbmcgVXRpbHN9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG50eXBlICdhIGdlbiA9IHVuaXQgLT4gJ2Egb3B0aW9uXG5cbigqIHN0YW5kYXJkIGltcGxlbWVudGF0aW9ucyAqKVxuXG5pbmNsdWRlIFN0cmluZ1xuXG5sZXQgY29tcGFyZV9pbnQgKGEgOiBpbnQpIGIgPSBTdGRsaWIuY29tcGFyZSBhIGJcbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBoYXNoIHMgPSBIYXNodGJsLmhhc2ggc1xubGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGhcbmxldCBpc19lbXB0eSBzID0gZXF1YWwgcyBcIlwiXG5cbmxldCByZXYgcyA9XG4gIGxldCBuID0gbGVuZ3RoIHMgaW5cbiAgaW5pdCBuIChmdW4gaSAtPiBzLltuIC0gaSAtIDFdKVxuXG5sZXQgcmVjIF90b19saXN0IHMgYWNjIGkgbGVuID1cbiAgaWYgbGVuID0gMCB0aGVuXG4gICAgTGlzdC5yZXYgYWNjXG4gIGVsc2VcbiAgICBfdG9fbGlzdCBzIChzLltpXSA6OiBhY2MpIChpICsgMSkgKGxlbiAtIDEpXG5cbmxldCBfaXNfc3ViIH5zdWIgaSBzIGogfmxlbiA9XG4gIGxldCByZWMgY2hlY2sgayA9XG4gICAgaWYgayA9IGxlbiB0aGVuXG4gICAgICB0cnVlXG4gICAgZWxzZVxuICAgICAgQ0NDaGFyLmVxdWFsIHN1Yi5baSArIGtdIHMuW2ogKyBrXSAmJiBjaGVjayAoayArIDEpXG4gIGluXG4gIGogKyBsZW4gPD0gU3RyaW5nLmxlbmd0aCBzICYmIGNoZWNrIDBcblxubGV0IGlzX3N1YiB+c3ViIGkgcyBqIH5sZW4gPVxuICBpZiBpICsgbGVuID4gU3RyaW5nLmxlbmd0aCBzdWIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLmlzX3N1YlwiO1xuICBfaXNfc3ViIH5zdWIgaSBzIGogfmxlblxuXG50eXBlIF8gZGlyZWN0aW9uID1cbiAgfCBEaXJlY3QgOiBbIGBEaXJlY3QgXSBkaXJlY3Rpb25cbiAgfCBSZXZlcnNlIDogWyBgUmV2ZXJzZSBdIGRpcmVjdGlvblxuXG4oKiB3ZSBmb2xsb3cgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvS251dGjigJNNb3JyaXPigJNQcmF0dF9hbGdvcml0aG0gKilcbm1vZHVsZSBGaW5kID0gc3RydWN0XG4gIHR5cGUgJ2Ega21wX3BhdHRlcm4gPSB7IGZhaWx1cmU6IGludCBhcnJheTsgc3RyOiBzdHJpbmcgfVxuICAoKiBpbnZhcmlhbnQ6IFtsZW5ndGggZmFpbHVyZSA9IGxlbmd0aCBzdHJdLlxuICAgICBXZSB1c2UgYSBwaGFudG9tIHR5cGUgdG8gYXZvaWQgbWl4aW5nIHRoZSBkaXJlY3Rpb25zLiAqKVxuXG4gIGxldCBrbXBfcGF0dGVybl9sZW5ndGggcCA9IFN0cmluZy5sZW5ndGggcC5zdHJcblxuICAoKiBhY2Nlc3MgdGhlIFtpXS10aCBlbGVtZW50IG9mIFtzXSBhY2NvcmRpbmcgdG8gZGlyZWN0aW9uIFtkaXJdICopXG4gIGxldCBnZXRfIDogdHlwZSBhLiBkaXI6YSBkaXJlY3Rpb24gLT4gc3RyaW5nIC0+IGludCAtPiBjaGFyID1cbiAgIGZ1biB+ZGlyIC0+XG4gICAgbWF0Y2ggZGlyIHdpdGhcbiAgICB8IERpcmVjdCAtPiBTdHJpbmcuZ2V0XG4gICAgfCBSZXZlcnNlIC0+IGZ1biBzIGkgLT4gcy5bU3RyaW5nLmxlbmd0aCBzIC0gaSAtIDFdXG5cbiAgbGV0IGttcF9jb21waWxlXyA6IHR5cGUgYS4gZGlyOmEgZGlyZWN0aW9uIC0+IHN0cmluZyAtPiBhIGttcF9wYXR0ZXJuID1cbiAgIGZ1biB+ZGlyIHN0ciAtPlxuICAgIGxldCBsZW4gPSBsZW5ndGggc3RyIGluXG4gICAgbGV0IGdldCA9IGdldF8gfmRpciBpblxuICAgICgqIGhvdyB0byByZWFkIGVsZW1lbnRzIG9mIHRoZSBzdHJpbmcgKilcbiAgICBtYXRjaCBsZW4gd2l0aFxuICAgIHwgMCAtPiB7IGZhaWx1cmUgPSBbfHxdOyBzdHIgfVxuICAgIHwgMSAtPiB7IGZhaWx1cmUgPSBbfCAtMSB8XTsgc3RyIH1cbiAgICB8IF8gLT5cbiAgICAgICgqIGF0IGxlYXN0IDIgZWxlbWVudHMsIHRoZSBhbGdvcml0aG0gY2FuIHdvcmsgKilcbiAgICAgIGxldCBmYWlsdXJlID0gQXJyYXkubWFrZSBsZW4gMCBpblxuICAgICAgZmFpbHVyZS4oMCkgPC0gLTE7XG4gICAgICAoKiBpOiBjdXJyZW50IGluZGV4IGluIHN0ciAqKVxuICAgICAgbGV0IGkgPSByZWYgMiBpblxuICAgICAgKCogajogaW5kZXggb2YgY2FuZGlkYXRlIHN1YnN0cmluZyAqKVxuICAgICAgbGV0IGogPSByZWYgMCBpblxuICAgICAgd2hpbGUgIWkgPCBsZW4gZG9cbiAgICAgICAgbWF0Y2ggIWogd2l0aFxuICAgICAgICB8IF8gd2hlbiBDQ0NoYXIuZXF1YWwgKGdldCBzdHIgKCFpIC0gMSkpIChnZXQgc3RyICFqKSAtPlxuICAgICAgICAgICgqIHN1YnN0cmluZyBzdGFydGluZyBhdCAhaiBjb250aW51ZXMgbWF0Y2hpbmcgY3VycmVudCBjaGFyICopXG4gICAgICAgICAgaW5jciBqO1xuICAgICAgICAgIGZhaWx1cmUuKCFpKSA8LSAhajtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgfCAwIC0+XG4gICAgICAgICAgKCogYmFjayB0byB0aGUgYmVnaW5uaW5nICopXG4gICAgICAgICAgZmFpbHVyZS4oIWkpIDwtIDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgICgqIGZhbGxiYWNrIGZvciB0aGUgcHJlZml4IHN0cmluZyAqKVxuICAgICAgICAgIGFzc2VydCAoIWogPiAwKTtcbiAgICAgICAgICBqIDo9IGZhaWx1cmUuKCFqKVxuICAgICAgZG9uZTtcbiAgICAgICgqIEZvcm1hdC5wcmludGYgXCJ7QFtmYWlsdXJlOiVhLCBzdHI6JXNAXX1ALlwiIENDRm9ybWF0LihhcnJheSBpbnQpIGZhaWx1cmUgc3RyOyAqKVxuICAgICAgeyBmYWlsdXJlOyBzdHIgfVxuXG4gIGxldCBrbXBfY29tcGlsZSBzID0ga21wX2NvbXBpbGVfIH5kaXI6RGlyZWN0IHNcbiAgbGV0IGttcF9yY29tcGlsZSBzID0ga21wX2NvbXBpbGVfIH5kaXI6UmV2ZXJzZSBzXG5cbiAgKCogcHJvcGVyIHNlYXJjaCBmdW5jdGlvbi5cbiAgICAgW2ldIGluZGV4IGluIFtzXVxuICAgICBbal0gaW5kZXggaW4gW3BhdHRlcm5dXG4gICAgIFtsZW5dIGxlbmd0aCBvZiBbc10gKilcbiAgbGV0IGttcF9maW5kIH5wYXR0ZXJuIHMgaWR4ID1cbiAgICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgICBsZXQgaSA9IHJlZiBpZHggaW5cbiAgICBsZXQgaiA9IHJlZiAwIGluXG4gICAgbGV0IHBhdF9sZW4gPSBrbXBfcGF0dGVybl9sZW5ndGggcGF0dGVybiBpblxuICAgIHdoaWxlICFqIDwgcGF0X2xlbiAmJiAhaSArICFqIDwgbGVuIGRvXG4gICAgICBsZXQgYyA9IFN0cmluZy5nZXQgcyAoIWkgKyAhaikgaW5cbiAgICAgIGxldCBleHBlY3RlZCA9IFN0cmluZy5nZXQgcGF0dGVybi5zdHIgIWogaW5cbiAgICAgIGlmIENDQ2hhci5lcXVhbCBjIGV4cGVjdGVkIHRoZW5cbiAgICAgICAgKCogY2hhciBtYXRjaGVzICopXG4gICAgICAgIGluY3IgalxuICAgICAgZWxzZSAoXG4gICAgICAgIGxldCBmYWlsX29mZnNldCA9IHBhdHRlcm4uZmFpbHVyZS4oIWopIGluXG4gICAgICAgIGlmIGZhaWxfb2Zmc2V0ID49IDAgdGhlbiAoXG4gICAgICAgICAgYXNzZXJ0IChmYWlsX29mZnNldCA8ICFqKTtcbiAgICAgICAgICAoKiBmb2xsb3cgdGhlIGZhaWx1cmUgbGluayAqKVxuICAgICAgICAgIGkgOj0gIWkgKyAhaiAtIGZhaWxfb2Zmc2V0O1xuICAgICAgICAgIGogOj0gZmFpbF9vZmZzZXRcbiAgICAgICAgKSBlbHNlIChcbiAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgcGF0dGVybiAqKVxuICAgICAgICAgIGogOj0gMDtcbiAgICAgICAgICBpbmNyIGlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIGRvbmU7XG4gICAgaWYgIWogPSBwYXRfbGVuIHRoZW5cbiAgICAgICFpXG4gICAgZWxzZVxuICAgICAgLTFcblxuICAoKiBwcm9wZXIgc2VhcmNoIGZ1bmN0aW9uLCBmcm9tIHRoZSByaWdodC5cbiAgICAgW2ldIGluZGV4IGluIFtzXVxuICAgICBbal0gaW5kZXggaW4gW3BhdHRlcm5dXG4gICAgIFtsZW5dIGxlbmd0aCBvZiBbc10gKilcbiAgbGV0IGttcF9yZmluZCB+cGF0dGVybiBzIGlkeCA9XG4gICAgbGV0IGxlbiA9IGxlbmd0aCBzIGluXG4gICAgbGV0IGkgPSByZWYgKGxlbiAtIGlkeCAtIDEpIGluXG4gICAgbGV0IGogPSByZWYgMCBpblxuICAgIGxldCBwYXRfbGVuID0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm4gaW5cbiAgICB3aGlsZSAhaiA8IHBhdF9sZW4gJiYgIWkgKyAhaiA8IGxlbiBkb1xuICAgICAgbGV0IGMgPSBTdHJpbmcuZ2V0IHMgKGxlbiAtICFpIC0gIWogLSAxKSBpblxuICAgICAgbGV0IGV4cGVjdGVkID1cbiAgICAgICAgU3RyaW5nLmdldCBwYXR0ZXJuLnN0ciAoU3RyaW5nLmxlbmd0aCBwYXR0ZXJuLnN0ciAtICFqIC0gMSlcbiAgICAgIGluXG4gICAgICBpZiBDQ0NoYXIuZXF1YWwgYyBleHBlY3RlZCB0aGVuXG4gICAgICAgICgqIGNoYXIgbWF0Y2hlcyAqKVxuICAgICAgICBpbmNyIGpcbiAgICAgIGVsc2UgKFxuICAgICAgICBsZXQgZmFpbF9vZmZzZXQgPSBwYXR0ZXJuLmZhaWx1cmUuKCFqKSBpblxuICAgICAgICBpZiBmYWlsX29mZnNldCA+PSAwIHRoZW4gKFxuICAgICAgICAgIGFzc2VydCAoZmFpbF9vZmZzZXQgPCAhaik7XG4gICAgICAgICAgKCogZm9sbG93IHRoZSBmYWlsdXJlIGxpbmsgKilcbiAgICAgICAgICBpIDo9ICFpICsgIWogLSBmYWlsX29mZnNldDtcbiAgICAgICAgICBqIDo9IGZhaWxfb2Zmc2V0XG4gICAgICAgICkgZWxzZSAoXG4gICAgICAgICAgKCogYmVnaW5uaW5nIG9mIHBhdHRlcm4gKilcbiAgICAgICAgICBqIDo9IDA7XG4gICAgICAgICAgaW5jciBpXG4gICAgICAgIClcbiAgICAgIClcbiAgICBkb25lO1xuICAgICgqIGFkanVzdCByZXN1bHQ6IGZpcnN0LCBbcmVzID0gc3RyaW5nLmxlbmd0aCBzIC0gcmVzIC0xXSB0byBjb252ZXJ0XG4gICAgICAgYmFjayB0byByZWFsIGluZGljZXM7IHRoZW4sIHdoYXQgd2UgZ290IGlzIGFjdHVhbGx5IHRoZSBwb3NpdGlvblxuICAgICAgIG9mIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHNvIHdlIHN1YnRyYWN0IHRoZSBbbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIC0xXVxuICAgICAgIHRvIG9idGFpbiB0aGUgcmVhbCByZXN1bHQuICopXG4gICAgaWYgIWogPSBwYXRfbGVuIHRoZW5cbiAgICAgIGxlbiAtICFpIC0ga21wX3BhdHRlcm5fbGVuZ3RoIHBhdHRlcm5cbiAgICBlbHNlXG4gICAgICAtMVxuXG4gIHR5cGUgJ2EgcGF0dGVybiA9IFBfY2hhciBvZiBjaGFyIHwgUF9LTVAgb2YgJ2Ega21wX3BhdHRlcm5cblxuICBsZXQgcGF0dGVybl9sZW5ndGggPSBmdW5jdGlvblxuICAgIHwgUF9jaGFyIF8gLT4gMVxuICAgIHwgUF9LTVAgcCAtPiBrbXBfcGF0dGVybl9sZW5ndGggcFxuXG4gIGxldCBjb21waWxlIHN1YiA6IFsgYERpcmVjdCBdIHBhdHRlcm4gPVxuICAgIGlmIGxlbmd0aCBzdWIgPSAxIHRoZW5cbiAgICAgIFBfY2hhciBzdWIuWzBdXG4gICAgZWxzZVxuICAgICAgUF9LTVAgKGttcF9jb21waWxlIHN1YilcblxuICBsZXQgcmNvbXBpbGUgc3ViIDogWyBgUmV2ZXJzZSBdIHBhdHRlcm4gPVxuICAgIGlmIGxlbmd0aCBzdWIgPSAxIHRoZW5cbiAgICAgIFBfY2hhciBzdWIuWzBdXG4gICAgZWxzZVxuICAgICAgUF9LTVAgKGttcF9yY29tcGlsZSBzdWIpXG5cbiAgbGV0IGZpbmQgPyhzdGFydCA9IDApIH4ocGF0dGVybiA6IFsgYERpcmVjdCBdIHBhdHRlcm4pIHMgPVxuICAgIG1hdGNoIHBhdHRlcm4gd2l0aFxuICAgIHwgUF9jaGFyIGMgLT4gKHRyeSBTdHJpbmcuaW5kZXhfZnJvbSBzIHN0YXJ0IGMgd2l0aCBOb3RfZm91bmQgLT4gLTEpXG4gICAgfCBQX0tNUCBwYXR0ZXJuIC0+IGttcF9maW5kIH5wYXR0ZXJuIHMgc3RhcnRcblxuICBsZXQgcmZpbmQgP3N0YXJ0IH4ocGF0dGVybiA6IFsgYFJldmVyc2UgXSBwYXR0ZXJuKSBzID1cbiAgICBsZXQgc3RhcnQgPVxuICAgICAgbWF0Y2ggc3RhcnQgd2l0aFxuICAgICAgfCBTb21lIG4gLT4gblxuICAgICAgfCBOb25lIC0+IFN0cmluZy5sZW5ndGggcyAtIDFcbiAgICBpblxuICAgIG1hdGNoIHBhdHRlcm4gd2l0aFxuICAgIHwgUF9jaGFyIGMgLT4gKHRyeSBTdHJpbmcucmluZGV4X2Zyb20gcyBzdGFydCBjIHdpdGggTm90X2ZvdW5kIC0+IC0xKVxuICAgIHwgUF9LTVAgcGF0dGVybiAtPiBrbXBfcmZpbmQgfnBhdHRlcm4gcyBzdGFydFxuZW5kXG5cbmxldCBmaW5kID8oc3RhcnQgPSAwKSB+c3ViID1cbiAgbGV0IHBhdHRlcm4gPSBGaW5kLmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+IEZpbmQuZmluZCB+c3RhcnQgfnBhdHRlcm4gc1xuXG5sZXQgZmluZF9hbGwgPyhzdGFydCA9IDApIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgZnVuIHMgLT5cbiAgICBsZXQgaSA9IHJlZiBzdGFydCBpblxuICAgIGZ1biAoKSAtPlxuICAgICAgbGV0IHJlcyA9IEZpbmQuZmluZCB+c3RhcnQ6IWkgfnBhdHRlcm4gcyBpblxuICAgICAgaWYgcmVzID0gfi0xIHRoZW5cbiAgICAgICAgTm9uZVxuICAgICAgZWxzZSAoXG4gICAgICAgIGkgOj0gcmVzICsgMTtcbiAgICAgICAgKCogcG9zc2libGUgb3ZlcmxhcCAqKVxuICAgICAgICBTb21lIHJlc1xuICAgICAgKVxuXG5sZXQgZmluZF9hbGxfbCA/c3RhcnQgfnN1YiBzID1cbiAgbGV0IHJlYyBhdXggYWNjIGcgPVxuICAgIG1hdGNoIGcgKCkgd2l0aFxuICAgIHwgTm9uZSAtPiBMaXN0LnJldiBhY2NcbiAgICB8IFNvbWUgaSAtPiBhdXggKGkgOjogYWNjKSBnXG4gIGluXG4gIGF1eCBbXSAoZmluZF9hbGwgP3N0YXJ0IH5zdWIgcylcblxubGV0IG1lbSA/c3RhcnQgfnN1YiBzID0gZmluZCA/c3RhcnQgfnN1YiBzID49IDBcblxubGV0IHJmaW5kIH5zdWIgPVxuICBsZXQgcGF0dGVybiA9IEZpbmQucmNvbXBpbGUgc3ViIGluXG4gIGZ1biBzIC0+IEZpbmQucmZpbmQgfnN0YXJ0OihTdHJpbmcubGVuZ3RoIHMgLSAxKSB+cGF0dGVybiBzXG5cbigqIFJlcGxhY2Ugc3Vic3RyaW5nIFtzLltwb3NdIOKApiBzLltwb3MrbGVuLTFdXSBieSBbYnldIGluIFtzXSAqKVxubGV0IHJlcGxhY2VfYXRfIH5wb3MgfmxlbiB+YnkgcyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobGVuZ3RoIHMgKyBsZW5ndGggYnkgLSBsZW4pIGluXG4gIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAwIHBvcztcbiAgQnVmZmVyLmFkZF9zdHJpbmcgYiBieTtcbiAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzIChwb3MgKyBsZW4pIChTdHJpbmcubGVuZ3RoIHMgLSBwb3MgLSBsZW4pO1xuICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmVwbGFjZSA/KHdoaWNoID0gYEFsbCkgfnN1YiB+YnkgcyA9XG4gIGlmIGlzX2VtcHR5IHN1YiB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcucmVwbGFjZVwiO1xuICBtYXRjaCB3aGljaCB3aXRoXG4gIHwgYExlZnQgLT5cbiAgICBsZXQgaSA9IGZpbmQgfnN0YXJ0OjAgfnN1YiBzIGluXG4gICAgaWYgaSA+PSAwIHRoZW5cbiAgICAgIHJlcGxhY2VfYXRfIH5wb3M6aSB+bGVuOihTdHJpbmcubGVuZ3RoIHN1YikgfmJ5IHNcbiAgICBlbHNlXG4gICAgICBzXG4gIHwgYFJpZ2h0IC0+XG4gICAgbGV0IGkgPSByZmluZCB+c3ViIHMgaW5cbiAgICBpZiBpID49IDAgdGhlblxuICAgICAgcmVwbGFjZV9hdF8gfnBvczppIH5sZW46KFN0cmluZy5sZW5ndGggc3ViKSB+Ynkgc1xuICAgIGVsc2VcbiAgICAgIHNcbiAgfCBgQWxsIC0+XG4gICAgKCogY29tcGlsZSBzZWFyY2ggcGF0dGVybiBvbmx5IG9uY2UgKilcbiAgICBsZXQgcGF0dGVybiA9IEZpbmQuY29tcGlsZSBzdWIgaW5cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgICBsZXQgc3RhcnQgPSByZWYgMCBpblxuICAgIHdoaWxlICFzdGFydCA8IFN0cmluZy5sZW5ndGggcyBkb1xuICAgICAgbGV0IGkgPSBGaW5kLmZpbmQgfnN0YXJ0OiFzdGFydCB+cGF0dGVybiBzIGluXG4gICAgICBpZiBpID49IDAgdGhlbiAoXG4gICAgICAgICgqIGJldHdlZW4gbGFzdCBhbmQgY3VyIG9jY3VycmVuY2VzICopXG4gICAgICAgIEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIgcyAhc3RhcnQgKGkgLSAhc3RhcnQpO1xuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBiIGJ5O1xuICAgICAgICBzdGFydCA6PSBpICsgU3RyaW5nLmxlbmd0aCBzdWJcbiAgICAgICkgZWxzZSAoXG4gICAgICAgICgqIGFkZCByZW1haW5kZXIgKilcbiAgICAgICAgQnVmZmVyLmFkZF9zdWJzdHJpbmcgYiBzICFzdGFydCAoU3RyaW5nLmxlbmd0aCBzIC0gIXN0YXJ0KTtcbiAgICAgICAgc3RhcnQgOj0gU3RyaW5nLmxlbmd0aCBzICgqIHN0b3AgKilcbiAgICAgIClcbiAgICBkb25lO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbm1vZHVsZSBTcGxpdCA9IHN0cnVjdFxuICB0eXBlIGRyb3BfaWZfZW1wdHkgPSB7IGZpcnN0OiBib29sOyBsYXN0OiBib29sIH1cblxuICBsZXQgbm9fZHJvcCA9IHsgZmlyc3QgPSBmYWxzZTsgbGFzdCA9IGZhbHNlIH1cbiAgbGV0IGRlZmF1bHRfZHJvcCA9IG5vX2Ryb3BcblxuICB0eXBlIHNwbGl0X3N0YXRlID0gU3BsaXRTdG9wIHwgU3BsaXRBdCBvZiBpbnQgKCogcHJldmlvdXMgKilcblxuICBsZXQgcmVjIF9zcGxpdCB+YnkgcyBzdGF0ZSA9XG4gICAgbWF0Y2ggc3RhdGUgd2l0aFxuICAgIHwgU3BsaXRTdG9wIC0+IE5vbmVcbiAgICB8IFNwbGl0QXQgcHJldiAtPiBfc3BsaXRfc2VhcmNoIH5ieSBzIHByZXZcblxuICBhbmQgX3NwbGl0X3NlYXJjaCB+YnkgcyBwcmV2ID1cbiAgICBsZXQgaiA9IEZpbmQuZmluZCB+c3RhcnQ6cHJldiB+cGF0dGVybjpieSBzIGluXG4gICAgaWYgaiA8IDAgdGhlblxuICAgICAgU29tZSAoU3BsaXRTdG9wLCBwcmV2LCBTdHJpbmcubGVuZ3RoIHMgLSBwcmV2KVxuICAgIGVsc2VcbiAgICAgIFNvbWUgKFNwbGl0QXQgKGogKyBGaW5kLnBhdHRlcm5fbGVuZ3RoIGJ5KSwgcHJldiwgaiAtIHByZXYpXG5cbiAgbGV0IF90dXBsZTMgeCB5IHogPSB4LCB5LCB6XG5cbiAgbGV0IF9ta2dlbiB+ZHJvcCB+YnkgcyBrID1cbiAgICBsZXQgc3RhdGUgPSByZWYgKFNwbGl0QXQgMCkgaW5cbiAgICBsZXQgYnkgPSBGaW5kLmNvbXBpbGUgYnkgaW5cbiAgICBsZXQgcmVjIG5leHQgKCkgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzICFzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPlxuICAgICAgICBzdGF0ZSA6PSBzdGF0ZSc7XG4gICAgICAgIG5leHQgKClcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IE5vbmVcbiAgICAgIHwgU29tZSAoc3RhdGUnLCBpLCBsZW4pIC0+XG4gICAgICAgIHN0YXRlIDo9IHN0YXRlJztcbiAgICAgICAgU29tZSAoayBzIGkgbGVuKVxuICAgIGluXG4gICAgbmV4dFxuXG4gIGxldCBnZW4gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2dlbiB+ZHJvcCB+YnkgcyBfdHVwbGUzXG4gIGxldCBnZW5fY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtnZW4gfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtsaXN0IH5kcm9wIH5ieSBzIGsgPVxuICAgIGxldCBieSA9IEZpbmQuY29tcGlsZSBieSBpblxuICAgIGxldCByZWMgYnVpbGQgYWNjIHN0YXRlID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gTGlzdC5yZXYgYWNjXG4gICAgICB8IFNvbWUgKHN0YXRlJywgMCwgMCkgd2hlbiBkcm9wLmZpcnN0IC0+IGJ1aWxkIGFjYyBzdGF0ZSdcbiAgICAgIHwgU29tZSAoXywgaSwgMCkgd2hlbiBkcm9wLmxhc3QgJiYgaSA9IGxlbmd0aCBzIC0+IExpc3QucmV2IGFjY1xuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gYnVpbGQgKGsgcyBpIGxlbiA6OiBhY2MpIHN0YXRlJ1xuICAgIGluXG4gICAgYnVpbGQgW10gKFNwbGl0QXQgMClcblxuICBsZXQgbGlzdF8gPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgX3R1cGxlM1xuICBsZXQgbGlzdF9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta2xpc3QgfmRyb3AgfmJ5IHMgU3RyaW5nLnN1YlxuXG4gIGxldCBfbWtzZXEgfmRyb3AgfmJ5IHMgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBtYWtlIHN0YXRlICgpID1cbiAgICAgIG1hdGNoIF9zcGxpdCB+YnkgcyBzdGF0ZSB3aXRoXG4gICAgICB8IE5vbmUgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBtYWtlIHN0YXRlJyAoKVxuICAgICAgfCBTb21lIChfLCBpLCAwKSB3aGVuIGRyb3AubGFzdCAmJiBpID0gbGVuZ3RoIHMgLT4gU2VxLk5pbFxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT4gU2VxLkNvbnMgKGsgcyBpIGxlbiwgbWFrZSBzdGF0ZScpXG4gICAgaW5cbiAgICBtYWtlIChTcGxpdEF0IDApXG5cbiAgbGV0IHNlcSA/KGRyb3AgPSBkZWZhdWx0X2Ryb3ApIH5ieSBzID0gX21rc2VxIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IHNlcV9jcHkgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta3NlcSB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IF9ta19pdGVyIH5kcm9wIH5ieSBzIGYgayA9XG4gICAgbGV0IGJ5ID0gRmluZC5jb21waWxlIGJ5IGluXG4gICAgbGV0IHJlYyBhdXggc3RhdGUgPVxuICAgICAgbWF0Y2ggX3NwbGl0IH5ieSBzIHN0YXRlIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIDAsIDApIHdoZW4gZHJvcC5maXJzdCAtPiBhdXggc3RhdGUnXG4gICAgICB8IFNvbWUgKF8sIGksIDApIHdoZW4gZHJvcC5sYXN0ICYmIGkgPSBsZW5ndGggcyAtPiAoKVxuICAgICAgfCBTb21lIChzdGF0ZScsIGksIGxlbikgLT5cbiAgICAgICAgayAoZiBzIGkgbGVuKTtcbiAgICAgICAgYXV4IHN0YXRlJ1xuICAgIGluXG4gICAgYXV4IChTcGxpdEF0IDApXG5cbiAgbGV0IGl0ZXIgPyhkcm9wID0gZGVmYXVsdF9kcm9wKSB+YnkgcyA9IF9ta19pdGVyIH5kcm9wIH5ieSBzIF90dXBsZTNcbiAgbGV0IGl0ZXJfY3B5ID8oZHJvcCA9IGRlZmF1bHRfZHJvcCkgfmJ5IHMgPSBfbWtfaXRlciB+ZHJvcCB+YnkgcyBTdHJpbmcuc3ViXG5cbiAgbGV0IGxlZnRfZXhuIH5ieSBzID1cbiAgICBsZXQgaSA9IGZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgbGVmdCB+YnkgcyA9IHRyeSBTb21lIChsZWZ0X2V4biB+Ynkgcykgd2l0aCBOb3RfZm91bmQgLT4gTm9uZVxuXG4gIGxldCByaWdodF9leG4gfmJ5IHMgPVxuICAgIGxldCBpID0gcmZpbmQgfnN1YjpieSBzIGluXG4gICAgaWYgaSA9IH4tMSB0aGVuXG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgICBlbHNlIChcbiAgICAgIGxldCByaWdodCA9IGkgKyBTdHJpbmcubGVuZ3RoIGJ5IGluXG4gICAgICBTdHJpbmcuc3ViIHMgMCBpLCBTdHJpbmcuc3ViIHMgcmlnaHQgKFN0cmluZy5sZW5ndGggcyAtIHJpZ2h0KVxuICAgIClcblxuICBsZXQgcmlnaHQgfmJ5IHMgPSB0cnkgU29tZSAocmlnaHRfZXhuIH5ieSBzKSB3aXRoIE5vdF9mb3VuZCAtPiBOb25lXG5lbmRcblxubGV0IHNwbGl0IH5ieSBzID0gU3BsaXQubGlzdF9jcHkgfmJ5IHNcblxubGV0IGNvbXBhcmVfdmVyc2lvbnMgYSBiID1cbiAgbGV0IG9mX2ludCBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZSBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCBvZl9pbnQgeCwgb2ZfaW50IHkgd2l0aFxuICAgICAgfCBOb25lLCBOb25lIC0+XG4gICAgICAgIGxldCBjID0gU3RyaW5nLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICAgIHwgTm9uZSwgU29tZSBfIC0+IC0xXG4gICAgICB8IFNvbWUgeCwgU29tZSB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKFNwbGl0Lmdlbl9jcHkgfmJ5OlwiLlwiIGEpIChTcGxpdC5nZW5fY3B5IH5ieTpcIi5cIiBiKVxuXG50eXBlIG5hdF9jaHVuayA9IE5DX2NoYXIgb2YgY2hhciB8IE5DX2ludCBvZiBpbnRcblxubGV0IGNvbXBhcmVfbmF0dXJhbCBhIGIgPVxuICAoKiBzdHJlYW0gb2YgY2h1bmtzICopXG4gIGxldCBjaHVua3MgcyA6IHVuaXQgLT4gbmF0X2NodW5rIG9wdGlvbiA9XG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCByZWMgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA9IGxlbmd0aCBzIHRoZW5cbiAgICAgICAgTm9uZVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50IChDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCcpXG4gICAgICAgIHwgYyAtPlxuICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICBTb21lIChOQ19jaGFyIGMpXG4gICAgICApXG4gICAgYW5kIHJlYWRfaW50IG4gPVxuICAgICAgaWYgIWkgPSBsZW5ndGggcyB0aGVuXG4gICAgICAgIFNvbWUgKE5DX2ludCBuKVxuICAgICAgZWxzZSAoXG4gICAgICAgIG1hdGNoIFN0cmluZy5nZXQgcyAhaSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICAgICAgaW5jciBpO1xuICAgICAgICAgIHJlYWRfaW50ICgoMTAgKiBuKSArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJylcbiAgICAgICAgfCBfIC0+IFNvbWUgKE5DX2ludCBuKVxuICAgICAgKVxuICAgIGluXG4gICAgbmV4dFxuICBpblxuICBsZXQgcmVjIGNtcF9yZWMgYSBiID1cbiAgICBtYXRjaCBhICgpLCBiICgpIHdpdGhcbiAgICB8IE5vbmUsIE5vbmUgLT4gMFxuICAgIHwgU29tZSBfLCBOb25lIC0+IDFcbiAgICB8IE5vbmUsIFNvbWUgXyAtPiAtMVxuICAgIHwgU29tZSB4LCBTb21lIHkgLT5cbiAgICAgIChtYXRjaCB4LCB5IHdpdGhcbiAgICAgIHwgTkNfY2hhciB4LCBOQ19jaGFyIHkgLT5cbiAgICAgICAgbGV0IGMgPSBDaGFyLmNvbXBhcmUgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGJcbiAgICAgIHwgTkNfaW50IF8sIE5DX2NoYXIgXyAtPiAxXG4gICAgICB8IE5DX2NoYXIgXywgTkNfaW50IF8gLT4gLTFcbiAgICAgIHwgTkNfaW50IHgsIE5DX2ludCB5IC0+XG4gICAgICAgIGxldCBjID0gY29tcGFyZV9pbnQgeCB5IGluXG4gICAgICAgIGlmIGMgPD4gMCB0aGVuXG4gICAgICAgICAgY1xuICAgICAgICBlbHNlXG4gICAgICAgICAgY21wX3JlYyBhIGIpXG4gIGluXG4gIGNtcF9yZWMgKGNodW5rcyBhKSAoY2h1bmtzIGIpXG5cbmxldCBlZGl0X2Rpc3RhbmNlID8oY3V0b2ZmID0gbWF4X2ludCkgczEgczIgPVxuICBsZXQgbjEgPSBsZW5ndGggczEgaW5cbiAgbGV0IG4yID0gbGVuZ3RoIHMyIGluXG4gIGlmIG4xID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMlxuICBlbHNlIGlmIG4yID0gMCB0aGVuXG4gICAgbWluIGN1dG9mZiBuMVxuICBlbHNlIGlmIGVxdWFsIHMxIHMyIHRoZW5cbiAgICAwXG4gIGVsc2UgaWYgbjEgLSBuMiA+PSBjdXRvZmYgfHwgbjIgLSBuMSA+PSBjdXRvZmYgdGhlblxuICAgIGN1dG9mZlxuICAoKiBhdCBsZWFzdCBjdXRvZmYgaW5zZXJ0cyAqKVxuICBlbHNlIChcbiAgICB0cnlcbiAgICAgICgqIGRpc3RhbmNlIHZlY3RvcnMgKHYwPXByZXZpb3VzLCB2MT1jdXJyZW50KSAqKVxuICAgICAgbGV0IHYwID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgbGV0IHYxID0gQXJyYXkubWFrZSAobGVuZ3RoIHMyICsgMSkgMCBpblxuICAgICAgKCogaW5pdGlhbGl6ZSB2MDogdjAoaSkgPSBBKDApKGkpID0gZGVsZXRlIGkgY2hhcnMgZnJvbSB0ICopXG4gICAgICBsZXQgbG93ZXJfYm91bmQgPSByZWYgbWF4X2ludCBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMiBkb1xuICAgICAgICB2MC4oaSkgPC0gaVxuICAgICAgZG9uZTtcbiAgICAgICgqIG1haW4gbG9vcCBmb3IgdGhlIGJvdHRvbSB1cCBkeW5hbWljIGFsZ29yaXRobSAqKVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBzMSAtIDEgZG9cbiAgICAgICAgKCogZmlyc3QgZWRpdCBkaXN0YW5jZSBpcyB0aGUgZGVsZXRpb24gb2YgaSsxIGVsZW1lbnRzIGZyb20gcyAqKVxuICAgICAgICB2MS4oMCkgPC0gaSArIDE7XG5cbiAgICAgICAgKCogdHJ5IGFkZC9kZWxldGUvcmVwbGFjZSBvcGVyYXRpb25zICopXG4gICAgICAgIGZvciBqID0gMCB0byBsZW5ndGggczIgLSAxIGRvXG4gICAgICAgICAgbGV0IGNvc3QgPVxuICAgICAgICAgICAgaWYgQ2hhci5lcXVhbCAoU3RyaW5nLmdldCBzMSBpKSAoU3RyaW5nLmdldCBzMiBqKSB0aGVuXG4gICAgICAgICAgICAgIDBcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgIGluXG4gICAgICAgICAgdjEuKGogKyAxKSA8LSBtaW4gKHYxLihqKSArIDEpIChtaW4gKHYwLihqICsgMSkgKyAxKSAodjAuKGopICsgY29zdCkpXG4gICAgICAgIGRvbmU7XG5cbiAgICAgICAgaWZcbiAgICAgICAgICBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjFcbiAgICAgICAgICAmJiBpIDw9IDIgKiBjdXRvZmZcbiAgICAgICAgICAmJiAoMiAqIGN1dG9mZikgLSBpIDwgU3RyaW5nLmxlbmd0aCBzMlxuICAgICAgICB0aGVuXG4gICAgICAgICAgbG93ZXJfYm91bmQgOj0gbWluICFsb3dlcl9ib3VuZCB2MS4oKDIgKiBjdXRvZmYpIC0gaSk7XG4gICAgICAgICgqIGRpZCB3ZSBjb21wdXRlIHVwIHRvIHRoZSBkaWFnb25hbCAyKmN1dG9mZisxPyAqKVxuICAgICAgICBpZiBjdXRvZmYgPCBBcnJheS5sZW5ndGggdjEgJiYgaSA9IGN1dG9mZiAqIDIgJiYgIWxvd2VyX2JvdW5kID49IGN1dG9mZlxuICAgICAgICB0aGVuXG4gICAgICAgICAgcmFpc2Vfbm90cmFjZSBFeGl0O1xuXG4gICAgICAgICgqIGNvcHkgdjEgaW50byB2MCBmb3IgbmV4dCBpdGVyYXRpb24gKilcbiAgICAgICAgQXJyYXkuYmxpdCB2MSAwIHYwIDAgKGxlbmd0aCBzMiArIDEpXG4gICAgICBkb25lO1xuICAgICAgdjEuKGxlbmd0aCBzMilcbiAgICB3aXRoIEV4aXQgLT4gY3V0b2ZmXG4gIClcblxubGV0IHJlcGVhdCBzIG4gPVxuICBhc3NlcnQgKG4gPj0gMCk7XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYXNzZXJ0IChsZW4gPiAwKTtcbiAgaW5pdCAobGVuICogbikgKGZ1biBpIC0+IHMuW2kgbW9kIGxlbl0pXG5cbmxldCBwcmVmaXggfnByZSBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcHJlIGluXG4gIGlmIGxlbiA+IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgZmFsc2VcbiAgZWxzZSAoXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgaSkgKFN0cmluZy51bnNhZmVfZ2V0IHByZSBpKVxuICAgICAgdGhlblxuICAgICAgICBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBjaGVjayAoaSArIDEpXG4gICAgaW5cbiAgICBjaGVjayAwXG4gIClcblxubGV0IHN1ZmZpeCB+c3VmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdWYgaW5cbiAgaWYgbGVuID4gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBmYWxzZVxuICBlbHNlIChcbiAgICBsZXQgb2ZmID0gU3RyaW5nLmxlbmd0aCBzIC0gbGVuIGluXG4gICAgbGV0IHJlYyBjaGVjayBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlblxuICAgICAgICB0cnVlXG4gICAgICBlbHNlIGlmXG4gICAgICAgIFN0ZGxpYi4oIDw+ICkgKFN0cmluZy51bnNhZmVfZ2V0IHMgKG9mZiArIGkpKSAoU3RyaW5nLnVuc2FmZV9nZXQgc3VmIGkpXG4gICAgICB0aGVuXG4gICAgICAgIGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIGNoZWNrIChpICsgMSlcbiAgICBpblxuICAgIGNoZWNrIDBcbiAgKVxuXG5sZXQgdGFrZSBuIHMgPVxuICBpZiBuIDwgU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgMCBuXG4gIGVsc2VcbiAgICBzXG5cbmxldCBkcm9wIG4gcyA9XG4gIGlmIG4gPCBTdHJpbmcubGVuZ3RoIHMgdGhlblxuICAgIFN0cmluZy5zdWIgcyBuIChTdHJpbmcubGVuZ3RoIHMgLSBuKVxuICBlbHNlXG4gICAgXCJcIlxuXG5sZXQgdGFrZV9kcm9wIG4gcyA9IHRha2UgbiBzLCBkcm9wIG4gc1xuXG5sZXQgY2hvcF9zdWZmaXggfnN1ZiBzID1cbiAgaWYgc3VmZml4IH5zdWYgcyB0aGVuXG4gICAgU29tZSAoU3RyaW5nLnN1YiBzIDAgKFN0cmluZy5sZW5ndGggcyAtIFN0cmluZy5sZW5ndGggc3VmKSlcbiAgZWxzZVxuICAgIE5vbmVcblxubGV0IGNob3BfcHJlZml4IH5wcmUgcyA9XG4gIGlmIHByZWZpeCB+cHJlIHMgdGhlblxuICAgIFNvbWVcbiAgICAgIChTdHJpbmcuc3ViIHMgKFN0cmluZy5sZW5ndGggcHJlKSAoU3RyaW5nLmxlbmd0aCBzIC0gU3RyaW5nLmxlbmd0aCBwcmUpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5sZXQgYmxpdCA9IFN0cmluZy5ibGl0XG5cbmxldCBmb2xkIGYgYWNjIHMgPVxuICBsZXQgcmVjIGZvbGRfcmVjIGYgYWNjIHMgaSA9XG4gICAgaWYgaSA9IFN0cmluZy5sZW5ndGggcyB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkX3JlYyBmIChmIGFjYyBzLltpXSkgcyAoaSArIDEpXG4gIGluXG4gIGZvbGRfcmVjIGYgYWNjIHMgMFxuXG5sZXQgZm9sZGkgZiBhY2MgcyA9XG4gIGxldCByZWMgZm9sZF9yZWMgZiBhY2MgcyBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzIHRoZW5cbiAgICAgIGFjY1xuICAgIGVsc2VcbiAgICAgIGZvbGRfcmVjIGYgKGYgYWNjIGkgcy5baV0pIHMgKGkgKyAxKVxuICBpblxuICBmb2xkX3JlYyBmIGFjYyBzIDBcblxubGV0IHBhZCA/KHNpZGUgPSBgTGVmdCkgPyhjID0gJyAnKSBuIHMgPVxuICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgaWYgbGVuX3MgPj0gbiB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgcGFkX2xlbiA9IG4gLSBsZW5fcyBpblxuICAgIG1hdGNoIHNpZGUgd2l0aFxuICAgIHwgYExlZnQgLT5cbiAgICAgIGluaXQgbiAoZnVuIGkgLT5cbiAgICAgICAgICBpZiBpIDwgcGFkX2xlbiB0aGVuXG4gICAgICAgICAgICBjXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcy5baSAtIHBhZF9sZW5dKVxuICAgIHwgYFJpZ2h0IC0+XG4gICAgICBpbml0IG4gKGZ1biBpIC0+XG4gICAgICAgICAgaWYgaSA8IGxlbl9zIHRoZW5cbiAgICAgICAgICAgIHMuW2ldXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYylcbiAgKVxuXG5sZXQgX3RvX2dlbiBzIGkwIGxlbiA9XG4gIGxldCBpID0gcmVmIGkwIGluXG4gIGZ1biAoKSAtPlxuICAgIGlmICFpID0gaTAgKyBsZW4gdGhlblxuICAgICAgTm9uZVxuICAgIGVsc2UgKFxuICAgICAgbGV0IGMgPSBTdHJpbmcudW5zYWZlX2dldCBzICFpIGluXG4gICAgICBpbmNyIGk7XG4gICAgICBTb21lIGNcbiAgICApXG5cbmxldCB0b19nZW4gcyA9IF90b19nZW4gcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5sZXQgb2ZfY2hhciBjID0gU3RyaW5nLm1ha2UgMSBjXG5cbmxldCBvZl9nZW4gZyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAzMiBpblxuICBsZXQgcmVjIGF1eCAoKSA9XG4gICAgbWF0Y2ggZyAoKSB3aXRoXG4gICAgfCBOb25lIC0+IEJ1ZmZlci5jb250ZW50cyBiXG4gICAgfCBTb21lIGMgLT5cbiAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGM7XG4gICAgICBhdXggKClcbiAgaW5cbiAgYXV4ICgpXG5cbmxldCB0b19pdGVyIHMgayA9IFN0cmluZy5pdGVyIGsgc1xuXG5sZXQgcmVjIF90b19zZXEgcyBpIGxlbiAoKSA9XG4gIGlmIGxlbiA9IDAgdGhlblxuICAgIFNlcS5OaWxcbiAgZWxzZVxuICAgIFNlcS5Db25zIChzLltpXSwgX3RvX3NlcSBzIChpICsgMSkgKGxlbiAtIDEpKVxuXG5sZXQgdG9fc2VxIHMgPSBfdG9fc2VxIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgb2ZfaXRlciBpID1cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDMyIGluXG4gIGkgKEJ1ZmZlci5hZGRfY2hhciBiKTtcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxubGV0IG9mX3NlcSBzZXEgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgU2VxLml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBiKSBzZXE7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCB0b19saXN0IHMgPSBfdG9fbGlzdCBzIFtdIDAgKFN0cmluZy5sZW5ndGggcylcblxubGV0IG9mX2xpc3QgbCA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChMaXN0Lmxlbmd0aCBsKSBpblxuICBMaXN0Lml0ZXIgKEJ1ZmZlci5hZGRfY2hhciBidWYpIGw7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IG9mX2FycmF5IGEgPSBpbml0IChBcnJheS5sZW5ndGggYSkgKGZ1biBpIC0+IGEuKGkpKVxubGV0IHRvX2FycmF5IHMgPSBBcnJheS5pbml0IChTdHJpbmcubGVuZ3RoIHMpIChmdW4gaSAtPiBzLltpXSlcblxubGV0IGxpbmVzX2dlbiBzID1cbiAgU3BsaXQuZ2VuX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXNfaXRlciBzID1cbiAgU3BsaXQuaXRlcl9jcHkgfmRyb3A6eyBTcGxpdC5maXJzdCA9IGZhbHNlOyBsYXN0ID0gdHJ1ZSB9IH5ieTpcIlxcblwiIHNcblxubGV0IGxpbmVzX3NlcSBzID1cbiAgU3BsaXQuc2VxX2NweSB+ZHJvcDp7IFNwbGl0LmZpcnN0ID0gZmFsc2U7IGxhc3QgPSB0cnVlIH0gfmJ5OlwiXFxuXCIgc1xuXG5sZXQgbGluZXMgcyA9XG4gIFNwbGl0Lmxpc3RfY3B5IH5kcm9wOnsgU3BsaXQuZmlyc3QgPSBmYWxzZTsgbGFzdCA9IHRydWUgfSB+Ynk6XCJcXG5cIiBzXG5cbmxldCBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgOiBCdWZmZXIudCA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IHJlYyBhdXggfmZpcnN0ICgpID1cbiAgICBtYXRjaCBnICgpIHdpdGhcbiAgICB8IE5vbmUgLT4gYlxuICAgIHwgU29tZSBzIC0+XG4gICAgICBpZiBub3QgZmlyc3QgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHNlcDtcbiAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgICAgIGF1eCB+Zmlyc3Q6ZmFsc2UgKClcbiAgaW5cbiAgYXV4IH5maXJzdDp0cnVlICgpXG5cbmxldCBjb25jYXRfZ2VuIH5zZXAgZyA9XG4gIGxldCBidWYgPSBjb25jYXRfZ2VuX2J1ZiB+c2VwIGcgaW5cbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgY29uY2F0X2l0ZXJfYnVmIH5zZXAgaSA6IEJ1ZmZlci50ID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBmaXJzdCA9IHJlZiB0cnVlIGluXG4gIGkgKGZ1biBzIC0+XG4gICAgICBpZiAhZmlyc3QgdGhlblxuICAgICAgICBmaXJzdCA6PSBmYWxzZVxuICAgICAgZWxzZVxuICAgICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgc2VwO1xuICAgICAgQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHMpO1xuICBidWZcblxubGV0IGNvbmNhdF9pdGVyIH5zZXAgaSA9XG4gIGxldCBidWYgPSBjb25jYXRfaXRlcl9idWYgfnNlcCBpIGluXG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IGNvbmNhdF9zZXFfYnVmIH5zZXAgc2VxIDogQnVmZmVyLnQgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyNTYgaW5cbiAgbGV0IGZpcnN0ID0gcmVmIHRydWUgaW5cbiAgU2VxLml0ZXJcbiAgICAoZnVuIHMgLT5cbiAgICAgIGlmICFmaXJzdCB0aGVuXG4gICAgICAgIGZpcnN0IDo9IGZhbHNlXG4gICAgICBlbHNlXG4gICAgICAgIEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBzZXA7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcylcbiAgICBzZXE7XG4gIGJ1ZlxuXG5sZXQgY29uY2F0X3NlcSB+c2VwIHNlcSA9XG4gIGxldCBidWYgPSBjb25jYXRfc2VxX2J1ZiB+c2VwIHNlcSBpblxuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzIGwgPVxuICBsZXQgbGVuID0gTGlzdC5mb2xkX2xlZnQgKGZ1biBuIHMgLT4gbiArIDEgKyBTdHJpbmcubGVuZ3RoIHMpIDAgbCBpblxuICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGxlbiBpblxuICBsZXQgcmVjIGF1eF9ibGl0IGkgbCA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPlxuICAgICAgYXNzZXJ0IChpID0gbGVuKTtcbiAgICAgIEJ5dGVzLnRvX3N0cmluZyBidWZcbiAgICB8IHMgOjogdGFpbCAtPlxuICAgICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgICBCeXRlcy5ibGl0X3N0cmluZyBzIDAgYnVmIGkgbGVuX3M7XG4gICAgICBCeXRlcy5zZXQgYnVmIChpICsgbGVuX3MpICdcXG4nO1xuICAgICAgYXV4X2JsaXQgKGkgKyBsZW5fcyArIDEpIHRhaWxcbiAgaW5cbiAgYXV4X2JsaXQgMCBsXG5cbmxldCB1bmxpbmVzX2dlbiBnID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9nZW5fYnVmIH5zZXA6XCJcXG5cIiBnIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBidWYgJ1xcbic7XG4gIEJ1ZmZlci5jb250ZW50cyBidWZcblxubGV0IHVubGluZXNfaXRlciBpID1cbiAgbGV0IGJ1ZiA9IGNvbmNhdF9pdGVyX2J1ZiB+c2VwOlwiXFxuXCIgaSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCB1bmxpbmVzX3NlcSBzZXEgPVxuICBsZXQgYnVmID0gY29uY2F0X3NlcV9idWYgfnNlcDpcIlxcblwiIHNlcSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nO1xuICBCdWZmZXIuY29udGVudHMgYnVmXG5cbmxldCBzZXQgcyBpIGMgPVxuICBpZiBpIDwgMCB8fCBpID49IFN0cmluZy5sZW5ndGggcyB0aGVuIGludmFsaWRfYXJnIFwiQ0NTdHJpbmcuc2V0XCI7XG4gIGluaXQgKFN0cmluZy5sZW5ndGggcykgKGZ1biBqIC0+XG4gICAgICBpZiBpID0gaiB0aGVuXG4gICAgICAgIGNcbiAgICAgIGVsc2VcbiAgICAgICAgcy5bal0pXG5cbmxldCBpdGVyID0gU3RyaW5nLml0ZXJcblxubGV0IGZpbHRlcl9tYXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgbWF0Y2ggZiBjIHdpdGhcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIGMnIC0+IEJ1ZmZlci5hZGRfY2hhciBidWYgYycpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgZmlsdGVyIGYgcyA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMpIGluXG4gIGl0ZXIgKGZ1biBjIC0+IGlmIGYgYyB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYykgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5sZXQgdW5pcSBlcSBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzID0gMCB0aGVuXG4gICAgc1xuICBlbHNlIChcbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBidWYgcy5bMF07XG4gICAgbGV0IF8gPVxuICAgICAgZm9sZFxuICAgICAgICAoZnVuIHByZXZpb3VzX2MgYyAtPlxuICAgICAgICAgIGlmIG5vdCAoZXEgcHJldmlvdXNfYyBjKSB0aGVuIEJ1ZmZlci5hZGRfY2hhciBidWYgYztcbiAgICAgICAgICBjKVxuICAgICAgICBzLlswXSBzXG4gICAgaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG4gIClcblxubGV0IGZsYXRfbWFwID9zZXAgZiBzID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgKFN0cmluZy5sZW5ndGggcykgaW5cbiAgaXRlcmlcbiAgICAoZnVuIGkgYyAtPlxuICAgICAgKG1hdGNoIHNlcCB3aXRoXG4gICAgICB8IFNvbWUgXyB3aGVuIGkgPSAwIC0+ICgpXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICAgIHwgU29tZSBzZXAgLT4gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIHNlcCk7XG4gICAgICBCdWZmZXIuYWRkX3N0cmluZyBidWYgKGYgYykpXG4gICAgcztcbiAgQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuXG5leGNlcHRpb24gTXlFeGl0XG5cbmxldCBmb3JfYWxsIHAgcyA9XG4gIHRyeVxuICAgIGl0ZXIgKGZ1biBjIC0+IGlmIG5vdCAocCBjKSB0aGVuIHJhaXNlIE15RXhpdCkgcztcbiAgICB0cnVlXG4gIHdpdGggTXlFeGl0IC0+IGZhbHNlXG5cbmxldCBleGlzdHMgcCBzID1cbiAgdHJ5XG4gICAgaXRlciAoZnVuIGMgLT4gaWYgcCBjIHRoZW4gcmFpc2UgTXlFeGl0KSBzO1xuICAgIGZhbHNlXG4gIHdpdGggTXlFeGl0IC0+IHRydWVcblxubGV0IGRyb3Bfd2hpbGUgZiBzID1cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbmd0aCBzICYmIGYgKHVuc2FmZV9nZXQgcyAhaSkgZG9cbiAgICBpbmNyIGlcbiAgZG9uZTtcbiAgaWYgIWkgPiAwIHRoZW5cbiAgICBzdWIgcyAhaSAobGVuZ3RoIHMgLSAhaSlcbiAgZWxzZVxuICAgIHNcblxubGV0IHJkcm9wX3doaWxlIGYgcyA9XG4gIGxldCBpID0gcmVmIChsZW5ndGggcyAtIDEpIGluXG4gIHdoaWxlICFpID49IDAgJiYgZiAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGRlY3IgaVxuICBkb25lO1xuICBpZiAhaSA8IGxlbmd0aCBzIC0gMSB0aGVuXG4gICAgc3ViIHMgMCAoIWkgKyAxKVxuICBlbHNlXG4gICAgc1xuXG4oKiBub3Rpb24gb2Ygd2hpdGVzcGFjZSBmb3IgdHJpbSAqKVxubGV0IGlzX3NwYWNlXyA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgbHRyaW0gcyA9IGRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcbmxldCBydHJpbSBzID0gcmRyb3Bfd2hpbGUgaXNfc3BhY2VfIHNcblxubGV0IG1hcDIgZiBzMSBzMiA9XG4gIGlmIGxlbmd0aCBzMSA8PiBsZW5ndGggczIgdGhlbiBpbnZhbGlkX2FyZyBcIkNDU3RyaW5nLm1hcDJcIjtcbiAgaW5pdCAoU3RyaW5nLmxlbmd0aCBzMSkgKGZ1biBpIC0+IGYgczEuW2ldIHMyLltpXSlcblxubGV0IGl0ZXIyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyMlwiO1xuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzMSAtIDEgZG9cbiAgICBmIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgaXRlcmkyIGYgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5pdGVyaTJcIjtcbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggczEgLSAxIGRvXG4gICAgZiBpIHMxLltpXSBzMi5baV1cbiAgZG9uZVxuXG5sZXQgZm9sZDIgZiBhY2MgczEgczIgPVxuICBpZiBsZW5ndGggczEgPD4gbGVuZ3RoIHMyIHRoZW4gaW52YWxpZF9hcmcgXCJDQ1N0cmluZy5mb2xkMlwiO1xuICBsZXQgcmVjIGZvbGQnIGFjYyBzMSBzMiBpID1cbiAgICBpZiBpID0gU3RyaW5nLmxlbmd0aCBzMSB0aGVuXG4gICAgICBhY2NcbiAgICBlbHNlXG4gICAgICBmb2xkJyAoZiBhY2MgczEuW2ldIHMyLltpXSkgczEgczIgKGkgKyAxKVxuICBpblxuICBmb2xkJyBhY2MgczEgczIgMFxuXG5sZXQgZm9yX2FsbDIgcCBzMSBzMiA9XG4gIHRyeVxuICAgIGl0ZXIyIChmdW4gYzEgYzIgLT4gaWYgbm90IChwIGMxIGMyKSB0aGVuIHJhaXNlIE15RXhpdCkgczEgczI7XG4gICAgdHJ1ZVxuICB3aXRoIE15RXhpdCAtPiBmYWxzZVxuXG5sZXQgZXhpc3RzMiBwIHMxIHMyID1cbiAgdHJ5XG4gICAgaXRlcjIgKGZ1biBjMSBjMiAtPiBpZiBwIGMxIGMyIHRoZW4gcmFpc2UgTXlFeGl0KSBzMSBzMjtcbiAgICBmYWxzZVxuICB3aXRoIE15RXhpdCAtPiB0cnVlXG5cbigqKiB7MiBBc2NpaSBmdW5jdGlvbnN9ICopXG5cbmxldCBlcXVhbF9jYXNlbGVzcyBzMSBzMiA6IGJvb2wgPVxuICBTdHJpbmcubGVuZ3RoIHMxID0gU3RyaW5nLmxlbmd0aCBzMlxuICAmJiBmb3JfYWxsMlxuICAgICAgIChmdW4gYzEgYzIgLT5cbiAgICAgICAgIENDQ2hhci5lcXVhbCAoQ0NDaGFyLmxvd2VyY2FzZV9hc2NpaSBjMSkgKENDQ2hhci5sb3dlcmNhc2VfYXNjaWkgYzIpKVxuICAgICAgIHMxIHMyXG5cbmxldCB0b19oZXggKHMgOiBzdHJpbmcpIDogc3RyaW5nID1cbiAgbGV0IGlfdG9faGV4IChpIDogaW50KSA9XG4gICAgaWYgaSA8IDEwIHRoZW5cbiAgICAgIENoYXIuY2hyIChpICsgQ2hhci5jb2RlICcwJylcbiAgICBlbHNlXG4gICAgICBDaGFyLmNociAoaSAtIDEwICsgQ2hhci5jb2RlICdhJylcbiAgaW5cblxuICBsZXQgcmVzID0gQnl0ZXMuY3JlYXRlICgyICogbGVuZ3RoIHMpIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBsZXQgbiA9IENoYXIuY29kZSAoZ2V0IHMgaSkgaW5cbiAgICBCeXRlcy5zZXQgcmVzICgyICogaSkgKGlfdG9faGV4ICgobiBsYW5kIDB4ZjApIGxzciA0KSk7XG4gICAgQnl0ZXMuc2V0IHJlcyAoKDIgKiBpKSArIDEpIChpX3RvX2hleCAobiBsYW5kIDB4MGYpKVxuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG5sZXQgb2ZfaGV4X2V4biAocyA6IHN0cmluZykgOiBzdHJpbmcgPVxuICBsZXQgbl9vZl9jID0gZnVuY3Rpb25cbiAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnMCdcbiAgICB8ICdhJyAuLiAnZicgYXMgYyAtPiAxMCArIENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJ1xuICAgIHwgJ0EnIC4uICdGJyBhcyBjIC0+IDEwICsgQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnXG4gICAgfCBfIC0+IGludmFsaWRfYXJnIFwic3RyaW5nOiBpbnZhbGlkIGhleFwiXG4gIGluXG4gIGlmIFN0cmluZy5sZW5ndGggcyBtb2QgMiA8PiAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcInN0cmluZzogaGV4IHNlcXVlbmNlIG11c3QgYmUgb2YgZXZlbiBsZW5ndGhcIjtcbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKFN0cmluZy5sZW5ndGggcyAvIDIpICdcXHgwMCcgaW5cbiAgZm9yIGkgPSAwIHRvIChTdHJpbmcubGVuZ3RoIHMgLyAyKSAtIDEgZG9cbiAgICBsZXQgbjEgPSBuX29mX2MgKFN0cmluZy5nZXQgcyAoMiAqIGkpKSBpblxuICAgIGxldCBuMiA9IG5fb2ZfYyAoU3RyaW5nLmdldCBzICgoMiAqIGkpICsgMSkpIGluXG4gICAgbGV0IG4gPSAobjEgbHNsIDQpIGxvciBuMiBpblxuICAgIEJ5dGVzLnNldCByZXMgaSAoQ2hhci5jaHIgbilcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxubGV0IG9mX2hleCBzID0gdHJ5IFNvbWUgKG9mX2hleF9leG4gcykgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgcHBfYnVmIGJ1ZiBzID1cbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInO1xuICBCdWZmZXIuYWRkX3N0cmluZyBidWYgcztcbiAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXCInXG5cbmxldCBwcCBmbXQgcyA9IEZvcm1hdC5mcHJpbnRmIGZtdCBcIlxcXCIlc1xcXCJcIiBzXG5cbm1vZHVsZSBJbmZpeCA9IHN0cnVjdFxuICBsZXQgKCA9ICkgPSBlcXVhbFxuICBsZXQgKCA8PiApIGEgYiA9IG5vdCAoZXF1YWwgYSBiKVxuICBsZXQgKCA+ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oID4gKVxuICBsZXQgKCA+PSApIDogdCAtPiB0IC0+IGJvb2wgPSBTdGRsaWIuKCA+PSApXG4gIGxldCAoIDwgKSA6IHQgLT4gdCAtPiBib29sID0gU3RkbGliLiggPCApXG4gIGxldCAoIDw9ICkgOiB0IC0+IHQgLT4gYm9vbCA9IFN0ZGxpYi4oIDw9IClcbmVuZFxuXG5pbmNsdWRlIEluZml4XG4iLCIoKiBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZSwgcGFydCBvZiBjb250YWluZXJzLiBTZWUgZmlsZSBcImxpY2Vuc2VcIiBmb3IgbW9yZSBkZXRhaWxzLiAqKVxuXG4oKiogezEgTXVsdGltYXB9ICopXG5cbnR5cGUgJ2EgaXRlciA9ICgnYSAtPiB1bml0KSAtPiB1bml0XG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBrZXlcbiAgdHlwZSB2YWx1ZVxuICB0eXBlIHRcblxuICB2YWwgZW1wdHkgOiB0XG4gICgqKiBFbXB0eSBtdWx0aW1hcCAqKVxuXG4gIHZhbCBpc19lbXB0eSA6IHQgLT4gYm9vbFxuICAoKiogRW1wdHkgbXVsdGltYXA/ICopXG5cbiAgdmFsIGFkZCA6IHQgLT4ga2V5IC0+IHZhbHVlIC0+IHRcbiAgKCoqIEFkZCBhIGtleS92YWx1ZSBiaW5kaW5nICopXG5cbiAgdmFsIHJlbW92ZSA6IHQgLT4ga2V5IC0+IHZhbHVlIC0+IHRcbiAgKCoqIFJlbW92ZSB0aGUgYmluZGluZyAqKVxuXG4gIHZhbCByZW1vdmVfYWxsIDogdCAtPiBrZXkgLT4gdFxuICAoKiogUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgbWFwICopXG5cbiAgdmFsIG1lbSA6IHQgLT4ga2V5IC0+IGJvb2xcbiAgKCoqIElzIHRoZXJlIGEgYmluZGluZyBmb3IgdGhpcyBrZXk/ICopXG5cbiAgdmFsIGZpbmQgOiB0IC0+IGtleSAtPiB2YWx1ZSBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgZmluZF9pdGVyIDogdCAtPiBrZXkgLT4gdmFsdWUgaXRlclxuICAoKiogSXRlcmF0ZSBvbiBiaW5kaW5ncyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgY291bnQgOiB0IC0+IGtleSAtPiBpbnRcbiAgKCoqIE51bWJlciBvZiBiaW5kaW5ncyBmb3IgdGhpcyBrZXkgKilcblxuICB2YWwgaXRlciA6IHQgLT4gKGtleSAtPiB2YWx1ZSAtPiB1bml0KSAtPiB1bml0XG4gICgqKiBJdGVyYXRlIG9uIGFsbCBrZXkvdmFsdWUgKilcblxuICB2YWwgZm9sZCA6IHQgLT4gJ2EgLT4gKCdhIC0+IGtleSAtPiB2YWx1ZSAtPiAnYSkgLT4gJ2FcbiAgKCoqIEZvbGQgb24gYWxsIGtleS92YWx1ZSAqKVxuXG4gIHZhbCBzaXplIDogdCAtPiBpbnRcbiAgKCoqIE51bWJlciBvZiBrZXlzICopXG5cbiAgdmFsIHVuaW9uIDogdCAtPiB0IC0+IHRcbiAgKCoqIFVuaW9uIG9mIG11bHRpbWFwcyAqKVxuXG4gIHZhbCBpbnRlciA6IHQgLT4gdCAtPiB0XG4gICgqKiBJbnRlcnNlY3Rpb24gb2YgbXVsdGltYXBzICopXG5cbiAgdmFsIGRpZmYgOiB0IC0+IHQgLT4gdFxuICAoKiogRGlmZmVyZW5jZSBvZiBtYXBzLCBpZSBiaW5kaW5ncyBvZiB0aGUgZmlyc3QgdGhhdCBhcmUgbm90XG4gICAgICBpbiB0aGUgc2Vjb25kICopXG5cbiAgdmFsIGVxdWFsIDogdCAtPiB0IC0+IGJvb2xcbiAgKCoqIFNhbWUgbXVsdGltYXAgKilcblxuICB2YWwgY29tcGFyZSA6IHQgLT4gdCAtPiBpbnRcbiAgKCoqIFRvdGFsIG9yZGVyIG9uIG11bHRpbWFwcyAqKVxuXG4gIHZhbCBzdWJtYXAgOiB0IC0+IHQgLT4gYm9vbFxuICAoKiogW3N1Ym1hcCBtMSBtMl0gaXMgdHJ1ZSBpZmYgYWxsIGJpbmRpbmdzIG9mIFttMV0gYXJlIGFsc28gaW4gW20yXSAqKVxuXG4gIHZhbCB0b19pdGVyIDogdCAtPiAoa2V5ICogdmFsdWUpIGl0ZXJcbiAgdmFsIG9mX2l0ZXIgOiA/aW5pdDp0IC0+IChrZXkgKiB2YWx1ZSkgaXRlciAtPiB0XG4gIHZhbCBrZXlzIDogdCAtPiBrZXkgaXRlclxuXG4gIHZhbCB2YWx1ZXMgOiB0IC0+IHZhbHVlIGl0ZXJcbiAgKCoqIFNvbWUgdmFsdWVzIG1heSBvY2N1ciBzZXZlcmFsIHRpbWVzICopXG5lbmRcblxubW9kdWxlIHR5cGUgT3JkZXJlZFR5cGUgPSBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIGNvbXBhcmUgOiB0IC0+IHQgLT4gaW50XG5lbmRcblxubW9kdWxlIE1ha2UgKEsgOiBPcmRlcmVkVHlwZSkgKFYgOiBPcmRlcmVkVHlwZSkgPSBzdHJ1Y3RcbiAgdHlwZSBrZXkgPSBLLnRcbiAgdHlwZSB2YWx1ZSA9IFYudFxuXG4gIG1vZHVsZSBNID0gTWFwLk1ha2UgKEspXG4gIG1vZHVsZSBTID0gU2V0Lk1ha2UgKFYpXG5cbiAgdHlwZSB0ID0gUy50IE0udFxuICAoKiogTWFwIG9mIHNldHMgKilcblxuICBsZXQgZW1wdHkgPSBNLmVtcHR5XG4gIGxldCBpc19lbXB0eSA9IE0uaXNfZW1wdHlcblxuICBsZXQgYWRkIG0gayB2ID1cbiAgICBsZXQgc2V0ID0gdHJ5IE0uZmluZCBrIG0gd2l0aCBOb3RfZm91bmQgLT4gUy5lbXB0eSBpblxuICAgIE0uYWRkIGsgKFMuYWRkIHYgc2V0KSBtXG5cbiAgbGV0IHJlbW92ZSBtIGsgdiA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgbGV0IHNldCcgPSBTLnJlbW92ZSB2IHNldCBpblxuICAgICAgaWYgUy5pc19lbXB0eSBzZXQnIHRoZW5cbiAgICAgICAgTS5yZW1vdmUgayBtXG4gICAgICBlbHNlXG4gICAgICAgIE0uYWRkIGsgc2V0JyBtXG4gICAgd2l0aCBOb3RfZm91bmQgLT4gbVxuXG4gIGxldCByZW1vdmVfYWxsIG0gayA9IE0ucmVtb3ZlIGsgbVxuICBsZXQgbWVtIG0gayA9IE0ubWVtIGsgbVxuXG4gIGxldCBmaW5kIG0gayA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5lbGVtZW50cyBzZXRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiBbXVxuXG4gIGxldCBmaW5kX2l0ZXIgbSBrIGYgPVxuICAgIHRyeVxuICAgICAgbGV0IHNldCA9IE0uZmluZCBrIG0gaW5cbiAgICAgIFMuaXRlciBmIHNldFxuICAgIHdpdGggTm90X2ZvdW5kIC0+ICgpXG5cbiAgbGV0IGNvdW50IG0gayA9XG4gICAgdHJ5XG4gICAgICBsZXQgc2V0ID0gTS5maW5kIGsgbSBpblxuICAgICAgUy5jYXJkaW5hbCBzZXRcbiAgICB3aXRoIE5vdF9mb3VuZCAtPiAwXG5cbiAgbGV0IGl0ZXIgbSBmID0gTS5pdGVyIChmdW4gayBzZXQgLT4gUy5pdGVyIChmdW4gdiAtPiBmIGsgdikgc2V0KSBtXG5cbiAgbGV0IGZvbGQgbSBhY2MgZiA9XG4gICAgTS5mb2xkIChmdW4gayBzZXQgYWNjIC0+IFMuZm9sZCAoZnVuIHYgYWNjIC0+IGYgYWNjIGsgdikgc2V0IGFjYykgbSBhY2NcblxuICBsZXQgc2l6ZSBtID0gTS5jYXJkaW5hbCBtXG5cbiAgbGV0IHVuaW9uIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT4gU29tZSAoUy51bmlvbiBzZXQxIHNldDIpXG4gICAgICAgIHwgU29tZSBzZXQsIE5vbmUgfCBOb25lLCBTb21lIHNldCAtPiBTb21lIHNldClcbiAgICAgIG0xIG0yXG5cbiAgbGV0IGludGVyIG0xIG0yID1cbiAgICBNLm1lcmdlXG4gICAgICAoZnVuIF9rIHYxIHYyIC0+XG4gICAgICAgIG1hdGNoIHYxLCB2MiB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gTm9uZVxuICAgICAgICB8IFNvbWUgc2V0MSwgU29tZSBzZXQyIC0+XG4gICAgICAgICAgbGV0IHNldCA9IFMuaW50ZXIgc2V0MSBzZXQyIGluXG4gICAgICAgICAgaWYgUy5pc19lbXB0eSBzZXQgdGhlblxuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIFNvbWUgc2V0KVxuICAgICAgbTEgbTJcblxuICBsZXQgZGlmZiBtMSBtMiA9XG4gICAgTS5tZXJnZVxuICAgICAgKGZ1biBfayB2MSB2MiAtPlxuICAgICAgICBtYXRjaCB2MSwgdjIgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gLT4gTm9uZVxuICAgICAgICB8IFNvbWUgc2V0LCBOb25lIC0+IFNvbWUgc2V0XG4gICAgICAgIHwgU29tZSBzZXQxLCBTb21lIHNldDIgLT5cbiAgICAgICAgICBsZXQgc2V0JyA9IFMuZGlmZiBzZXQxIHNldDIgaW5cbiAgICAgICAgICBpZiBTLmlzX2VtcHR5IHNldCcgdGhlblxuICAgICAgICAgICAgTm9uZVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIFNvbWUgc2V0JylcbiAgICAgIG0xIG0yXG5cbiAgbGV0IGVxdWFsIG0xIG0yID0gTS5lcXVhbCBTLmVxdWFsIG0xIG0yXG4gIGxldCBjb21wYXJlIG0xIG0yID0gTS5jb21wYXJlIFMuY29tcGFyZSBtMSBtMlxuXG4gIGxldCBzdWJtYXAgbTEgbTIgPVxuICAgIE0uZm9yX2FsbFxuICAgICAgKGZ1biBrIHNldDEgLT5cbiAgICAgICAgdHJ5XG4gICAgICAgICAgbGV0IHNldDIgPSBNLmZpbmQgayBtMiBpblxuICAgICAgICAgIFMuc3Vic2V0IHNldDEgc2V0MlxuICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZSlcbiAgICAgIG0xXG5cbiAgbGV0IHRvX2l0ZXIgbSBrID0gaXRlciBtIChmdW4geCB5IC0+IGsgKHgsIHkpKVxuXG4gIGxldCBvZl9pdGVyID8oaW5pdCA9IGVtcHR5KSBzZXEgPVxuICAgIGxldCBtID0gcmVmIGluaXQgaW5cbiAgICBzZXEgKGZ1biAoaywgdikgLT4gbSA6PSBhZGQgIW0gayB2KTtcbiAgICAhbVxuXG4gIGxldCBrZXlzIG0gayA9IE0uaXRlciAoZnVuIHggXyAtPiBrIHgpIG1cbiAgbGV0IHZhbHVlcyBtIGsgPSBpdGVyIG0gKGZ1biBfIHYgLT4gayB2KVxuZW5kXG5cbm1vZHVsZSB0eXBlIEJJRElSID0gc2lnXG4gIHR5cGUgdFxuICB0eXBlIGxlZnRcbiAgdHlwZSByaWdodFxuXG4gIHZhbCBlbXB0eSA6IHRcbiAgdmFsIGlzX2VtcHR5IDogdCAtPiBib29sXG5cbiAgdmFsIGFkZCA6IHQgLT4gbGVmdCAtPiByaWdodCAtPiB0XG4gICgqKiBBZGQgYSBiaW5kaW5nIChsZWZ0LHJpZ2h0KSAqKVxuXG4gIHZhbCByZW1vdmUgOiB0IC0+IGxlZnQgLT4gcmlnaHQgLT4gdFxuICAoKiogUmVtb3ZlIGEgc3BlY2lmaWMgYmluZGluZyAqKVxuXG4gIHZhbCBjYXJkaW5hbF9sZWZ0IDogdCAtPiBpbnRcbiAgKCoqIG51bWJlciBvZiBkaXN0aW5jdCBsZWZ0IGtleXMgKilcblxuICB2YWwgY2FyZGluYWxfcmlnaHQgOiB0IC0+IGludFxuICAoKiogbnVtYmVyIG9mIGRpc3RpbmN0IHJpZ2h0IGtleXMgKilcblxuICB2YWwgcmVtb3ZlX2xlZnQgOiB0IC0+IGxlZnQgLT4gdFxuICAoKiogUmVtb3ZlIGFsbCBiaW5kaW5ncyBmb3IgdGhlIGxlZnQga2V5ICopXG5cbiAgdmFsIHJlbW92ZV9yaWdodCA6IHQgLT4gcmlnaHQgLT4gdFxuICAoKiogUmVtb3ZlIGFsbCBiaW5kaW5ncyBmb3IgdGhlIHJpZ2h0IGtleSAqKVxuXG4gIHZhbCBtZW1fbGVmdCA6IHQgLT4gbGVmdCAtPiBib29sXG4gICgqKiBJcyB0aGUgbGVmdCBrZXkgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgcGFpcj8gKilcblxuICB2YWwgbWVtX3JpZ2h0IDogdCAtPiByaWdodCAtPiBib29sXG4gICgqKiBJcyB0aGUgcmlnaHQga2V5IHByZXNlbnQgaW4gYXQgbGVhc3Qgb25lIHBhaXI/ICopXG5cbiAgdmFsIGZpbmRfbGVmdCA6IHQgLT4gbGVmdCAtPiByaWdodCBsaXN0XG4gICgqKiBMaXN0IG9mIHZhbHVlcyBmb3IgdGhpcyBnaXZlbiBsZWZ0LWtleS5cbiAgICAgIFRoaXMgdXNlZCB0byByZXR1cm4gYW4gaXRlciwgYnV0IHJldHVybnMgYSBsaXN0IHNpbmNlIDMuMTMuICopXG5cbiAgdmFsIGZpbmRfbGVmdF9pdGVyIDogdCAtPiBsZWZ0IC0+IHJpZ2h0IGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgZm9yIHRoaXMgZ2l2ZW4gbGVmdC1rZXlcbiAgICAgIEBzaW5jZSAzLjEzICopXG5cbiAgdmFsIGZpbmRfcmlnaHQgOiB0IC0+IHJpZ2h0IC0+IGxlZnQgbGlzdFxuICAoKiogTGlzdCBvZiB2YWx1ZXMgZm9yIHRoaXMgZ2l2ZW4gcmlnaHQta2V5LlxuICAgICAgVGhpcyB1c2VkIHRvIHJldHVybiBhbiBpdGVyLCBidXQgcmV0dXJucyBhIGxpc3Qgc2luY2UgMy4xMy4gKilcblxuICB2YWwgZmluZF9yaWdodF9pdGVyIDogdCAtPiByaWdodCAtPiBsZWZ0IGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gYmluZGluZ3MgZm9yIHRoaXMgZ2l2ZW4gbGVmdC1rZXlcbiAgICAgIEBzaW5jZSAzLjEzICopXG5cbiAgdmFsIGZpbmQxX2xlZnQgOiB0IC0+IGxlZnQgLT4gcmlnaHQgb3B0aW9uXG4gICgqKiBsaWtlIHshZmluZF9sZWZ0fSBidXQgcmV0dXJucyBhdCBtb3N0IG9uZSB2YWx1ZSAqKVxuXG4gIHZhbCBmaW5kMV9yaWdodCA6IHQgLT4gcmlnaHQgLT4gbGVmdCBvcHRpb25cbiAgKCoqIGxpa2UgeyFmaW5kX3JpZ2h0fSBidXQgcmV0dXJucyBhdCBtb3N0IG9uZSB2YWx1ZSAqKVxuXG4gIHZhbCBmb2xkIDogKCdhIC0+IGxlZnQgLT4gcmlnaHQgLT4gJ2EpIC0+ICdhIC0+IHQgLT4gJ2FcbiAgKCoqIEZvbGQgb24gcGFpcnMgKilcblxuICB2YWwgcGFpcnMgOiB0IC0+IChsZWZ0ICogcmlnaHQpIGl0ZXJcbiAgKCoqIEl0ZXJhdGUgb24gcGFpcnMgKilcblxuICB2YWwgYWRkX3BhaXJzIDogdCAtPiAobGVmdCAqIHJpZ2h0KSBpdGVyIC0+IHRcbiAgKCoqIEFkZCBwYWlycyAqKVxuXG4gIHZhbCBpdGVyX2xlZnQgOiB0IC0+IGxlZnQgaXRlclxuICB2YWwgaXRlcl9yaWdodCA6IHQgLT4gcmlnaHQgaXRlclxuZW5kXG5cbmxldCBfZm9sZF9pdGVyIGYgYWNjIHNlcSA9XG4gIGxldCBhY2MgPSByZWYgYWNjIGluXG4gIHNlcSAoZnVuIHggLT4gYWNjIDo9IGYgIWFjYyB4KTtcbiAgIWFjY1xuXG5sZXQgX2hlYWRfaXRlciBzZXEgPVxuICBsZXQgciA9IHJlZiBOb25lIGluXG4gICh0cnlcbiAgICAgc2VxIChmdW4geCAtPlxuICAgICAgICAgciA6PSBTb21lIHg7XG4gICAgICAgICByYWlzZSBFeGl0KVxuICAgd2l0aCBFeGl0IC0+ICgpKTtcbiAgIXJcblxubW9kdWxlIE1ha2VCaWRpciAoTCA6IE9yZGVyZWRUeXBlKSAoUiA6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuICB0eXBlIGxlZnQgPSBMLnRcbiAgdHlwZSByaWdodCA9IFIudFxuXG4gIG1vZHVsZSBNYXBMID0gTWFrZSAoTCkgKFIpXG4gIG1vZHVsZSBNYXBSID0gTWFrZSAoUikgKEwpXG5cbiAgdHlwZSB0ID0geyBsZWZ0OiBNYXBMLnQ7IHJpZ2h0OiBNYXBSLnQgfVxuXG4gIGxldCBlbXB0eSA9IHsgbGVmdCA9IE1hcEwuZW1wdHk7IHJpZ2h0ID0gTWFwUi5lbXB0eSB9XG4gIGxldCBpc19lbXB0eSBtID0gTWFwTC5pc19lbXB0eSBtLmxlZnRcbiAgbGV0IGFkZCBtIGEgYiA9IHsgbGVmdCA9IE1hcEwuYWRkIG0ubGVmdCBhIGI7IHJpZ2h0ID0gTWFwUi5hZGQgbS5yaWdodCBiIGEgfVxuXG4gIGxldCByZW1vdmUgbSBhIGIgPVxuICAgIHsgbGVmdCA9IE1hcEwucmVtb3ZlIG0ubGVmdCBhIGI7IHJpZ2h0ID0gTWFwUi5yZW1vdmUgbS5yaWdodCBiIGEgfVxuXG4gIGxldCBjYXJkaW5hbF9sZWZ0IG0gPSBNYXBMLnNpemUgbS5sZWZ0XG4gIGxldCBjYXJkaW5hbF9yaWdodCBtID0gTWFwUi5zaXplIG0ucmlnaHRcbiAgbGV0IGZpbmRfbGVmdCBtIGEgPSBNYXBMLmZpbmQgbS5sZWZ0IGFcbiAgbGV0IGZpbmRfbGVmdF9pdGVyIG0gYSA9IE1hcEwuZmluZF9pdGVyIG0ubGVmdCBhXG4gIGxldCBmaW5kX3JpZ2h0IG0gYiA9IE1hcFIuZmluZCBtLnJpZ2h0IGJcbiAgbGV0IGZpbmRfcmlnaHRfaXRlciBtIGIgPSBNYXBSLmZpbmRfaXRlciBtLnJpZ2h0IGJcblxuICBsZXQgcmVtb3ZlX2xlZnQgbSBhID1cbiAgICBfZm9sZF9pdGVyIChmdW4gbSBiIC0+IHJlbW92ZSBtIGEgYikgbSAoZmluZF9sZWZ0X2l0ZXIgbSBhKVxuXG4gIGxldCByZW1vdmVfcmlnaHQgbSBiID1cbiAgICBfZm9sZF9pdGVyIChmdW4gbSBhIC0+IHJlbW92ZSBtIGEgYikgbSAoZmluZF9yaWdodF9pdGVyIG0gYilcblxuICBsZXQgbWVtX2xlZnQgbSBhID0gTWFwTC5tZW0gbS5sZWZ0IGFcbiAgbGV0IG1lbV9yaWdodCBtIGIgPSBNYXBSLm1lbSBtLnJpZ2h0IGJcbiAgbGV0IGZpbmQxX2xlZnQgbSBhID0gX2hlYWRfaXRlciAoZmluZF9sZWZ0X2l0ZXIgbSBhKVxuICBsZXQgZmluZDFfcmlnaHQgbSBiID0gX2hlYWRfaXRlciAoZmluZF9yaWdodF9pdGVyIG0gYilcbiAgbGV0IGZvbGQgZiBhY2MgbSA9IE1hcEwuZm9sZCBtLmxlZnQgYWNjIGZcbiAgbGV0IHBhaXJzIG0gPSBNYXBMLnRvX2l0ZXIgbS5sZWZ0XG4gIGxldCBhZGRfcGFpcnMgbSBzZXEgPSBfZm9sZF9pdGVyIChmdW4gbSAoYSwgYikgLT4gYWRkIG0gYSBiKSBtIHNlcVxuICBsZXQgaXRlcl9sZWZ0IG0gPSBNYXBMLmtleXMgbS5sZWZ0XG4gIGxldCBpdGVyX3JpZ2h0IG0gPSBNYXBSLmtleXMgbS5yaWdodFxuZW5kXG4iLCJvcGVuIExleGluZ1xuXG5leGNlcHRpb24gTGV4X2Vycm9yIG9mIHN0cmluZ1xuXG5sZXQgbGV4X2Vycm9yIGVyciA9IHJhaXNlIChMZXhfZXJyb3IgZXJyKVxuXG5sZXQgZXJyb3JfcG9zIGxleGJ1ZiA9IFxuICBsZXQgc3RhcnQgPSBsZXhidWYubGV4X3N0YXJ0X3AgaW5cbiAgbGV0IGNudW0gPSBsZXhidWYubGV4X2xhc3RfcG9zIC0gc3RhcnQucG9zX2JvbCBpblxuICBsZXQgZW51bSA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzdGFydC5wb3NfYm9sIGluXG4gIChzdGFydC5wb3NfbG51bSwgY251bSwgZW51bSlcblxubGV0IGVycm9yX3Bvc19tc2cgKGxleGJ1ZiA6IExleGluZy5sZXhidWYpID1cbiAgbGV0IChsaW5lLCBjbnVtLCBlbnVtKSA9IGVycm9yX3BvcyBsZXhidWYgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcImxpbmUgJWQgY2hhcnMgJWQtJWRcIiBsaW5lIGNudW0gZW51bVxuXG5sZXQgc3RyaW5nMm51bSBzID1cbiAgdHJ5IChUb2tlbnMuSU5UIChpbnRfb2Zfc3RyaW5nIHMpKSB3aXRoXG4gIHwgRmFpbHVyZSBfIC0+IFRva2Vucy5MQVJHRUlOVCBzXG5cbmxldCB1cGRhdGVfcG9zIGxleGJ1ZiA9XG4gIGxldCBwb3MgPSBsZXhidWYubGV4X3N0YXJ0X3AgaW5cbiAgbGV4YnVmLmxleF9zdGFydF9wIDwtXG4gICAgeyBwb3Mgd2l0aCBwb3NfYm9sID0gbGV4YnVmLmxleF9zdGFydF9wb3M7XG4gICAgICAgICAgICAgICBwb3NfbG51bSA9IHBvcy5wb3NfbG51bSArIDFcbiAgICB9XG5cbmxldCBpbnRfb2ZfaGV4Y2hhciBjID1cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJzAnLi4nOScgLT4gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJ1xuICB8ICdhJy4uJ2YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnYScgKyAxMFxuICB8ICdBJy4uJ0YnIC0+IGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyAxMFxuICB8IGMgLT4gbGV4X2Vycm9yIChcImludmFsaWQgaGV4IGNoYXIgaW4gdW5pY29kZSBlc2NhcGU6ICdcIiBeIChTdHJpbmcubWFrZSAxIGMpIF4gXCInXCIpXG5cblxubGV0IHV0Zjhfb2ZfY29kZSBidWYgaWR4IHUgPVxuICBsZXQgaSA9IHJlZiBpZHggaW5cblxuICBsZXQgYWRkX2NoYXIgYiBjID0gQnl0ZXMudW5zYWZlX3NldCBiICFpIGM7IGkgOj0gIWkgKyAxIGluXG5cbiAgbGV0IG1heF91c2VkX2JpdHMgbiB1ID0gKHUgbHNyIG4pID0gMCBpblxuXG4gIGlmIG1heF91c2VkX2JpdHMgNyB1IHRoZW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyIHUpXG4gIGVsc2UgaWYgbWF4X3VzZWRfYml0cyAxMSB1IHRoZW4gYmVnaW5cbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjExMDAwMDAwIGxvciAoKHUgbHNyIDYpIGxhbmQgMGIwMDAxMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgIGxhbmQgMGIwMDExMTExMSkpKVxuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDE2IHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDAwMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpXG4gIGVuZFxuICBlbHNlIGlmIG1heF91c2VkX2JpdHMgMjEgdSB0aGVuIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMDAwMCBsb3IgKCh1IGxzciAxOCkgbGFuZCAwYjAwMDAwMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMTIpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyICA2KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKHUgICAgICAgICAgbGFuZCAwYjAwMTExMTExKSkpO1xuICBlbmRcbiAgZWxzZSBpZiBtYXhfdXNlZF9iaXRzIDI2IHUgdGhlbiBiZWdpblxuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTExMTEwMDAgbG9yICgodSBsc3IgMjQpIGxhbmQgMGIwMDAwMDAxMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZFxuICBlbHNlIGJlZ2luXG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMTExMTEwMCBsb3IgKCh1IGxzciAzMCkgbGFuZCAwYjAwMDAwMDAxKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgMjQpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAoKHUgbHNyIDE4KSBsYW5kIDBiMDAxMTExMTEpKSk7XG4gICAgYWRkX2NoYXIgYnVmIChDaGFyLmNociAoMGIxMDAwMDAwMCBsb3IgKCh1IGxzciAxMikgbGFuZCAwYjAwMTExMTExKSkpO1xuICAgIGFkZF9jaGFyIGJ1ZiAoQ2hhci5jaHIgKDBiMTAwMDAwMDAgbG9yICgodSBsc3IgIDYpIGxhbmQgMGIwMDExMTExMSkpKTtcbiAgICBhZGRfY2hhciBidWYgKENoYXIuY2hyICgwYjEwMDAwMDAwIGxvciAodSAgICAgICAgICBsYW5kIDBiMDAxMTExMTEpKSk7XG4gIGVuZDtcbiAgIWlcblxubGV0IHV0Zjhfb2Zfc3Vycm9nYXRlX3BhaXIgYnVmIGlkeCBoaWdoIGxvdyA9XG4gIGxldCBoaWdoID0gaGlnaCAtIDB4RDgwMCBpblxuICBsZXQgbG93ID0gbG93IC0gMHhEQzAwIGluXG4gIGxldCBjb2RlID0gMHgxMDAwMCArICgoaGlnaCBsc2wgMTApIGxvciBsb3cpIGluXG4gICAgdXRmOF9vZl9jb2RlIGJ1ZiBpZHggY29kZVxuXG5sZXQgZXNjYXBpbmdfZXJyb3IgbXNnIHMgYyBvZmYgPVxuICBsZXQgb2ZmcyA9IHN0cmluZ19vZl9pbnQgb2ZmIGluXG4gIGxldCBjcyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBTb21lIGMgLT4gXCIgJ1wiIF4gKFN0cmluZy5tYWtlIDEgYykgXiBcIicgXCJcbiAgICB8IE5vbmUgLT4gXCJcIlxuICBpblxuICAgIGxleF9lcnJvciAobXNnIF4gXCIgYXQgb2Zmc2V0IFwiIF4gb2ZmcyBeIGNzIF4gXCI6IFwiIF4gcylcblxubGV0IHVuZXNjYXBlX3N0cmluZyBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHMnID0gQnl0ZXMuY3JlYXRlIGwgaW5cbiAgbGV0IGogPSByZWYgMCBpblxuICBsZXQgdTEgPSByZWYgMCBpblxuICBsZXQgdTIgPSByZWYgMCBpblxuICBsZXQgc3RhdGUgPSByZWYgYENoYXIgaW5cblxuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBtYXRjaCAhc3RhdGUgd2l0aFxuICAgIHwgYENoYXIgLT4gYmVnaW5cbiAgICAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgIHwgJ1xcXFwnIC0+IHN0YXRlIDo9IGBFc2NhcGVcbiAgICAgICAgIHwgYyAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqIGM7IGogOj0gIWogKyAxXG4gICAgICAgZW5kO1xuICAgIHwgYEVzY2FwZSAtPiBiZWdpblxuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgIHwgJ1wiJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnXCInOyAgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICdcXFxcJyAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXFxcJzsgICBzdGF0ZSA6PSBgQ2hhcjsgaiA6PSAhaiArIDFcbiAgICAgICB8ICcvJyAgLT4gQnl0ZXMudW5zYWZlX3NldCBzJyAhaiAnLyc7ICAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ2InICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXGInOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ2YnICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXDAxMic7IHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ24nICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXG4nOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3InICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXHInOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3QnICAtPiBCeXRlcy51bnNhZmVfc2V0IHMnICFqICdcXHQnOyAgIHN0YXRlIDo9IGBDaGFyOyBqIDo9ICFqICsgMVxuICAgICAgIHwgJ3UnICAtPiBzdGF0ZSA6PSBgVTFfaDFcbiAgICAgICB8IF8gICAgLT4gZXNjYXBpbmdfZXJyb3IgXCJpbnZhbGlkIGVzY2FwZSBpbiBzdHJpbmdcIiBzIChTb21lIHMuW2ldKSBpXG4gICAgICBlbmQ7XG4gICAgfCBgVTFfaDEgLT4gdTEgOj0gaW50X29mX2hleGNoYXIgcy5baV07ICBzdGF0ZSA6PSBgVTFfaDJcbiAgICB8IGBVMV9oMiAtPiB1MSA6PSAoIXUxIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTsgIHN0YXRlIDo9IGBVMV9oM1xuICAgIHwgYFUxX2gzIC0+IHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUxX2g0XG4gICAgfCBgVTFfaDQgLT5cbiAgICAgIHUxIDo9ICghdTEgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pO1xuICAgICAgaWYgIXUxID49IDB4RDgwMCAmJiAhdTEgPD0gMHhEQkZGIHRoZW5cbiAgICAgICAgc3RhdGUgOj0gYFUyX2JzXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGogOj0gdXRmOF9vZl9jb2RlIHMnICFqICF1MTtcbiAgICAgICAgc3RhdGUgOj0gYENoYXJcbiAgICAgIGVuZFxuICAgIHwgYFUyX2JzIC0+XG4gICAgICBpZiBzLltpXSA8PiAnXFxcXCcgdGhlblxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImV4cGVjdGVkIGxvdyBzdXJyb2dhdGUgZXNjYXBlIGNoYXIgKFxcXFwpXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA6PSBgVTJfdVxuICAgIHwgYFUyX3UgLT5cbiAgICAgIGlmIHMuW2ldIDw+ICd1JyB0aGVuXG4gICAgICAgIGVzY2FwaW5nX2Vycm9yIFwiZXhwZWN0ZWQgbG93IHN1cnJvZ2F0ZSBlc2NhcGUgc2VxdWVuY2UgKHUpXCIgcyAoU29tZSBzLltpXSkgaVxuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA6PSBgVTJfaDFcbiAgICB8IGBVMl9oMSAtPiB1MiA6PSBpbnRfb2ZfaGV4Y2hhciBzLltpXTsgIHN0YXRlIDo9IGBVMl9oMlxuICAgIHwgYFUyX2gyIC0+IHUyIDo9ICghdTIgbHNsIDQpIGxvciAoaW50X29mX2hleGNoYXIgcy5baV0pOyAgc3RhdGUgOj0gYFUyX2gzXG4gICAgfCBgVTJfaDMgLT4gdTIgOj0gKCF1MiBsc2wgNCkgbG9yIChpbnRfb2ZfaGV4Y2hhciBzLltpXSk7ICBzdGF0ZSA6PSBgVTJfaDRcbiAgICB8IGBVMl9oNCAtPlxuICAgICAgc3RhdGUgOj0gYENoYXI7XG4gICAgICB1MiA6PSAoIXUyIGxzbCA0KSBsb3IgKGludF9vZl9oZXhjaGFyIHMuW2ldKTtcbiAgICAgIGlmICF1MiA+PSAweERDMDAgJiYgIXUyIDw9IDB4REZGRiB0aGVuXG4gICAgICAgIGogOj0gdXRmOF9vZl9zdXJyb2dhdGVfcGFpciBzJyAhaiAhdTEgIXUyIFxuICAgICAgZWxzZVxuICAgICAgICBlc2NhcGluZ19lcnJvciBcImludmFsaWQgbG93IHN1cnJvZ2F0ZSBmb3IgY29kZSBwb2ludCBiZXlvbmQgVStGRkZGJ1wiIHMgTm9uZSBpXG4gIGRvbmU7XG4gIGJlZ2luXG4gICAgbWF0Y2ggIXN0YXRlIHdpdGhcbiAgICB8IGBDaGFyIC0+ICgpXG4gICAgfCBfIC0+IGVzY2FwaW5nX2Vycm9yIFwiZW5kIG9mIHN0cmluZyBpbiBlc2NhcGUgc2VxdWVuY2VcIiBzIE5vbmUgbFxuICBlbmQ7XG4gIGlmICFqIDw+IGwgdGhlbiBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIChCeXRlcy5zdWIgcycgMCAhaikgZWxzZSBzXG5cbiIsIigqIGNvbnRhaW5zIHRoZSBsaW5lIGFuZCBjaGFyYWN0ZXIgc3BhbiBvZiB3aGVyZSB0aGUgZXJyb3Igb2NjdXJlZCAqKVxuXG50eXBlIHQgPSB7XG4gIGxpbmUgOiBpbnRcbjsgc3RhcnRfY2hhciA6IGludFxuOyBlbmRfY2hhciA6IGludFxuOyBtc2cgOiBzdHJpbmdcbn1cblxuZXhjZXB0aW9uIEpzb25fZXJyb3JfaW5mbyBvZiB0XG5cbmxldCBjcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVtc2cgPVxuICBsZXQgKGVsaW5lLCBzY2hhciwgZWNoYXIpID0gTGV4eGVyX3V0aWxzLmVycm9yX3BvcyBsZXhidWYgaW5cbiAgeyBsaW5lID0gZWxpbmU7IHN0YXJ0X2NoYXIgPSBzY2hhcjsgZW5kX2NoYXIgPSBlY2hhcjsgbXNnID0gZW1zZyB9XG5cbmxldCB0b19zdHJpbmcgaW5mbyA9XG4gIGxldCBsb2MgPSBQcmludGYuc3ByaW50ZiBcImxpbmUgJWQgY2hhcnMgJWQtJWRcIiBpbmZvLmxpbmUgaW5mby5zdGFydF9jaGFyIGluZm8uZW5kX2NoYXIgaW5cbiAgaW5mby5tc2cgXiBcIiBhdCBcIiBeIGxvY1xuIiwiZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0IDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuXG4oKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgYW4gaW50ZWdlciwgaGFuZGxlcyAzMGJpdCwgNjJiaXQgYW5kIEpzb28gdXNpbmcgMzJiaXQgaW50cyAqKVxubGV0IG1heF9qc29uX2ludCA9XG4gIGxldCByZWMgbG9nMiBuID0gaWYgbiA8PSAxIHRoZW4gMCBlbHNlIDEgKyBsb2cyKG4gYXNyIDEpIGluXG4gIGxldCBiaXRzIG4gPSBsb2cyIG4gKyAxIGluXG4gIGlmIGJpdHMgbWF4X2ludCA+IDUzIHRoZW4gKDEgbHNsIDUzKSAtIDEgZWxzZSBtYXhfaW50XG5cbmxldCBtYXhfanNvbl9pbnRfYXNfZmxvYXQgPSBmbG9hdF9vZl9pbnQgbWF4X2pzb25faW50XG5cbmxldCBzdHJpbmdfb2ZfZmxvYXRfanNvbiBmID1cbiAgbGV0IGlzX2ludCA9IChmbG9hdF9vZl9pbnQgKGludF9vZl9mbG9hdCBmKSkgPSBmIGluXG4gIGlmIGlzX2ludCAmJiBhYnNfZmxvYXQgZiA8PSBtYXhfanNvbl9pbnRfYXNfZmxvYXQgdGhlbiBiZWdpbiAoKiBJRUVFIG1heCBpbnQgaW4gYSBmbG9hdCB3aGVuIGluIDY0Yml0IGludCBtb2RlKilcbiAgICBsZXQgaW50X3ZhbHVlID0gaW50X29mX2Zsb2F0IGYgaW4gKHN0cmluZ19vZl9pbnQgaW50X3ZhbHVlKSBeIFwiLjBcIlxuICBlbmRcbiAgZWxzZSBiZWdpblxuICAgICgqICUuMTdnIG9mdGVuIGNyZWF0ZXMgb3Zlcmx5IGxvbmcgb3V0cHV0LCBhdHRlbXB0IHRvIGNvbnZlcnQgYXQgbG93ZXIgcHJlY2Vzc2lvbiBmaXJzdCAqKVxuICAgIGxldCBzID0gZm9ybWF0X2Zsb2F0IFwiJS4xNmdcIiBmIGluXG4gICAgbGV0IHMgPSBpZiBmbG9hdF9vZl9zdHJpbmcgcyA9IGYgdGhlbiBzIGVsc2UgZm9ybWF0X2Zsb2F0IFwiJS4xN2dcIiBmIGluXG4gICAgaWYgbm90IChTdHJpbmcuY29udGFpbnMgcyAnLicgfHwgU3RyaW5nLmNvbnRhaW5zIHMgJ2UnKSB0aGVuIHMgXiBcIi4wXCJcbiAgICBlbHNlIHNcbiAgZW5kXG4iLCJcbmxldCB0b2tlbl9lcnJvciB0b2sgPVxuICBsZXQgb3BlbiBUb2tlbnMgaW5cbiAgbGV0IGVyciA9IG1hdGNoIHRvayB3aXRoXG4gICAgfCBTVFJJTkcgcyAtPiBcInVuZXhwZWN0ZWQgc3RyaW5nICdcIiBeIHMgXiBcIidcIlxuICAgIHwgT1MgLT4gXCJ1bmV4cGVjdGVkICd7J1wiXG4gICAgfCBPRSAtPiBcInVuZXhwZWN0ZWQgJ30nXCJcbiAgICB8IE5VTEwgLT4gXCJ1bmV4cGVjdGVkIG51bGwgdmFsdWVcIlxuICAgIHwgTkVHSU5GSU5JVFkgLT4gXCJ1bmV4cGVjdGVkIG5lZ2F0aXZlIGluZmluaXR5XCJcbiAgICB8IE5BTiAtPiBcInVuZXhwZWN0ZWQgTm90LWEtTnVtYmVyXCJcbiAgICB8IExFWF9FUlJPUiBzIC0+IHNcbiAgICB8IExBUkdFSU5UIHMgLT4gXCJ1bmV4cGVjdGVkIGxhcmdlIGludGVnZXIgJ1wiIF4gcyBeIFwiJ1wiXG4gICAgfCBJTlQgaSAtPiBcInVuZXhwZWN0ZWQgaW50ZWdlciAnXCIgXiAoc3RyaW5nX29mX2ludCBpKSBeIFwiJ1wiXG4gICAgfCBJTkZJTklUWSAtPiBcInVuZXhwZWN0ZWQgaW5maW5pdHlcIlxuICAgIHwgRkxPQVQgZiAtPiBcInVuZXhwZWN0ZWQgZmxvYXQgJ1wiIF4gKHN0cmluZ19vZl9mbG9hdCBmKSBeIFwiJ1wiXG4gICAgfCBFT0YgLT4gXCJ1bmV4cGVjdGVkIGVuZC1vZi1pbnB1dFwiXG4gICAgfCBDT01QTElBTkNFX0VSUk9SIHMgLT4gXCJjb21wbGlhbmNlIGVycm9yICdcIiBeIHMgXiBcIidcIlxuICAgIHwgQ09NTUEgLT4gXCJ1bmV4cGVjdGVkICcsJ1wiXG4gICAgfCBDT0xPTiAtPiBcInVuZXhwZWN0ZWQgJzonXCJcbiAgICB8IEJPT0wgYiAtPiBcInVuZXhwZWN0ZWQgYm9vbGVhbiAnXCIgXiAoaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiKSBeIFwiJ1wiXG4gICAgfCBBUyAtPiBcInVuZXhwZWN0ZWQgJ1snXCJcbiAgICB8IEFFIC0+IFwidW5leHBlY3RlZCAnXSdcIlxuICAgIHwgVFMgLT4gXCJ1bmV4cGVjdGVkICcoJ1wiXG4gICAgfCBURSAtPiBcInVuZXhwZWN0ZWQgJyknXCJcbiAgICB8IFZTIC0+IFwidW5leHBlY3RlZCAnPCdcIlxuICAgIHwgVkUgLT4gXCJ1bmV4cGVjdGVkICc+J1wiXG4gIGluXG4gICAgYFN5bnRheF9lcnJvciBlcnJcbiIsIm1vZHVsZSB0eXBlIFBhcnNlciA9IHNpZ1xuICBtb2R1bGUgQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuU1xuXG4gIHZhbCBkZWNvZGVcbiAgICA6ICByZWFkZXIgOiAodW5pdCAtPiBUb2tlbnMudG9rZW4pXG4gICAgLT4gKENvbXBsaWFuY2UuanNvbiBvcHRpb24sIHN0cmluZykgcmVzdWx0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogUGFyc2VyXG4gIHdpdGggbW9kdWxlIENvbXBsaWFuY2UgPSBDb21wbGlhbmNlXG49IHN0cnVjdFxuXG4gIG1vZHVsZSBDb21wbGlhbmNlID0gQ29tcGxpYW5jZVxuXG4gIGV4Y2VwdGlvbiBQYXJzZV9lcnJvciBvZiBbYEVvZiB8IGBTeW50YXhfZXJyb3Igb2Ygc3RyaW5nXVxuXG4gIGxldCBqc29uX3ZhbHVlIH5yZWFkZXIgPSBcbiAgICBsZXQgb3BlbiBUb2tlbnMgaW5cbiAgICBsZXQgb3BlbiBQYXJzZXJfdG9vbHMgaW5cbiAgICBsZXQgcmVjIHRva2VuX3ZhbHVlIHRvayA9IGJlZ2luXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBJTlQgaSAtPiBDb21wbGlhbmNlLmludGVnZXIgaVxuICAgICAgfCBTVFJJTkcgcyAtPiBDb21wbGlhbmNlLnN0cmluZyBzXG4gICAgICB8IEJPT0wgYiAtPiBDb21wbGlhbmNlLmJvb2wgYlxuICAgICAgfCBGTE9BVCBmIC0+IENvbXBsaWFuY2UubnVtYmVyIChgRmxvYXQgZilcbiAgICAgIHwgSU5GSU5JVFkgLT4gQ29tcGxpYW5jZS5udW1iZXIgYEluZmluaXR5XG4gICAgICB8IE5FR0lORklOSVRZIC0+IENvbXBsaWFuY2UubnVtYmVyIGBOZWdpbmZpbml0eVxuICAgICAgfCBOQU4gLT4gQ29tcGxpYW5jZS5udW1iZXIgYE5hblxuICAgICAgfCBOVUxMIC0+IENvbXBsaWFuY2UubnVsbFxuICAgICAgfCBMQVJHRUlOVCBzIC0+IENvbXBsaWFuY2UubGFyZ2VpbnQgc1xuICAgICAgfCBFT0YgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIGBFb2YpXG4gICAgICB8IENPTU1BIHwgQ09MT04gfCBBRSB8IE9FIHwgVEUgfCBWRSB8IExFWF9FUlJPUiBfIHwgQ09NUExJQU5DRV9FUlJPUiBfIC0+XG4gICAgICAgIHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICAgIHwgQVMgLT4gYXJyYXlfdmFsdWVfc3RhcnQgKClcbiAgICAgIHwgT1MgLT4gb2JqZWN0X3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IFRTIC0+IHR1cGxlX3ZhbHVlX3N0YXJ0ICgpXG4gICAgICB8IFZTIC0+IHZhcmlhbnRfdmFsdWVfc3RhcnQgKClcbiAgICBlbmRcbiAgICBhbmQgdmFsdWUgKCkgPSB0b2tlbl92YWx1ZSAocmVhZGVyICgpKVxuICAgIGFuZCBhcnJheV92YWx1ZV9zdGFydCAoKSA9IGJlZ2luXG4gICAgICBsZXQgdG9rID0gcmVhZGVyICgpIGluXG4gICAgICBtYXRjaCB0b2sgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgW11cbiAgICAgIHwgXyAtPiBhcnJheV92YWx1ZXNfc3RhcnQgdG9rIFtdXG4gICAgZW5kXG4gICAgYW5kIGFycmF5X3ZhbHVlc19zdGFydCB0b2sgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0gdG9rZW5fdmFsdWUgdG9rIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBhcnJheV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgYXJyYXlfdmFsdWVzIGFjYyA9IGJlZ2luXG4gICAgICBsZXQgdiA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBBRSAtPiBDb21wbGlhbmNlLmxpc3QgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBhcnJheV92YWx1ZXMgKHY6OmFjYylcbiAgICAgIHwgdG9rIC0+IHJhaXNlIChQYXJzZV9lcnJvciAodG9rZW5fZXJyb3IgdG9rKSlcbiAgICBlbmRcbiAgICBhbmQgb2JqZWN0X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB0b2sgPSByZWFkZXIgKCkgaW5cbiAgICAgIG1hdGNoIHRvayB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgW11cbiAgICAgIHwgXyAtPiBvYmplY3RfdmFsdWVzX3N0YXJ0IHRvayBbXVxuICAgIGVuZFxuICAgIGFuZCBvYmplY3RfdmFsdWVzX3N0YXJ0IHRvayBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSBjb2xvbl92YWx1ZSB0b2sgKCkgaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IE9FIC0+IENvbXBsaWFuY2UuYXNzb2MgKExpc3QucmV2ICh2OjphY2MpKVxuICAgICAgfCBDT01NQSAtPiBvYmplY3RfdmFsdWVzICh2OjphY2MpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIG9iamVjdF92YWx1ZXMgYWNjID0gYmVnaW5cbiAgICAgIGxldCB2ID0ga2V5X2NvbG9uX3ZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBPRSAtPiBDb21wbGlhbmNlLmFzc29jIChMaXN0LnJldiAodjo6YWNjKSlcbiAgICAgIHwgQ09NTUEgLT4gb2JqZWN0X3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCBjb2xvbl92YWx1ZSB2ICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IENPTE9OIC0+IChrLCB2YWx1ZSAoKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgdG9rIC0+ICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIGtleV9jb2xvbl92YWx1ZSAoKSA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBTVFJJTkcgayAtPiBiZWdpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IENPTE9OIC0+IChrLCB2YWx1ZSAoKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgdG9rIC0+ICByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHR1cGxlX3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIGxldCB2MSA9IHZhbHVlICgpIGluXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBDT01NQSAtPiBiZWdpblxuICAgICAgICBsZXQgdjIgPSB2YWx1ZSAoKSBpblxuICAgICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgICB8IFRFIC0+IENvbXBsaWFuY2UudHVwbGUgW3YxOyB2Ml1cbiAgICAgICAgfCBDT01NQSAtPiB0dXBsZV92YWx1ZXMgW3YyOyB2MV1cbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgVEUgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIFwidHVwbGUgbXVzdCBoYXZlIGF0IGxlYXN0IDIgZWxlbWVudHNcIikpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHR1cGxlX3ZhbHVlcyBhY2MgPSBiZWdpblxuICAgICAgbGV0IHYgPSB2YWx1ZSAoKSBpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgVEUgLT4gQ29tcGxpYW5jZS50dXBsZSAoTGlzdC5yZXYgKHY6OmFjYykpXG4gICAgICB8IENPTU1BIC0+IHR1cGxlX3ZhbHVlcyAodjo6YWNjKVxuICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgIGVuZFxuICAgIGFuZCB2YXJpYW50X3ZhbHVlX3N0YXJ0ICgpID0gYmVnaW5cbiAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICB8IFNUUklORyBrIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgVkUgLT4gQ29tcGxpYW5jZS52YXJpYW50IGsgTm9uZVxuICAgICAgICB8IENPTE9OIC0+IHZhcmlhbnRfZW5kIGsgKFNvbWUgKHZhbHVlICgpKSlcbiAgICAgICAgfCB0b2sgLT4gcmFpc2UgKFBhcnNlX2Vycm9yICh0b2tlbl9lcnJvciB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIHwgVkUgLT4gcmFpc2UgKFBhcnNlX2Vycm9yIChgU3ludGF4X2Vycm9yIFwidmFyaWFudCBtdXN0IGhhdmUgYXQgbGVhc3QgYSBzdHJpbmdcIikpXG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgYW5kIHZhcmlhbnRfZW5kIGsgdiA9IGJlZ2luXG4gICAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgICAgfCBWRSAtPiBDb21wbGlhbmNlLnZhcmlhbnQgayB2XG4gICAgICB8IHRvayAtPiByYWlzZSAoUGFyc2VfZXJyb3IgKHRva2VuX2Vycm9yIHRvaykpXG4gICAgZW5kXG4gICAgaW5cbiAgICBtYXRjaCByZWFkZXIgKCkgd2l0aFxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciBgRW9mKSAtPiBOb25lXG4gICAgfCBleGNlcHRpb24gZXhuXyAtPiByYWlzZSBleG5fXG4gICAgfCBFT0YgLT4gTm9uZVxuICAgIHwgdG9rIC0+IFNvbWUgKHRva2VuX3ZhbHVlIHRvaylcblxuICBsZXQgZGVjb2RlIH5yZWFkZXIgPSBcbiAgICBtYXRjaCBqc29uX3ZhbHVlIH5yZWFkZXIgd2l0aFxuICAgIHwgZXhjZXB0aW9uIChQYXJzZV9lcnJvciBgRW9mKSAtPiBFcnJvciBcIlVuZXhwZWN0ZWQgZW5kLW9mLWlucHV0XCJcbiAgICB8IGV4Y2VwdGlvbiAoUGFyc2VfZXJyb3IgKGBTeW50YXhfZXJyb3IgZXJyKSkgLT4gRXJyb3IgZXJyXG4gICAgfCBleGNlcHRpb24gKExleHhlcl91dGlscy5MZXhfZXJyb3IgZXJyKSAtPiBFcnJvciBlcnJcbiAgICB8IHJlcyAtPiBPayByZXNcblxuZW5kXG4iLCJsZXQgbmliYmxlX3RvX2hleCBpID0gY2hhcl9vZl9pbnQgKGlmIGkgPiA5IHRoZW4gNjUgKyBpIC0gMTAgZWxzZSA0OCArIGkpXG5cbmxldCBhZGRfaGV4X2J5dGUgfmFkZF9jaGFyIGkgPVxuICBhZGRfY2hhciAobmliYmxlX3RvX2hleCAoKGkgbHNyIDQpIGxhbmQgMHgwZikpO1xuICBhZGRfY2hhciAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG5sZXQgZXNjYXBlIH5hZGRfY2hhciB+YWRkX3N0cmluZyBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ1wiJyAgICAtPiBhZGRfc3RyaW5nIFwiXFxcXFxcXCJcIlxuICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICB8ICdcXDAxMicgLT4gYWRkX3N0cmluZyBcIlxcXFxmXCJcbiAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICB8ICdcXHQnICAgLT4gYWRkX3N0cmluZyBcIlxcXFx0XCJcbiAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgYWRkX3N0cmluZyBcIlxcXFx1MDBcIjsgIGFkZF9oZXhfYnl0ZSB+YWRkX2NoYXIgKGludF9vZl9jaGFyIGMpXG4gICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgZG9uZVxuIFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwgcHJldHR5X3ByaW50IDogRm9ybWF0LmZvcm1hdHRlciAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHByZXR0eV9wcmludF90b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwgcHJldHR5X3ByaW50X3RvX2NoYW5uZWwgOiBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZShDb21wbGlhbmNlIDogQ29tcGxpYW5jZS5TKSA9IHN0cnVjdFxuICBsZXQgdG9fanNvbl9zdHJpbmcgcyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTAwIGluXG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IFV0aWxzLmVzY2FwZSB+YWRkX2NoYXIgfmFkZF9zdHJpbmcgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGFkZF9xdW90ZV9zdHJpbmcgcztcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHBwX2xpc3Qgc2VwIHBweCBvdXQgbCA9XG4gICAgbGV0IHBwX3NlcCBvdXQgKCkgPSBGb3JtYXQuZnByaW50ZiBvdXQgXCIlc0AgXCIgc2VwIGluXG4gICAgRm9ybWF0LnBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcHggb3V0IGxcblxuICBsZXQgcmVjIGZvcm1hdCAob3V0OkZvcm1hdC5mb3JtYXR0ZXIpIGpzb24gOiB1bml0ID1cbiAgICBtYXRjaCBqc29uIHdpdGhcbiAgICAgIHwgYE51bGwgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBGb3JtYXQucHBfcHJpbnRfYm9vbCBvdXQgYlxuICAgICAgfCBgSW50IGkgLT4gRm9ybWF0LnBwX3ByaW50X3N0cmluZyBvdXQgKHN0cmluZ19vZl9pbnQgaSlcbiAgICAgIHwgYEZsb2F0IGYgLT5cbiAgICAgICAgbGV0IHMgPSBDb21wbGlhbmNlLm51bWJlcl90b19zdHJpbmcgZiBpblxuICAgICAgICBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCAodG9fanNvbl9zdHJpbmcgcylcbiAgICAgIHwgYEludGxpdCBzXG4gICAgICB8IGBGbG9hdGxpdCBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBGb3JtYXQucHBfcHJpbnRfc3RyaW5nIG91dCBzXG4gICAgICB8IGBMaXN0IFtdIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiW11cIlxuICAgICAgfCBgTGlzdCBsIC0+IEZvcm1hdC5mcHJpbnRmIG91dCBcIltAOzwxIDA+QFs8aG92PiVhQF1AOzwxIC0yPl1cIiAocHBfbGlzdCBcIixcIiBmb3JtYXQpIGxcbiAgICAgIHwgYEFzc29jIFtdIC0+IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwie31cIlxuICAgICAgfCBgQXNzb2MgbCAtPlxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCJ7QDs8MSAwPiVhQDs8MSAtMj59XCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0X2ZpZWxkKSBsXG4gICAgICB8IGBUdXBsZSBsIC0+XG4gICAgICAgIGlmIGwgPSBbXSB0aGVuIEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IFwiKClcIlxuICAgICAgICBlbHNlIEZvcm1hdC5mcHJpbnRmIG91dCBcIihALCVhQDs8MCAtMj4pXCIgKHBwX2xpc3QgXCIsXCIgZm9ybWF0KSBsXG4gICAgICB8IGBWYXJpYW50IChzLCBOb25lKSAtPlxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI8JXM+XCIgKHRvX2pzb25fc3RyaW5nIHMpXG4gICAgICB8IGBWYXJpYW50IChzLCBTb21lIGpzb24pIC0+XG4gICAgICAgIGxldCBzID0gdG9fanNvbl9zdHJpbmcgcyBpblxuICAgICAgICBGb3JtYXQuZnByaW50ZiBvdXQgXCI8QFs8aHYyPiVzOiAlYUBdPlwiIHMgZm9ybWF0IGpzb25cblxuICBhbmQgZm9ybWF0X2ZpZWxkIG91dCAobmFtZSwganNvbikgPVxuICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj4lczogJWFAXVwiICh0b19qc29uX3N0cmluZyBuYW1lKSBmb3JtYXQganNvblxuXG4gIGxldCBwcmV0dHlfcHJpbnQgb3V0IGpzb24gPVxuICAgIEZvcm1hdC5mcHJpbnRmIG91dCBcIkBbPGh2Mj4lYUBdXCIgZm9ybWF0IGpzb25cblxuICBsZXQgcHJldHR5X3ByaW50X3RvX3N0cmluZyBqc29uID1cbiAgICBGb3JtYXQuYXNwcmludGYgXCIlYVwiIHByZXR0eV9wcmludCBqc29uXG5cbiAgbGV0IHByZXR0eV9wcmludF90b19jaGFubmVsIG9jIGpzb24gPVxuICAgIGxldCBmbXQgPSBGb3JtYXQuZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jIGluXG4gICAgRm9ybWF0LmZwcmludGYgZm10IFwiJWFAP1wiIHByZXR0eV9wcmludCBqc29uXG5cbmVuZFxuIiwibGV0IGVycm9yIG1zZyBfanNvbiA9IHJhaXNlIChGYWlsdXJlIG1zZylcblxubW9kdWxlIEludGVybmFsID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgICB0eXBlIGpzb25cbiAgICB2YWwgbnVsbCA6IHVuaXQgLT4ganNvblxuICBlbmRcblxuICBtb2R1bGUgdHlwZSBJbnRlcm5hbF9zdHJpY3RfaW50ZiA9IHNpZ1xuICAgIHR5cGUganNvblxuXG4gICAgdmFsIG1lbWJlciA6IHN0cmluZyAtPiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSAtPiBqc29uXG4gICAgdmFsIGluZGV4IDogaW50IC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb25cbiAgICB2YWwgbWFwIDogKGpzb24gLT4ganNvbikgLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4gWz4gYExpc3Qgb2YganNvbiBsaXN0IF1cbiAgICB2YWwgdG9fYXNzb2MgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3QgXSAtPiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgIHZhbCB0b19ib29sIDogWz4gYEJvb2wgb2YgYm9vbCBdIC0+IGJvb2xcbiAgICB2YWwgdG9fZmxvYXQgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSAtPiBmbG9hdFxuICAgIHZhbCB0b19zdHJpbmcgOiBbPiBgU3RyaW5nIG9mIHN0cmluZyBdIC0+IHN0cmluZ1xuICAgIHZhbCB0b19zdHJpbmdfb3B0aW9uIDogWz4gYFN0cmluZyBvZiBzdHJpbmcgfCBgTnVsbCBdIC0+IHN0cmluZyBvcHRpb25cbiAgICB2YWwgdG9fb3B0aW9uIDogKChbPiBgTnVsbCBdIGFzICdhKSAtPiBqc29uKSAtPiAnYSAtPiBqc29uIG9wdGlvblxuICAgIHZhbCB0b19saXN0IDogWz4gYExpc3Qgb2YganNvbiBsaXN0IF0gLT4ganNvbiBsaXN0XG4gICAgdmFsIHRvX2Jvb2xfb3B0aW9uIDogWz4gYEJvb2wgb2YgYm9vbCB8IGBOdWxsIF0gLT4gYm9vbCBvcHRpb25cbiAgICB2YWwgdG9fZmxvYXRfb3B0aW9uIDogWz4gYEZsb2F0IG9mIGZsb2F0IHwgYE51bGwgXSAtPiBmbG9hdCBvcHRpb25cbiAgICB2YWwgdG9fbnVtYmVyIDogWz4gYEZsb2F0IG9mIGZsb2F0IF0gLT4gZmxvYXRcbiAgICB2YWwgdG9fbnVtYmVyX29wdGlvbiA6IFs+IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIGNvbnZlcnRfZWFjaCA6IChqc29uIC0+IGpzb24pIC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIC0+IGpzb24gbGlzdFxuICAgIHZhbCByZXZfZmlsdGVyX21hcCA6ICgnYSAtPiAnYSBvcHRpb24pIC0+ICdhIGxpc3QgLT4gJ2EgbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9tYXAgOiAoJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgcmV2X2ZsYXR0ZW4gOiAnYSBsaXN0IC0+IFs+IGBMaXN0IG9mICdhIGxpc3QgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmxhdHRlbiA6IFs+IGBMaXN0IG9mICdhIGxpc3QgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2luZGV4IDogaW50IC0+IFs+IGBMaXN0IG9mIGpzb24gbGlzdCBdIGxpc3QgLT4ganNvbiBsaXN0XG4gICAgdmFsIGZpbHRlcl9saXN0IDogWz4gYExpc3Qgb2YgJ2EgXSBsaXN0IC0+ICdhIGxpc3RcbiAgICB2YWwgZmlsdGVyX2Fzc29jIDogWz4gYEFzc29jIG9mICdhIF0gbGlzdCAtPiAnYSBsaXN0XG4gICAgdmFsIGZpbHRlcl9ib29sIDogWz4gYEJvb2wgb2YgYm9vbCBdIGxpc3QgLT4gYm9vbCBsaXN0XG4gICAgdmFsIGZpbHRlcl9mbG9hdCA6IFs+IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICAgIHZhbCBmaWx0ZXJfc3RyaW5nICA6IFs+IGBTdHJpbmcgb2Ygc3RyaW5nIF0gbGlzdCAtPiBzdHJpbmcgbGlzdFxuICAgIHZhbCBmaWx0ZXJfbWVtYmVyIDogc3RyaW5nIC0+IFs+IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdCBdIGxpc3QgLT4ganNvbiBsaXN0XG4gICAgdmFsIGZpbHRlcl9udW1iZXIgOiBbPiBgRmxvYXQgb2YgZmxvYXQgXSBsaXN0IC0+IGZsb2F0IGxpc3RcbiAgICB2YWwga2V5cyA6IFs+IGBBc3NvYyBvZiAoc3RyaW5nICogJ2EpIGxpc3QgXSAtPiBzdHJpbmcgbGlzdFxuICAgIHZhbCB2YWx1ZXMgOiBbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IF0gLT4gJ2EgbGlzdFxuICAgIHZhbCBjb21iaW5lIDogWz4gYEFzc29jIG9mICdhIGxpc3QgXSAtPiBbPiBgQXNzb2Mgb2YgJ2EgbGlzdCBdIC0+IFs+IGBBc3NvYyBvZiAnYSBsaXN0IF1cbiAgICB2YWwgc29ydCA6IChbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IHwgYExpc3Qgb2YgJ2EgbGlzdCBdIGFzICdhKSAtPiAnYVxuICBlbmRcblxuICBtb2R1bGUgU2hhcmVkID0gc3RydWN0XG4gICAgbGV0IHJlYyByZXZfZmlsdGVyX21hcCBmIGFjYyBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhY2NcbiAgICAgIHwgaGQ6OnRsIC0+XG4gICAgICAgIG1hdGNoIGYgaGQgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gcmV2X2ZpbHRlcl9tYXAgZiBhY2MgdGxcbiAgICAgICAgfCBTb21lIHYgLT4gcmV2X2ZpbHRlcl9tYXAgZiAodjo6YWNjKSB0bFxuXG4gICAgbGV0IGZpbHRlcl9tYXAgZiBsID0gTGlzdC5yZXYgKHJldl9maWx0ZXJfbWFwIGYgW10gbClcblxuICAgIGxldCByZWMgcmV2X2ZsYXR0ZW4gYWNjIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGFjY1xuICAgICAgfCBoZDo6dGwgLT5cbiAgICAgICAgbWF0Y2ggaGQgd2l0aFxuICAgICAgICB8IGBMaXN0IGwyIC0+IHJldl9mbGF0dGVuIChMaXN0LnJldl9hcHBlbmQgbDIgYWNjKSB0bFxuICAgICAgICB8IF8gLT4gcmV2X2ZsYXR0ZW4gYWNjIHRsXG5cbiAgICBsZXQgZmxhdHRlbiBsID0gTGlzdC5yZXYgKHJldl9mbGF0dGVuIFtdIGwpXG5cbiAgZW5kXG5cbiAgbW9kdWxlIFN0cmljdChNIDogUykgOiBJbnRlcm5hbF9zdHJpY3RfaW50ZlxuICAgIHdpdGggdHlwZSBqc29uID0gTS5qc29uXG4gID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gTS5qc29uXG5cbiAgICBsZXQgYXNzb2MgbmFtZSBvYmogOiBqc29uID0gdHJ5IExpc3QuYXNzb2MgbmFtZSBvYmogd2l0aCBOb3RfZm91bmQgLT4gTS5udWxsICgpXG5cbiAgICBsZXQgbWVtYmVyIG5hbWUgdiA6IGpzb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBBc3NvYyBvYmogLT4gYXNzb2MgbmFtZSBvYmpcbiAgICAgIHwganNvbiAtPiBlcnJvciAoXCJFeHBlY3RlZCBgQXNzb2MgdG8gZmluZCBuYW1lICdcIiBeIG5hbWUgXiBcIicgaW5cIikganNvblxuXG4gICAgbGV0IGluZGV4IGkgdiA6IGpzb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgICAgICAgIGxldCBpJyA9IGlmIGkgPCAwIHRoZW4gbGVuICsgaSBlbHNlIGkgaW5cbiAgICAgICAgICBpZiBpJyA8IDAgfHwgaScgPj0gbGVuIHRoZW4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKHN0cmluZ19vZl9pbnQgaSBeIFwiIG91dCBvZiBib3VuZHNcIikpXG4gICAgICAgICAgZWxzZSBMaXN0Lm50aCBsIGknXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJDYW4ndCBpbmRleCBub25lIGBMaXN0IHR5cGUgXCIganNvblxuXG4gICAgbGV0IG1hcCBmIHYgPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBMaXN0IGwgLT4gYExpc3QgKExpc3QubWFwIGYgbClcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkNhbid0IG1hcCBvdmVyIG5vbmUgYExpc3QgdHlwZSBcIiBqc29uXG5cbiAgICBsZXQgdG9fYXNzb2MgPSBmdW5jdGlvbiB8IGBBc3NvYyBvYmogLT4gb2JqIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBBc3NvY1wiIGpzb25cbiAgICBsZXQgdG9fYm9vbCA9IGZ1bmN0aW9uIHwgYEJvb2wgYiAtPiBiIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBCb29sXCIganNvblxuICAgIGxldCB0b19mbG9hdCA9IGZ1bmN0aW9uIHwgYEZsb2F0IGYgLT4gZiB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fc3RyaW5nID0gZnVuY3Rpb25cbiAgICAgIHwgYFN0cmluZyBzIC0+IHNcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBTdHJpbmdcIiBqc29uXG5cbiAgICBsZXQgdG9fc3RyaW5nX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBTdHJpbmcgcyAtPiBTb21lIHNcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYFN0cmluZyBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19vcHRpb24gZiB2IDoganNvbiBvcHRpb24gPVxuICAgICAgbWF0Y2ggdiB3aXRoXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwgdiAtPiBTb21lIChmIHYpXG5cbiAgICBsZXQgdG9fbGlzdCB2IDoganNvbiBsaXN0ID1cbiAgICAgIG1hdGNoIHYgd2l0aFxuICAgICAgfCBgTGlzdCBsIC0+IGxcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBMaXN0XCIganNvblxuXG4gICAgbGV0IHRvX2Zsb2F0X29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgdG9fYm9vbF9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgQm9vbCBiIC0+IFNvbWUgYlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgQm9vbCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19udW1iZXIgPSBmdW5jdGlvblxuICAgICAgfCBgRmxvYXQgZiAtPiBmXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXRcIiBqc29uXG5cbiAgICBsZXQgdG9fbnVtYmVyX29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgfCBgTnVsbCAtPiBOb25lXG4gICAgICB8IGpzb24gLT4gZXJyb3IgXCJFeHBlY3RlZCBgRmxvYXQgb3IgYE51bGxcIiBqc29uXG5cbiAgICBsZXQgY29udmVydF9lYWNoIGYgPSBmdW5jdGlvblxuICAgICAgfCBgTGlzdCBsIC0+IExpc3QubWFwIGYgbFxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYExpc3RcIiBqc29uXG5cbiAgICBsZXQgcmV2X2ZpbHRlcl9tYXAgPSBTaGFyZWQucmV2X2ZpbHRlcl9tYXBcbiAgICBsZXQgZmlsdGVyX21hcCA9IFNoYXJlZC5maWx0ZXJfbWFwXG5cbiAgICBsZXQgcmV2X2ZsYXR0ZW4gPSBTaGFyZWQucmV2X2ZsYXR0ZW5cbiAgICBsZXQgZmxhdHRlbiA9IFNoYXJlZC5mbGF0dGVuXG5cbiAgICBsZXQgZmlsdGVyX2luZGV4IGkgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChmdW5jdGlvbiB8IGBMaXN0IGwgLT4gKHRyeSBTb21lIChMaXN0Lm50aCBsIGkpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9saXN0IGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgTGlzdCBsIC0+IFNvbWUgbCB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfYXNzb2MgbCA9IGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBBc3NvYyBsIC0+IFNvbWUgbCB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfYm9vbCBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYEJvb2wgYiAtPiBTb21lIGIgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX2Zsb2F0IGwgPSBmaWx0ZXJfbWFwIChmdW5jdGlvbiBgRmxvYXQgZiAtPiBTb21lIGYgfCBfIC0+IE5vbmUpIGxcbiAgICBsZXQgZmlsdGVyX3N0cmluZyBsID0gZmlsdGVyX21hcCAoZnVuY3Rpb24gYFN0cmluZyBzIC0+IFNvbWUgcyB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9tZW1iZXIgayBsID1cbiAgICAgIGZpbHRlcl9tYXAgKGZ1bmN0aW9uIGBBc3NvYyBsIC0+ICh0cnkgU29tZSAoTGlzdC5hc3NvYyBrIGwpIHdpdGggXyAtPiBOb25lKSB8IF8gLT4gTm9uZSkgbFxuXG4gICAgbGV0IGZpbHRlcl9udW1iZXIgbCA9XG4gICAgICBmaWx0ZXJfbWFwIChcbiAgICAgICAgZnVuY3Rpb25cbiAgICAgICAgfCBgRmxvYXQgZiAtPiBTb21lIGZcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgICkgbFxuXG4gICAgbGV0IGtleXMgbyA9IHRvX2Fzc29jIG8gfD4gTGlzdC5tYXAgKGZ1biAoa2V5LCBfKSAtPiBrZXkpXG5cbiAgICBsZXQgdmFsdWVzIG8gPSB0b19hc3NvYyBvIHw+IExpc3QubWFwIChmdW4gKF8sIHZhbHVlKSAtPiB2YWx1ZSlcblxuICAgIGxldCBjb21iaW5lIGZpcnN0IHNlY29uZCA9XG4gICAgICBtYXRjaCAoZmlyc3QsIHNlY29uZCkgd2l0aFxuICAgICAgfCAoYEFzc29jIGEsIGBBc3NvYyBiKSAtPiBgQXNzb2MgKGEgQCBiKVxuICAgICAgfCAoXywgXykgLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJFeHBlY3RlZCB0d28gb2JqZWN0c1wiKVxuXG4gICAgbGV0IHJlYyBzb3J0IGpzb24gPVxuICAgICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBvID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbykgaW5cbiAgICAgICAgYEFzc29jICgoTGlzdC5zdGFibGVfc29ydCAoZnVuIChrMSwgXykgKGsyLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrMSBrMikpIG8pXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgc29ydCBsKSlcbiAgICAgIHwgZWwgLT4gIGVsXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX2Jhc2ljX2ludGYgPSBzaWdcblxuICAgIHZhbCB0b19udW1iZXIgOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCBdIC0+IGZsb2F0XG4gICAgdmFsIHRvX251bWJlcl9vcHRpb24gOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCB8IGBOdWxsIF0gLT4gZmxvYXQgb3B0aW9uXG4gICAgdmFsIHRvX2ludCA6IFs+IGBJbnQgb2YgaW50IF0gLT4gaW50XG4gICAgdmFsIHRvX2ludF9vcHRpb24gOiBbPiBgSW50IG9mIGludCB8IGBOdWxsIF0gLT4gaW50IG9wdGlvblxuICAgIHZhbCBmaWx0ZXJfaW50IDogWz4gYEludCBvZiBpbnQgXSBsaXN0IC0+IGludCBsaXN0XG4gICAgdmFsIGZpbHRlcl9udW1iZXIgOiBbPiBgSW50IG9mIGludCB8IGBGbG9hdCBvZiBmbG9hdCBdIGxpc3QgLT4gZmxvYXQgbGlzdFxuICBlbmRcblxuICBtb2R1bGUgQmFzaWMoTSA6IFMpIDogSW50ZXJuYWxfYmFzaWNfaW50ZiA9IHN0cnVjdFxuXG4gICAgbGV0IHRvX251bWJlciA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBmbG9hdCBpXG4gICAgICB8IGBGbG9hdCBmIC0+IGZcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQgb3IgYEZsb2F0XCIganNvblxuXG4gICAgbGV0IHRvX251bWJlcl9vcHRpb24gPSBmdW5jdGlvblxuICAgICAgfCBgSW50IGkgLT4gU29tZSAoZmxvYXQgaSlcbiAgICAgIHwgYEZsb2F0IGYgLT4gU29tZSBmXG4gICAgICB8IGBOdWxsIC0+IE5vbmVcbiAgICAgIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnQsIGBGbG9hdCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCB0b19pbnQgPSBmdW5jdGlvbiB8IGBJbnQgaSAtPiBpIHwganNvbiAtPiBlcnJvciBcIkV4cGVjdGVkIGBJbnRcIiBqc29uXG5cbiAgICBsZXQgdG9faW50X29wdGlvbiA9IGZ1bmN0aW9uXG4gICAgICB8IGBJbnQgaSAtPiBTb21lIGlcbiAgICAgIHwgYE51bGwgLT4gTm9uZVxuICAgICAgfCBqc29uIC0+IGVycm9yIFwiRXhwZWN0ZWQgYEludCBvciBgTnVsbFwiIGpzb25cblxuICAgIGxldCBmaWx0ZXJfaW50IGwgPSBTaGFyZWQuZmlsdGVyX21hcCAoZnVuY3Rpb24gYEludCBpIC0+IFNvbWUgaSB8IF8gLT4gTm9uZSkgbFxuICAgIGxldCBmaWx0ZXJfbnVtYmVyIGwgPVxuICAgICAgU2hhcmVkLmZpbHRlcl9tYXAgKFxuICAgICAgICBmdW5jdGlvblxuICAgICAgICB8IGBJbnQgaSAtPiBTb21lIChmbG9hdCBpKVxuICAgICAgICB8IGBGbG9hdCBmIC0+IFNvbWUgZlxuICAgICAgICB8IF8gLT4gTm9uZVxuICAgICAgKSBsXG4gIGVuZFxuXG4gIG1vZHVsZSB0eXBlIEludGVybmFsX2V4dGVuZGVkX2ludGYgPSBzaWdcbiAgICB2YWwgc29ydCA6IChbPiBgQXNzb2Mgb2YgKHN0cmluZyAqICdhKSBsaXN0IHwgYExpc3Qgb2YgJ2EgbGlzdCB8XG4gICAgICAgICAgICAgICAgICAgYFR1cGxlIG9mICdhIGxpc3QgfCBgVmFyaWFudCBvZiAnYiAqICdhIG9wdGlvbiBdIGFzICdhKSAtPiAnYVxuICBlbmRcblxuICBtb2R1bGUgRXh0ZW5kZWQoTSA6IFMpIDogSW50ZXJuYWxfZXh0ZW5kZWRfaW50ZiA9IHN0cnVjdFxuXG4gICAgbGV0IHJlYyBzb3J0IGpzb24gPVxuICAgICAgbWF0Y2gganNvbiB3aXRoXG4gICAgICB8IGBBc3NvYyBvIC0+XG4gICAgICAgIGxldCBvID0gTGlzdC5yZXYgKExpc3QucmV2X21hcCAoZnVuIChrLCB2KSAtPiAoaywgc29ydCB2KSkgbykgaW5cbiAgICAgICAgYEFzc29jICgoTGlzdC5zdGFibGVfc29ydCAoZnVuIChrMSwgXykgKGsyLCBfKSAtPiBTdHJpbmcuY29tcGFyZSBrMSBrMikpIG8pXG4gICAgICB8IGBUdXBsZSBsXG4gICAgICB8IGBMaXN0IGwgLT5cbiAgICAgICAgYExpc3QgKExpc3QucmV2IChMaXN0LnJldl9tYXAgc29ydCBsKSlcbiAgICAgIHwgYFZhcmlhbnQgKGssIFNvbWUgdikgYXMgdjEgLT5cbiAgICAgICAgbGV0IHYnID0gc29ydCB2IGluIGlmIHYnID09IHYgdGhlbiB2MSBlbHNlIGBWYXJpYW50IChrLCBTb21lIHYnKVxuICAgICAgfCBlbCAtPiAgZWxcbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgU3RyaWN0ID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5TdHJpY3QuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG5lbmRcblxubW9kdWxlIEJhc2ljID0gc3RydWN0XG4gIG1vZHVsZSBNID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5CYXNpYy5qc29uXG4gICAgbGV0IG51bGwgKCkgPSBgTnVsbFxuICBlbmRcbiAgaW5jbHVkZSBJbnRlcm5hbC5TdHJpY3QoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5CYXNpYyhNKVxuZW5kXG5cbm1vZHVsZSBFeHRlbmRlZCA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9IEpzb24uRXh0ZW5kZWQuanNvblxuICAgIGxldCBudWxsICgpID0gYE51bGxcbiAgZW5kXG4gIGluY2x1ZGUgSW50ZXJuYWwuU3RyaWN0KE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuQmFzaWMoTSlcbiAgaW5jbHVkZSBJbnRlcm5hbC5FeHRlbmRlZChNKVxuZW5kXG5cbm1vZHVsZSBZb2pzb25fc2FmZSA9IHN0cnVjdFxuICBtb2R1bGUgTSA9IHN0cnVjdFxuICAgIHR5cGUganNvbiA9XG4gICAgICBbXG4gICAgICB8IGBOdWxsXG4gICAgICB8IGBCb29sIG9mIGJvb2xcbiAgICAgIHwgYEludCBvZiBpbnRcbiAgICAgIHwgYEludGxpdCBvZiBzdHJpbmdcbiAgICAgIHwgYEZsb2F0IG9mIGZsb2F0XG4gICAgICB8IGBTdHJpbmcgb2Ygc3RyaW5nXG4gICAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgICAgfCBgTGlzdCBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFR1cGxlIG9mIGpzb24gbGlzdFxuICAgICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgICBdXG5cbiAgICBsZXQgbnVsbCAoKSA9IGBOdWxsXG4gIGVuZFxuICBpbmNsdWRlIEludGVybmFsLlN0cmljdChNKVxuICBpbmNsdWRlIEludGVybmFsLkJhc2ljKE0pXG4gIGluY2x1ZGUgSW50ZXJuYWwuRXh0ZW5kZWQoTSlcbmVuZFxuIiwibGV0IHRva2VuX3RvX3N0cmluZyAodG9rOlRva2Vucy50b2tlbikgPVxuICBtYXRjaCB0b2sgd2l0aFxuICB8IFNUUklORyBzIC0+IHNcbiAgfCBPUyAtPiBcIntcIlxuICB8IE9FIC0+IFwifVwiXG4gIHwgTlVMTCAtPiBcIk51bGxcIlxuICB8IE5FR0lORklOSVRZIC0+IFwiLUluZmluaXR5XCJcbiAgfCBOQU4gLT4gXCJOQU5cIlxuICB8IExFWF9FUlJPUiBlcnIgLT4gXCJpbnB1dCBlcnJvciAnXCIgXiBlcnIgXiBcIidcIlxuICB8IExBUkdFSU5UIHMgLT4gc1xuICB8IElOVCBpIC0+IHN0cmluZ19vZl9pbnQgaVxuICB8IElORklOSVRZIC0+IFwiSW5maW5pdHlcIlxuICB8IEZMT0FUIGYgLT4gc3RyaW5nX29mX2Zsb2F0IGZcbiAgfCBFT0YgLT4gXCJlbmQtb2YtZmlsZVwiXG4gIHwgQ09NUExJQU5DRV9FUlJPUiBlcnIgLT4gZXJyXG4gIHwgQ09NTUEgLT4gXCIsXCJcbiAgfCBDT0xPTiAtPiBcIjpcIlxuICB8IEJPT0wgYiAtPiBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbiAgfCBBUyAtPiBcIltcIlxuICB8IEFFIC0+IFwiXVwiXG4gIHwgVlMgLT4gXCI8XCJcbiAgfCBWRSAtPiBcIj5cIlxuICB8IFRTIC0+IFwiKFwiXG4gIHwgVEUgLT4gXCIpXCJcbiIsIm1vZHVsZSB0eXBlIFJlYWRlcl9zdHJpbmdfZmlsZSA9IHNpZ1xuICB0eXBlIGpzb25cblxuICB2YWwganNvbl9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gKGpzb24sIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX29mX3N0cmluZ19leG4gOiBzdHJpbmcgLT4ganNvblxuICB2YWwganNvbl9vZl9maWxlIDogc3RyaW5nIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9maWxlX2V4biA6IHN0cmluZyAtPiBqc29uXG4gIHZhbCBqc29uX29mX2NoYW5uZWwgOiBpbl9jaGFubmVsIC0+IChqc29uLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl9vZl9jaGFubmVsX2V4biA6IGluX2NoYW5uZWwgLT4ganNvblxuICB2YWwganNvbl9vZl9mdW5jdGlvbiA6IChieXRlcyAtPiBpbnQgLT4gaW50KSAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfZnVuY3Rpb25fZXhuIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb25cbiAgdmFsIGpzb25fb2ZfbGV4YnVmIDogTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2V4biA6IExleGluZy5sZXhidWYgLT4ganNvblxuICB2YWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGpzb25cbiAgdmFsIG9mX2ZpbGUgOiBzdHJpbmcgLT4ganNvblxuICB2YWwgb2ZfY2hhbm5lbCA6IGluX2NoYW5uZWwgLT4ganNvblxuICB2YWwgb2ZfZnVuY3Rpb24gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvblxuXG4gIHZhbCBqc29uX29mX3N0cmluZ19lcnJvcl9pbmZvIDogc3RyaW5nIC0+IChqc29uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuICB2YWwganNvbl9vZl9maWxlX2Vycm9yX2luZm8gOiBzdHJpbmcgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyA6IGluX2NoYW5uZWwgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2Z1bmN0aW9uX2Vycm9yX2luZm8gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4gKGpzb24sIEVycm9yX2luZm8udCkgcmVzdWx0XG4gIHZhbCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvIDogTGV4aW5nLmxleGJ1ZiAtPiAoanNvbiwgRXJyb3JfaW5mby50KSByZXN1bHRcbiAgdmFsIGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm9fY29tcGF0IDogP3N0cmVhbTpib29sIC0+IExleGluZy5sZXhidWYgLT4gKGpzb24gb3B0aW9uLCBFcnJvcl9pbmZvLnQpIHJlc3VsdFxuXG4gIHZhbCBzdHJlYW1fZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fY2hhbm5lbCA6ID9maW46KHVuaXQgLT4gdW5pdCkgLT4gaW5fY2hhbm5lbCAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9maWxlIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2Z1bmN0aW9uIDogKGJ5dGVzIC0+IGludCAtPiBpbnQpIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2xleGJ1ZiA6IExleGluZy5sZXhidWYgLT4ganNvbiBTdHJlYW0udFxuXG4gIHZhbCBzdHJlYW1fZnJvbV9zdHJpbmdfZXJyb3JfaW5mbyA6IHN0cmluZyAtPiBqc29uIFN0cmVhbS50XG4gIHZhbCBzdHJlYW1fZnJvbV9jaGFubmVsX2Vycm9yX2luZm8gOiA/ZmluOih1bml0IC0+IHVuaXQpIC0+IGluX2NoYW5uZWwgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIDogc3RyaW5nIC0+IGpzb24gU3RyZWFtLnRcbiAgdmFsIHN0cmVhbV9mcm9tX2Z1bmN0aW9uX2Vycm9yX2luZm8gOiAoYnl0ZXMgLT4gaW50IC0+IGludCkgLT4ganNvbiBTdHJlYW0udFxuICB2YWwgc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gOiBMZXhpbmcubGV4YnVmIC0+IGpzb24gU3RyZWFtLnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoTGV4eGVyIDogQ29tcGxpYW50X2xleHhlci5MZXggKSAoUGFyc2VyIDogUGFyc2VyLlBhcnNlcikgOiBSZWFkZXJfc3RyaW5nX2ZpbGVcbiAgd2l0aCB0eXBlIGpzb24gPSBQYXJzZXIuQ29tcGxpYW5jZS5qc29uXG49IHN0cnVjdFxuICB0eXBlIGpzb24gPSBQYXJzZXIuQ29tcGxpYW5jZS5qc29uXG5cbiAgbGV0IHJlYWRfanNvbicgfmxleGJ1ZiA9XG4gICAgbGV0IHJlYWRlciAoKSA9IExleHhlci5yZWFkIGxleGJ1ZiBpblxuICAgIG1hdGNoIFBhcnNlci5kZWNvZGUgfnJlYWRlciB3aXRoXG4gICAgfCBPayBOb25lIC0+IEVycm9yIFwiZW1wdHkgaW5wdXRcIlxuICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBiZWdpblxuICAgICAgbWF0Y2ggcmVhZGVyICgpIHdpdGhcbiAgICAgIHwgRU9GIC0+IE9rIHJlc1xuICAgICAgfCBleGNlcHRpb24gTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG4gICAgICB8IHRvayAtPiBFcnJvciAoXCJqdW5rIGFmdGVyIGVuZCBvZiBKU09OIHZhbHVlOiBcIiBeIChUb2tlbl91dGlscy50b2tlbl90b19zdHJpbmcgdG9rKSlcbiAgICAgIGVuZFxuICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG5cbiAgbGV0IHJlYWRfanNvbiB+bGV4YnVmID1cbiAgICBtYXRjaCByZWFkX2pzb24nIH5sZXhidWYgd2l0aFxuICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+XG4gICAgICBsZXQgZXJyX2luZm8gPSBFcnJvcl9pbmZvLmNyZWF0ZV9mcm9tX2xleGJ1ZiBsZXhidWYgcyBpblxuICAgICAgRXJyb3IgKEVycm9yX2luZm8udG9fc3RyaW5nIGVycl9pbmZvKVxuXG4gIGxldCBqc29uX29mX3N0cmluZyBzID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fc3RyaW5nIHMgaW5cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX3N0cmluZ19leG4gcyA9XG4gICAgbWF0Y2gganNvbl9vZl9zdHJpbmcgcyB3aXRoXG4gICAgfCBPayByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBzIC0+IHJhaXNlIChGYWlsdXJlIHMpXG5cbiAgbGV0IG9mX3N0cmluZyBzID0ganNvbl9vZl9zdHJpbmdfZXhuIHNcblxuICBsZXQganNvbl9vZl9maWxlIGZpbGVuYW1lID1cbiAgICB0cnkgYmVnaW5cbiAgICAgIGxldCBpbmMgPSBvcGVuX2luIGZpbGVuYW1lIGluXG4gICAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fY2hhbm5lbCBpbmMgaW5cbiAgICAgIGxldCByZXMgPSByZWFkX2pzb24gfmxleGJ1ZiBpblxuICAgICAgICBjbG9zZV9pbiBpbmM7XG4gICAgICAgIHJlc1xuICAgIGVuZFxuICAgIHdpdGggU3lzX2Vycm9yIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl9vZl9maWxlX2V4biBmaWxlbmFtZSA9XG4gICAgbWF0Y2gganNvbl9vZl9maWxlIGZpbGVuYW1lIHdpdGhcbiAgICB8IE9rIHJlcyAtPiByZXNcbiAgICB8IEVycm9yIHMgLT4gcmFpc2UgKEZhaWx1cmUgcylcblxuICBsZXQganNvbl9vZl9jaGFubmVsIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9jaGFubmVsX2V4biBpbmMgPVxuICAgIG1hdGNoIGpzb25fb2ZfY2hhbm5lbCBpbmMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uIGYgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9mdW5jdGlvbiBmIGluXG4gICAgcmVhZF9qc29uIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9sZXhidWYgbGV4YnVmID1cbiAgICByZWFkX2pzb24gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9leG4gbGV4YnVmID1cbiAgICBtYXRjaCBqc29uX29mX2xleGJ1ZiBsZXhidWYgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uX2V4biBmID1cbiAgICBtYXRjaCBqc29uX29mX2Z1bmN0aW9uIGYgd2l0aFxuICAgIHwgT2sgcmVzIC0+IHJlc1xuICAgIHwgRXJyb3IgcyAtPiByYWlzZSAoRmFpbHVyZSBzKVxuXG4gIGxldCBvZl9maWxlID0ganNvbl9vZl9maWxlX2V4blxuICBsZXQgb2ZfY2hhbm5lbCA9IGpzb25fb2ZfY2hhbm5lbF9leG5cbiAgbGV0IG9mX2Z1bmN0aW9uID0ganNvbl9vZl9mdW5jdGlvbl9leG5cblxuICAoKiBFcnJvcl9pbmZvLnQgcmV0dXJuaW5nIGZ1bmN0aW9ucyAqKVxuXG4gIGxldCByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmID1cbiAgICBtYXRjaCByZWFkX2pzb24nIH5sZXhidWYgd2l0aFxuICAgIHwgT2sgXyBhcyByZXMgLT4gcmVzXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgIEVycm9yIGVycl9pbmZvXG5cbiAgbGV0IGpzb25fb2Zfc3RyaW5nX2Vycm9yX2luZm8gcyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX3N0cmluZyBzIGluXG4gICAgcmVhZF9qc29uX2Vycm9yX2luZm8gfmxleGJ1ZlxuXG4gIGxldCBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9lcnJvcl9pbmZvIH5sZXhidWZcblxuICBsZXQganNvbl9vZl9maWxlX2Vycm9yX2luZm8gZmlsZW5hbWUgPVxuICAgIHRyeSBiZWdpblxuICAgICAgbGV0IGluYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICAgIGxldCByZXMgPSBqc29uX29mX2NoYW5uZWxfZXJyb3JfaW5mbyBpbmMgaW5cbiAgICAgICAgY2xvc2VfaW4gaW5jO1xuICAgICAgICByZXNcbiAgICBlbmRcbiAgICB3aXRoIFN5c19lcnJvciBlcnIgLT4gRXJyb3IgeyBFcnJvcl9pbmZvLmxpbmUgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwOyBtc2cgPSBlcnIgfVxuXG4gIGxldCBqc29uX29mX2Z1bmN0aW9uX2Vycm9yX2luZm8gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgbGV0IGpzb25fb2ZfbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmID1cbiAgICByZWFkX2pzb25fZXJyb3JfaW5mbyB+bGV4YnVmXG5cbiAgKCogSW50ZXJuYWwgY29tcGF0aWJpbGl0eSBmdW5jdGlvbiBzdXBwb3J0aW5nIHRoZSBzdHJlYW0gZmxhZyAqKVxuXG4gIGxldCBqc29uX29mX2xleGJ1Zl9lcnJvcl9pbmZvX2NvbXBhdCA/KHN0cmVhbSA9IGZhbHNlKSBsZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgcmVzID0gbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICB8IE9rIE5vbmUgLT4gaWYgc3RyZWFtIHRoZW4gT2sgTm9uZSBlbHNlIEVycm9yIFwiZW1wdHkgaW5wdXRcIlxuICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBiZWdpblxuICAgICAgbWF0Y2ggc3RyZWFtIHdpdGhcbiAgICAgIHwgdHJ1ZSAtPiBPayAoU29tZSByZXMpXG4gICAgICB8IGZhbHNlIC0+IGJlZ2luXG4gICAgICAgIG1hdGNoIHJlYWRlciAoKSB3aXRoXG4gICAgICAgIHwgRU9GIC0+IE9rIChTb21lIHJlcylcbiAgICAgICAgfCBleGNlcHRpb24gTGV4eGVyX3V0aWxzLkxleF9lcnJvciBlcnIgLT4gRXJyb3IgZXJyXG4gICAgICAgIHwgdG9rIC0+IEVycm9yIChcImp1bmsgYWZ0ZXIgZW5kIG9mIEpTT04gdmFsdWU6IFwiIF4gKFRva2VuX3V0aWxzLnRva2VuX3RvX3N0cmluZyB0b2spKVxuICAgICAgICBlbmRcbiAgICAgIGVuZFxuICAgIHwgRXJyb3IgcyAtPiBFcnJvciBzXG4gICAgaW5cbiAgICBtYXRjaCByZXMgd2l0aFxuICAgIHwgT2sgcmVzIC0+IE9rIHJlc1xuICAgIHwgRXJyb3IgcyAtPlxuICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIHMgaW5cbiAgICAgIEVycm9yIGVycl9pbmZvXG5cblxuICAoKiBTdHJlYW0udCByZXR1cm5pbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9zdHJlYW0gfmZpbiB+bGV4YnVmID1cbiAgICBsZXQgcmVhZGVyICgpID0gTGV4eGVyLnJlYWQgbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggUGFyc2VyLmRlY29kZSB+cmVhZGVyIHdpdGhcbiAgICAgIHwgT2sgTm9uZSAtPiBmaW4gKCk7IE5vbmVcbiAgICAgIHwgT2sgKFNvbWUgcmVzKSAtPiBTb21lIHJlc1xuICAgICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgbGV0ICgpID0gZmluICgpIGluXG4gICAgICAgIGxldCBlcnJfaW5mbyA9IEVycm9yX2luZm8uY3JlYXRlX2Zyb21fbGV4YnVmIGxleGJ1ZiBlcnIgaW5cbiAgICAgICAgbGV0IG1zZyA9IEVycm9yX2luZm8udG9fc3RyaW5nIGVycl9pbmZvIGluXG4gICAgICAgIHJhaXNlIChGYWlsdXJlIG1zZylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgc3RyZWFtX2Zyb21fc3RyaW5nIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWwgPyhmaW4gPSBmdW4gKCkgLT4gKCkpIGluYyA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2NoYW5uZWwgaW5jIGluXG4gICAgcmVhZF9qc29uX3N0cmVhbSB+ZmluIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZnVuY3Rpb24gZiA9XG4gICAgbGV0IGxleGJ1ZiA9IExleGluZy5mcm9tX2Z1bmN0aW9uIGYgaW5cbiAgICByZWFkX2pzb25fc3RyZWFtIH5maW46KGZ1biAoKSAtPiAoKSkgfmxleGJ1ZlxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlIGZpbGVuYW1lID1cbiAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIHN0cmVhbV9mcm9tX2NoYW5uZWwgfmZpbjooZnVuICgpIC0+IGNsb3NlX2luIGluYykgaW5jXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2xleGJ1ZiBsZXhidWYgPVxuICAgIHJlYWRfanNvbl9zdHJlYW0gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbiAgKCogU3RyZWFtLnQgSnNvbl9lcnJvcl9pbmZvIHJhaXNpbmcgZnVuY3Rpb25zICopXG5cbiAgbGV0IHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluIH5sZXhidWYgPVxuICAgIGxldCByZWFkZXIgKCkgPSBMZXh4ZXIucmVhZCBsZXhidWYgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBQYXJzZXIuZGVjb2RlIH5yZWFkZXIgd2l0aFxuICAgICAgfCBPayBOb25lIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBPayAoU29tZSByZXMpIC0+IFNvbWUgcmVzXG4gICAgICB8IEVycm9yIGVyciAtPlxuICAgICAgICBsZXQgKCkgPSBmaW4gKCkgaW5cbiAgICAgICAgbGV0IGVycl9pbmZvID0gRXJyb3JfaW5mby5jcmVhdGVfZnJvbV9sZXhidWYgbGV4YnVmIGVyciBpblxuICAgICAgICByYWlzZSAoRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZ19lcnJvcl9pbmZvIHMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9zdHJpbmcgcyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvID8oZmluID0gZnVuICgpIC0+ICgpKSBpbmMgPVxuICAgIGxldCBsZXhidWYgPSBMZXhpbmcuZnJvbV9jaGFubmVsIGluYyBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZnVuY3Rpb25fZXJyb3JfaW5mbyBmID1cbiAgICBsZXQgbGV4YnVmID0gTGV4aW5nLmZyb21fZnVuY3Rpb24gZiBpblxuICAgIHJlYWRfanNvbl9zdHJlYW1fZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gKCkpIH5sZXhidWZcblxuICBsZXQgc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lID1cbiAgICBsZXQgaW5jID0gb3Blbl9pbiBmaWxlbmFtZSBpblxuICAgIHN0cmVhbV9mcm9tX2NoYW5uZWxfZXJyb3JfaW5mbyB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaW5jKSBpbmNcblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmID1cbiAgICByZWFkX2pzb25fc3RyZWFtX2Vycm9yX2luZm8gfmZpbjooZnVuICgpIC0+ICgpKSB+bGV4YnVmXG5cbmVuZFxuIiwibW9kdWxlIHR5cGUgSW50ZiA9IHNpZ1xuICB2YWwganNvbl90b19maWxlIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2ZpbGVfZXhuIDogc3RyaW5nIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19jaGFubmVsIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfZXhuIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19maWxlX2h1bSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+ICh1bml0LCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19maWxlX2h1bV9leG4gOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfaHVtIDogIG91dF9jaGFubmVsIC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHVuaXQsIHN0cmluZykgcmVzdWx0XG4gIHZhbCBqc29uX3RvX2NoYW5uZWxfaHVtX2V4biA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2ZpbGUgOiBzdHJpbmcgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19maWxlX2h1bSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2NoYW5uZWwgOiAgb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiB1bml0XG4gIHZhbCB0b19jaGFubmVsX2h1bSA6ICBvdXRfY2hhbm5lbCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHN0cmVhbV90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG4gIHZhbCBzdHJlYW1fdG9fZmlsZSA6IHN0cmluZyAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIFN0cmVhbS50IC0+IHVuaXRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgOiBJbnRmID0gc3RydWN0XG5cbiAgbGV0IG5pYmJsZV90b19oZXggaSA9IGNoYXJfb2ZfaW50IChpZiBpID4gOSB0aGVuIDY1ICsgaSAtIDEwIGVsc2UgNDggKyBpKVxuXG4gIGxldCBhZGRfaGV4X2J5dGUgb2MgaSA9XG4gICAgb3V0cHV0X2NoYXIgb2MgKG5pYmJsZV90b19oZXggKChpIGxzciA0KSBsYW5kIDB4MGYpKTtcbiAgICBvdXRwdXRfY2hhciBvYyAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG4gIGxldCBlc2NhcGUgb2MgcyA9XG4gICAgbGV0IGFkZF9jaGFyID0gb3V0cHV0X2NoYXIgb2MgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IG91dHB1dF9zdHJpbmcgb2MgaW5cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgfCAnXCInICAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcIlwiXG4gICAgICB8ICdcXFxcJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcXFxcXFwiXG4gICAgICB8ICdcXGInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxiXCJcbiAgICAgIHwgJ1xcMDEyJyAtPiBhZGRfc3RyaW5nIFwiXFxcXGZcIlxuICAgICAgfCAnXFxuJyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcblwiXG4gICAgICB8ICdcXHInICAgLT4gYWRkX3N0cmluZyBcIlxcXFxyXCJcbiAgICAgIHwgJ1xcdCcgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHRcIlxuICAgICAgfCAnXFx4MDAnLi4nXFx4MUYnXG4gICAgICB8ICdcXHg3RicgYXMgYyAtPlxuICAgICAgICBhZGRfc3RyaW5nIFwiXFxcXHUwMFwiOyAgYWRkX2hleF9ieXRlIG9jIChpbnRfb2ZfY2hhciBjKVxuICAgICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgICBkb25lXG4gICBcbiAgbGV0IGpzb25fdG9fY2hhbm5lbF9mbXQgb2MganNvbiB+ZW9sIH5pbmNyIH5wc2VwID0gXG4gICAgbGV0IGFkZF9jaGFyID0gb3V0cHV0X2NoYXIgb2MgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IG91dHB1dF9zdHJpbmcgb2MgaW5cbiAgICBsZXQgYWRkX3F1b3RlX3N0cmluZyBzID0gYWRkX2NoYXIgJ1wiJzsgZXNjYXBlIG9jIHM7IGFkZF9jaGFyICdcIicgaW5cbiAgICBsZXQgYWRkX2ludCBpID0gYWRkX3N0cmluZyAoc3RyaW5nX29mX2ludCBpKSBpblxuICAgIGxldCBhZGRfZmxvYXQgZiA9IGFkZF9zdHJpbmcgKENvbXBsaWFuY2UubnVtYmVyX3RvX3N0cmluZyBmKSBpblxuICAgIGxldCBwc2VwID0gXCI6XCIgXiBwc2VwIGluXG4gICAgbGV0IHJlYyBmbXQgb2ZmIHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJ3snOyBhZGRfc3RyaW5nIGVvbDsganNvbl9hc3NvYyAob2ZmICsgaW5jcikgbztcbiAgICAgICAgYWRkX3N0cmluZyBlb2w7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnfSdcbiAgICAgIHwgYExpc3QgbCAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnWyc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2xpc3QgKG9mZiArIGluY3IpIGw7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPlxuICAgICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgICBhZGRfY2hhciAnKCc7IGFkZF9zdHJpbmcgZW9sOyBqc29uX2xpc3QgKG9mZiArIGluY3IpIHQ7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT5cbiAgICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgICAgYWRkX2NoYXIgJzwnOyBhZGRfc3RyaW5nIGVvbDsgIHZhcmlhbnQgKG9mZiArIGluY3IpIHY7XG4gICAgICAgIGFkZF9zdHJpbmcgZW9sOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJz4nXG4gICAgYW5kIGpzb25fYXNzb2Mgb2ZmIG8gPVxuICAgICAgbGV0IGxkciA9IFN0cmluZy5tYWtlIG9mZiAnICcgaW5cbiAgICAgIGxldCBzZXAgPSByZWYgbGRyIGluXG4gICAgICBsZXQgbmV3c2VwID0gXCIsXCIgXiBlb2wgXiBsZHIgaW5cbiAgICAgIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gbmV3c2VwOyBwYWlyIG9mZiB2ICkgb1xuICAgIGFuZCBwYWlyIG9mZiAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9zdHJpbmcgcHNlcDsgZm10IG9mZiB2XG4gICAgYW5kIGpzb25fbGlzdCBvZmYgbCA9XG4gICAgICBsZXQgbGRyID0gU3RyaW5nLm1ha2Ugb2ZmICcgJyBpblxuICAgICAgbGV0IHNlcCA9IHJlZiBsZHIgaW5cbiAgICAgIGxldCBuZXdzZXAgPSBcIixcIiBeIGVvbCBeIGxkciBpblxuICAgICAgTGlzdC5pdGVyIChmdW4gdiAtPiBhZGRfc3RyaW5nICFzZXA7IHNlcCA6PSBuZXdzZXA7IGZtdCBvZmYgdiApIGxcbiAgICBhbmQgdmFyaWFudCBvZmYgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX3N0cmluZyBwc2VwOyBmbXQgKG9mZiArIGluY3IpIGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IDAganNvbjtcbiAgICBhZGRfc3RyaW5nIGVvbFxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWwnID0ganNvbl90b19jaGFubmVsX2ZtdCB+ZW9sOlwiXCIgfmluY3I6MCB+cHNlcDpcIlwiXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfaHVtJyA9IGpzb25fdG9fY2hhbm5lbF9mbXQgfmVvbDpcIlxcblwiIH5pbmNyOjIgfnBzZXA6XCIgXCJcblxuICBsZXQganNvbl90b19jaGFubmVsIG9jIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19jaGFubmVsJyBvYyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19jaGFubmVsX2h1bSBvYyBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fY2hhbm5lbF9odW0nIG9jIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2NoYW5uZWxfZXhuID0ganNvbl90b19jaGFubmVsJ1xuICBsZXQganNvbl90b19jaGFubmVsX2h1bV9leG4gPSBqc29uX3RvX2NoYW5uZWxfaHVtJ1xuXG4gIGxldCBqc29uX3RvX2ZpbGUgZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgbGV0IHJlcyA9IGpzb25fdG9fY2hhbm5lbCBvYyBqc29uIGluXG4gICAgY2xvc2Vfb3V0IG9jO1xuICAgIHJlc1xuXG4gIGxldCBqc29uX3RvX2ZpbGVfaHVtIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIGxldCByZXMgPSBqc29uX3RvX2NoYW5uZWxfaHVtIG9jIGpzb24gaW5cbiAgICBjbG9zZV9vdXQgb2M7XG4gICAgcmVzXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9leG4gZmlsZSBqc29uID1cbiAgICBsZXQgb2MgPSBvcGVuX291dCBmaWxlIGluXG4gICAgdHJ5IChqc29uX3RvX2NoYW5uZWwnIG9jIGpzb247IGNsb3NlX291dCBvYykgd2l0aFxuICAgIHwgZXhuIC0+IGNsb3NlX291dCBvYzsgcmFpc2UgZXhuXG5cbiAgbGV0IGpzb25fdG9fZmlsZV9odW1fZXhuIGZpbGUganNvbiA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoanNvbl90b19jaGFubmVsX2h1bScgb2MganNvbjsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQgdG9fZmlsZSA9IGpzb25fdG9fZmlsZV9leG5cbiAgbGV0IHRvX2ZpbGVfaHVtID0ganNvbl90b19maWxlX2h1bV9leG5cbiAgbGV0IHRvX2NoYW5uZWwgPSBqc29uX3RvX2NoYW5uZWxfZXhuXG4gIGxldCB0b19jaGFubmVsX2h1bSA9IGpzb25fdG9fY2hhbm5lbF9odW1fZXhuXG5cbiAgbGV0IHN0cmVhbV90b19jaGFubmVsIG9jIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IGpzb25fdG9fY2hhbm5lbF9leG4gb2MganNvbjsgb3V0cHV0X2NoYXIgb2MgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCBzdHJlYW1fdG9fZmlsZSBmaWxlIHN0cmVhbSA9XG4gICAgbGV0IG9jID0gb3Blbl9vdXQgZmlsZSBpblxuICAgIHRyeSAoc3RyZWFtX3RvX2NoYW5uZWwgb2Mgc3RyZWFtOyBjbG9zZV9vdXQgb2MpIHdpdGhcbiAgICB8IGV4biAtPiBjbG9zZV9vdXQgb2M7IHJhaXNlIGV4blxuZW5kXG4iLCJtb2R1bGUgdHlwZSBJbnRmID0gc2lnXG4gIHZhbCBqc29uX3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gKHN0cmluZywgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fc3RyaW5nX2V4biA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCB0b19zdHJpbmcgOiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHN0cmluZ1xuICB2YWwganNvbl90b19zdHJpbmdfaHVtIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAoc3RyaW5nLCBzdHJpbmcpIHJlc3VsdFxuICB2YWwganNvbl90b19zdHJpbmdfaHVtX2V4biA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gc3RyaW5nXG4gIHZhbCB0b19zdHJpbmdfaHVtIDogJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiBzdHJpbmdcbiAgdmFsIGpzb25fdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2V4biA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwganNvbl90b19idWZmZXJfaHVtIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCAtPiAodW5pdCwgc3RyaW5nKSByZXN1bHRcbiAgdmFsIGpzb25fdG9fYnVmZmVyX2h1bV9leG4gOiBCdWZmZXIudCAtPiAnYSBKc29uX2ludGVybmFsLmNvbnN0cmFpbmVkIC0+IHVuaXRcbiAgdmFsIHRvX2J1ZmZlciA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgdG9fYnVmZmVyX2h1bSA6IEJ1ZmZlci50IC0+ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgLT4gdW5pdFxuICB2YWwgc3RyZWFtX3RvX3N0cmluZyA6ICdhIEpzb25faW50ZXJuYWwuY29uc3RyYWluZWQgU3RyZWFtLnQgLT4gc3RyaW5nXG4gIHZhbCBzdHJlYW1fdG9fYnVmZmVyIDogQnVmZmVyLnQgLT4gJ2EgSnNvbl9pbnRlcm5hbC5jb25zdHJhaW5lZCBTdHJlYW0udCAtPiB1bml0XG5lbmRcblxubW9kdWxlIE1ha2UgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpIDogSW50ZiA9IHN0cnVjdFxuXG4gIGxldCBuaWJibGVfdG9faGV4IGkgPSBjaGFyX29mX2ludCAoaWYgaSA+IDkgdGhlbiA2NSArIGkgLSAxMCBlbHNlIDQ4ICsgaSlcblxuICBsZXQgYWRkX2hleF9ieXRlIGJ1ZiBpID1cbiAgICBCdWZmZXIuYWRkX2NoYXIgYnVmIChuaWJibGVfdG9faGV4ICgoaSBsc3IgNCkgbGFuZCAweDBmKSk7XG4gICAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAobmliYmxlX3RvX2hleCAoaSBsYW5kIDB4MGYpKVxuXG4gIGxldCBlc2NhcGUgYnVmIHMgPVxuICAgIGxldCBhZGRfY2hhciA9IEJ1ZmZlci5hZGRfY2hhciBidWYgaW5cbiAgICBsZXQgYWRkX3N0cmluZyA9IEJ1ZmZlci5hZGRfc3RyaW5nIGJ1ZiBpblxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcIicgICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFwiXCJcbiAgICAgIHwgJ1xcXFwnICAgLT4gYWRkX3N0cmluZyBcIlxcXFxcXFxcXCJcbiAgICAgIHwgJ1xcYicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXGJcIlxuICAgICAgfCAnXFwwMTInIC0+IGFkZF9zdHJpbmcgXCJcXFxcZlwiXG4gICAgICB8ICdcXG4nICAgLT4gYWRkX3N0cmluZyBcIlxcXFxuXCJcbiAgICAgIHwgJ1xccicgICAtPiBhZGRfc3RyaW5nIFwiXFxcXHJcIlxuICAgICAgfCAnXFx0JyAgIC0+IGFkZF9zdHJpbmcgXCJcXFxcdFwiXG4gICAgICB8ICdcXHgwMCcuLidcXHgxRidcbiAgICAgIHwgJ1xceDdGJyBhcyBjIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJcXFxcdTAwXCI7ICBhZGRfaGV4X2J5dGUgYnVmIChpbnRfb2ZfY2hhciBjKVxuICAgICAgfCBfICAgICAgLT4gYWRkX2NoYXIgcy5baV1cbiAgICBkb25lXG4gICBcbiAgbGV0IGpzb25fdG9fYnVmZmVyJyBidWYganNvbiA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBidWYgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHJlYyBmbXQgdmFsdWUgPVxuICAgICAgbWF0Y2ggdmFsdWUgd2l0aFxuICAgICAgfCBgQXNzb2MgbyAtPiBhZGRfY2hhciAneyc7IGpzb25fYXNzb2MgbzsgYWRkX2NoYXIgJ30nXG4gICAgICB8IGBMaXN0IGwgLT4gYWRkX2NoYXIgJ1snOyBqc29uX2xpc3QgbDsgYWRkX2NoYXIgJ10nXG4gICAgICB8IGBOdWxsIC0+IGFkZF9zdHJpbmcgXCJudWxsXCJcbiAgICAgIHwgYEJvb2wgYiAtPiBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfYm9vbCBiKVxuICAgICAgfCBgSW50IGkgLT4gYWRkX2ludCBpXG4gICAgICB8IGBJbnRsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYEZsb2F0IGYgLT4gYWRkX2Zsb2F0IGZcbiAgICAgIHwgYEZsb2F0bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmcgcyAtPiBhZGRfcXVvdGVfc3RyaW5nIHNcbiAgICAgIHwgYFN0cmluZ2xpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgVHVwbGUgdCAtPiBhZGRfY2hhciAnKCc7IGpzb25fbGlzdCB0OyBhZGRfY2hhciAnKSdcbiAgICAgIHwgYFZhcmlhbnQgdiAtPiBhZGRfY2hhciAnPCc7ICB2YXJpYW50IHY7IGFkZF9jaGFyICc+J1xuICAgIGFuZCBqc29uX2Fzc29jIG8gPVxuICAgICAgbGV0IHNlcCA9IHJlZiBcIlwiIGluIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gXCIsXCI7IHBhaXIgdiApIG9cbiAgICBhbmQgcGFpciAoaywgdikgPSBhZGRfcXVvdGVfc3RyaW5nIGs7IGFkZF9jaGFyICc6JzsgZm10IHZcbiAgICBhbmQganNvbl9saXN0IGwgPVxuICAgICAgbGV0IHNlcCA9IHJlZiBcIlwiIGluIExpc3QuaXRlciAoZnVuIHYgLT4gYWRkX3N0cmluZyAhc2VwOyBzZXAgOj0gXCIsXCI7IGZtdCB2ICkgbFxuICAgIGFuZCB2YXJpYW50IChrLCBqKSA9XG4gICAgICBhZGRfcXVvdGVfc3RyaW5nIGs7XG4gICAgICBtYXRjaCBqIHdpdGhcbiAgICAgIHwgU29tZSBqIC0+IGFkZF9jaGFyICc6JzsgZm10IGpcbiAgICAgIHwgTm9uZSAtPiAoKVxuICAgIGluXG4gICAgZm10IGpzb25cblxuICBsZXQganNvbl90b19idWZmZXJfaHVtJyBidWYganNvbiA9XG4gICAgbGV0IGFkZF9jaGFyID0gQnVmZmVyLmFkZF9jaGFyIGJ1ZiBpblxuICAgIGxldCBhZGRfc3RyaW5nID0gQnVmZmVyLmFkZF9zdHJpbmcgYnVmIGluXG4gICAgbGV0IGFkZF9xdW90ZV9zdHJpbmcgcyA9IGFkZF9jaGFyICdcIic7IGVzY2FwZSBidWYgczsgYWRkX2NoYXIgJ1wiJyBpblxuICAgIGxldCBhZGRfaW50IGkgPSBhZGRfc3RyaW5nIChzdHJpbmdfb2ZfaW50IGkpIGluXG4gICAgbGV0IGFkZF9mbG9hdCBmID0gYWRkX3N0cmluZyAoQ29tcGxpYW5jZS5udW1iZXJfdG9fc3RyaW5nIGYpIGluXG4gICAgbGV0IHJlYyBmbXQgbGRyIHZhbHVlID1cbiAgICAgIG1hdGNoIHZhbHVlIHdpdGhcbiAgICAgIHwgYEFzc29jIG8gLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIntcXG5cIjsganNvbl9hc3NvYyAobGRyIF4gXCIgIFwiKSBvO1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICd9J1xuICAgICAgfCBgTGlzdCBsIC0+XG4gICAgICAgIGFkZF9zdHJpbmcgXCJbXFxuXCI7IGpzb25fbGlzdCAobGRyIF4gXCIgIFwiKSBsO1xuICAgICAgICBhZGRfY2hhciAnXFxuJzsgYWRkX3N0cmluZyBsZHI7IGFkZF9jaGFyICddJ1xuICAgICAgfCBgTnVsbCAtPiBhZGRfc3RyaW5nIFwibnVsbFwiXG4gICAgICB8IGBCb29sIGIgLT4gYWRkX3N0cmluZyAoc3RyaW5nX29mX2Jvb2wgYilcbiAgICAgIHwgYEludCBpIC0+IGFkZF9pbnQgaVxuICAgICAgfCBgSW50bGl0IHMgLT4gYWRkX3N0cmluZyBzXG4gICAgICB8IGBGbG9hdCBmIC0+IGFkZF9mbG9hdCBmXG4gICAgICB8IGBGbG9hdGxpdCBzIC0+IGFkZF9zdHJpbmcgc1xuICAgICAgfCBgU3RyaW5nIHMgLT4gYWRkX3F1b3RlX3N0cmluZyBzXG4gICAgICB8IGBTdHJpbmdsaXQgcyAtPiBhZGRfc3RyaW5nIHNcbiAgICAgIHwgYFR1cGxlIHQgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIihcXG5cIjsganNvbl9saXN0IChsZHIgXiBcIiAgXCIpIHQ7XG4gICAgICAgIGFkZF9jaGFyICdcXG4nOyBhZGRfc3RyaW5nIGxkcjsgYWRkX2NoYXIgJyknXG4gICAgICB8IGBWYXJpYW50IHYgLT5cbiAgICAgICAgYWRkX3N0cmluZyBcIjxcIjsgIHZhcmlhbnQgKGxkciBeIFwiICBcIikgdjtcbiAgICAgICAgYWRkX2NoYXIgJ1xcbic7IGFkZF9zdHJpbmcgbGRyOyBhZGRfY2hhciAnPidcbiAgICBhbmQganNvbl9hc3NvYyBsZHIgbyA9XG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFxcblwiIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgcGFpciBsZHIgdiApIG9cbiAgICBhbmQgcGFpciBsZHIgKGssIHYpID0gYWRkX3F1b3RlX3N0cmluZyBrOyBhZGRfc3RyaW5nIFwiOiBcIjsgZm10IGxkciB2XG4gICAgYW5kIGpzb25fbGlzdCBsZHIgbCA9XG4gICAgICBsZXQgc2VwID0gcmVmIGxkciBpblxuICAgICAgbGV0IG5ld3NlcCA9IFwiLFxcblwiIF4gbGRyIGluXG4gICAgICBMaXN0Lml0ZXIgKGZ1biB2IC0+IGFkZF9zdHJpbmcgIXNlcDsgc2VwIDo9IG5ld3NlcDsgZm10IGxkciAgdiApIGxcbiAgICBhbmQgdmFyaWFudCBsZHIgKGssIGopID1cbiAgICAgIGFkZF9xdW90ZV9zdHJpbmcgaztcbiAgICAgIG1hdGNoIGogd2l0aFxuICAgICAgfCBTb21lIGogLT4gYWRkX3N0cmluZyBcIjogXCI7IGZtdCAobGRyIF4gXCIgIFwiKSBqXG4gICAgICB8IE5vbmUgLT4gKClcbiAgICBpblxuICAgIGZtdCBcIlwiIGpzb247XG4gICAgYWRkX2NoYXIgJ1xcbidcblxuICBsZXQganNvbl90b19zdHJpbmcnIGpzb24gPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDEwMCBpblxuICAgIGpzb25fdG9fYnVmZmVyJyBidWYganNvbjtcbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19zdHJpbmcnIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX2J1ZmZlciBidWYganNvbiA9XG4gICAgdHJ5IE9rIChqc29uX3RvX2J1ZmZlcicgYnVmIGpzb24pIHdpdGhcbiAgICB8IEZhaWx1cmUgZXJyIC0+IEVycm9yIGVyclxuXG4gIGxldCBqc29uX3RvX3N0cmluZ19leG4gPSBqc29uX3RvX3N0cmluZydcbiAgbGV0IHRvX3N0cmluZyA9IGpzb25fdG9fc3RyaW5nJ1xuICBsZXQganNvbl90b19idWZmZXJfZXhuID0ganNvbl90b19idWZmZXInXG4gIGxldCB0b19idWZmZXIgPSBqc29uX3RvX2J1ZmZlcidcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtJyBqc29uID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBqc29uX3RvX2J1ZmZlcl9odW0nIGJ1ZiBqc29uO1xuICAgIEJ1ZmZlci5jb250ZW50cyBidWZcblxuICBsZXQganNvbl90b19zdHJpbmdfaHVtIGpzb24gPVxuICAgIHRyeSBPayAoanNvbl90b19zdHJpbmdfaHVtJyBqc29uKSB3aXRoXG4gICAgfCBGYWlsdXJlIGVyciAtPiBFcnJvciBlcnJcblxuICBsZXQganNvbl90b19idWZmZXJfaHVtIGJ1ZiBqc29uID1cbiAgICB0cnkgT2sgKGpzb25fdG9fYnVmZmVyJyBidWYganNvbikgd2l0aFxuICAgIHwgRmFpbHVyZSBlcnIgLT4gRXJyb3IgZXJyXG5cbiAgbGV0IGpzb25fdG9fc3RyaW5nX2h1bV9leG4gPSBqc29uX3RvX3N0cmluZ19odW0nXG4gIGxldCB0b19zdHJpbmdfaHVtID0ganNvbl90b19zdHJpbmdfaHVtJ1xuICBsZXQganNvbl90b19idWZmZXJfaHVtX2V4biA9IGpzb25fdG9fYnVmZmVyX2h1bSdcbiAgbGV0IHRvX2J1ZmZlcl9odW0gPSBqc29uX3RvX2J1ZmZlcl9odW0nXG5cbiAgbGV0IHN0cmVhbV90b19zdHJpbmcgc3RyZWFtID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgKCkgPSBTdHJlYW0uaXRlciAoZnVuIGpzb24gLT4gdG9fYnVmZmVyIGJ1ZiBqc29uOyBCdWZmZXIuYWRkX2NoYXIgYnVmICdcXG4nKSBzdHJlYW0gaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHN0cmVhbV90b19idWZmZXIgYnVmIHN0cmVhbSA9XG4gICAgU3RyZWFtLml0ZXIgKGZ1biBqc29uIC0+IHRvX2J1ZmZlciBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG5cbmVuZFxuIiwiZXhjZXB0aW9uIEpzb25fZXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBqc29uX2Vycm9yIG1zZyA9IHJhaXNlIChKc29uX2Vycm9yIG1zZylcblxudHlwZSBsZXhlcl9zdGF0ZSA9IHtcbiAgYnVmIDogQnVmZmVyLnQ7XG4gIG11dGFibGUgbG51bSA6IGludDtcbiAgbXV0YWJsZSBib2wgOiBpbnQ7XG4gIG11dGFibGUgZm5hbWUgOiBzdHJpbmcgb3B0aW9uO1xufVxuXG5sZXQgaW5pdF9sZXhlciA/YnVmOl8gP2ZuYW1lID8obG51bSA9IDEpICgpID1cbiAge1xuICAgIGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgICgqIHVudXNlZCAqKVxuICA7IGxudW0gPSBsbnVtXG4gIDsgYm9sID0gMFxuICA7IGZuYW1lID0gZm5hbWVcbiAgfVxuXG5tb2R1bGUgQ29tbW9uX3JlYWRlciAoQ29tcGxpYW5jZSA6IENvbXBsaWFuY2UuUykgPSBzdHJ1Y3RcbiAgbW9kdWxlIEludGVybmFsX3JlYWRlciA9IHN0cnVjdFxuICAgIG1vZHVsZSBMZXh4ZXIgPSBDb21wbGlhbnRfbGV4eGVyLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBtb2R1bGUgUGFyc2VyID0gUGFyc2VyLk1ha2UoQ29tcGxpYW5jZSlcbiAgICBpbmNsdWRlIFJlYWRlcl9zdHJpbmdfZmlsZS5NYWtlIChMZXh4ZXIpIChQYXJzZXIpXG4gIGVuZFxuXG4gIHR5cGUganNvbiA9IEludGVybmFsX3JlYWRlci5qc29uXG4gIHR5cGUgdCA9IGpzb25cbiAgdHlwZSBqc29uX2xpbmUgPSBbIGBKc29uIG9mIHQgfCBgRXhuIG9mIGV4biBdXG5cbiAgKCogSGVscGVyIGZ1bmN0aW9ucyAqKVxuICBsZXQgZXJyb3JfdG9fc3RyaW5nIChlcnJvcl9pbmZvOkVycm9yX2luZm8udCkgZm5hbWUgbG51bSA9XG4gICAgbGV0IGxudW0gPSBtYXRjaCBsbnVtIHdpdGggU29tZSBsbnVtIC0+IGxudW0gfCBOb25lIC0+IDEgaW5cbiAgICBsZXQgaW5mbyA9IHsgZXJyb3JfaW5mbyB3aXRoIGxpbmUgPSBsbnVtICsgZXJyb3JfaW5mby5saW5lIC0gMSB9IGluXG4gICAgbGV0IGZuYW1lID0gbWF0Y2ggZm5hbWUgd2l0aFxuICAgICAgfCBOb25lIC0+IFwiTGluZVwiXG4gICAgICB8IFNvbWUgbmFtZSAtPiBcIkZpbGUgXCIgXiBuYW1lIF4gXCIsIGxpbmVcIlxuICAgIGluXG4gICAgbGV0IGxvYyA9IFByaW50Zi5zcHJpbnRmIFwiJXMgJWQgY2hhcnMgJWQtJWQ6IFwiIGZuYW1lIGluZm8ubGluZSBpbmZvLnN0YXJ0X2NoYXIgaW5mby5lbmRfY2hhciBpblxuICAgIGxvYyBeIGluZm8ubXNnXG5cbiAgbGV0IGFwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIGYgYSBmbmFtZSBsbnVtID1cbiAgICBtYXRjaCBmIGEgd2l0aFxuICAgIHwgT2sganNvbiAtPiBqc29uXG4gICAgfCBFcnJvciBlcnJvcl9pbmZvIC0+IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJvcl9pbmZvIGZuYW1lIGxudW0pXG5cbiAgKCogUmVhZGVycyAqKVxuICBsZXQgZnJvbV9zdHJpbmcgP2J1ZjpfID9mbmFtZSA/bG51bSBzID1cbiAgICBhcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9zdHJpbmdfZXJyb3JfaW5mbyBzIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9jaGFubmVsID9idWY6XyA/Zm5hbWUgP2xudW0gaW5fY2hhbm5lbCA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfY2hhbm5lbF9lcnJvcl9pbmZvIGluX2NoYW5uZWwgZm5hbWUgbG51bVxuXG4gIGxldCBmcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZSA/bG51bSBmaWxlbmFtZSA9XG4gICAgYXBwbHlfYW5kX2hhbmRsZV9lcnJvcnMgSW50ZXJuYWxfcmVhZGVyLmpzb25fb2ZfZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lIGZuYW1lIGxudW1cblxuICBsZXQgZnJvbV9sZXhidWYgbGV4c3RhdGUgP3N0cmVhbSBsZXhidWYgPVxuICAgIGxldCBmbmFtZSA9IGxleHN0YXRlLmZuYW1lIGluXG4gICAgbGV0IGxudW0gPSBTb21lIGxleHN0YXRlLmxudW0gaW5cbiAgICBtYXRjaCBJbnRlcm5hbF9yZWFkZXIuanNvbl9vZl9sZXhidWZfZXJyb3JfaW5mb19jb21wYXQgP3N0cmVhbSBsZXhidWYgd2l0aFxuICAgIHwgT2sgKFNvbWUganNvbikgLT4ganNvblxuICAgIHwgT2sgTm9uZSAtPiBqc29uX2Vycm9yIFwiQmxhbmsgaW5wdXQgZGF0YVwiXG4gICAgfCBFcnJvciBlcnJvcl9pbmZvIC0+IGpzb25fZXJyb3IgKGVycm9yX3RvX3N0cmluZyBlcnJvcl9pbmZvIGZuYW1lIGxudW0pXG5cbiAgbGV0IHJlYWRfdCBsZXhzdGF0ZSBsZXhidWYgPSBmcm9tX2xleGJ1ZiBsZXhzdGF0ZSBsZXhidWZcblxuICBsZXQgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIHN0cmVhbV9mIGEgZm5hbWUgbG51bSA9XG4gICAgbGV0IHN0cmVhbSA9IHN0cmVhbV9mIGEgaW5cbiAgICBsZXQgZiBfaSA9XG4gICAgICBtYXRjaCBTdHJlYW0ubmV4dCBzdHJlYW0gd2l0aFxuICAgICAgfCB2IC0+IFNvbWUgdlxuICAgICAgfCBleGNlcHRpb24gU3RyZWFtLkZhaWx1cmUgLT4gTm9uZVxuICAgICAgfCBleGNlcHRpb24gRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8gLT5cbiAgICAgICAganNvbl9lcnJvciAoZXJyb3JfdG9fc3RyaW5nIGVycl9pbmZvIGZuYW1lIGxudW0pXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cbiAgbGV0IHN0cmVhbV9mcm9tX3N0cmluZyA/YnVmOl8gP2ZuYW1lID9sbnVtIHMgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fc3RyaW5nX2Vycm9yX2luZm8gcyBmbmFtZSBsbnVtXG5cbiAgbGV0IHN0cmVhbV9mcm9tX2NoYW5uZWwgP2J1ZjpfID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgP2xudW0gaW5fY2hhbm5lbCA9XG4gICAgc3RyZWFtX2FwcGx5X2FuZF9oYW5kbGVfZXJyb3JzIChJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fY2hhbm5lbF9lcnJvcl9pbmZvIH5maW4pIGluX2NoYW5uZWwgZm5hbWUgbG51bVxuXG4gIGxldCBzdHJlYW1fZnJvbV9maWxlID9idWY6XyA/Zm5hbWUgP2xudW0gZmlsZW5hbWUgPVxuICAgIHN0cmVhbV9hcHBseV9hbmRfaGFuZGxlX2Vycm9ycyBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fZmlsZV9lcnJvcl9pbmZvIGZpbGVuYW1lIGZuYW1lIGxudW1cblxuICBsZXQgc3RyZWFtX2Zyb21fbGV4YnVmIGxleHN0YXRlID8oZmluID0gZnVuICgpIC0+ICgpKSBsZXhidWYgPVxuICAgIGxldCBzdHJlYW0gPSBJbnRlcm5hbF9yZWFkZXIuc3RyZWFtX2Zyb21fbGV4YnVmX2Vycm9yX2luZm8gbGV4YnVmIGluXG4gICAgbGV0IGYgX2kgPVxuICAgICAgbWF0Y2ggU3RyZWFtLm5leHQgc3RyZWFtIHdpdGhcbiAgICAgIHwgdiAtPiBTb21lIHZcbiAgICAgIHwgZXhjZXB0aW9uIFN0cmVhbS5GYWlsdXJlIC0+IGZpbiAoKTsgTm9uZVxuICAgICAgfCBleGNlcHRpb24gRXJyb3JfaW5mby5Kc29uX2Vycm9yX2luZm8gZXJyX2luZm8gLT5cbiAgICAgICAgZmluICgpOyBqc29uX2Vycm9yIChlcnJvcl90b19zdHJpbmcgZXJyX2luZm8gbGV4c3RhdGUuZm5hbWUgKFNvbWUgbGV4c3RhdGUubG51bSkpXG4gICAgaW5cbiAgICBTdHJlYW0uZnJvbSBmXG5cblxuICBsZXQgbGluZXN0cmVhbV9mcm9tX2NoYW5uZWwgP2J1ZjpfID8oZmluID0gZnVuICgpIC0+ICgpKSA/Zm5hbWUgPyhsbnVtID0gMSkgaWMgPVxuICAgIGxldCBmIGkgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBsbnVtID0gbG51bSArIGkgaW5cbiAgICAgICAgbGV0IGxpbmUgPSBpbnB1dF9saW5lIGljIGluIFNvbWUgKGBKc29uIChmcm9tX3N0cmluZyA/Zm5hbWUgfmxudW0gbGluZSkpXG4gICAgICB3aXRoXG4gICAgICAgIHwgRW5kX29mX2ZpbGUgLT4gZmluICgpOyBOb25lXG4gICAgICAgIHwgZXhuXyAtPiBmaW4gKCk7IFNvbWUgKGBFeG4gZXhuXylcbiAgICBpblxuICAgIFN0cmVhbS5mcm9tIGZcblxuICBsZXQgbGluZXN0cmVhbV9mcm9tX2ZpbGUgP2J1ZjpfID9mbmFtZTpfID9sbnVtOl8gZmlsZW5hbWUgPVxuICAgIGxldCBpYyA9IG9wZW5faW4gZmlsZW5hbWUgaW5cbiAgICBsaW5lc3RyZWFtX2Zyb21fY2hhbm5lbCB+ZmluOihmdW4gKCkgLT4gY2xvc2VfaW4gaWMpIGljXG5lbmRcblxubW9kdWxlIENvbW1vbl93cml0ZXIgKENvbXBsaWFuY2UgOiBDb21wbGlhbmNlLlMpID0gc3RydWN0XG4gIG1vZHVsZSBJbnRlcm5hbF93cml0ZXIgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFdyaXRlcl9zdHJpbmcuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgV3JpdGVyX2ZpbGUuTWFrZShDb21wbGlhbmNlKVxuICAgIGluY2x1ZGUgUHJldHR5Lk1ha2UoQ29tcGxpYW5jZSlcbiAgZW5kXG5cbiAgbGV0IHRvX3N0YW5kYXJkIGpzb24gPVxuICAgIGxldCByZWMgbWFwIG5vZGUgPVxuICAgICAgbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IGBOdWxsIC0+IGBOdWxsXG4gICAgICB8IGBCb29sIF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnQgXyBhcyB2IC0+IHYgICgqIGludCBpcyBvayBvbiBvdXRwdXQgKilcbiAgICAgIHwgYEludGxpdCB2IC0+IGBTdHJpbmcgdlxuICAgICAgfCBgRmxvYXQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEZsb2F0bGl0IHYgLT4gYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgdilcbiAgICAgIHwgYFN0cmluZyBfIGFzIHYgLT4gdlxuICAgICAgfCBgU3RyaW5nbGl0IHMgLT4gYmVnaW5cbiAgICAgICAgbWF0Y2ggU3RyaW5nLmxlbmd0aCBzIHdpdGhcbiAgICAgICAgfCAwIHwgMSAtPiBgU3RyaW5nIHMgICAgICAgICAoKiBtYWxmb3JtZWQsIHNob3VsZCBoYXZlIGRvdWJsZS1xdW90ZXMgYXQgc3RhcnQgYW5kIGVuZCAqKVxuICAgICAgICB8IF8gLT4gYFN0cmluZyAoU3RyaW5nLnN1YiBzIDEgKFN0cmluZy5sZW5ndGggcyAtIDIpKVxuICAgICAgICBlbmRcbiAgICAgIHwgYExpc3QgbCAtPiBgTGlzdCAoTGlzdC5tYXAgbWFwIGwpXG4gICAgICB8IGBBc3NvYyBhIC0+IGBBc3NvYyAoTGlzdC5tYXAgKGZ1biAoaWQsIHYpIC0+IChpZCwgbWFwIHYpKSBhKVxuICAgICAgfCBgVHVwbGUgdHBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgdHBsKVxuICAgICAgfCBgVmFyaWFudCAobmFtZSwgam9wdCkgLT4gYmVnaW5cbiAgICAgICAgIG1hdGNoIGpvcHQgd2l0aFxuICAgICAgICAgfCBOb25lIC0+IGBTdHJpbmcgbmFtZVxuICAgICAgICAgfCBTb21lIHYgLT4gYExpc3QgWyBgU3RyaW5nIG5hbWU7IChtYXAgdikgXVxuICAgICAgICBlbmRcbiAgICBpblxuICAgIG1hcCBqc29uXG5cbiAgKCogV3JpdGVycyAqKVxuXG4gIGxldCB0b19zdHJpbmcgP2J1ZjpfID9sZW46XyA/KHN0ZCA9IGZhbHNlKSBqc29uID1cbiAgICBpZiBzdGQgdGhlbiBJbnRlcm5hbF93cml0ZXIudG9fc3RyaW5nICh0b19zdGFuZGFyZCBqc29uKSBlbHNlIEludGVybmFsX3dyaXRlci50b19zdHJpbmcganNvblxuXG4gIGxldCB0b19jaGFubmVsID9idWY6XyA/bGVuOl8gPyhzdGQgPSBmYWxzZSkgb3V0X2NoYW5uZWwganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnRvX2NoYW5uZWwgb3V0X2NoYW5uZWwgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIudG9fY2hhbm5lbCBvdXRfY2hhbm5lbCBqc29uXG5cbiAgbGV0IHRvX2ZpbGUgP2xlbjpfID8oc3RkID0gZmFsc2UpIGZpbGVuYW1lIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19maWxlIGZpbGVuYW1lICh0b19zdGFuZGFyZCBqc29uKVxuICAgIGVsc2UgSW50ZXJuYWxfd3JpdGVyLnRvX2ZpbGUgZmlsZW5hbWUganNvblxuXG4gIGxldCB0b19vdXRidWYgPyhzdGQgPSBmYWxzZSkgYnVmIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci50b19idWZmZXIgYnVmICh0b19zdGFuZGFyZCBqc29uKSBlbHNlIEludGVybmFsX3dyaXRlci50b19idWZmZXIgYnVmIGpzb25cblxuICBsZXQgdG9fb3V0cHV0ID9idWY6XyA/bGVuOl8gP3N0ZCBvdXQganNvbiA9XG4gICAgbGV0IHN0ciA9IHRvX3N0cmluZyA/c3RkIGpzb24gaW5cbiAgICBvdXQjb3V0cHV0IHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxuICBsZXQgc3RyZWFtX3RvX3N0cmluZyA/YnVmOl8gP2xlbjpfID9zdGQgc3RyZWFtID1cbiAgICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxMDAgaW5cbiAgICBsZXQgKCkgPSBTdHJlYW0uaXRlclxuICAgICAgKGZ1biBqc29uIC0+IHRvX291dGJ1ZiA/c3RkIGJ1ZiBqc29uOyAgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG4gICAgaW5cbiAgICBCdWZmZXIuY29udGVudHMgYnVmXG5cbiAgbGV0IHN0cmVhbV90b19jaGFubmVsID9idWY6XyA/bGVuOl8gP3N0ZCBvYyBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19jaGFubmVsID9zdGQgb2MganNvbjsgb3V0cHV0X2NoYXIgb2MgJ1xcbicpIHN0cmVhbVxuXG4gIGxldCBzdHJlYW1fdG9fZmlsZSA/bGVuOl8gP3N0ZCBmaWxlbmFtZSBzdHJlYW0gPVxuICAgIGxldCBvYyA9IG9wZW5fb3V0IGZpbGVuYW1lIGluXG4gICAgdHJ5IChzdHJlYW1fdG9fY2hhbm5lbCA/c3RkIG9jIHN0cmVhbTsgY2xvc2Vfb3V0IG9jKSB3aXRoXG4gICAgfCBleG4gLT4gY2xvc2Vfb3V0IG9jOyByYWlzZSBleG5cblxuICBsZXQgc3RyZWFtX3RvX291dGJ1ZiA/c3RkIGJ1ZiBzdHJlYW0gPVxuICAgIFN0cmVhbS5pdGVyIChmdW4ganNvbiAtPiB0b19vdXRidWYgP3N0ZCBidWYganNvbjsgQnVmZmVyLmFkZF9jaGFyIGJ1ZiAnXFxuJykgc3RyZWFtXG5cbiAgbGV0IHdyaXRlX3QgYnVmIGpzb24gPSB0b19vdXRidWYgYnVmIGpzb25cblxuICAoKiBQcmV0dHkgcHJpbnRlcnMgKilcbiAgbGV0IHByZXR0eV9wcmludCA/KHN0ZCA9IGZhbHNlKSBvdXQganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludCBvdXQgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50IG91dCBqc29uXG5cbiAgbGV0IHByZXR0eV90b19zdHJpbmcgPyhzdGQgPSBmYWxzZSkganNvbiA9XG4gICAgaWYgc3RkIHRoZW4gSW50ZXJuYWxfd3JpdGVyLnByZXR0eV9wcmludF90b19zdHJpbmcgKHRvX3N0YW5kYXJkIGpzb24pXG4gICAgZWxzZSBJbnRlcm5hbF93cml0ZXIucHJldHR5X3ByaW50X3RvX3N0cmluZyBqc29uXG5cbiAgbGV0IHByZXR0eV90b19jaGFubmVsID8oc3RkID0gZmFsc2UpIG9jIGpzb24gPVxuICAgIGlmIHN0ZCB0aGVuIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyAodG9fc3RhbmRhcmQganNvbilcbiAgICBlbHNlIEludGVybmFsX3dyaXRlci5wcmV0dHlfcHJpbnRfdG9fY2hhbm5lbCBvYyBqc29uXG5cbiAgKCogVXRpbGl0aWVzICopXG4gIGxldCBzaG93IGpzb24gPSBVdGlsaXRpZXMuanNvbl90b19zdHJpbmdfcmVwciBqc29uXG4gIGxldCBwcCBvdXQganNvbiA9IEZvcm1hdC5wcF9wcmludF9zdHJpbmcgb3V0IChzaG93IGpzb24pXG5lbmRcblxubW9kdWxlIEJhc2ljID0gc3RydWN0XG4gIG1vZHVsZSBDb21wbGlhbmNlID0gc3RydWN0XG4gICAgdHlwZSBqc29uID0gSnNvbi5CYXNpYy5qc29uXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkJhc2ljLmpzb25cblxuICAgIG9wZW4gVG9rZW5zXG5cbiAgICBsZXQgbGV4X3N0cmluZyBzID0gTGV4eGVyX3V0aWxzLnVuZXNjYXBlX3N0cmluZyBzXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCBfID0gQ09NUExJQU5DRV9FUlJPUiBcIkludGVnZXIgb3V0IG9mIGJvdW5kc1wiXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IGZhbHNlXG4gICAgbGV0IGxleF90dXBsZSBfID0gZmFsc2VcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgcylcbiAgICBsZXQgaW50ZWdlciBpID0gYEludCBpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmcgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIF9sID0gcmFpc2UgKEZhaWx1cmUgXCJ0dXBsZXMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgIGxldCB2YXJpYW50IF9sID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG5cbiAgICBsZXQgbnVtYmVyID0gZnVuY3Rpb25cbiAgICB8IGBGbG9hdCBmIC0+ICAgICBgRmxvYXQgZlxuICAgIHwgYEluZmluaXR5IC0+ICAgIGBGbG9hdCAoMS4wIC8uIDAuMClcbiAgICB8IGBOZWdpbmZpbml0eSAtPiBgRmxvYXQgKC0xLjAgLy4gMC4wKVxuICAgIHwgYE5hbiAtPiAgICAgICAgIGBGbG9hdCAoMC4wIC8uIDAuMClcbiAgICB8IGBGbG9hdGxpdCBfIC0+ICByYWlzZSAoRmFpbHVyZSBcImZsb2F0bGl0IG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcblxuICAgIG1vZHVsZSBTdHJlYW0gPSBzdHJ1Y3RcbiAgICAgIGxldCBudW1iZXIgPSBudW1iZXJcbiAgICAgIGxldCBsYXJnZWludCA9IGxhcmdlaW50XG4gICAgICBsZXQgaW50ZWdlciA9IGludGVnZXJcbiAgICAgIGxldCBudWxsID0gbnVsbFxuICAgICAgbGV0IHN0cmluZyA9IHN0cmluZ1xuICAgICAgbGV0IGJvb2wgPSBib29sXG5cbiAgICAgIGxldCBhcnJheV9zdGFydCAoKSA9IGBBc1xuICAgICAgbGV0IGFycmF5X2VuZCAoKSA9IGBBZVxuICAgICAgbGV0IG9iamVjdF9zdGFydCAoKSA9IGBPc1xuICAgICAgbGV0IG9iamVjdF9lbmQgKCkgPSBgT2VcbiAgICAgIGxldCB0dXBsZV9zdGFydCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidHVwbGVzIG5vdCBzdXBwb3J0ZWQgaW4geW9qc29uIGJhc2ljIG1vZGVcIilcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSByYWlzZSAoRmFpbHVyZSBcInR1cGxlcyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgdmFyaWFudF9zdGFydCAoKSA9IHJhaXNlIChGYWlsdXJlIFwidmFyaWFudHMgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gYmFzaWMgbW9kZVwiKVxuICAgICAgbGV0IHZhcmlhbnRfZW5kICgpID0gcmFpc2UgKEZhaWx1cmUgXCJ2YXJpYW50cyBub3Qgc3VwcG9ydGVkIGluIHlvanNvbiBiYXNpYyBtb2RlXCIpXG4gICAgICBsZXQgbmFtZSBzID0gYE5hbWUgc1xuICAgIGVuZFxuICBlbmRcblxuICBpbmNsdWRlIENvbW1vbl9yZWFkZXIoQ29tcGxpYW5jZSlcbiAgaW5jbHVkZSBDb21tb25fd3JpdGVyKENvbXBsaWFuY2UpXG5cbiAgbGV0IHByZXR0aWZ5ID9zdGQgaW5zdHIgPSBmcm9tX3N0cmluZyBpbnN0ciB8PiBwcmV0dHlfdG9fc3RyaW5nID9zdGRcbiAgbGV0IGNvbXBhY3QgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHRvX3N0cmluZyA/c3RkXG5cbiAgbGV0IGVxdWFsID0gVXRpbGl0aWVzLmVxdWFsXG4gIGxldCBzb3J0ID0gUHJvY2Vzcy5CYXNpYy5zb3J0XG5cbiAgbW9kdWxlIFV0aWwgPSBzdHJ1Y3RcbiAgICBpbmNsdWRlIFByb2Nlc3MuQmFzaWNcbiAgZW5kXG5lbmRcblxubW9kdWxlIFNhZmUgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcbiAgICB0eXBlIGpzb24gPVxuICAgICAgW1xuICAgICAgfCBgTnVsbFxuICAgICAgfCBgQm9vbCBvZiBib29sXG4gICAgICB8IGBJbnQgb2YgaW50XG4gICAgICB8IGBJbnRsaXQgb2Ygc3RyaW5nXG4gICAgICB8IGBGbG9hdCBvZiBmbG9hdFxuICAgICAgfCBgU3RyaW5nIG9mIHN0cmluZ1xuICAgICAgfCBgQXNzb2Mgb2YgKHN0cmluZyAqIGpzb24pIGxpc3RcbiAgICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgICB8IGBUdXBsZSBvZiBqc29uIGxpc3RcbiAgICAgIHwgYFZhcmlhbnQgb2YgKHN0cmluZyAqIGpzb24gb3B0aW9uKVxuICAgICAgXVxuXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkV4dGVuZGVkLmpzb24gICgqIHlvanNvbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBzdHJlYW1pbmcgKilcblxuICAgIGxldCBsZXhfc3RyaW5nIHMgPSBMZXh4ZXJfdXRpbHMudW5lc2NhcGVfc3RyaW5nIHNcbiAgICBsZXQgbGV4X251bWJlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9pbnRlZ2VyIHRva2VuID0gdG9rZW5cbiAgICBsZXQgbGV4X2xhcmdlaW50IHRva2VuID0gdG9rZW5cblxuICAgIGxldCBsZXhfdmFyaWFudCBfID0gdHJ1ZVxuICAgIGxldCBsZXhfdHVwbGUgXyA9IHRydWVcblxuICAgIGxldCBjb21tZW50X2NoZWNrICgpID0gT2sgKClcblxuICAgIGxldCBudW1iZXJfdG9fc3RyaW5nIGYgPVxuICAgICAgbWF0Y2ggY2xhc3NpZnlfZmxvYXQgZiB3aXRoXG4gICAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT5cbiAgICAgICAgSnNvbl9mbG9hdC5zdHJpbmdfb2ZfZmxvYXRfanNvbiBmXG4gICAgICB8IEZQX2luZmluaXRlIC0+XG4gICAgICAgIGlmIGYgPCAwLiB0aGVuIFwiLUluZmluaXR5XCIgZWxzZSBcIkluZmluaXR5XCJcbiAgICAgIHwgRlBfbmFuIC0+XG4gICAgICAgIFwiTmFOXCJcblxuICAgIGxldCBsYXJnZWludCBzID0gYEludGxpdCBzXG4gICAgbGV0IGludGVnZXIgaSA9IGBJbnQgaVxuICAgIGxldCBudWxsID0gYE51bGxcbiAgICBsZXQgc3RyaW5nIHMgPSBgU3RyaW5nIHNcbiAgICBsZXQgYm9vbCBiID0gYEJvb2wgYlxuICAgIGxldCBhc3NvYyBhID0gYEFzc29jIGFcbiAgICBsZXQgbGlzdCBsID0gYExpc3QgbFxuICAgIGxldCB0dXBsZSBsID0gYFR1cGxlIGxcbiAgICBsZXQgdmFyaWFudCBrIHYgPSBgVmFyaWFudCAoaywgdilcblxuICAgIGxldCBudW1iZXIgPSBmdW5jdGlvblxuICAgIHwgYEZsb2F0IGYgLT4gICAgIGBGbG9hdCBmXG4gICAgfCBgSW5maW5pdHkgLT4gICAgYEZsb2F0ICgxLjAgLy4gMC4wKVxuICAgIHwgYE5lZ2luZmluaXR5IC0+IGBGbG9hdCAoLTEuMCAvLiAwLjApXG4gICAgfCBgTmFuIC0+ICAgICAgICAgYEZsb2F0ICgwLjAgLy4gMC4wKVxuICAgIHwgYEZsb2F0bGl0IF8gLT4gIHJhaXNlIChGYWlsdXJlIFwiZmxvYXRsaXQgbm90IHN1cHBvcnRlZCBpbiB5b2pzb24gc2FmZSBtb2RlXCIpXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSBgVHNcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSBgVGVcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gYFZzXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSBgVmVcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkV4dGVuZGVkLnNvcnRcblxuICBsZXQgdG9fYmFzaWMganNvbiA6IEJhc2ljLmpzb24gPVxuICAgIGxldCByZWMgbWFwIG5vZGUgPVxuICAgICAgbWF0Y2ggbm9kZSB3aXRoXG4gICAgICB8IGBOdWxsIC0+IGBOdWxsXG4gICAgICB8IGBCb29sIF8gYXMgdiAtPiB2XG4gICAgICB8IGBJbnQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYEludGxpdCB2IC0+IGBTdHJpbmcgdlxuICAgICAgfCBgRmxvYXQgXyBhcyB2IC0+IHZcbiAgICAgIHwgYFN0cmluZyBfIGFzIHYgLT4gdlxuICAgICAgfCBgTGlzdCBsIC0+IGBMaXN0IChMaXN0Lm1hcCBtYXAgbClcbiAgICAgIHwgYEFzc29jIGEgLT4gYEFzc29jIChMaXN0Lm1hcCAoZnVuIChpZCwgdikgLT4gKGlkLCBtYXAgdikpIGEpXG4gICAgICB8IGBUdXBsZSB0cGwgLT4gYExpc3QgKExpc3QubWFwIG1hcCB0cGwpXG4gICAgICB8IGBWYXJpYW50IChuYW1lLCBqb3B0KSAtPlxuICAgICAgICAgbWF0Y2ggam9wdCB3aXRoXG4gICAgICAgICB8IE5vbmUgLT4gYFN0cmluZyBuYW1lXG4gICAgICAgICB8IFNvbWUgdiAtPiBgTGlzdCBbIGBTdHJpbmcgbmFtZTsgKG1hcCB2KSBdXG4gICAgaW5cbiAgICBtYXAganNvblxuXG4gIG1vZHVsZSBVdGlsID0gc3RydWN0XG4gICAgaW5jbHVkZSBQcm9jZXNzLllvanNvbl9zYWZlXG4gIGVuZFxuZW5kXG5cbm1vZHVsZSBSYXcgPSBzdHJ1Y3RcbiAgbW9kdWxlIENvbXBsaWFuY2UgPSBzdHJ1Y3RcblxuICB0eXBlIGpzb24gPVxuICAgIFtcbiAgICB8IGBOdWxsXG4gICAgfCBgQm9vbCBvZiBib29sXG4gICAgfCBgSW50bGl0IG9mIHN0cmluZ1xuICAgIHwgYEZsb2F0bGl0IG9mIHN0cmluZ1xuICAgIHwgYFN0cmluZ2xpdCBvZiBzdHJpbmdcbiAgICB8IGBBc3NvYyBvZiAoc3RyaW5nICoganNvbikgbGlzdFxuICAgIHwgYExpc3Qgb2YganNvbiBsaXN0XG4gICAgfCBgVHVwbGUgb2YganNvbiBsaXN0XG4gICAgfCBgVmFyaWFudCBvZiAoc3RyaW5nICoganNvbiBvcHRpb24pXG4gICAgXVxuXG4gICAgdHlwZSBqc29uX3N0cmVhbSA9IEpzb25fc3RyZWFtLkV4dGVuZGVkLmpzb24gKCogeW9qc29uIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0IHN0cmVhbWluZyAqKVxuXG4gICAgbGV0IGxleF9zdHJpbmcgcyA9IFwiXFxcIlwiIF4gcyBeIFwiXFxcIlwiXG4gICAgbGV0IGxleF9udW1iZXIgdG9rZW4gPSB0b2tlblxuICAgIGxldCBsZXhfaW50ZWdlciB0b2tlbiA9IHRva2VuXG4gICAgbGV0IGxleF9sYXJnZWludCB0b2tlbiA9IHRva2VuXG5cbiAgICBsZXQgbGV4X3ZhcmlhbnQgXyA9IHRydWVcbiAgICBsZXQgbGV4X3R1cGxlIF8gPSB0cnVlXG5cbiAgICBsZXQgY29tbWVudF9jaGVjayAoKSA9IE9rICgpXG5cbiAgICBsZXQgbnVtYmVyX3RvX3N0cmluZyBmID1cbiAgICAgIG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IGYgd2l0aFxuICAgICAgfCBGUF9ub3JtYWwgfCBGUF9zdWJub3JtYWwgfCBGUF96ZXJvIC0+XG4gICAgICAgIEpzb25fZmxvYXQuc3RyaW5nX29mX2Zsb2F0X2pzb24gZlxuICAgICAgfCBGUF9pbmZpbml0ZSAtPlxuICAgICAgICBpZiBmIDwgMC4gdGhlbiBcIi1JbmZpbml0eVwiIGVsc2UgXCJJbmZpbml0eVwiXG4gICAgICB8IEZQX25hbiAtPlxuICAgICAgICBcIk5hTlwiXG5cbiAgICBsZXQgbGFyZ2VpbnQgcyA9IGBJbnRsaXQgc1xuICAgIGxldCBpbnRlZ2VyIGkgPSBgSW50bGl0IChzdHJpbmdfb2ZfaW50IGkpXG4gICAgbGV0IG51bGwgPSBgTnVsbFxuICAgIGxldCBzdHJpbmcgcyA9IGBTdHJpbmdsaXQgc1xuICAgIGxldCBib29sIGIgPSBgQm9vbCBiXG4gICAgbGV0IGFzc29jIGEgPSBgQXNzb2MgYVxuICAgIGxldCBsaXN0IGwgPSBgTGlzdCBsXG4gICAgbGV0IHR1cGxlIGwgPSBgVHVwbGUgbFxuICAgIGxldCB2YXJpYW50IGsgdiA9IGBWYXJpYW50IChrLCB2KVxuXG4gICAgbGV0IG51bWJlciA9IGZ1bmN0aW9uXG4gICAgfCBgRmxvYXQgZiAtPiAgICAgYEZsb2F0bGl0IChzdHJpbmdfb2ZfZmxvYXQgZilcbiAgICB8IGBJbmZpbml0eSAtPiAgICBgRmxvYXRsaXQgXCJJbmZpbml0eVwiXG4gICAgfCBgTmVnaW5maW5pdHkgLT4gYEZsb2F0bGl0IFwiLUluZmluaXR5XCJcbiAgICB8IGBOYW4gLT4gICAgICAgICBgRmxvYXRsaXQgXCJOYU5cIlxuICAgIHwgYEZsb2F0bGl0IGYgLT4gIGBGbG9hdGxpdCBmXG5cbiAgICBtb2R1bGUgU3RyZWFtID0gc3RydWN0XG4gICAgICBsZXQgbnVtYmVyID0gbnVtYmVyXG4gICAgICBsZXQgbGFyZ2VpbnQgPSBsYXJnZWludFxuICAgICAgbGV0IGludGVnZXIgPSBpbnRlZ2VyXG4gICAgICBsZXQgbnVsbCA9IG51bGxcbiAgICAgIGxldCBzdHJpbmcgPSBzdHJpbmdcbiAgICAgIGxldCBib29sID0gYm9vbFxuXG4gICAgICBsZXQgYXJyYXlfc3RhcnQgKCkgPSBgQXNcbiAgICAgIGxldCBhcnJheV9lbmQgKCkgPSBgQWVcbiAgICAgIGxldCBvYmplY3Rfc3RhcnQgKCkgPSBgT3NcbiAgICAgIGxldCBvYmplY3RfZW5kICgpID0gYE9lXG4gICAgICBsZXQgdHVwbGVfc3RhcnQgKCkgPSBgVHNcbiAgICAgIGxldCB0dXBsZV9lbmQgKCkgPSBgVGVcbiAgICAgIGxldCB2YXJpYW50X3N0YXJ0ICgpID0gYFZzXG4gICAgICBsZXQgdmFyaWFudF9lbmQgKCkgPSBgVmVcbiAgICAgIGxldCBuYW1lIHMgPSBgTmFtZSBzXG4gICAgZW5kXG4gIGVuZFxuXG4gIGluY2x1ZGUgQ29tbW9uX3JlYWRlcihDb21wbGlhbmNlKVxuICBpbmNsdWRlIENvbW1vbl93cml0ZXIoQ29tcGxpYW5jZSlcblxuICBsZXQgcHJldHRpZnkgP3N0ZCBpbnN0ciA9IGZyb21fc3RyaW5nIGluc3RyIHw+IHByZXR0eV90b19zdHJpbmcgP3N0ZFxuICBsZXQgY29tcGFjdCA/c3RkIGluc3RyID0gZnJvbV9zdHJpbmcgaW5zdHIgfD4gdG9fc3RyaW5nID9zdGRcblxuICBsZXQgZXF1YWwgPSBVdGlsaXRpZXMuZXF1YWxcbiAgbGV0IHNvcnQgPSBQcm9jZXNzLkV4dGVuZGVkLnNvcnRcbmVuZFxuIiwiKCogVGhlIGltcGxlbWVudGF0aW9uIGlzIGluc3BpcmVkIGJ5IFNpZXZlOlxuICAgLSBodHRwczovL2NhY2hlbW9uLmdpdGh1Yi5pby9TSUVWRS13ZWJzaXRlL1xuICAgLSBodHRwczovL2p1bmNoZW5neWFuZy5jb20vcHVibGljYXRpb24vbnNkaTI0LVNJRVZFLnBkZlxuXG4gICBTaWV2ZSB1c2VzIGEgZG91Ymx5LWxpbmtlZCBsaXN0IGFuZCBhIFwiaGFkIHBvaW50ZXJcIi5cbiAgIFdlIHVzZSBhIEZJRk8gYW5kIHJlcGxhY2UgdGhlIGhhbmQgYnkgYW5vdGhlciBGSUZPLlxuXG4gICBUaGUgaWRlYSB3YXMgc3VnZ2VzdGVkIGJ5IEBhcnQtdyAqKVxuXG4oKiBBIFtSQV9xdWV1ZV0gcGFpcnMgYSBbUXVldWUudF0gd2l0aCBhIFtIYXNodGJsLnRdIHRvIGVuYWJsZSBlZmZpY2llbnQgcmFuZG9tXG4gICBhY2Nlc3MgdG8gZWxlbWVudHMgb2YgdGhlIHF1ZXVlLiAqKVxubW9kdWxlIFJBX3F1ZXVlIChLZXkgOiBNYXAuT3JkZXJlZFR5cGUpID0gc3RydWN0XG4gIG1vZHVsZSBRdWV1ZSA9IENDRlF1ZXVlXG4gIG1vZHVsZSBNYXAgPSBNYXAuTWFrZSAoS2V5KVxuXG4gIHR5cGUgJ3YgdCA9IHsgcXVldWUgOiBLZXkudCBRdWV1ZS50OyBlbHRzIDogJ3YgTWFwLnQgfVxuXG4gIGxldCBzaXplIHQgPSBRdWV1ZS5zaXplIHQucXVldWVcbiAgbGV0IGNyZWF0ZSAoKSA9IHsgcXVldWUgPSBRdWV1ZS5lbXB0eTsgZWx0cyA9IE1hcC5lbXB0eSB9XG4gIGxldCBlbXB0eSA9IHsgcXVldWUgPSBRdWV1ZS5lbXB0eTsgZWx0cyA9IE1hcC5lbXB0eSB9XG4gIGxldCBhZGQgdCBrIHggPSB7IHF1ZXVlID0gUXVldWUuY29ucyBrIHQucXVldWU7IGVsdHMgPSBNYXAuYWRkIGsgeCB0LmVsdHMgfVxuXG4gIGxldCB0YWtlX29wdCB0ID1cbiAgICBtYXRjaCBRdWV1ZS50YWtlX2JhY2sgdC5xdWV1ZSB3aXRoXG4gICAgfCBOb25lIC0+ICh0LCBOb25lKVxuICAgIHwgU29tZSAocXVldWUsIGspIC0+XG4gICAgICAgIGxldCB4ID0gTWFwLmZpbmQgayB0LmVsdHMgaW5cbiAgICAgICAgKHsgcXVldWU7IGVsdHMgPSBNYXAucmVtb3ZlIGsgdC5lbHRzIH0sIFNvbWUgKGssIHgpKVxuXG4gIGxldCBmaW5kIHQgayA9IE1hcC5maW5kX29wdCBrIHQuZWx0c1xuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBrZXlcbiAgKCoqIFRoZSB0eXBlIG9mIHRoZSBjYWNoZSBrZXlzLiAqKVxuXG4gIHR5cGUgKyEnYSB0XG4gICgqKiBUaGUgdHlwZSBvZiBjYWNoZXMgZnJvbSB0eXBlIFtrZXldIHRvIHR5cGUgWydhXS4gKilcblxuICB2YWwgY3JlYXRlIDogc2l6ZTppbnQgLT4gJ2EgdFxuICAoKiogQ3JlYXRlcyBhbiBlbXB0eSBjYWNoZS4gKilcblxuICB2YWwgaW5zZXJ0IDpcbiAgICAnYSB0IC0+XG4gICAgP29uX2luc2VydDooJ2EgLT4gdW5pdCkgLT5cbiAgICA/b25fZXZpY3Q6KCdhIC0+IHVuaXQpIC0+XG4gICAga2V5IC0+XG4gICAgJ2EgLT5cbiAgICAnYSB0ICogYm9vbFxuZW5kXG5cbm1vZHVsZSBNYWtlIChLZXkgOiBNYXAuT3JkZXJlZFR5cGUpIDogUyB3aXRoIHR5cGUga2V5ID0gS2V5LnQgPSBzdHJ1Y3RcbiAgbW9kdWxlIFJBX3F1ZXVlID0gUkFfcXVldWUgKEtleSlcblxuICB0eXBlIGtleSA9IEtleS50XG4gIHR5cGUgJ2EgZWx0ID0geyBlbHQgOiAnYTsgdmlzaXRlZCA6IGJvb2wgcmVmIH1cbiAgdHlwZSAnYSB0ID0geyBxMSA6ICdhIGVsdCBSQV9xdWV1ZS50OyBxMiA6ICdhIGVsdCBSQV9xdWV1ZS50OyBzaXplIDogaW50IH1cblxuICBsZXQgY3JlYXRlIH5zaXplID1cbiAgICBsZXQgcTEgPSBSQV9xdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICBsZXQgcTIgPSBSQV9xdWV1ZS5jcmVhdGUgKCkgaW5cbiAgICB7IHExOyBxMjsgc2l6ZSB9XG5cbiAgKCoqIFtldmljdF9vbmUgdF0gZmlyc3QgdHJpZXMgdG8gZXZpY3QgdGhlIGxhc3QgZWxlbWVudCBvZiBbdC5xMl0uXG4gICAgSWYgdGhhdCBsYXN0IGVsZW1lbnQgaGFzIGJlZW4gdmlzaXRlZCwgaXQgaXMgbW92ZWQgdG8gdGhlIGhlYWQgb2YgW3QucTFdLlxuICAgIExvb3AgdW50aWwgYW4gZWxlbWVudCBpcyBldmljdGVkIG9yIFt0LnEyXSBpcyBlbXB0eS5cbiAgICBJZiBbdC5xMl0gaXMgZW1wdHkgd2UgcGVyZm9ybSB0aGUgc2FtZSBwcm9jZXNzIGJ5IGludmVyc2luZyB0aGUgcm9sZXMgb2ZcbiAgICBbdC5xMl0gYW5kIFt0LnExXS5cblxuICAgIC8hXFwgVGhpcyBmdW5jdGlvbiB3aWxsIGxvb3AgaWYgYm90aCBxdWV1ZXMgYXJlIGVtcHR5LiAqKVxuICBsZXQgcmVjIGV2aWN0X29uZSB+b25fZXZpY3QgdCA9IGV2aWN0X3EyIH5vbl9ldmljdCB0XG5cbiAgYW5kIGV2aWN0X3EyIH5vbl9ldmljdCB0ID1cbiAgICBtYXRjaCBSQV9xdWV1ZS50YWtlX29wdCB0LnEyIHdpdGhcbiAgICB8IHEyLCBTb21lIChrLCB7IGVsdDsgdmlzaXRlZCB9KSB3aGVuICF2aXNpdGVkIC0+XG4gICAgICAgIGxldCBxMSA9IFJBX3F1ZXVlLmFkZCB0LnExIGsgeyBlbHQ7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICBldmljdF9xMiB+b25fZXZpY3QgeyB0IHdpdGggcTE7IHEyIH1cbiAgICB8IHEyLCBTb21lIChfaywgeyBlbHQ7IF8gfSkgLT5cbiAgICAgICAgb25fZXZpY3QgZWx0O1xuICAgICAgICB7IHQgd2l0aCBxMiB9XG4gICAgfCBfLCBOb25lIC0+IGV2aWN0X3ExIH5vbl9ldmljdCB0XG5cbiAgYW5kIGV2aWN0X3ExIH5vbl9ldmljdCB0ID1cbiAgICBtYXRjaCBSQV9xdWV1ZS50YWtlX29wdCB0LnExIHdpdGhcbiAgICB8IHExLCBTb21lIChrLCB7IGVsdDsgdmlzaXRlZCB9KSB3aGVuICF2aXNpdGVkIC0+XG4gICAgICAgIGxldCBxMiA9IFJBX3F1ZXVlLmFkZCB0LnEyIGsgeyBlbHQ7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICBldmljdF9xMSB+b25fZXZpY3QgeyB0IHdpdGggcTE7IHEyIH1cbiAgICB8IHExLCBTb21lIChfaywgeyBlbHQ7IF8gfSkgLT5cbiAgICAgICAgb25fZXZpY3QgZWx0O1xuICAgICAgICB7IHQgd2l0aCBxMSB9XG4gICAgfCBfLCBOb25lIC0+IGV2aWN0X3EyIH5vbl9ldmljdCB0XG5cbiAgbGV0IHJlYyBldmljdCB+b25fZXZpY3QgdCA9XG4gICAgbGV0IHNpemUgPSBSQV9xdWV1ZS5zaXplIHQucTEgKyBSQV9xdWV1ZS5zaXplIHQucTIgaW5cbiAgICBpZiBzaXplID4gMCAmJiBzaXplID4gdC5zaXplIHRoZW4gZXZpY3Qgfm9uX2V2aWN0IChldmljdF9vbmUgfm9uX2V2aWN0IHQpXG4gICAgZWxzZSB0XG5cbiAgbGV0IGluc2VydCB0ID8ob25faW5zZXJ0ID0gaWdub3JlKSA/KG9uX2V2aWN0ID0gaWdub3JlKSBrIHggPVxuICAgIG1hdGNoIFJBX3F1ZXVlLmZpbmQgdC5xMSBrIHdpdGhcbiAgICB8IFNvbWUgeyBlbHQ7IHZpc2l0ZWQgfSAtPlxuICAgICAgICAoKiBJZiB0aGUgZWx0IGlzIGFscmVhZHkgaW4gcTEgd2UgbWFyayBpdCBhcyB2aXNpdGVkICopXG4gICAgICAgIHZpc2l0ZWQgOj0gdHJ1ZTtcbiAgICAgICAgKHQsIGZhbHNlKVxuICAgIHwgTm9uZSAtPiAoXG4gICAgICAgIG1hdGNoIFJBX3F1ZXVlLmZpbmQgdC5xMiBrIHdpdGhcbiAgICAgICAgKCogSWYgdGhlIGVsdCBpcyBhbHJlYWR5IGluIHEyIHdlIG1hcmsgaXQgYXMgdmlzaXRlZCAqKVxuICAgICAgICB8IFNvbWUgeyBlbHQ7IHZpc2l0ZWQgfSAtPlxuICAgICAgICAgICAgdmlzaXRlZCA6PSB0cnVlO1xuICAgICAgICAgICAgKHQsIGZhbHNlKVxuICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICgqIElmIHRoZSBlbHQgd2FzIG5vdCB5ZXQgaW4gdGhlIGNhY2hlIHdlIGFkZCBpdCB0byBxMSAqKVxuICAgICAgICAgICAgbGV0IHExID0gUkFfcXVldWUuYWRkIHQucTEgayB7IGVsdCA9IHg7IHZpc2l0ZWQgPSByZWYgZmFsc2UgfSBpblxuICAgICAgICAgICAgb25faW5zZXJ0IHg7XG4gICAgICAgICAgICAoZXZpY3Qgfm9uX2V2aWN0IHsgdCB3aXRoIHExIH0sIHRydWUpKVxuZW5kXG4iLCJpbmNsdWRlIENvbnRhaW5lcnNMYWJlbHNcbm1vZHVsZSBGRkNhY2hlID0gRkZDYWNoZVxuXG5tb2R1bGUgU3RyaW5nID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nXG4gIG1vZHVsZSBTZXQgPSBTZXQuTWFrZSAoU3RyaW5nKVxuZW5kXG5cbm1vZHVsZSBZb2pzb24gPSBzdHJ1Y3RcbiAgaW5jbHVkZSBKc29ueHQuWW9qc29uXG5lbmRcblxubW9kdWxlIEVuY29kaW5ncyA9IHN0cnVjdFxuICBsZXQgdG9fanN0ciB0ID0gSnYucmVwciB0IHw+IEJyci5Kc29uLmVuY29kZVxuICBsZXQgdG9fanYgdCA9IHRvX2pzdHIgdCB8PiBKdi5vZl9qc3RyXG5cbiAgbGV0IG9mX2pzdHIganN0ciA9XG4gICAgbWF0Y2ggQnJyLkpzb24uZGVjb2RlIGpzdHIgd2l0aFxuICAgIHwgT2sgdiAtPiBPayAoT2JqLm1hZ2ljIHYpXG4gICAgfCBFcnJvciBlcnIgLT5cbiAgICAgICAgQnJyLkNvbnNvbGUuZXJyb3IgWyBlcnIgXTtcbiAgICAgICAgRXJyb3IgKGBNc2cgXCJGYWlsZWQgdG8gdW5tYXJzaGFsIGRhdGFcIilcblxuICBsZXQgb2ZfanYganYgPSBKdi50b19qc3RyIGp2IHw+IG9mX2pzdHJcbmVuZFxuXG5sZXQgcmFuZG9tX3N0YXRlID0gUmFuZG9tLmdldF9zdGF0ZSAoKVxubGV0IG5ld191dWlkX3Y0ICgpID0gVXVpZG0udjRfZ2VuIHJhbmRvbV9zdGF0ZSAoKVxuXG4oKiogW3RlZSBmIHhdIGFwcGxpZXMgW2ZdIHRvIFt4XSBhbmQgcmV0dXJucyBbeF0gKilcbmxldCB0ZWUgZiB4ID1cbiAgbGV0ICgpID0gZiB4IGluXG4gIHhcbiIsIm9wZW4gU3RkXG5cbm1vZHVsZSBDbGFzc2VzID0gc3RydWN0XG4gIGluY2x1ZGUgU3RyaW5nLlNldFxuXG4gIHR5cGUgbm9ucmVjIHQgPSB0XG4gIHR5cGUgbW9kaWZpZXIgPSBBZGQgb2Ygc3RyaW5nIGxpc3QgfCBSZXBsYWNlIG9mIHN0cmluZyBsaXN0XG5cbiAgbGV0IG1ha2UgbCA9IG9mX2xpc3QgbFxuICBsZXQgdXBkYXRlIHQgPSBmdW5jdGlvbiBBZGQgbCAtPiBhZGRfbGlzdCB0IGwgfCBSZXBsYWNlIGwgLT4gb2ZfbGlzdCBsXG5cbiAgbGV0IHRvX3N0cmluZyB0ID1cbiAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMzIgaW5cbiAgICBsZXQgZmlyc3QgPSByZWYgdHJ1ZSBpblxuICAgIGl0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBpZiAhZmlyc3QgdGhlbiAoXG4gICAgICAgICAgZmlyc3QgOj0gZmFsc2U7XG4gICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIiVzXCIgYylcbiAgICAgICAgZWxzZSBQcmludGYuYnByaW50ZiBiIFwiICVzXCIgYylcbiAgICAgIHQ7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcblxuICBsZXQgYXRfb2Zfc3RyaW5nIGMgPSBCcnIuQXQuY2xhc3MnIEBAIEpzdHIudiBjXG5cbiAgbW9kdWxlIFAgPSBzdHJ1Y3RcbiAgICBsZXQgdG9fYXQgdCA9XG4gICAgICBMaXN0Lm1hcCAodG9fbGlzdCB0KSB+ZjooZnVuIGMgLT4gYFAgKEJyci5BdC5jbGFzcycgQEAgSnN0ci52IGMpKVxuICBlbmRcbmVuZFxuXG5vcGVuIEJyclxub3BlbiBCcnJfbHdkXG5cbnR5cGUgdCA9IHsgY2xhc3NlcyA6IENsYXNzZXMudDsgYXR0cnMgOiBBdC50IEVsd2QuY29sIH1cbigqKiBDbGFzc2VzIGF0dHJpYnV0ZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBidXQgYXJlIGV2ZW50dWFsbHkgdHJhbnNsYXRlZCB0byBBdC50ICopXG5cbmxldCBlbXB0eSA9IHsgY2xhc3NlcyA9IENsYXNzZXMuZW1wdHk7IGF0dHJzID0gW10gfVxuXG5sZXQgdG9fYXQgP2lkIHQgPVxuICBsZXQgYXQgPSBMaXN0LnJldl9hcHBlbmQgdC5hdHRycyBAQCBDbGFzc2VzLlAudG9fYXQgdC5jbGFzc2VzIGluXG4gIG1hdGNoIGlkIHdpdGggTm9uZSAtPiBhdCB8IFNvbWUgaWQgLT4gYFAgKEF0LmlkIChKc3RyLnYgaWQpKSA6OiBhdFxuXG5sZXQgY2xhc3NlcyBsID0geyBlbXB0eSB3aXRoIGNsYXNzZXMgPSBDbGFzc2VzLm9mX2xpc3QgbCB9XG5cbmxldCB1bmlvbiB7IGNsYXNzZXM7IGF0dHJzIH0geyBjbGFzc2VzID0gYzsgYXR0cnMgPSBhIH0gPVxuICB7IGNsYXNzZXMgPSBDbGFzc2VzLnVuaW9uIGNsYXNzZXMgYzsgYXR0cnMgPSBMaXN0LnJldl9hcHBlbmQgYXR0cnMgYSB9XG5cbm1vZHVsZSBCdWlsZGVyID0gc3RydWN0XG4gIHR5cGUgYXQgPSBDIG9mIHN0cmluZyB8IEF0IG9mIEF0LnRcblxuICBsZXQgKCArICkgdCA9IGZ1bmN0aW9uXG4gICAgfCBDIGNsYXNzbmFtZSAtPlxuICAgICAgICBsZXQgY2xhc3NlcyA9IENsYXNzZXMuYWRkIGNsYXNzbmFtZSB0LmNsYXNzZXMgaW5cbiAgICAgICAgeyB0IHdpdGggY2xhc3NlcyB9XG4gICAgfCBBdCBhdCAtPlxuICAgICAgICBsZXQgYXR0cnMgPSBgUCBhdCA6OiB0LmF0dHJzIGluXG4gICAgICAgIHsgdCB3aXRoIGF0dHJzIH1cblxuICBsZXQgd2l0aF9pZCBzIHQgPVxuICAgIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICAgIHRvX2F0IHsgdCB3aXRoIGF0dHJzIH1cbmVuZFxuXG4oKiBuZXcgQVBJICopXG5cbmxldCBhZGQgYXRfbmFtZSB2IGF0ID1cbiAgbGV0IGEgPVxuICAgIG1hdGNoIHYgd2l0aFxuICAgIHwgYFAgdiAtPiBgUCAoQXQudiBhdF9uYW1lIEBAIEpzdHIudiB2KVxuICAgIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mOihmdW4gdiAtPiBBdC52IGF0X25hbWUgQEAgSnN0ci52IHYpKVxuICAgIHwgYFMgXyAtPiBmYWlsd2l0aCBcIlRPRE8gbm90IGltcGxlbWVudGVkXCJcbiAgaW5cbiAgYSA6OiBhdFxuXG5sZXQgYWRkX2Jvb2wgYXRfIHYgYXQgPSBtYXRjaCB2IHdpdGggZmFsc2UgLT4gYXQgfCB0cnVlIC0+IGBQIGF0XyA6OiBhdFxuXG5sZXQgYWRkX3N0ciBhdF9uYW1lIHYgYXQgPVxuICBtYXRjaCB2IHdpdGggXCJcIiAtPiBhdCB8IHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxubGV0IGFkZF9vcHQgYXRfbmFtZSB2IGF0ID1cbiAgbWF0Y2ggdiB3aXRoIE5vbmUgLT4gYXQgfCBTb21lIHYgLT4gYFAgKEF0LnYgYXRfbmFtZSBAQCBKc3RyLnYgdikgOjogYXRcblxudHlwZSBhdCA9IEMgb2Ygc3RyaW5nIHwgQSBvZiBBdC50XG50eXBlICdhdCB0JyA9ICdhdCBFbHdkLmNvbFxuXG5sZXQgbWFwX2NvbCBmID0gZnVuY3Rpb25cbiAgfCBgUCB2IC0+IGBQIChmIHYpXG4gIHwgYFIgdiAtPiBgUiAoTHdkLm1hcCB2IH5mKVxuICB8IGBTIHYgLT4gYFMgKEx3ZF9zZXEubWFwIGYgdilcblxubGV0IG9mX2F0ID0gZnVuY3Rpb24gQSBhdCAtPiBhdCB8IEMgbmFtZSAtPiBBdC5jbGFzcycgKEpzdHIudiBuYW1lKVxubGV0IGNvbnMgYXQgdCA9IG1hcF9jb2wgb2ZfYXQgYXQgOjogdFxubGV0IGNsYXNzXyBuID0gY29ucyAobWFwX2NvbCAoZnVuIG4gLT4gQyBuKSBuKSBbXVxuXG5tb2R1bGUgTyA9IHN0cnVjdFxuICB0eXBlIG5vbnJlYyBhdCA9IGF0ID0gQyBvZiBzdHJpbmcgfCBBIG9mIEF0LnRcblxuICBsZXQgdiBhdCA9IGNvbnMgYXQgW11cbiAgbGV0ICggQDo6ICkgYXQgdCA9IGNvbnMgYXQgdFxuZW5kXG5cbmxldCB3aXRoX2lkIHMgdCA9XG4gIGxldCBhdHRycyA9IGBQIChBdC5pZCBAQCBKc3RyLnYgcykgOjogdC5hdHRycyBpblxuICB0b19hdCB7IHQgd2l0aCBhdHRycyB9XG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJcblxudHlwZSAnYSBvbmVfbWF5YmVfcmVhY3RpdmUgPSBbIGBQIG9mICdhIHwgYFIgb2YgJ2EgTHdkLnQgXVxudHlwZSAnYSBtYXliZV9yZWFjdGl2ZSA9IFsgJ2Egb25lX21heWJlX3JlYWN0aXZlIHwgYFMgb2YgJ2EgTHdkX3NlcS50IEx3ZC50IF1cblxubGV0IGlzX3B1cmVfZWxlbWVudCA9IGZ1bmN0aW9uXG4gIHwgYFAgXyAtPiB0cnVlXG4gIHwgYFIgeCAtPiBPcHRpb24uaXNfc29tZSAoTHdkLmlzX3B1cmUgeClcbiAgfCBgUyB4IC0+IE9wdGlvbi5pc19zb21lIChMd2QuaXNfcHVyZSB4KVxuXG5sZXQgcHVyZSB0ID0gYFAgdFxubGV0IHJlYWN0aXZlIHQgPSBgUiB0XG5sZXQgc2VxdWVuY2UgdCA9IGBTIHRcblxubW9kdWxlIFVuaXQgPSBzdHJ1Y3RcbiAgKCoqIENvbnZlcnNpb24gYmV0d2VlbiBDU1MgdW5pdHMuIFZlcnkgZWFybHkgV0lQLiAqKVxuICB0eXBlIHQgPSBQeCBvZiBmbG9hdCB8IFJlbSBvZiBmbG9hdCB8IEVtIG9mIGZsb2F0XG5cbiAgbGV0IG9mX3N0cmluZyBzID1cbiAgICAoKiBUT0RPOiBwcm9wZXIgcGFyc2luZyAqKVxuICAgIG1hdGNoIFN0cmluZy5jaG9wX3N1ZmZpeCB+c3VmOlwicHhcIiBzIHdpdGhcbiAgICB8IFNvbWUgaSAtPiAoXG4gICAgICAgIG1hdGNoIEludC5vZl9zdHJpbmcgaSB3aXRoXG4gICAgICAgIHwgU29tZSBpIC0+IFNvbWUgKFB4IChmbG9hdF9vZl9pbnQgaSkpXG4gICAgICAgIHwgTm9uZSAtPiBGbG9hdC5vZl9zdHJpbmdfb3B0IGkgfD4gT3B0aW9uLm1hcCAoZnVuIGkgLT4gUHggaSkpXG4gICAgfCBOb25lIC0+IChcbiAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJyZW1cIiBzIHdpdGhcbiAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICB8IE5vbmUgLT4gKFxuICAgICAgICAgICAgbWF0Y2ggU3RyaW5nLmNob3Bfc3VmZml4IH5zdWY6XCJlbVwiIHMgd2l0aFxuICAgICAgICAgICAgfCBTb21lIGYgLT4gRmxvYXQub2Zfc3RyaW5nX29wdCBmIHw+IE9wdGlvbi5tYXAgKGZ1biBmIC0+IFJlbSBmKVxuICAgICAgICAgICAgfCBOb25lIC0+IE5vbmUpKVxuXG4gIGxldCB0b19zdHJpbmcgPSBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBQcmludGYuc3ByaW50ZiBcIiVmcHhcIiBpXG4gICAgfCBSZW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmcmVtXCIgZlxuICAgIHwgRW0gZiAtPiBQcmludGYuc3ByaW50ZiBcIiVmZW1cIiBmXG5cbiAgbGV0IHRvX3B4ID8ocGFyZW50ID0gRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSA9XG4gICAgbGV0IGdldF9mb250X3NpemVfaW5fcHggcGFyZW50ID1cbiAgICAgIGxldCBmb250X3NpemUgPVxuICAgICAgICBFbC5jb21wdXRlZF9zdHlsZSAoSnN0ci52IFwiZm9udC1zaXplXCIpIHBhcmVudCB8PiBKc3RyLnRvX3N0cmluZ1xuICAgICAgaW5cbiAgICAgIG1hdGNoIG9mX3N0cmluZyBmb250X3NpemUgd2l0aFxuICAgICAgfCBOb25lIC0+IDE2LlxuICAgICAgfCBTb21lIChQeCBpKSAtPiBpXG4gICAgICB8IFNvbWUgXyAtPiBmYWlsd2l0aCBcIm5vdCBpbXBsZW1lbnRlZFwiXG4gICAgaW5cbiAgICBmdW5jdGlvblxuICAgIHwgUHggaSAtPiBpXG4gICAgfCBSZW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCAoRy5kb2N1bWVudCB8PiBEb2N1bWVudC5yb290KSBpblxuICAgICAgICBmICouIGZvbnRfc2l6ZVxuICAgIHwgRW0gZiAtPlxuICAgICAgICBsZXQgZm9udF9zaXplID0gZ2V0X2ZvbnRfc2l6ZV9pbl9weCBwYXJlbnQgaW5cbiAgICAgICAgZiAqLiBmb250X3NpemVcbmVuZFxuXG5sZXQgbGlzdGVuIH5mIHQgPVxuICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHQgaW5cbiAgTHdkLnNldF9vbl9pbnZhbGlkYXRlIHJvb3QgKGZ1biBfIC0+IGYgKEx3ZC5xdWlja19zYW1wbGUgcm9vdCkpO1xuICBMd2QucXVpY2tfc2FtcGxlIHJvb3QgfD4gaWdub3JlXG5cbmxldCBtYXAzIH5mIGEgYiBjID1cbiAgTHdkLm1hcDIgYSBiIH5mOihmdW4gYSBiIC0+IChhLCBiKSkgfD4gTHdkLm1hcDIgYyB+ZjooZnVuIGMgKGEsIGIpIC0+IGYgYSBiIGMpXG5cbmxldCB0cmlwbGUgYSBiIGMgPSBtYXAzIGEgYiBjIH5mOihmdW4gYSBiIGMgLT4gKGEsIGIsIGMpKVxuIiwib3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlIHRhcmdldCA9IFBvcyBvZiBpbnQgfCBFbCBvZiBFbHdkLnRcbnR5cGUgdCA9IHsgZWx0IDogRWx3ZC50IEx3ZC50OyBzY3JvbGxfcG9zaXRpb24gOiB0YXJnZXQgb3B0aW9uIEx3ZC52YXIgfVxuXG4oKiBUT0RPOiBtYWtlIGEgcHJvcGVyIGJpbmRpbmcgKilcbmxldCBqc19zY3JvbGwgZWx0IHRhcmdldCA9XG4gIG1hdGNoIHRhcmdldCB3aXRoXG4gIHwgUG9zIHggLT5cbiAgICAgIGxldCBlbHQgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIGlnbm9yZSBAQCBKdi5jYWxsIGVsdCBcInNjcm9sbFwiIFt8IEp2Lm9mX2ludCAwOyBKdi5vZl9pbnQgeCB8XVxuICB8IEVsIGVsIC0+IEVsLnNjcm9sbF9pbnRvX3ZpZXcgZWxcblxubGV0IG1ha2UgPyhhdCA9IFtdKSB+c2Nyb2xsX3RhcmdldCBlbHQgPVxuICBsZXQgYWN0aXZlID0gTHdkLnZhciB0cnVlIGluXG4gIGxldCBhY3RpdmVfY2xhc3MgPVxuICAgIEx3ZC5tYXAgKEx3ZC5nZXQgYWN0aXZlKSB+ZjooZnVuY3Rpb25cbiAgICAgIHwgZmFsc2UgLT4gQXR0cnMuQSBBdC52b2lkXG4gICAgICB8IHRydWUgLT4gQXR0cnMuQSAoQXQuY2xhc3MnIChKc3RyLnYgXCJsb2NrZWRcIikpKVxuICBpblxuICBsZXQgYXQgPVxuICAgIEF0dHJzLk8uKFxuICAgICAgYFAgKEMgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC13cmFwcGVyXCIpIEA6OiBgUiBhY3RpdmVfY2xhc3MgQDo6IGF0KVxuICBpblxuICBsZXQgY29udHJvbHMgPVxuICAgIGxldCBhdCA9IEF0dHJzLmNsYXNzXyAoYFAgXCJsd2R1aS1jb250cm9sbGVkLXNjcm9sbC1jb250cm9sc1wiKSBpblxuICAgIGxldCBldiA9XG4gICAgICBsZXQgb25fY2xpY2sgXyA9IEx3ZC5zZXQgYWN0aXZlIHRydWUgaW5cbiAgICAgIGxldCBoYW5kbGVyID0gRWx3ZC5oYW5kbGVyIEV2LmNsaWNrIG9uX2NsaWNrIGluXG4gICAgICBbIGBQIGhhbmRsZXIgXVxuICAgIGluXG4gICAgRWx3ZC5kaXYgfmF0IH5ldiBbIGBSIChFbHdkLmJ1dHRvbiBbIGBQIChFbC50eHQnIFwiU2hvdyBwbGF5aW5nXCIpIF0pIF1cbiAgaW5cbiAgbGV0IG9uX3doZWVsID1cbiAgICBFbHdkLmhhbmRsZXIgRXYud2hlZWwgKGZ1biBfZXYgLT5cbiAgICAgICAgaWYgTHdkLnBlZWsgYWN0aXZlIHRoZW4gTHdkLnNldCBhY3RpdmUgZmFsc2UpXG4gIGluXG4gIGxldCBlbHQgPVxuICAgIGxldCBzdGF0ZSA9IFV0aWxzLnRyaXBsZSBlbHQgKEx3ZC5nZXQgYWN0aXZlKSBzY3JvbGxfdGFyZ2V0IGluXG4gICAgTHdkLm1hcCBzdGF0ZSB+ZjooZnVuIChlbHQsIGFjdGl2ZSwgcG9zKSAtPlxuICAgICAgICBpZiBhY3RpdmUgdGhlbiBPcHRpb24uaXRlciAoanNfc2Nyb2xsIGVsdCkgcG9zO1xuICAgICAgICBlbHQpXG4gIGluXG4gIEVsd2QuZGl2IH5hdCB+ZXY6WyBgUCBvbl93aGVlbCBdIFsgYFIgZWx0OyBgUiBjb250cm9scyBdXG4iLCJvcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5tb2R1bGUgQ29sdW1ucyA9IHN0cnVjdFxuICB0eXBlIGNvbHVtbiA9IHsgbmFtZSA6IHN0cmluZzsgY3NzX3NpemUgOiBzdHJpbmc7IGNvbnRlbnQgOiBFbHdkLnQgRWx3ZC5jb2wgfVxuICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICBsZXQgdiBuYW1lIGNzc19zaXplIGNvbnRlbnQgPSB7IG5hbWU7IGNzc19zaXplOyBjb250ZW50IH1cblxuICBsZXQgdG9faGVhZGVyIHQgPVxuICAgIGxldCBjZWxscyA9XG4gICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IGNvbnRlbnQ7IF8gfSBhY2MgLT5cbiAgICAgICAgICBgUiAoRWx3ZC5kaXYgY29udGVudCkgOjogYWNjKVxuICAgIGluXG4gICAgY2VsbHNcblxuICBsZXQgc3R5bGUgdCA9XG4gICAgbGV0IHRlbXBsYXRlID1cbiAgICAgIEFycmF5LnRvX3N0cmluZyB+c2VwOlwiIFwiIChmdW4geyBjc3Nfc2l6ZTsgXyB9IC0+IGNzc19zaXplKSB0XG4gICAgaW5cbiAgICBQcmludGYuc3ByaW50ZiBcIiVzOiAlcztcIiBcImdyaWQtdGVtcGxhdGUtY29sdW1uc1wiIHRlbXBsYXRlXG5lbmRcblxudHlwZSB0ID0geyBjb2x1bW5zIDogQ29sdW1ucy50IH1cbnR5cGUgZml4ZWRfcm93X2hlaWdodCA9IHsgdGFibGUgOiB0OyByb3dfaGVpZ2h0IDogVXRpbHMuVW5pdC50IH1cblxubGV0IHN0eWxlIHQgPVxuICBsZXQgc3R5bGUgPSBDb2x1bW5zLnN0eWxlIHQudGFibGUuY29sdW1ucyBpblxuICBTdHJpbmcuY29uY2F0IH5zZXA6XCIgXCIgWyBzdHlsZSBdXG5cbmxldCBoZWFkZXIgdCA9XG4gIGxldCByb3dfaGVpZ2h0ID0gVXRpbHMuVW5pdC50b19zdHJpbmcgdC5yb3dfaGVpZ2h0IGluXG4gIGxldCBhdCA9XG4gICAgWyBgUCAoQXQuc3R5bGUgKEpzdHIudiBAQCBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXNcIiByb3dfaGVpZ2h0KSkgXVxuICBpblxuICBFbHdkLmRpdiB+YXQgQEAgQ29sdW1ucy50b19oZWFkZXIgdC50YWJsZS5jb2x1bW5zXG5cbmxldCBfID0gVXRpbHMuVW5pdC50b19weCAoUmVtIDQuKVxuIiwiKCoqIEEgdmlydHVhbCB0YWJsZSB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgZGF0YXNldC5cblxuICAgIFRPRE86IHRoaXMgaXMgY2xlYXJseSBvdmVyLWVuZ2luZWVyZWQ6IHRoZSBsYXJnZSBsd2QgdGFibGUgdGhhdCByZWR1Y2VzIHRvXG4gICAgcm93cyBhbmQgcGxhY2Vob2xkZXJzIHdpdGggYSBtb25vaWQgaXMgZWxlZ2FudCBidSBkb2VzIG5vdCBzY2FsZSB3ZWxsLiBJdFxuICAgIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG9wdGltaXplIGl0IChlc3BlY2lhbGx5IHRoZSBcInVuaXF1ZXVlXCIgTFJVIHRoaW5neSksXG4gICAgYnV0IGhhdmluZyB0b28gbGFyZ2UgYSBsd2RfdGFibGUgaXMgcHJvYmFibHkgYSBoYXJkIGxpbWl0LiAqKVxuXG5vcGVuIFN0ZFxub3BlbiBCcnJlclxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG50eXBlICdhIHJvd19kYXRhID0ge1xuICBpbmRleCA6IGludDtcbiAgY29udGVudCA6ICdhIG9wdGlvbjtcbiAgcmVuZGVyIDogKGludCAtPiAnYSAtPiBFbHdkLnQgRWx3ZC5jb2wpIEx3ZC50O1xufVxuXG50eXBlICgnZGF0YSwgJ2Vycm9yKSBkYXRhX3NvdXJjZSA9IHtcbiAgdG90YWxfaXRlbXMgOiBpbnQgTHdkLnQ7XG4gIGZldGNoIDogKGludCBhcnJheSAtPiAoJ2RhdGEgb3B0aW9uIGFycmF5LCAnZXJyb3IpIEZ1dC5yZXN1bHQpIEx3ZC50O1xuICByZW5kZXIgOiAoaW50IC0+ICdkYXRhIC0+IEVsd2QudCBFbHdkLmNvbCkgTHdkLnQ7XG59XG5cbigqIFRoZSB2aXJ0dWFsIHRhYmxlIGlzIGEgY29tcGxleCByZWFjdGl2ZSBjb21wb25lbnQuIFByaW1hcmlseSwgaXQgcmVhY3RzIHRvXG4gICBjaGFuZ2VzIG9mIHRoZSBbZGF0YV9zb3VyY2VdIHNvIHRoYXQgY29udGVudCBpbiB0aGUgdGFibGUgaXMgcHJvcGVybHlcbiAgIHJlZnJlc2hlZCB3aGVuIGl0IGRvZXMuIEFkZGl0aW9ubmFseSBpdCBuZWVkcyB0byByZWFjdCB0byBtdWx0aXBsZSBkb21cbiAgIGV2ZW50cywgbm90YWJseSB2ZXJ0aWNhbCByZXNpemUgb2YgdGhlIGNvbnRhaW5lciBhbmQgc2Nyb2xsIGV2ZW50cywgdG8gZW5zdXJlXG4gICB0aGF0IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIHRhbGJlIGlzIGFsd2F5cyBwb3B1bGF0ZWQgd2l0aCByb3dzLiAqKVxubW9kdWxlIENhY2hlID0gRkZDYWNoZS5NYWtlIChJbnQpXG5cbmxldCBtYWtlICh0eXBlIGRhdGEpIH4odWlfdGFibGUgOiBTY2hlbWEuZml4ZWRfcm93X2hlaWdodClcbiAgICA/KHBsYWNlaG9sZGVyIDogaW50IC0+IEVsd2QudCBFbHdkLmNvbCA9IGZ1biBfIC0+IFtdKVxuICAgID8oc2Nyb2xsX3RhcmdldCA6IGludCBMd2QudCBvcHRpb24pXG4gICAgKHsgdG90YWxfaXRlbXM7IGZldGNoOyByZW5kZXIgfSA6IChkYXRhLCBfKSBkYXRhX3NvdXJjZSkgPVxuICBpZ25vcmUgcGxhY2Vob2xkZXI7XG4gIGxldCByb3dfc2l6ZSA9IHVpX3RhYmxlLnJvd19oZWlnaHQgfD4gVXRpbHMuVW5pdC50b19zdHJpbmcgaW5cbiAgbGV0IGhlaWdodF9uIG4gPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogY2FsYyglcyAqICVpKTtcIiByb3dfc2l6ZSBuIGluXG4gIGxldCBoZWlnaHQgPSBQcmludGYuc3ByaW50ZiBcImhlaWdodDogJXMgIWltcG9ydGFudDtcIiByb3dfc2l6ZSBpblxuICBsZXQgdGFibGUgOiBkYXRhIHJvd19kYXRhIEx3ZF90YWJsZS50ID0gTHdkX3RhYmxlLm1ha2UgKCkgaW5cbiAgKCogVGhlIFtyb3dfaW5kZXhdIHRhYmxlIGlzIHVzZWQgdG8gcHJvdmlkZSBmYXN0IHJhbmRvbSBhY2Nlc3MgdG8gdGhlIHRhYmxlJ3NcbiAgICAgcm93cyBpbiB0aGUgb2JzZXJ2ZXIncyBjYWxsYmFjayAqKVxuICBsZXQgcm93X2luZGV4IDogKGludCwgZGF0YSByb3dfZGF0YSBMd2RfdGFibGUucm93KSBIYXNodGJsLnQgPVxuICAgIEhhc2h0YmwuY3JlYXRlIDIwNDhcbiAgaW5cbiAgbGV0IHVubG9hZCBpID1cbiAgICBsZXQgb3BlbiBPcHRpb24uSW5maXggaW5cbiAgICAobGV0KiByb3cgPSBIYXNodGJsLmdldCByb3dfaW5kZXggaSBpblxuICAgICBsZXQrIHJvd19kYXRhID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBOb25lIH0pXG4gICAgfD4gaWdub3JlXG4gIGluXG4gIGxldCBuZXdfY2FjaGUgKCkgPSBDYWNoZS5jcmVhdGUgfnNpemU6NTAgaW5cbiAgKCogVGhlIGNhY2hlIGlzIHNvbWUgc29ydCBvZiBMUlUgdG8ga2VlcCBsaXZlIHRoZSBjb250ZW50IG9mIHJlY2VudGx5IHNlZW5cbiAgICAgcm93cyAqKVxuICBsZXQgY2FjaGVfcmVmID0gcmVmIChuZXdfY2FjaGUgKCkpIGluXG4gIGxldCBhZGQgfmZldGNoID8obWF4X2l0ZW1zID0gMjAwKSBpbmRleGVzID1cbiAgICBsZXQgY2FjaGUgPSAhY2FjaGVfcmVmIGluXG4gICAgbGV0IGxvYWQgaW5kZXhlcyA9XG4gICAgICAobGV0IG9wZW4gRnV0LlJlc3VsdF9zeW50YXggaW5cbiAgICAgICBsZXQrIChkYXRhIDogZGF0YSBvcHRpb24gYXJyYXkpID0gZmV0Y2ggaW5kZXhlcyBpblxuICAgICAgIEFycmF5Lml0ZXIyIGluZGV4ZXMgZGF0YSB+ZjooZnVuIGkgZGF0YSAtPlxuICAgICAgICAgICAobGV0IG9wZW4gT3B0aW9uLkluZml4IGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEhhc2h0YmwuZ2V0IHJvd19pbmRleCBpIGluXG4gICAgICAgICAgICBsZXQrIHJvd19kYXRhID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGxldCBkYXRhID1cbiAgICAgICAgICAgICAgbWF0Y2ggZGF0YSB3aXRoIFNvbWUgZGF0YSAtPiBkYXRhIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgIGluXG4gICAgICAgICAgICAoKiB0b2RvOiBsZXQgdXNlcnMgcHJvdmlkZSBjb21wYXJpc29uICopXG4gICAgICAgICAgICBpZiBub3QgKEVxdWFsLnBvbHkgcm93X2RhdGEuY29udGVudCBAQCBTb21lIGRhdGEpIHRoZW5cbiAgICAgICAgICAgICAgTHdkX3RhYmxlLnNldCByb3cgeyByb3dfZGF0YSB3aXRoIGNvbnRlbnQgPSBTb21lIGRhdGEgfSlcbiAgICAgICAgICAgfD4gaWdub3JlKSlcbiAgICAgIHw+IGlnbm9yZVxuICAgIGluXG4gICAgbGV0IGNhY2hlLCB0b19sb2FkID1cbiAgICAgIExpc3QuZm9sZF9sZWZ0IH5pbml0OihjYWNoZSwgW10pIGluZGV4ZXMgfmY6KGZ1biAoY2FjaGUsIGFjYykgaSAtPlxuICAgICAgICAgIGxldCBjYWNoZSwgaW5zZXJ0ZWQgPSBDYWNoZS5pbnNlcnQgfm9uX2V2aWN0OnVubG9hZCBjYWNoZSBpIGkgaW5cbiAgICAgICAgICBpZiBpbnNlcnRlZCB0aGVuIChjYWNoZSwgaSA6OiBhY2MpIGVsc2UgKGNhY2hlLCBhY2MpKVxuICAgIGluXG4gICAgY2FjaGVfcmVmIDo9IGNhY2hlO1xuICAgIGxvYWQgKEFycmF5Lm9mX2xpc3QgdG9fbG9hZClcbiAgaW5cbiAgbGV0IHRhYmxlX2hlaWdodCA9IEx3ZC52YXIgTm9uZSBpblxuICBsZXQgY29tcHV0ZV92aXNpYmxlX3Jvd3Mgfmxhc3Rfc2Nyb2xsX3kgZGl2ID1cbiAgICBsZXQgaGVpZ2h0IGVsdCA9XG4gICAgICBsZXQganYgPSBFbC50b19qdiBlbHQgaW5cbiAgICAgIEp2LmdldCBqdiBcIm9mZnNldEhlaWdodFwiIHw+IEp2LnRvX2ludFxuICAgIGluXG4gICAgbGV0IHNjcm9sbF95ID0gRWwuc2Nyb2xsX3kgZGl2IGluXG4gICAgbGV0IGRpcmVjdGlvbiA9IGlmIHNjcm9sbF95ID4uICFsYXN0X3Njcm9sbF95IHRoZW4gYERvd24gZWxzZSBgVXAgaW5cbiAgICBsZXQgKCkgPSBsYXN0X3Njcm9sbF95IDo9IHNjcm9sbF95IGluXG4gICAgbGV0IHZpc2libGVfaGVpZ2h0ID0gaGVpZ2h0IGRpdiB8PiBmbG9hdF9vZl9pbnQgaW5cbiAgICBsZXQgcm93X2hlaWdodCA9IFV0aWxzLlVuaXQudG9fcHggfnBhcmVudDpkaXYgdWlfdGFibGUucm93X2hlaWdodCBpblxuICAgIGxldCBoZWFkZXJfaGVpZ2h0ID0gcm93X2hlaWdodCBpblxuICAgIGxldCBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzID0gdmlzaWJsZV9oZWlnaHQgLy4gcm93X2hlaWdodCB8PiBpbnRfb2ZfZmxvYXQgaW5cbiAgICBsZXQgYmxlZWRpbmcgPSBudW1iZXJfb2ZfdmlzaWJsZV9yb3dzIGluXG4gICAgbGV0IHNjcm9sbF95ID0gc2Nyb2xsX3kgLS4gaGVhZGVyX2hlaWdodCBpblxuICAgIGxldCBmaXJzdF92aXNpYmxlX3JvdyA9IGludF9vZl9mbG9hdCAoc2Nyb2xsX3kgLy4gcm93X2hlaWdodCkgKyAxIGluXG4gICAgbGV0IGxhc3RfdmlzaWJsZV9yb3cgPSBmaXJzdF92aXNpYmxlX3JvdyArIG51bWJlcl9vZl92aXNpYmxlX3Jvd3MgaW5cbiAgICBsZXQgZmlyc3QgPVxuICAgICAgbGV0IGJsZWVkaW5nID1cbiAgICAgICAgbWF0Y2ggZGlyZWN0aW9uIHdpdGggYFVwIC0+IGJsZWVkaW5nIHwgXyAtPiBibGVlZGluZyAvIDJcbiAgICAgIGluXG4gICAgICBmaXJzdF92aXNpYmxlX3JvdyAtIGJsZWVkaW5nIHw+IG1heCAwXG4gICAgaW5cbiAgICBsZXQgbGFzdCA9XG4gICAgICBsZXQgYmxlZWRpbmcgPVxuICAgICAgICBtYXRjaCBkaXJlY3Rpb24gd2l0aCBgRG93biAtPiBibGVlZGluZyB8IF8gLT4gYmxlZWRpbmcgLyAyXG4gICAgICBpblxuICAgICAgbGFzdF92aXNpYmxlX3JvdyArIGJsZWVkaW5nXG4gICAgaW5cbiAgICBMaXN0LmluaXQgKGxhc3QgLSBmaXJzdCkgfmY6KGZ1biBpIC0+IGZpcnN0ICsgaSlcbiAgaW5cbiAgbGV0IHByZXBhcmUgfnRvdGFsX2l0ZW1zOnRvdGFsIH5yZW5kZXIgPVxuICAgIGxldCAoKSA9IGNhY2hlX3JlZiA6PSBuZXdfY2FjaGUgKCkgaW5cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGN1cnJlbnRfcm93ID0gcmVmIChMd2RfdGFibGUuZmlyc3QgdGFibGUpIGluXG4gICAgd2hpbGUgT3B0aW9uLmlzX3NvbWUgIWN1cnJlbnRfcm93IHx8ICFpIDwgdG90YWwgLSAxIGRvXG4gICAgICBtYXRjaCAhY3VycmVudF9yb3cgd2l0aFxuICAgICAgfCBTb21lIHJvdyAtPlxuICAgICAgICAgIGlmICFpIDwgdG90YWwgLSAxIHRoZW5cbiAgICAgICAgICAgIGxldCAoKSA9IEhhc2h0YmwucmVwbGFjZSByb3dfaW5kZXggIWkgcm93IGluXG4gICAgICAgICAgICBMd2RfdGFibGUuc2V0IHJvdyB7IGluZGV4ID0gIWk7IGNvbnRlbnQgPSBOb25lOyByZW5kZXIgfVxuICAgICAgICAgIGVsc2UgTHdkX3RhYmxlLnVuc2V0IHJvdztcbiAgICAgICAgICBpbmNyIGk7XG4gICAgICAgICAgY3VycmVudF9yb3cgOj0gTHdkX3RhYmxlLm5leHQgcm93XG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBpZiAhaSA8IHRvdGFsIC0gMSB0aGVuIChcbiAgICAgICAgICAgIGxldCBzZXQgPSB7IGluZGV4ID0gIWk7IGNvbnRlbnQgPSBOb25lOyByZW5kZXIgfSBpblxuICAgICAgICAgICAgbGV0IHJvdyA9IEx3ZF90YWJsZS5hcHBlbmQgfnNldCB0YWJsZSBpblxuICAgICAgICAgICAgSGFzaHRibC5hZGQgcm93X2luZGV4ICFpIHJvdztcbiAgICAgICAgICAgIGluY3IgaTtcbiAgICAgICAgICAgIGN1cnJlbnRfcm93IDo9IEx3ZF90YWJsZS5uZXh0IHJvdylcbiAgICBkb25lXG4gIGluXG4gIGxldCBwb3B1bGF0ZV9vbl9zY3JvbGwgPVxuICAgIGxldCBsYXN0X3Njcm9sbF95ID0gcmVmIDAuIGluXG4gICAgTHdkLm1hcDIgdG90YWxfaXRlbXMgZmV0Y2ggfmY6KGZ1biB0b3RhbF9pdGVtcyBmZXRjaCAtPlxuICAgICAgICBsZXQgdXBkYXRlIGRpdiA9XG4gICAgICAgICAgbGV0IHZpc2libGVfcm93cyA9IGNvbXB1dGVfdmlzaWJsZV9yb3dzIH5sYXN0X3Njcm9sbF95IGRpdiBpblxuICAgICAgICAgICgqIHRvZG86IFdlIGRvIHdheSB0b28gbXVjaCB3b3JrIGFuZCByZWJ1aWxkIHRoZSBxdWV1ZSBlYWNoXG4gICAgICAgICAgICAgdGltZS4uLiBpdCdzIHZlcnkgaW5lZmljaWVudCAqKVxuICAgICAgICAgIGFkZCB+ZmV0Y2ggfm1heF9pdGVtczooNCAqIExpc3QubGVuZ3RoIHZpc2libGVfcm93cykgdmlzaWJsZV9yb3dzXG4gICAgICAgIGluXG4gICAgICAgIHByZXBhcmUgfnRvdGFsX2l0ZW1zIH5yZW5kZXI7XG4gICAgICAgIHVwZGF0ZSlcbiAgaW5cbiAgbGV0IHNjcm9sbF9oYW5kbGVyID1cbiAgICBMd2QubWFwIHBvcHVsYXRlX29uX3Njcm9sbCB+ZjooZnVuIHVwZGF0ZSAtPlxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc2Nyb2xsIChmdW4gZXYgLT5cbiAgICAgICAgICAgIGxldCBvcGVuIEZ1dC5TeW50YXggaW5cbiAgICAgICAgICAgIGlnbm9yZVxuICAgICAgICAgICAgQEBcbiAgICAgICAgICAgIGxldCBzY3JvbGxfaGFuZGxlciA9XG4gICAgICAgICAgICAgIGxldCBsYXN0X3VwZGF0ZSA9IHJlZiAwLiBpblxuICAgICAgICAgICAgICBsZXQgdGltZW91dCA9IHJlZiAoLTEpIGluXG4gICAgICAgICAgICAgIGxldCByZXNldF90aWNrZXIgZGl2ID1cbiAgICAgICAgICAgICAgICBsZXQgZGVib3VuY2luZ19pbnRlcnZhbCA9IDUwMCBpblxuICAgICAgICAgICAgICAgICgqIFdlIHVzZSBbbGFzdF91cGRhdGVdIHRvIGhhdmUgcmVndWxhciBkZWJvdW5jZWQgdXBkYXRlcyBhbmQgdGhlXG4gICAgICAgICAgICAgICAgICAgW3RpbWVvdXRdIHRvIGVuc3VyZSB0aGF0IHRoZSBsYXN0IHNjcm9sbCBldmVudCBpcyBhbHdheXMgdGFrZW4gaW50b1xuICAgICAgICAgICAgICAgICAgIGFjY291bnQgZXZlbiBpdCBpdCBoYXBwZW5zIGR1cmluZyB0aGUgZGVib3VuY2luZyBpbnRlcnZhbC4gKilcbiAgICAgICAgICAgICAgICBsZXQgbm93ID0gUGVyZm9ybWFuY2Uubm93X21zIEcucGVyZm9ybWFuY2UgaW5cbiAgICAgICAgICAgICAgICBpZiAhdGltZW91dCA+PSAwIHRoZW4gRy5zdG9wX3RpbWVyICF0aW1lb3V0O1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgOj1cbiAgICAgICAgICAgICAgICAgIEcuc2V0X3RpbWVvdXQgfm1zOmRlYm91bmNpbmdfaW50ZXJ2YWwgKGZ1biAoKSAtPiB1cGRhdGUgZGl2KTtcbiAgICAgICAgICAgICAgICBpZiBub3cgLS4gIWxhc3RfdXBkYXRlID4uIGZsb2F0X29mX2ludCBkZWJvdW5jaW5nX2ludGVydmFsIHRoZW4gKFxuICAgICAgICAgICAgICAgICAgbGFzdF91cGRhdGUgOj0gbm93O1xuICAgICAgICAgICAgICAgICAgdXBkYXRlIGRpdilcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgZnVuIGRpdiAtPiByZXNldF90aWNrZXIgZGl2XG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgbGV0IGRpdiA9IEV2LnRhcmdldCBldiB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgICAgICAgIHNjcm9sbF9oYW5kbGVyIGRpdikpXG4gIGluXG4gIGxldCAoKSA9XG4gICAgbGV0IHJlcG9wdWxhdGVfZGVwcyA9XG4gICAgICBMd2QubWFwMiBwb3B1bGF0ZV9vbl9zY3JvbGwgKEx3ZC5nZXQgdGFibGVfaGVpZ2h0KSB+ZjooZnVuIGEgYiAtPiAoYSwgYikpXG4gICAgaW5cbiAgICBsZXQgcm9vdCA9IEx3ZC5vYnNlcnZlIHJlcG9wdWxhdGVfZGVwcyBpblxuICAgIEx3ZC5zZXRfb25faW52YWxpZGF0ZSByb290IChmdW4gXyAtPlxuICAgICAgICBtYXRjaCBMd2QucXVpY2tfc2FtcGxlIHJvb3Qgd2l0aFxuICAgICAgICB8IHVwZGF0ZSwgU29tZSAoX2gsIGRpdikgLT4gdXBkYXRlIGRpdlxuICAgICAgICB8IF8gLT4gKCkpO1xuICAgIEx3ZC5xdWlja19zYW1wbGUgcm9vdCB8PiBpZ25vcmVcbiAgaW5cbiAgbGV0IG1ha2Vfc3BhY2VyIG4gPVxuICAgIGxldCBhdCA9IFsgQXQuY2xhc3MnIChKc3RyLnYgXCJyb3dfc3BhY2VyXCIpIF0gaW5cbiAgICBsZXQgc3R5bGUgPSBBdC5zdHlsZSAoSnN0ci52IEBAIGhlaWdodF9uIG4pIGluXG4gICAgRWwuZGl2IH5hdDooc3R5bGUgOjogYXQpIFtdXG4gIGluXG4gIGxldCByZW5kZXIgX3JvdyB7IGNvbnRlbnQ7IGluZGV4OyByZW5kZXIgfSA9XG4gICAgbGV0IGF0ID0gQXR0cnMuYWRkIEF0Lk5hbWUuY2xhc3MnIChgUCBcInJvd1wiKSBbXSBpblxuICAgIGxldCBzdHlsZSA9IGBQIChBdC5zdHlsZSAoSnN0ci52IGhlaWdodCkpIGluXG4gICAgbWF0Y2ggY29udGVudCB3aXRoXG4gICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgbGV0IHJlbmRlcmVkX3JvdyA9XG4gICAgICAgICAgTHdkLm1hcCByZW5kZXIgfmY6KGZ1biByZW5kZXIgLT5cbiAgICAgICAgICAgICAgTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgICAgICAgKExpc3QubWFwIChyZW5kZXIgaW5kZXggZGF0YSkgfmY6KGZ1biBlbHQgLT4gRWx3ZC5kaXYgWyBlbHQgXSkpKVxuICAgICAgICBpblxuICAgICAgICAoIDAsXG4gICAgICAgICAgTHdkX3NlcS5lbGVtZW50XG4gICAgICAgICAgQEAgRWx3ZC5kaXYgfmF0OihzdHlsZSA6OiBhdCkgWyBgUyAoTHdkX3NlcS5saWZ0IHJlbmRlcmVkX3JvdykgXSxcbiAgICAgICAgICAwIClcbiAgICB8IE5vbmUgLT4gKDEsIEx3ZF9zZXEuZW1wdHksIDApXG4gIGluXG4gIGxldCB0YWJsZV9ib2R5ID1cbiAgICBsZXQgcm93cyA9XG4gICAgICBMd2RfdGFibGUubWFwX3JlZHVjZSByZW5kZXJcbiAgICAgICAgKCAoMCwgTHdkX3NlcS5lbXB0eSwgMCksXG4gICAgICAgICAgZnVuIChuLCBzLCBtKSAocCwgcycsIHEpIC0+XG4gICAgICAgICAgICBtYXRjaCAoTHdkX3NlcS52aWV3IHMsIEx3ZF9zZXEudmlldyBzJykgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSwgRW1wdHkgLT5cbiAgICAgICAgICAgICAgICAoKiBTaW5jZSBzIGlzIGVtcHR5IGl0IGRvZXMgbm90IG1hdHRlciBvbiB3aGljaFxuICAgICAgICAgICAgICAgICAgIFwic2lkZVwiIG9mIGl0IHRoZSBzcGFjZXMgYXJlIGFjY3VtdWxhdGVkLiAqKVxuICAgICAgICAgICAgICAgIChuICsgbSArIHAgKyBxLCBzLCAwKVxuICAgICAgICAgICAgfCBFbXB0eSwgXyAtPiAobiArIG0gKyBwLCBzJywgcSlcbiAgICAgICAgICAgIHwgXywgRW1wdHkgLT4gKG4sIHMsIG0gKyBwICsgcSlcbiAgICAgICAgICAgIHwgXywgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID1cbiAgICAgICAgICAgICAgICAgIGlmIG0gKyBwID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciAobSArIHApIGluXG4gICAgICAgICAgICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCBzIEBAIGNvbmNhdCAoZWxlbWVudCBzcGFjZXIpIHMnKVxuICAgICAgICAgICAgICAgICAgZWxzZSBMd2Rfc2VxLmNvbmNhdCBzIHMnXG4gICAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgICAobiwgcywgcSkgKVxuICAgICAgICB0YWJsZVxuICAgIGluXG4gICAgTHdkLm1hcCByb3dzIH5mOihmdW4gKG4sIHMsIG0pIC0+XG4gICAgICAgIGxldCByZXN1bHQgPVxuICAgICAgICAgIGlmIG4gPiAwIHRoZW5cbiAgICAgICAgICAgIGxldCBmaXJzdF9zcGFjZXIgPSBMd2QucHVyZSBAQCBtYWtlX3NwYWNlciBuIGluXG4gICAgICAgICAgICBMd2Rfc2VxLihjb25jYXQgKGVsZW1lbnQgZmlyc3Rfc3BhY2VyKSBzKVxuICAgICAgICAgIGVsc2Ugc1xuICAgICAgICBpblxuICAgICAgICBpZiBtID4gMCB0aGVuXG4gICAgICAgICAgbGV0IGxhc3Rfc3BhY2VyID0gTHdkLnB1cmUgQEAgbWFrZV9zcGFjZXIgbSBpblxuICAgICAgICAgIEx3ZF9zZXEuKGNvbmNhdCByZXN1bHQgKGVsZW1lbnQgbGFzdF9zcGFjZXIpKVxuICAgICAgICBlbHNlIHJlc3VsdClcbiAgaW5cbiAgbGV0IHRhYmxlX2hlYWRlciA9IFNjaGVtYS5oZWFkZXIgdWlfdGFibGUgaW5cbiAgbGV0IG9ic2VydmVyID1cbiAgICAoKiBXZSBvYnNlcnZlIHRoZSBzaXplIG9mIHRoZSB0YWJsZSB0byByZS1wb3B1bGF0ZSBpZiBuZWNlc3NhcnkgKilcbiAgICBSZXNpemVfb2JzZXJ2ZXIuY3JlYXRlIH5jYWxsYmFjazooZnVuIGVudHJpZXMgXyAtPlxuICAgICAgICBsZXQgZW50cnkgPSBMaXN0LmhkIGVudHJpZXMgaW5cbiAgICAgICAgbGV0IGRpdiA9IFJlc2l6ZV9vYnNlcnZlci5FbnRyeS50YXJnZXQgZW50cnkgaW5cbiAgICAgICAgbGV0IHJlY3QgPSBSZXNpemVfb2JzZXJ2ZXIuRW50cnkuY29udGVudF9yZWN0IGVudHJ5IGluXG4gICAgICAgIGxldCBoZWlnaHQgPSBEb21fcmVjdF9yZWFkX29ubHkuaGVpZ2h0IHJlY3QgaW5cbiAgICAgICAgbWF0Y2ggTHdkLnBlZWsgdGFibGVfaGVpZ2h0IHdpdGhcbiAgICAgICAgfCBTb21lIChoLCBfKSB3aGVuIGggPD4gaGVpZ2h0IC0+XG4gICAgICAgICAgICBMd2Quc2V0IHRhYmxlX2hlaWdodCAoU29tZSAoaGVpZ2h0LCBkaXYpKVxuICAgICAgICB8IE5vbmUgLT4gTHdkLnNldCB0YWJsZV9oZWlnaHQgKFNvbWUgKGhlaWdodCwgZGl2KSlcbiAgICAgICAgfCBfIC0+ICgpKVxuICBpblxuICBsZXQgYXQgPSBBdHRycy50b19hdCBAQCBBdHRycy5jbGFzc2VzIFsgXCJsd2R1aS1sYXp5LXRhYmxlXCIgXSBpblxuICBsZXQgZ3JpZF9zdHlsZSA9IFNjaGVtYS5zdHlsZSB1aV90YWJsZSBpblxuICBsZXQgcyA9IEF0LnN0eWxlIChKc3RyLnYgQEAgZ3JpZF9zdHlsZSkgaW5cbiAgbGV0IGF0ID0gYFAgcyA6OiBhdCBpblxuICBsZXQgdGFibGUgPVxuICAgIEVsd2QuZGl2XG4gICAgICB+ZXY6WyBgUiBzY3JvbGxfaGFuZGxlciBdXG4gICAgICB+YXRcbiAgICAgIFsgYFIgdGFibGVfaGVhZGVyOyBgUyAoTHdkX3NlcS5saWZ0IHRhYmxlX2JvZHkpIF1cbiAgICB8PiBMd2QubWFwIH5mOih0ZWUgKFJlc2l6ZV9vYnNlcnZlci5vYnNlcnZlIG9ic2VydmVyKSlcbiAgaW5cbiAgbGV0IGF0ID0gQXR0cnMuTy4odiAoYFAgKEMgXCJsd2R1aS1sYXp5LXRhYmxlLXdyYXBwZXJcIikpKSBpblxuICBtYXRjaCBzY3JvbGxfdGFyZ2V0IHdpdGhcbiAgfCBTb21lIHNjcm9sbF90YXJnZXQgLT5cbiAgICAgIGxldCBzY3JvbGxfdGFyZ2V0ID1cbiAgICAgICAgTHdkLm1hcDIgdGFibGUgc2Nyb2xsX3RhcmdldCB+ZjooZnVuIHBhcmVudCBpIC0+XG4gICAgICAgICAgICBsZXQgcm93X2hlaWdodCA9XG4gICAgICAgICAgICAgIEludC5vZl9mbG9hdCAoVXRpbHMuVW5pdC50b19weCB+cGFyZW50IHVpX3RhYmxlLnJvd19oZWlnaHQpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgU29tZSAoQ29udHJvbGxlZF9zY3JvbGwuUG9zIChpICogcm93X2hlaWdodCkpKVxuICAgICAgaW5cbiAgICAgIENvbnRyb2xsZWRfc2Nyb2xsLm1ha2UgfmF0IH5zY3JvbGxfdGFyZ2V0IHRhYmxlXG4gIHwgTm9uZSAtPiBFbHdkLmRpdiB+YXQgWyBgUiB0YWJsZSBdXG5cbigqKiAjIyMjIyMjKiojKioqKioqIyUlIz09PSsrKyojIyMlIyMjIyMjIyMjIyMqKyMjPSMjIysrKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyojIyMjKioqKiUlIyM9PT09PT09PT09PSsjPT09LT09PT09PT0qIz0jIyMrKysrKysrKysrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMqIyMjIyMqKiojJSMjPT09PT09LS0tPT0rIz09LS0tPT09PT09KiM9IyMjKysrKysrKysrKysrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT0tLS0tPT0tPSM9LS09PT09PT09PSojPSojIyUjKysrKyslJSUrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjJSM9PT09LT09PT0tLT0jPT09PT09PT09PT0qIz0qIyMlIysrPSsjKiolJSsrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMqPS0tLS0tLS0tLS09Iz09PT09PT09PT09KyM9KyMjKyUjJSorJSslJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjIyMjIyMrPS0tLS0tLS0tPT0tLS0tLSM9PT09LT09LS0tLSsjPSsjIyorJSMlJSsjIyUlKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIys9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09LT0rIz0rIyMjKysrIyolKyMrKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjIz0tLS0tLS0tLS09IyMjIz0jPS0tIz0rKz09PT0tLT09PSM9KyMjIyorKyslJSsrJSUrKysrKysrKysrKysrKytcbiMjIyMjIyMjIyMjIyMjKj09PT09PS0tPT0qKiMjIyMjIys9PT09PSs9KysrKysrKiMjPSsjIyMqKysrKysrKysrKysrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz0tLS0tLT09KyorIyMjKiMjIyMjIz0jPT0tLS0tPT09PT0rIz0rIyMjKioqKisrKysrKysrSVMrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyM9PS09LT0qIys9IyslKyM9PT0jPT09Iz09LS09PT09PT09PSM9KyMjIyoqKisrKysrKysrKysrK1RISVMrKysrKytcbiMjIyMjIyMjIyMjIyMjPS0jKiMrKiMjPSMjIyMqKyM9Kys9PSM9PT09PT09PT09PSsjPSsjIyMqKioqKioqKysrQSsrKysrKysrKysrKysrXG4jIyMjIyMjIyMjIyMjIz09IyMjPSMjIyMjIyMjIyMjIysjKisjPT09PT09PT09PT09IysrIyMjKioqKioqKioqKysrKysrKysrKysrKysrK1xuIyMjIyMjIyMjIyMjIyMjPSorIyojIyMjIyMjIyMjIyMjIyM9Iz09PT09PT09PT09PSMrKyMjIyoqKioqKioqKioqKk1PTk9JRCs/KysrKytcbiMjIyMjIyMjIyMjIyMjIyM9PSMjIyMjIyMjIyM9PT09IyMqPSM9PT09PT09IyoqPT0jKysjIyMqKioqKioqKioqKioqKioqKisrKysrKysrXG4jIyMjIyMjIyMjIyMjIyMjIz09KyMjIyMjIyMjIyMjIyMjPT0jPT09PT0jIyM9PT09IysrIyMjKioqKioqKioqKioqKioqKioqKioqKisrK1xuIyMjIyMjIyMjIyMjIyMjIyMjPT0jIyMrIyMjIyMjIyMjKyMjIyorPT0jIyM9PT09PSMrKyMjKysrKioqKioqKioqKioqKioqKioqKioqKitcbiMjIyMjIyMjIyMjIyMjKyUlJSUjIyMjIyMjIysjIyMjKj09KyM9PSsjIyMjIyMjIyMjIyMjIyorKyoqKioqKioqKioqKioqKioqKioqKioqXG4jIyMjIyMjIyMjIyMjIysrKysrPSslIyUjKiMjIyojJSUlJSsjPSsjIyMjIyMjIyMjKiMjIysjPSMjKiMqKioqKioqKioqKioqKioqKioqKlxuIyMjIyMjIyMjIyMjIyMqIz09Kz09PT0jIz09PSMjIyUlJSUlJSUjIyMjIyMjIyMjIyMjPSMrIyMjIyMjKioqKisrKj09KyoqKioqKioqKipcbiMjIyMjKz0rIyMjIyMjIyMjIyM9Kz09Kz09PT0jIyMqKyMlJSUlIyMjIyMjIyMjIyMqKysjIyMjIyMjIz09Kis9PT09PT0rKyoqKioqKioqXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyo9PT09PT09IyMjIyMrIyUlKiMjIyMjIyMjKj09IysrIyMjIyMjKj09PT09PT09PT09PT09PT0qKioqKlxuIyMjIyMjIyMjIyMjKyMjIyMjKyMjIyM9PT0rPSMjIyMjIyMrIyMjIyMjIyM9PT09PSMrKyMjIys9PT09PT09PT09PT09PT09PT09KyoqKilcbiIsIm1vZHVsZSB0eXBlIENvbmZpZyA9IHNpZ1xuICB0eXBlIGxhbmdcblxuICAoKiB2YWwgZGVmYXVsdCA6IGxhbmcgKilcbiAgdmFsIGFjdGl2ZSA6IGxhbmcgTHdkLnZhclxuICB2YWwgZ2V0IDogbGFuZyAtPiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubGV0IG1ha2UgKHR5cGUgYSkgKG1vZHVsZSBDIDogQ29uZmlnIHdpdGggdHlwZSBsYW5nID0gYSkgPVxuICBsZXQgZ2V0IHN0cmluZyA9XG4gICAgTHdkLm1hcCAoTHdkLmdldCBDLmFjdGl2ZSkgfmY6KGZ1biBsYW5nIC0+IEpzdHIudiBAQCBDLmdldCBsYW5nIHN0cmluZylcbiAgaW5cbiAgbGV0IHNldCAobGFuZyA6IGEpID0gTHdkLnNldCBDLmFjdGl2ZSBsYW5nIGluXG4gIChzZXQsIGdldClcbiIsIm9wZW4hIFN0ZFxubW9kdWxlIEI2NCA9IEJhc2U2NFxub3BlbiEgQnJyXG5tb2R1bGUgU3RvcmFnZSA9IEJycl9pby5TdG9yYWdlXG5cbmxldCBrZXlzID0gSGFzaHRibC5jcmVhdGUgNjRcblxubGV0IGNoZWNrX2tleSBrZXkgPVxuICBpZiBIYXNodGJsLm1lbSBrZXlzIGtleSB0aGVuXG4gICAgZmFpbHdpdGggQEAgUHJpbnRmLnNwcmludGYgXCJNdWx0aXBsZSBwZXJzaXRlbnQgdmFyIGFyZSB1c2luZyB0aGUga2V5ICVzXCIga2V5XG4gIGVsc2UgSGFzaHRibC5hZGQga2V5cyBrZXkgKClcblxubGV0IGxvY2FsX3N0b3JhZ2UgPSBTdG9yYWdlLmxvY2FsIEcud2luZG93XG5cbmxldCBzdG9yZSB+a2V5IHZhbHVlID1cbiAgRW5jb2RpbmdzLnRvX2pzdHIgdmFsdWUgfD4gU3RvcmFnZS5zZXRfaXRlbSBsb2NhbF9zdG9yYWdlIGtleVxuXG5sZXQgZmV0Y2ggfmtleSA9XG4gIGxldCBvcGVuIFJlc3VsdC5JbmZpeCBpblxuICBsZXQqIGVuY29kZWRfdmFsdWUgPVxuICAgIG1hdGNoIFN0b3JhZ2UuZ2V0X2l0ZW0gbG9jYWxfc3RvcmFnZSBrZXkgd2l0aFxuICAgIHwgTm9uZSAtPiBFcnJvciBgTm90X2ZvdW5kXG4gICAgfCBTb21lIHYgLT4gT2sgdlxuICBpblxuICBFbmNvZGluZ3Mub2ZfanN0ciBlbmNvZGVkX3ZhbHVlXG5cbmxldCBpbml0aWFsX3ZhbHVlIH5rZXkgZiA9XG4gIG1hdGNoIGZldGNoIH5rZXkgd2l0aFxuICB8IEVycm9yIGBOb3RfZm91bmQgLT4gZiAoKVxuICB8IEVycm9yIChgTXNnIG1zZykgLT5cbiAgICAgIENvbnNvbGUud2FybiBbIG1zZyBdO1xuICAgICAgZiAoKVxuICB8IE9rIHYgLT4gdlxuXG5sZXQgaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmID1cbiAgbWF0Y2ggZmV0Y2ggfmtleSB3aXRoXG4gIHwgRXJyb3IgYE5vdF9mb3VuZCAtPiBmICgpXG4gIHwgRXJyb3IgKGBNc2cgbXNnKSAtPlxuICAgICAgQ29uc29sZS53YXJuIFsgbXNnIF07XG4gICAgICBmICgpXG4gIHwgT2sgdiAtPiBGdXQub2sgQEAgdlxuXG5sZXQgbWFrZV9wZXJzaXN0ZW50X3ZhciB+a2V5IHZhbHVlID1cbiAgaWdub3JlIEBAIHN0b3JlIH5rZXkgdmFsdWU7XG4gIGxldCB2YXIgPSBMd2QudmFyIHZhbHVlIGluXG4gIGxldCByb290ID0gTHdkLm9ic2VydmUgKEx3ZC5nZXQgdmFyKSBpblxuICBMd2Quc2V0X29uX2ludmFsaWRhdGUgcm9vdCAoZnVuIF8gLT5cbiAgICAgIGxldCBuZXdfdmFsdWUgPSBMd2QucXVpY2tfc2FtcGxlIHJvb3QgaW5cbiAgICAgIGlnbm9yZSBAQCBzdG9yZSB+a2V5IG5ld192YWx1ZSk7XG4gIGxldCBfID0gTHdkLnF1aWNrX3NhbXBsZSByb290IGluXG4gIHZhclxuXG5sZXQgdmFyX2YgfmtleSBmID1cbiAgbGV0ICgpID0gY2hlY2tfa2V5IGtleSBpblxuICBsZXQga2V5ID0gSnN0ci52IGtleSBpblxuICBsZXQgdmFsdWUgPSBpbml0aWFsX3ZhbHVlIH5rZXkgZiBpblxuICBtYWtlX3BlcnNpc3RlbnRfdmFyIH5rZXkgdmFsdWVcblxubGV0IHZhciB+a2V5IGRlZmF1bHQgPSB2YXJfZiB+a2V5IChmdW4gKCkgLT4gZGVmYXVsdClcblxubGV0IHZhcl9mdXQgKHR5cGUgYSBiKSB+a2V5IChmIDogdW5pdCAtPiAoYSwgYikgRnV0LnJlc3VsdCkgOlxuICAgIChhIEx3ZC52YXIsIGIpIEZ1dC5yZXN1bHQgPVxuICBsZXQgKCkgPSBjaGVja19rZXkga2V5IGluXG4gIGxldCBrZXkgPSBKc3RyLnYga2V5IGluXG4gIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gIGxldCsgKHZhbHVlIDogYSkgPSAoaW5pdGlhbF92YWx1ZV9mdXQgfmtleSBmIDogKGEsIGIpIEZ1dC5yZXN1bHQpIGluXG4gIG1ha2VfcGVyc2lzdGVudF92YXIgfmtleSB2YWx1ZVxuIiwib3BlbiBTdGRcbm9wZW4gQnJyZXIuQnJyXG5vcGVuIEJycl9sd2Rcbm1vZHVsZSBGaWVsZCA9IEZpZWxkXG5cbnR5cGUgKCd0LCAnYSkgZm9ybV9zZXR0ZXIgPSAndCAtPiAnYSBGaWVsZC52YWxpZGF0aW9uIC0+ICd0XG5cbnR5cGUgJ3JlcyBmb3JtX2ZpZWxkID1cbiAgfCBGIDogJ2EgRmllbGQudCAqICgnZm9ybSwgJ2EpIGZvcm1fc2V0dGVyIC0+ICdmb3JtIGZvcm1fZmllbGRcblxubW9kdWxlIHR5cGUgRm9ybSA9IHNpZ1xuICB0eXBlIHRcblxuICB2YWwgZGVmYXVsdCA6IHRcbiAgdmFsIGZpZWxkcyA6IHQgZm9ybV9maWVsZCBMd2QudCBMd2Rfc2VxLnQgTHdkLnRcbmVuZFxuXG5sZXQgZmllbGQgZmllbGQgc2V0dGVyID0gTHdkLm1hcCBmaWVsZCB+ZjooZnVuIGZpZWxkIC0+IEYgKGZpZWxkLCBzZXR0ZXIpKVxuXG5sZXQgY3JlYXRlID9kID9hdCA/ZXYgKHR5cGUgdCkgKG1vZHVsZSBGb3JtIDogRm9ybSB3aXRoIHR5cGUgdCA9IHQpIG9uX3N1Ym1pdCA6XG4gICAgRWx3ZC50IEx3ZC50ID1cbiAgbGV0IGZpZWxkcyA9XG4gICAgTHdkX3NlcS5saWZ0IEZvcm0uZmllbGRzXG4gICAgfD4gTHdkX3NlcS5mb2xkX21vbm9pZFxuICAgICAgICAgKGZ1biAoRiAoZmllbGQsIG1hcHBlcikpIC0+XG4gICAgICAgICAgICggTHdkX3NlcS5lbGVtZW50IGZpZWxkLmVsdCxcbiAgICAgICAgICAgICBsZXQgdmFsdWUgKCkgPVxuICAgICAgICAgICAgICAgbWF0Y2ggTHdkLnBlZWsgZmllbGQudmFsdWUgd2l0aFxuICAgICAgICAgICAgICAgfCBOb25lIC0+IEZpZWxkLkVtcHR5XG4gICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBmaWVsZC52YWxpZGF0ZSB2XG4gICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICBmdW4gdCAtPiBtYXBwZXIgdCBAQCB2YWx1ZSAoKSApKVxuICAgICAgICAgKCAoTHdkX3NlcS5lbXB0eSwgRnVuLmlkKSxcbiAgICAgICAgICAgZnVuIChlbHRzLCBmKSAoZWx0cycsIGYnKSAtPlxuICAgICAgICAgICAgIChMd2Rfc2VxLmNvbmNhdCBlbHRzIGVsdHMnLCBmdW4gdCAtPiBmJyAoZiB0KSkgKVxuICBpblxuICBsZXQgaGFuZGxlciA9XG4gICAgTHdkLm1hcCBmaWVsZHMgfmY6KGZ1biAoXywgdmFsdWUpIC0+XG4gICAgICAgIGxldCBvbl9zdWJtaXQgZSA9XG4gICAgICAgICAgb25fc3VibWl0IEBAIHZhbHVlIEZvcm0uZGVmYXVsdDtcbiAgICAgICAgICBFdi5wcmV2ZW50X2RlZmF1bHQgZVxuICAgICAgICBpblxuICAgICAgICBFbHdkLmhhbmRsZXIgRXYuc3VibWl0IG9uX3N1Ym1pdClcbiAgaW5cbiAgbGV0IG9uX3N1Ym1pdCA9IGBSIGhhbmRsZXIgaW5cbiAgbGV0IGVsdHMgPSBMd2QubWFwIGZpZWxkcyB+ZjooZnVuIChlbHRzLCBfKSAtPiBlbHRzKSBpblxuICBsZXQgZXYgPSBPcHRpb24ubWFwX29yIH5kZWZhdWx0Olsgb25fc3VibWl0IF0gKExpc3QuY29ucyBvbl9zdWJtaXQpIGV2IGluXG4gIEVsd2QuZm9ybSA/ZCA/YXQgfmV2IFsgYFMgKEx3ZF9zZXEubGlmdCBlbHRzKSBdXG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZVxuICBlbHNlIFByaW50Zi5zcHJpbnRmIFwiJXNcIiBiYXNlX25hbWVcblxubGV0IG1ha2UgPyhhdCA9IFtdKSA/KGV2ID0gW10pIChkZXNjIDogc3RyaW5nIG9wdGlvbiBGaWVsZC5kZXNjKSA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbWF0Y2ggTHdkLnBlZWsgdmFyIHdpdGhcbiAgICAgIHwgU29tZSB2IC0+IGBQIChBdC52YWx1ZSBAQCBKc3RyLnYgdikgOjogYXRcbiAgICAgIHwgTm9uZSAtPiBhdFxuICAgIGluXG4gICAgbGV0IG9uX2NoYW5nZSA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYua2V5dXAgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChTb21lIChKdi50b19zdHJpbmcgdmFsdWUpKSlcbiAgICBpblxuICAgIGxldCBldiA9IGBQIG9uX2NoYW5nZSA6OiBldiBpblxuICAgIEVsd2QuaW5wdXQgfmF0IH5ldiAoKVxuICBpblxuICB7IGZpZWxkOyBsYWJlbDsgdmFsdWUgPSBMd2QuZ2V0IHZhciB9XG4iLCJvcGVuISBTdGRcbm9wZW4hIEJycmVyXG5vcGVuISBCcnJcbm9wZW4hIEJycl9sd2RcblxudHlwZSAnYSByZWFjdGl2ZV9maWVsZCA9IHtcbiAgZmllbGQgOiBFbHdkLnQgTHdkLnQ7XG4gIGxhYmVsIDogRWx3ZC50IEx3ZC50O1xuICB2YWx1ZSA6ICdhIEx3ZC50O1xufVxuXG5sZXQgbmFtZSB+aWQgYmFzZV9uYW1lID1cbiAgaWYgaWQgdGhlbiBQcmludGYuc3ByaW50ZiBcIiVzLS1pZFwiIGJhc2VfbmFtZSBlbHNlIGJhc2VfbmFtZVxuXG5sZXQgbWFrZSA/KGF0ID0gW10pID8oZXYgPSBbXSkgKGRlc2MgOiBzdHJpbmcgRmllbGQuZGVzYykgb3B0aW9ucyA9XG4gIGxldCBpZCA9IG5hbWUgfmlkOnRydWUgZGVzYy5uYW1lIGluXG4gIGxldCBuYW1lID0gbmFtZSB+aWQ6ZmFsc2UgZGVzYy5uYW1lIGluXG4gIGxldCB2YXIgPSBQZXJzaXN0ZW50LnZhciB+a2V5OmlkIGRlc2MuZGVmYXVsdCBpblxuICBsZXQgbGFiZWwgPSBFbHdkLmxhYmVsIH5hdDpbIGBQIChBdC5mb3InIChKc3RyLnYgaWQpKSBdIGRlc2MubGFiZWwgaW5cbiAgbGV0IGZpZWxkID1cbiAgICBsZXQgb3BlbiBMd2RfaW5maXggaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgYXRcbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJ0ZXh0XCIpXG4gICAgaW5cbiAgICBsZXQgb25fY2hhbmdlID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5jaGFuZ2UgKGZ1biBldiAtPlxuICAgICAgICAgIGxldCB0ID0gRXYudGFyZ2V0IGV2IHw+IEV2LnRhcmdldF90b19qdiBpblxuICAgICAgICAgIGxldCB2YWx1ZSA9IEp2LmdldCB0IFwidmFsdWVcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChKdi50b19zdHJpbmcgdmFsdWUpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gYFAgb25fY2hhbmdlIDo6IGV2IGluXG4gICAgbGV0IG9wdGlvbnMgPVxuICAgICAgTHdkX3NlcS5tYXBcbiAgICAgICAgKGZ1biAodmFsdWUsIG5hbWUpIC0+XG4gICAgICAgICAgbGV0IG9wZW4gQXR0cnMuTyBpblxuICAgICAgICAgIGxldCBhdCA9IHYgKGBQIChBIChBdC52YWx1ZSBAQCBKc3RyLnYgdmFsdWUpKSkgaW5cbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPVxuICAgICAgICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW4gc2VsZWN0ZWQgLT5cbiAgICAgICAgICAgICAgICBBIChBdC5pZicgKEVxdWFsLnBvbHkgc2VsZWN0ZWQgdmFsdWUpIEF0LnNlbGVjdGVkKSlcbiAgICAgICAgICBpblxuICAgICAgICAgIGxldCBhdCA9IGBSIHNlbGVjdGVkIEA6OiBhdCBpblxuICAgICAgICAgIEVsd2Qub3B0aW9uIH5hdCBbIGBQIChFbC50eHQnIG5hbWUpIF0pXG4gICAgICAgIG9wdGlvbnNcbiAgICBpblxuICAgIEVsd2Quc2VsZWN0IH5hdCB+ZXYgWyBgUyAoTHdkX3NlcS5saWZ0IG9wdGlvbnMpIF1cbiAgaW5cbiAgeyBmaWVsZDsgbGFiZWw7IHZhbHVlID0gTHdkLmdldCB2YXIgfVxuIiwib3BlbiEgU3RkXG5vcGVuISBCcnJlclxub3BlbiEgQnJyXG5vcGVuISBCcnJfbHdkXG5cbnR5cGUgY2hlY2tlZCA9IGJvb2xcbnR5cGUgbGFiZWwgPSBFbHdkLnQgRWx3ZC5jb2xcbnR5cGUgJ3ZhbHVlIGRlc2MgPSBDaGVjayBvZiAndmFsdWUgKiBsYWJlbCAqIGNoZWNrZWRcbigqIFRPRE8gfCBHcm91cCBvZiBsYWJlbCAqICd2YWx1ZSBkZXNjIGxpc3QgKilcblxudHlwZSAndmFsdWUgdCA9IHsgbmFtZSA6IHN0cmluZzsgZGVzYyA6ICd2YWx1ZSBkZXNjIEx3ZF9zZXEudCBMd2QudCB9XG50eXBlICdhIHJlYWN0aXZlX2ZpZWxkID0geyBmaWVsZCA6IEVsd2QudCBMd2QudDsgdmFsdWUgOiAnYSBMd2QudCB9XG5cbmxldCBuYW1lIH5nIH5uIH5pZCBiYXNlX25hbWUgPVxuICBpZiBpZCB0aGVuIFByaW50Zi5zcHJpbnRmIFwiJXMtJWktJWktaWRcIiBiYXNlX25hbWUgZyBuXG4gIGVsc2UgUHJpbnRmLnNwcmludGYgXCIlcy0laS0laVwiIGJhc2VfbmFtZSBnIG5cblxubGV0IG1ha2UgdCA9XG4gIGxldCBtYWtlX2NoZWNrIH5nIH5uIHZhbHVlIGxhYmVsIGNoZWNrZWQgPVxuICAgIGxldCBpZCA9IG5hbWUgfmcgfm4gfmlkOnRydWUgdC5uYW1lIGluXG4gICAgbGV0IG5hbWUgPSBuYW1lIH5nIH5uIH5pZDpmYWxzZSB0Lm5hbWUgaW5cbiAgICBsZXQgcmVzdWx0IGNoZWNrZWQgPSBpZiBjaGVja2VkIHRoZW4gU29tZSB2YWx1ZSBlbHNlIE5vbmUgaW5cbiAgICBsZXQgdmFyID0gUGVyc2lzdGVudC52YXIgfmtleTppZCAocmVzdWx0IGNoZWNrZWQpIGluXG4gICAgbGV0IGxibCA9IEVsd2QubGFiZWwgfmF0OlsgYFAgKEF0LmZvcicgKEpzdHIudiBpZCkpIF0gbGFiZWwgaW5cbiAgICBsZXQgYXQgPVxuICAgICAgbGV0IG9wZW4gQXR0cnMgaW5cbiAgICAgIGFkZCBBdC5OYW1lLmlkIChgUCBpZCkgW11cbiAgICAgIHw+IGFkZCBBdC5OYW1lLm5hbWUgKGBQIG5hbWUpXG4gICAgICB8PiBhZGQgQXQuTmFtZS50eXBlJyAoYFAgXCJjaGVja2JveFwiKVxuICAgIGluXG4gICAgbGV0IGNoZWNrZWQgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCB2YXIpIH5mOihmdW5jdGlvblxuICAgICAgICB8IFNvbWUgXyAtPiBBdC5jaGVja2VkXG4gICAgICAgIHwgTm9uZSAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IGF0ID0gYFIgY2hlY2tlZCA6OiBhdCBpblxuICAgIGxldCBvbl9jaGFuZ2UgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmNoYW5nZSAoZnVuIGV2IC0+XG4gICAgICAgICAgbGV0IHQgPSBFdi50YXJnZXQgZXYgfD4gRXYudGFyZ2V0X3RvX2p2IGluXG4gICAgICAgICAgbGV0IGNoZWNrZWQgPSBKdi5nZXQgdCBcImNoZWNrZWRcIiBpblxuICAgICAgICAgIEx3ZC5zZXQgdmFyIChyZXN1bHQgKEp2LnRvX2Jvb2wgY2hlY2tlZCkpKVxuICAgIGluXG4gICAgbGV0IGV2ID0gWyBgUCBvbl9jaGFuZ2UgXSBpblxuICAgIChFbHdkLihkaXYgWyBgUiAoaW5wdXQgfmF0IH5ldiAoKSk7IGBSIGxibCBdKSwgTHdkLmdldCB2YXIpXG4gIGluXG4gICgqIDxmaWVsZHNldD48bGVnZW5kPiAqKVxuICAoKiA8ZmllbGRzZXQ+PGxlZ2VuZD4gKilcbiAgbGV0IG1ha2VfYWxsIH5nIGRlc2MgPVxuICAgIGxldCBuID0gcmVmIDAgaW5cbiAgICBMd2Rfc2VxLm1hcFxuICAgICAgKGZ1bmN0aW9uXG4gICAgICAgIHwgQ2hlY2sgKHYsIGwsIGMpIC0+XG4gICAgICAgICAgICBsZXQgZWx0LCB2YWx1ZSA9IG1ha2VfY2hlY2sgfmcgfm46IW4gdiBsIGMgaW5cbiAgICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICAgIChlbHQsIHZhbHVlKSlcbiAgICAgIGRlc2NcbiAgaW5cbiAgbGV0IGFsbCA9IG1ha2VfYWxsIH5nOjAgdC5kZXNjIGluXG4gIGxldCBlbHRzID0gTHdkX3NlcS5tYXAgKGZ1biAoZWx0LCBfKSAtPiBlbHQpIGFsbCBpblxuICBsZXQgdmFsdWUgPVxuICAgIEx3ZF9zZXEuZm9sZF9tb25vaWQgKGZ1biAoXywgdikgLT4gTHdkX3NlcS5lbGVtZW50IHYpIEx3ZF9zZXEubW9ub2lkIGFsbFxuICAgIHw+IEx3ZF9zZXEubGlmdCB8PiBMd2Rfc2VxLmZpbHRlcl9tYXAgRnVuLmlkIHw+IEx3ZC5tYXAgfmY6THdkX3NlcS50b19saXN0XG4gIGluXG4gIHsgZmllbGQgPSBFbHdkLmRpdiBbIGBTIChMd2Rfc2VxLmxpZnQgZWx0cykgXTsgdmFsdWUgfVxuXG4oKiBsZXQgcmVjIG1ha2VfYWxsIH5nIH5uIChhY2NfZWx0LCBhY2NfdmFsdWUpIGRlc2MgPVxuICAgICBtYXRjaCBkZXNjIHdpdGhcbiAgICAgfCBDaGVjayAodiwgbCwgYykgOjogdGwgLT5cbiAgICAgICAgIGxldCBlbHQsIHZhbHVlID0gbWFrZV9jaGVjayB+ZyB+biB2IGwgYyBpblxuICAgICAgICAgbGV0IGFjY19lbHQgPSBMd2Rfc2VxLmNvbmNhdCBhY2NfZWx0IEBAIEx3ZF9zZXEuZWxlbWVudCBlbHQgaW5cbiAgICAgICAgIGxldCBhY2NfdmFsdWUgPVxuICAgICAgICAgICBMd2QubWFwMiBhY2NfdmFsdWUgdmFsdWUgfmY6KGZ1biBhY2MgLT4gZnVuY3Rpb25cbiAgICAgICAgICAgICB8IE5vbmUgLT4gYWNjIHwgU29tZSB2IC0+IHYgOjogYWNjKVxuICAgICAgICAgaW5cbiAgICAgICAgIG1ha2VfYWxsIH5nIH5uOihuICsgMSkgKGFjY19lbHQsIGFjY192YWx1ZSkgdGxcbiAgICAgfCBfIC0+IChMd2QucHVyZSBhY2NfZWx0LCBhY2NfdmFsdWUpXG4gICBpblxuICAgbGV0IGVsdHMsIHZhbHVlID0gbWFrZV9hbGwgfmc6MCB+bjowIChMd2Rfc2VxLmVtcHR5LCBMd2QucHVyZSBbXSkgdC5kZXNjIGluXG4gICB7IGZpZWxkID0gRWx3ZC5kaXYgWyBgUyAoTHdkX3NlcS5saWZ0IGVsdHMpIF07IHZhbHVlIH0gKilcbiIsIm9wZW4hIFN0ZFxub3BlbiBCcnJcbm9wZW4gQnJyX2x3ZFxuXG5sZXQgdiA/ZCA/KGF0ID0gW10pID9ldiB2YWx1ZSA9XG4gIGxldCBhdCA9XG4gICAgQXR0cnMuYWRkIEF0Lk5hbWUudHlwZScgKGBQIFwiYnV0dG9uXCIpIGF0IHw+IEF0dHJzLmFkZCBBdC5OYW1lLnZhbHVlIHZhbHVlXG4gIGluXG4gIEVsd2QuaW5wdXQgP2QgfmF0ID9ldiAoKVxuXG50eXBlICdhIHVwZGF0ZSA9IE5vbmUgfCBOZXh0IHwgU2V0IG9mICdhXG5cbnR5cGUgJ3N0YXRlIGhhbmRsZXJfd2l0aF9zdGF0ZSA9XG4gIHwgSGFuZGxlcl93aXRoX3N0YXRlIDoge1xuICAgICAgb3B0cyA6IEV2Lmxpc3Rlbl9vcHRzIG9wdGlvbjtcbiAgICAgIHR5cGUnIDogJ2EgRXYudHlwZSc7XG4gICAgICBmdW5jIDogJ3N0YXRlIC0+ICdhIEV2LnQgLT4gJ3N0YXRlIHVwZGF0ZTtcbiAgICB9XG4gICAgICAtPiAnc3RhdGUgaGFuZGxlcl93aXRoX3N0YXRlXG5cbmxldCBoYW5kbGVyID9vcHRzIHR5cGUnIGZ1bmMgPSBIYW5kbGVyX3dpdGhfc3RhdGUgeyBvcHRzOyB0eXBlJzsgZnVuYyB9XG5cbm1vZHVsZSB0eXBlIFN0YXRlID0gc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCBkZWZhdWx0IDogdFxuICB2YWwgbmV4dCA6IHQgLT4gdFxuZW5kXG5cbmxldCBhcHBseV9zdGF0ZSBzdGF0ZSBmID0gZiBzdGF0ZVxuXG5sZXQgd2l0aF9zdGF0ZSA/KGJhc2UgPSBBdHRycy5lbXB0eSkgKHR5cGUgdCkgKG1vZHVsZSBTIDogU3RhdGUgd2l0aCB0eXBlIHQgPSB0KVxuICAgID8oc3RhdGUgPSBTLmRlZmF1bHQpID9kID8oYXQgOiAoUy50IC0+IEF0dHJzLnQpIG9wdGlvbilcbiAgICA/KGV2IDogdCBoYW5kbGVyX3dpdGhfc3RhdGUgRWx3ZC5jb2wgb3B0aW9uKVxuICAgIChjb250ZW50IDogUy50IC0+IEVsLnQgRWx3ZC5jb2wpID1cbiAgbGV0IHZfc3RhdGUgPSBMd2QudmFyIHN0YXRlIGluXG4gIGxldCBnZXRfc3RhdGUgKCkgPSBMd2QuZ2V0IHZfc3RhdGUgaW5cbiAgbGV0IHNldF9zdGF0ZSB0ID0gTHdkLnNldCB2X3N0YXRlIHQgaW5cbiAgbGV0IGVsdCA9XG4gICAgbGV0IG9wZW4gTHdkX2luZml4IGluXG4gICAgbGV0JCogc3RhdGUgPSBnZXRfc3RhdGUgKCkgaW5cbiAgICBsZXQgd2l0aF9zdGF0ZSAoSGFuZGxlcl93aXRoX3N0YXRlIHsgb3B0czsgdHlwZSc7IGZ1bmMgfSkgPVxuICAgICAgbGV0IGZ1bmMgZXYgPVxuICAgICAgICBtYXRjaCBmdW5jIHN0YXRlIGV2IHdpdGhcbiAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgIHwgU2V0IHMgLT4gc2V0X3N0YXRlIHNcbiAgICAgICAgfCBOZXh0IC0+IHNldF9zdGF0ZSBAQCBTLm5leHQgc3RhdGVcbiAgICAgIGluXG4gICAgICBFbHdkLmhhbmRsZXIgP29wdHMgdHlwZScgZnVuY1xuICAgIGluXG4gICAgbGV0IGF0ID1cbiAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6YmFzZVxuICAgICAgICAoZnVuIGF0IC0+IEF0dHJzLnVuaW9uIGJhc2UgQEAgYXBwbHlfc3RhdGUgc3RhdGUgYXQpXG4gICAgICAgIGF0XG4gICAgaW5cbiAgICBsZXQgYXQgPSBBdHRycy50b19hdCBhdCBpblxuICAgIGxldCBldiA9XG4gICAgICBPcHRpb24ubWFwXG4gICAgICAgIChMaXN0Lm1hcCB+ZjooZnVuY3Rpb25cbiAgICAgICAgICB8IGBQIGggLT4gYFAgKHdpdGhfc3RhdGUgaClcbiAgICAgICAgICB8IGBSIGggLT4gYFIgKEx3ZC5tYXAgaCB+Zjp3aXRoX3N0YXRlKVxuICAgICAgICAgIHwgYFMgaCAtPiBgUyAoTHdkX3NlcS5tYXAgd2l0aF9zdGF0ZSBoKSkpXG4gICAgICAgIGV2XG4gICAgaW5cbiAgICBFbHdkLmJ1dHRvbiA/ZCB+YXQgP2V2IChjb250ZW50IHN0YXRlKVxuICBpblxuICAoZWx0LCBnZXRfc3RhdGUsIHNldF9zdGF0ZSlcblxudHlwZSB0d29fc3RhdGUgPSBPbiB8IE9mZlxuXG5tb2R1bGUgVHdvX3N0YXRlID0gc3RydWN0XG4gIHR5cGUgdCA9IHR3b19zdGF0ZVxuXG4gIGxldCBkZWZhdWx0ID0gT25cbiAgbGV0IG5leHQgPSBmdW5jdGlvbiBPbiAtPiBPZmYgfCBPZmYgLT4gT25cbmVuZFxuXG5sZXQgdHdvX3N0YXRlID9iYXNlID0gd2l0aF9zdGF0ZSA/YmFzZSAobW9kdWxlIFR3b19zdGF0ZSlcbiIsIm9wZW4gU3RkTGFiZWxzXG5vcGVuIE1vcmVMYWJlbHNcbm9wZW4hIFlvanNvblxuXG50eXBlIHQgPSBZb2pzb24uU2FmZS50XG5cbmxldCB5b2pzb25fb2ZfdW5pdCAoKSA6IHQgPSBgTnVsbFxubGV0IHlvanNvbl9vZl9ib29sIGIgOiB0ID0gYEJvb2wgYlxubGV0IHlvanNvbl9vZl9zdHJpbmcgc3RyIDogdCA9IGBTdHJpbmcgc3RyXG5sZXQgeW9qc29uX29mX2J5dGVzIGJ5dGVzIDogdCA9IGBTdHJpbmcgKEJ5dGVzLnRvX3N0cmluZyBieXRlcylcbmxldCB5b2pzb25fb2ZfY2hhciBjIDogdCA9IGBTdHJpbmcgKFN0cmluZy5tYWtlIDEgYylcbmxldCB5b2pzb25fb2ZfaW50IG4gOiB0ID0gYEludCBuXG5sZXQgeW9qc29uX29mX2Zsb2F0IG4gOiB0ID0gYEZsb2F0IG5cbmxldCB5b2pzb25fb2ZfaW50MzIgKG4gOiBJbnQzMi50KSA6IHQgPSBgSW50bGl0IChJbnQzMi50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfaW50NjQgKG4gOiBJbnQ2NC50KSA6IHQgPSBgSW50bGl0IChJbnQ2NC50b19zdHJpbmcgbilcbmxldCB5b2pzb25fb2ZfbmF0aXZlaW50IG4gOiB0ID0gYEludGxpdCAoTmF0aXZlaW50LnRvX3N0cmluZyBuKVxubGV0IHlvanNvbl9vZl9yZWYgeW9qc29uX29mX19hIHJmID0geW9qc29uX29mX19hICFyZlxubGV0IHlvanNvbl9vZl9sYXp5X3QgeW9qc29uX29mX19hIGx2ID0geW9qc29uX29mX19hIChMYXp5LmZvcmNlIGx2KVxuXG5sZXQgeW9qc29uX29mX29wdGlvbiB5b2pzb25fb2ZfX2EgPSBmdW5jdGlvblxuICB8IFNvbWUgeCAtPiB5b2pzb25fb2ZfX2EgeFxuICB8IE5vbmUgLT4gYE51bGxcbjs7XG5cbmxldCB5b2pzb25fb2ZfcGFpciB5b2pzb25fb2ZfX2EgeW9qc29uX29mX19iIChhLCBiKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiIF1cbjs7XG5cbmxldCB5b2pzb25fb2ZfdHJpcGxlIHlvanNvbl9vZl9fYSB5b2pzb25fb2ZfX2IgeW9qc29uX29mX19jIChhLCBiLCBjKSA9XG4gIGBMaXN0IFsgeW9qc29uX29mX19hIGE7IHlvanNvbl9vZl9fYiBiOyB5b2pzb25fb2ZfX2MgYyBdXG47O1xuXG4oKiBMaXN0LnJldiAoTGlzdC5yZXZfbWFwIC4uLikgaXMgdGFpbCByZWN1cnNpdmUsIHRoZSBPQ2FtbCBzdGFuZGFyZFxuICAgbGlicmFyeSBMaXN0Lm1hcCBpcyBOT1QuICopXG5sZXQgeW9qc29uX29mX2xpc3QgeW9qc29uX29mX19hIGxzdCA9IGBMaXN0IChMaXN0LnJldiAoTGlzdC5yZXZfbWFwIH5mOnlvanNvbl9vZl9fYSBsc3QpKVxuXG5sZXQgeW9qc29uX29mX2FycmF5IHlvanNvbl9vZl9fYSBhciA9XG4gIGxldCBsc3RfcmVmID0gcmVmIFtdIGluXG4gIGZvciBpID0gQXJyYXkubGVuZ3RoIGFyIC0gMSBkb3dudG8gMCBkb1xuICAgIGxzdF9yZWYgOj0geW9qc29uX29mX19hIGFyLihpKSA6OiAhbHN0X3JlZlxuICBkb25lO1xuICBgTGlzdCAhbHN0X3JlZlxuOztcblxubGV0IHlvanNvbl9vZl9oYXNodGJsIHlvanNvbl9vZl9rZXkgeW9qc29uX29mX3ZhbCBodGJsID1cbiAgbGV0IGNvbGwgfmtleTprIH5kYXRhOnYgYWNjID0gYExpc3QgWyB5b2pzb25fb2Zfa2V5IGs7IHlvanNvbl9vZl92YWwgdiBdIDo6IGFjYyBpblxuICBgTGlzdCAoSGFzaHRibC5mb2xkIGh0YmwgfmluaXQ6W10gfmY6Y29sbClcbjs7XG5cbmxldCB5b2pzb25fb2Zfb3BhcXVlIF8gPSBgU3RyaW5nIFwiPG9wYXF1ZT5cIlxubGV0IHlvanNvbl9vZl9mdW4gXyA9IGBTdHJpbmcgXCI8ZnVuPlwiXG5cbmV4Y2VwdGlvbiBPZl95b2pzb25fZXJyb3Igb2YgZXhuICogdFxuXG5sZXQgcmVjb3JkX2NoZWNrX2V4dHJhX2ZpZWxkcyA9IHJlZiB0cnVlXG5sZXQgb2ZfeW9qc29uX2Vycm9yX2V4biBleGMgeW9qc29uID0gcmFpc2UgKE9mX3lvanNvbl9lcnJvciAoZXhjLCB5b2pzb24pKVxubGV0IG9mX3lvanNvbl9lcnJvciB3aGF0IHlvanNvbiA9IHJhaXNlIChPZl95b2pzb25fZXJyb3IgKEZhaWx1cmUgd2hhdCwgeW9qc29uKSlcblxubGV0IHVuaXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYE51bGwgLT4gKClcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInVuaXRfb2ZfeW9qc29uOiBgTnVsbCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBib29sX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBCb29sIHYgLT4gdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiYm9vbF9vZl95b2pzb246IHRydWUvZmFsc2UgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgc3RyaW5nX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IHN0clxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwic3RyaW5nX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGJ5dGVzX29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBTdHJpbmcgc3RyIC0+IEJ5dGVzLm9mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImJ5dGVzX29mX3lvanNvbjogc3RyaW5nIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGNoYXJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYFN0cmluZyBzdHIgLT5cbiAgICBpZiBTdHJpbmcubGVuZ3RoIHN0ciA8PiAxXG4gICAgdGhlbiBvZl95b2pzb25fZXJyb3IgXCJjaGFyX29mX3lvanNvbjogc3RyaW5nIG11c3QgY29udGFpbiBvbmUgY2hhcmFjdGVyIG9ubHlcIiB5b2pzb247XG4gICAgc3RyLlswXVxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiY2hhcl9vZl95b2pzb246IHN0cmluZyBvZiBzaXplIG9uZSBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludCB2IC0+IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludF9vZl95b2pzb246IGludGVnZXIgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgZmxvYXRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEZsb2F0IHYgLT4gdlxuICB8IGBJbnQgaSAtPiBmbG9hdF9vZl9pbnQgaVxuICB8IGBJbnRsaXQgc3RyIC0+IGZsb2F0X29mX3N0cmluZyBzdHJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImZsb2F0X29mX3lvanNvbjogZmxvYXQgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgaW50MzJfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gSW50MzIub2Zfc3RyaW5nIHN0clxuICB8IGBJbnQgdiAtPiBJbnQzMi5vZl9pbnQgdlxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaW50MzJfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGludDY0X29mX3lvanNvbiB5b2pzb24gPVxuICBtYXRjaCB5b2pzb24gd2l0aFxuICB8IGBJbnRsaXQgc3RyIC0+IEludDY0Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gSW50NjQub2ZfaW50IHZcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImludDY0X29mX3lvanNvbjogaW50ZWdlciBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBuYXRpdmVpbnRfb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYEludGxpdCBzdHIgLT4gTmF0aXZlaW50Lm9mX3N0cmluZyBzdHJcbiAgfCBgSW50IHYgLT4gTmF0aXZlaW50Lm9mX2ludCB2XG4gIHwgXyAtPiBvZl95b2pzb25fZXJyb3IgXCJuYXRpdmVpbnRfb2ZfeW9qc29uOiBpbnRlZ2VyIG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IHJlZl9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9IHJlZiAoYV9fb2ZfeW9qc29uIHlvanNvbilcbmxldCBsYXp5X3Rfb2ZfeW9qc29uIGFfX29mX3lvanNvbiB5b2pzb24gPSBMYXp5LmZyb21fdmFsIChhX19vZl95b2pzb24geW9qc29uKVxuXG5sZXQgb3B0aW9uX29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTnVsbCAtPiBOb25lXG4gIHwgZWwgLT4gU29tZSAoYV9fb2ZfeW9qc29uIGVsKVxuOztcblxubGV0IHBhaXJfb2ZfeW9qc29uIGFfX29mX3lvanNvbiBiX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbiBdIC0+XG4gICAgbGV0IGEgPSBhX19vZl95b2pzb24gYV95b2pzb24gaW5cbiAgICBsZXQgYiA9IGJfX29mX3lvanNvbiBiX3lvanNvbiBpblxuICAgIGEsIGJcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInBhaXJfb2ZfeW9qc29uOiBpbnZhbGlkIGZvcm1hdFwiIHlvanNvblxuOztcblxubGV0IHRyaXBsZV9vZl95b2pzb24gYV9fb2ZfeW9qc29uIGJfX29mX3lvanNvbiBjX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbIGFfeW9qc29uOyBiX3lvanNvbjsgY195b2pzb24gXSAtPlxuICAgIGxldCBhID0gYV9fb2ZfeW9qc29uIGFfeW9qc29uIGluXG4gICAgbGV0IGIgPSBiX19vZl95b2pzb24gYl95b2pzb24gaW5cbiAgICBsZXQgYyA9IGNfX29mX3lvanNvbiBjX3lvanNvbiBpblxuICAgIGEsIGIsIGNcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcInRyaXBsZV9vZl95b2pzb246IGludmFsaWQgZm9ybWF0XCIgeW9qc29uXG47O1xuXG5sZXQgbGlzdF9vZl95b2pzb24gYV9fb2ZfeW9qc29uIHlvanNvbiA9XG4gIG1hdGNoIHlvanNvbiB3aXRoXG4gIHwgYExpc3QgbHN0IC0+XG4gICAgbGV0IHJldl9sc3QgPSBMaXN0LnJldl9tYXAgbHN0IH5mOmFfX29mX3lvanNvbiBpblxuICAgIExpc3QucmV2IHJldl9sc3RcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImxpc3Rfb2ZfeW9qc29uOiBsaXN0IG5lZWRlZFwiIHlvanNvblxuOztcblxubGV0IGFycmF5X29mX3lvanNvbiBhX19vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBbXSAtPiBbfHxdXG4gIHwgYExpc3QgKGggOjogdCkgLT5cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggdCArIDEgaW5cbiAgICBsZXQgcmVzID0gQXJyYXkubWFrZSBsZW4gKGFfX29mX3lvanNvbiBoKSBpblxuICAgIGxldCByZWMgbG9vcCBpID0gZnVuY3Rpb25cbiAgICAgIHwgW10gLT4gcmVzXG4gICAgICB8IGggOjogdCAtPlxuICAgICAgICByZXMuKGkpIDwtIGFfX29mX3lvanNvbiBoO1xuICAgICAgICBsb29wIChpICsgMSkgdFxuICAgIGluXG4gICAgbG9vcCAxIHRcbiAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImFycmF5X29mX3lvanNvbjogbGlzdCBuZWVkZWRcIiB5b2pzb25cbjs7XG5cbmxldCBoYXNodGJsX29mX3lvanNvbiBrZXlfb2ZfeW9qc29uIHZhbF9vZl95b2pzb24geW9qc29uID1cbiAgbWF0Y2ggeW9qc29uIHdpdGhcbiAgfCBgTGlzdCBsc3QgLT5cbiAgICBsZXQgaHRibCA9IEhhc2h0YmwuY3JlYXRlIDAgaW5cbiAgICBsZXQgYWN0ID0gZnVuY3Rpb25cbiAgICAgIHwgYExpc3QgWyBrX3lvanNvbjsgdl95b2pzb24gXSAtPlxuICAgICAgICBIYXNodGJsLmFkZCBodGJsIH5rZXk6KGtleV9vZl95b2pzb24ga195b2pzb24pIH5kYXRhOih2YWxfb2ZfeW9qc29uIHZfeW9qc29uKVxuICAgICAgfCBfIC0+IG9mX3lvanNvbl9lcnJvciBcImhhc2h0Ymxfb2ZfeW9qc29uOiB0dXBsZSBsaXN0IG5lZWRlZFwiIHlvanNvblxuICAgIGluXG4gICAgTGlzdC5pdGVyIGxzdCB+ZjphY3Q7XG4gICAgaHRibFxuICB8IF8gLT4gb2ZfeW9qc29uX2Vycm9yIFwiaGFzaHRibF9vZl95b2pzb246IGxpc3QgbmVlZGVkXCIgeW9qc29uXG47O1xuXG5sZXQgb3BhcXVlX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJvcGFxdWVfb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBvcGFxdWUgdmFsdWVzXCIgeW9qc29uXG47O1xuXG5sZXQgZnVuX29mX3lvanNvbiB5b2pzb24gPVxuICBvZl95b2pzb25fZXJyb3IgXCJmdW5fb2ZfeW9qc29uOiBjYW5ub3QgY29udmVydCBmdW5jdGlvbiB2YWx1ZXNcIiB5b2pzb25cbjs7XG5cbm1vZHVsZSBQcmltaXRpdmVzID0gc3RydWN0XG4gIGxldCB5b2pzb25fb2ZfYXJyYXkgPSB5b2pzb25fb2ZfYXJyYXlcbiAgbGV0IGFycmF5X29mX3lvanNvbiA9IGFycmF5X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Jvb2wgPSB5b2pzb25fb2ZfYm9vbFxuICBsZXQgYm9vbF9vZl95b2pzb24gPSBib29sX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2NoYXIgPSB5b2pzb25fb2ZfY2hhclxuICBsZXQgY2hhcl9vZl95b2pzb24gPSBjaGFyX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2Zsb2F0ID0geW9qc29uX29mX2Zsb2F0XG4gIGxldCBmbG9hdF9vZl95b2pzb24gPSBmbG9hdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQgPSB5b2pzb25fb2ZfaW50XG4gIGxldCBpbnRfb2ZfeW9qc29uID0gaW50X29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX2ludDMyID0geW9qc29uX29mX2ludDMyXG4gIGxldCBpbnQzMl9vZl95b2pzb24gPSBpbnQzMl9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9pbnQ2NCA9IHlvanNvbl9vZl9pbnQ2NFxuICBsZXQgaW50NjRfb2ZfeW9qc29uID0gaW50NjRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGlzdCA9IHlvanNvbl9vZl9saXN0XG4gIGxldCBsaXN0X29mX3lvanNvbiA9IGxpc3Rfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbmF0aXZlaW50ID0geW9qc29uX29mX25hdGl2ZWludFxuICBsZXQgbmF0aXZlaW50X29mX3lvanNvbiA9IG5hdGl2ZWludF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9vcHRpb24gPSB5b2pzb25fb2Zfb3B0aW9uXG4gIGxldCBvcHRpb25fb2ZfeW9qc29uID0gb3B0aW9uX29mX3lvanNvblxuICBsZXQgeW9qc29uX29mX3JlZiA9IHlvanNvbl9vZl9yZWZcbiAgbGV0IHJlZl9vZl95b2pzb24gPSByZWZfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2Zfc3RyaW5nID0geW9qc29uX29mX3N0cmluZ1xuICBsZXQgc3RyaW5nX29mX3lvanNvbiA9IHN0cmluZ19vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9ieXRlcyA9IHlvanNvbl9vZl9ieXRlc1xuICBsZXQgYnl0ZXNfb2ZfeW9qc29uID0gYnl0ZXNfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfdW5pdCA9IHlvanNvbl9vZl91bml0XG4gIGxldCB1bml0X29mX3lvanNvbiA9IHVuaXRfb2ZfeW9qc29uXG4gIGxldCB5b2pzb25fb2ZfbGF6eV90ID0geW9qc29uX29mX2xhenlfdFxuICBsZXQgbGF6eV90X29mX3lvanNvbiA9IGxhenlfdF9vZl95b2pzb25cbiAgbGV0IHlvanNvbl9vZl9oYXNodGJsID0geW9qc29uX29mX2hhc2h0YmxcbiAgbGV0IGhhc2h0Ymxfb2ZfeW9qc29uID0gaGFzaHRibF9vZl95b2pzb25cbmVuZFxuIiwibW9kdWxlIFlvanNvbl9jb252X2Vycm9yID0gWW9qc29uX2NvbnZfZXJyb3Jcbm1vZHVsZSBZb2pzb25fY29udiA9IFlvanNvbl9jb252XG5tb2R1bGUgWW9qc29uYWJsZSA9IFlvanNvbmFibGVfaW50ZlxubW9kdWxlIFlvanNvbiA9IFlvanNvblxuXG5tb2R1bGUgT3B0aW9uID0gc3RydWN0XG4gIHR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9XG4gICAgfCBOb25lXG4gICAgfCBTb21lIG9mICdhXG5lbmRcblxuZXh0ZXJuYWwgaWdub3JlIDogXyAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmV4dGVybmFsIHBvbHlfZXF1YWwgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuXG5sZXQgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBmdW4geCAtPiAheFxuIiwibW9kdWxlIEFwaSA9IEplbGx5ZmluX2FwaVxuXG50eXBlIGNyZWRlbnRpYWxzID0geyBiYXNlX3VybCA6IHN0cmluZzsgdXNlcm5hbWUgOiBzdHJpbmc7IHBhc3N3b3JkIDogc3RyaW5nIH1cblxudHlwZSBjb25uZXhpb24gPSB7XG4gIGJhc2VfdXJsIDogc3RyaW5nO1xuICBhdXRoX3Jlc3BvbnNlIDogQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnJlc3BvbnNlO1xufVxuXG5sZXQgZ2V0X3Rva2VuIHQgPSB0LmF1dGhfcmVzcG9uc2UuQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLmFjY2Vzc190b2tlblxuXG5sZXQgY29ubmVjdCBjcmVkZW50aWFscyA9XG4gIGxldCBtb2R1bGUgQXV0aCA9IEFwaS5BdXRoZW50aWNhdGVfYnlfbmFtZSBpblxuICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICBsZXQgeyBiYXNlX3VybDsgdXNlcm5hbWU7IHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscyBpblxuICBsZXQgYXV0aCA9IHsgQXBpLkF1dGhlbnRpY2F0ZV9ieV9uYW1lLnVzZXJuYW1lOyBwdyA9IHBhc3N3b3JkIH0gaW5cbiAgbGV0KyBhdXRoX3Jlc3BvbnNlID0gQXBpLnJlcXVlc3QgfmJhc2VfdXJsIChtb2R1bGUgQXV0aCkgYXV0aCAoKSBpblxuICB7IGJhc2VfdXJsOyBhdXRoX3Jlc3BvbnNlIH1cblxubGV0IHF1ZXJ5IHQgPVxuICBsZXQgdG9rZW4gPSBnZXRfdG9rZW4gdCBpblxuICBsZXQgYmFzZV91cmwgPSB0LmJhc2VfdXJsIGluXG4gIEplbGx5ZmluX2FwaS5yZXF1ZXN0IH5iYXNlX3VybCB+dG9rZW5cbiIsIm9wZW4gU3RkXG5vcGVuIEJyclxuXG50eXBlIHRhZyA9IEJsb2NrIG9mIGludCB8IEludCBvZiBpbnRcblxubGV0IHRhZ19vZiB2ID1cbiAgKCogd293IHdvdyB3b3cuIGlzIHRoYXQgb2theXlpc2ggPyopXG4gIGxldCBvYmogPSBPYmoucmVwciB2IGluXG4gIGlmIE9iai5pc19ibG9jayBvYmogdGhlbiBCbG9jayAoT2JqLnRhZyBvYmopIGVsc2UgSW50IChPYmoubWFnaWMgb2JqKVxuXG5tb2R1bGUgdHlwZSBRdWVyaWVzID0gc2lnXG4gIHR5cGUgJ2EgcXVlcnlcbiAgdHlwZSAnYSBldmVudFxuZW5kXG5cbm1vZHVsZSBNYWtlIChRIDogUXVlcmllcykgPSBzdHJ1Y3RcbiAgdHlwZSBlcnJvciA9IFsgYEp2IG9mIEp2LkVycm9yLnQgfCBgTXNnIG9mIHN0cmluZyBdXG4gIHR5cGUgJ2EgcXVlcnkgPSAnYSBRLnF1ZXJ5XG4gIHR5cGUgJ2EgZXZlbnQgPSAnYSBRLmV2ZW50XG4gIHR5cGUgJ2Egd2l0aF91dWlkID0geyB1dWlkIDogc3RyaW5nOyBkYXRhIDogJ2EgfVxuICB0eXBlICdhIG1lc3NhZ2UgPSBBbnN3ZXIgb2YgJ2Egd2l0aF91dWlkIHwgRXZlbnQgb2YgKCdhIGV2ZW50ICogJ2EpXG4gIHR5cGUgbGlzdGVuZXIgPSBzdHJpbmdcblxuICAoKiB0b2RvOmNoZWNrIHRoYXQgdGhlIHdvcmtlciBhbmQgdGhlIGNsaWVudCBzaGFyZSB0aGUgc2FtZSBhcGk/ICopXG5cbiAgbW9kdWxlIFN0YXJ0X2NsaWVudCAoUCA6IHNpZ1xuICAgIHZhbCB1cmwgOiBzdHJpbmdcbiAgZW5kKSA9XG4gIHN0cnVjdFxuICAgIGxldCBmdXR1cmVzIDogKHN0cmluZywgSnYudCAtPiB1bml0KSBIYXNodGJsLnQgPSBIYXNodGJsLmNyZWF0ZSA2NFxuICAgIGxldCBsaXN0ZW5lcnMgOiAodGFnLCBKdi50IC0+IHVuaXQpIEhhc2h0YmwudCA9IEhhc2h0YmwuY3JlYXRlIDY0XG4gICAgbGV0IHdvcmtlciA9IEJycl93ZWJ3b3JrZXJzLldvcmtlci5jcmVhdGUgQEAgSnN0ci5vZl9zdHJpbmcgUC51cmxcblxuICAgIGxldCBxdWVyeSAodHlwZSBhKSAocXVlcnkgOiBhIHF1ZXJ5KSA6IChhLCBlcnJvcikgRnV0LnJlc3VsdCA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IGZ1dCwgc2V0ID0gRnV0LmNyZWF0ZSAoKSBpblxuICAgICAgbGV0IHNldCBqdiA9IHNldCBAQCBFbmNvZGluZ3Mub2ZfanYganYgaW5cbiAgICAgIGxldCBxdWVyeSA9IHsgdXVpZDsgZGF0YSA9IHF1ZXJ5IH0gfD4gRW5jb2RpbmdzLnRvX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5wb3N0IHdvcmtlciAoSnYub2ZfanN0ciBxdWVyeSk7XG4gICAgICBIYXNodGJsLmFkZCBmdXR1cmVzIHV1aWQgc2V0O1xuICAgICAgZnV0XG5cbiAgICBsZXQgbGlzdGVuICh0eXBlIGEpIChldmVudCA6IGEgZXZlbnQpIH4oZiA6IGEgLT4gdW5pdCkgOiBsaXN0ZW5lciA9XG4gICAgICBsZXQgdXVpZCA9IG5ld191dWlkX3Y0ICgpIHw+IFV1aWRtLnRvX3N0cmluZyBpblxuICAgICAgbGV0IHNldCBqdiA9IGYgKE9iai5tYWdpYyBqdikgaW5cbiAgICAgIEhhc2h0YmwuYWRkIGxpc3RlbmVycyAodGFnX29mIGV2ZW50KSBzZXQ7XG4gICAgICB1dWlkXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyBtZXNzYWdlID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBtYXRjaCBtZXNzYWdlIHdpdGhcbiAgICAgIHwgRXZlbnQgKGUsIHYpIC0+XG4gICAgICAgICAgSGFzaHRibC5maW5kX2FsbCBsaXN0ZW5lcnMgKHRhZ19vZiBlKSB8PiBMaXN0Lml0ZXIgfmY6KGZ1biBmIC0+IGYgdilcbiAgICAgIHwgQW5zd2VyIHsgdXVpZDsgZGF0YSB9IC0+XG4gICAgICAgICAgbGV0IGYgPSBIYXNodGJsLmZpbmQgZnV0dXJlcyB1dWlkIGluXG4gICAgICAgICAgSGFzaHRibC5yZW1vdmUgZnV0dXJlcyB1dWlkO1xuICAgICAgICAgIGYgZGF0YVxuXG4gICAgbGV0IF8gPVxuICAgICAgRXYubGlzdGVuIEJycl9pby5NZXNzYWdlLkV2Lm1lc3NhZ2Ugb25fbWVzc2FnZVxuICAgICAgQEAgQnJyX3dlYndvcmtlcnMuV29ya2VyLmFzX3RhcmdldCB3b3JrZXJcbiAgZW5kXG5cbiAgbW9kdWxlIHR5cGUgV29ya2VyX2ltcGwgPSBmdW5jdG9yICgpIC0+IHNpZ1xuICAgIHZhbCBvbl9xdWVyeSA6ICdhIHF1ZXJ5IC0+ICgnYSwgZXJyb3IpIEZ1dC5yZXN1bHRcbiAgZW5kXG5cbiAgbGV0IGRpc3BhdGNoX2V2ZW50ICh0eXBlIGEpIChlIDogYSBldmVudCkgKHYgOiBhKSA9XG4gICAgKCogbGV0IGRhdGEgPSBFbmNvZGluZ3MubWFyc2hhbF90b19qc3RyIHw+IEp2Lm9mX2pzdHIgaW4gKilcbiAgICBCcnJfd2Vid29ya2Vycy5Xb3JrZXIuRy5wb3N0IChFbmNvZGluZ3MudG9fanN0ciAoRXZlbnQgKGUsIHYpKSB8PiBKdi5vZl9qc3RyKVxuXG4gICgqKiBFeGVjdXRlIFcncyBib2R5IGFuZCBjb25maWd1cmUgbWVzc2FnaW5nICopXG4gIG1vZHVsZSBNYWtlX3dvcmtlciAoVyA6IFdvcmtlcl9pbXBsKSA9IHN0cnVjdFxuICAgIG9wZW4gQnJyXG4gICAgbW9kdWxlIFcgPSBXICgpXG5cbiAgICBsZXQgb25fbWVzc2FnZSBldiA9XG4gICAgICBsZXQgbWVzc2FnZSA9IEV2LmFzX3R5cGUgZXYgaW5cbiAgICAgIGxldCBvcGVuIFJlc3VsdCBpblxuICAgICAgaWdub3JlICgqIFRPRE86IGhhbmRsZXIgZXJyb3JzICopXG4gICAgICBAQFxuICAgICAgbGV0KyAoeyB1dWlkOyBkYXRhIH0gOiAnYSBxdWVyeSB3aXRoX3V1aWQpID1cbiAgICAgICAgQnJyX2lvLk1lc3NhZ2UuRXYuZGF0YSBtZXNzYWdlIHw+IEp2LnRvX2pzdHIgfD4gRW5jb2RpbmdzLm9mX2pzdHJcbiAgICAgIGluXG4gICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgbGV0KyByZXN1bHQgPSBXLm9uX3F1ZXJ5IGRhdGEgaW5cbiAgICAgIGxldCBkYXRhID0gRW5jb2RpbmdzLnRvX2pzdHIgcmVzdWx0IHw+IEp2Lm9mX2pzdHIgaW5cbiAgICAgIEJycl93ZWJ3b3JrZXJzLldvcmtlci5HLnBvc3RcbiAgICAgICAgKEVuY29kaW5ncy50b19qc3RyIChBbnN3ZXIgeyB1dWlkOyBkYXRhIH0pIHw+IEp2Lm9mX2pzdHIpXG5cbiAgICBsZXQgXyA9IEV2Lmxpc3RlbiBCcnJfaW8uTWVzc2FnZS5Fdi5tZXNzYWdlIG9uX21lc3NhZ2UgRy50YXJnZXRcbiAgZW5kXG5lbmRcbiIsIm9wZW4gU3RkXG5cbigqKiBTb21lIHNvcnRzIHJlcXVpcmUgYSBjdXN0b20gb3JkZXJpbmcgd2hpY2ggaXMgZG9uZSB1c2luZyBhIHRhYmxlIG9mIGluZGV4ZXMuIEZvciBleGFtcGxlLCB0byBnZXQgYSByYW5kb20gc29ydCB3ZSBzaW1wbGUgc2h1ZmZsZSBhbiBhcnJheSB3aGljaCBzaXplIGlzIHRoZSBvbmUgb2YgdGhlIHJlc3VsdC4gKilcbm1vZHVsZSBPcmRlciA9IHN0cnVjdFxuICB0eXBlIHQgPSBJbml0aWFsIHwgQXNjIHwgRGVzYyB8IEN1c3RvbSBvZiBpbnQgYXJyYXlcblxuICBsZXQgcmFuZG9tIH5zaXplID1cbiAgICBsZXQgdGJsID0gQXJyYXkuaW5pdCBzaXplIH5mOkZ1bi5pZCBpblxuICAgIGxldCAoKSA9IEFycmF5LnNodWZmbGUgdGJsIGluXG4gICAgQ3VzdG9tIHRibFxuXG4gIGxldCBvZl9zdHJpbmcgfnNpemUgPSBmdW5jdGlvblxuICAgIHwgXCJyYW5kb21cIiAtPiByYW5kb20gfnNpemVcbiAgICB8IFwiYXNjXCIgLT4gQXNjXG4gICAgfCBcImRlc2NcIiAtPiBEZXNjXG4gICAgfCBfIC0+IEluaXRpYWxcblxuICBsZXQgYXBwbHkgdCB+c2l6ZSBpID1cbiAgICBtYXRjaCB0IHdpdGhcbiAgICB8IEluaXRpYWwgfCBBc2MgLT4gaVxuICAgIHwgRGVzYyAtPiBzaXplIC0gMSAtIGlcbiAgICB8IEN1c3RvbSBhIC0+ICgqIHRvZG8gY2hlY2sgYm91bmRzICopIGEuKGkpXG5lbmRcblxubW9kdWxlIFNvcnQgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gRGF0ZV9hZGRlZCB8IE5hbWVcblxuICBsZXQgb2Zfc3RyaW5nID0gZnVuY3Rpb25cbiAgICB8IFwiZGF0ZV9hZGRlZFwiIC0+IERhdGVfYWRkZWRcbiAgICB8IFwibmFtZVwiIC0+IE5hbWVcbiAgICB8IF8gLT4gRGF0ZV9hZGRlZFxuZW5kXG5cbnR5cGUgJ2Egc2VsZWN0aW9uID0gQWxsIHwgT25seSBvZiAnYSBsaXN0XG50eXBlIGtpbmQgPSBBdWRpb1xudHlwZSBmaWx0ZXIgPSBTZWFyY2ggb2Ygc3RyaW5nXG5cbnR5cGUgcmVxID0ge1xuICBraW5kIDoga2luZDtcbiAgc3JjX3ZpZXdzIDogc3RyaW5nIHNlbGVjdGlvbjtcbiAgc29ydCA6IFNvcnQudDtcbiAgZmlsdGVycyA6IGZpbHRlciBsaXN0O1xufVxuXG50eXBlIHQgPSB7IHV1aWQgOiBVdWlkbS50OyByZXF1ZXN0IDogcmVxOyBzdGFydF9vZmZzZXQgOiBpbnQ7IGl0ZW1fY291bnQgOiBpbnQgfVxudHlwZSByYW5nZWQgPSB7IHZpZXcgOiB0OyBmaXJzdCA6IGludDsgbGFzdCA6IGludDsgb3JkZXIgOiBPcmRlci50IH1cblxubGV0IGl0ZW1fY291bnQgdCA9IHQuaXRlbV9jb3VudCAtIHQuc3RhcnRfb2Zmc2V0XG5cbmxldCByZXEga2luZCA/KHNyY192aWV3cyA9IEFsbCkgPyhzb3J0ID0gU29ydC5EYXRlX2FkZGVkKSA/KGZpbHRlcnMgPSBbXSkgKCkgPVxuICB7IGtpbmQ7IHNyY192aWV3czsgc29ydDsgZmlsdGVycyB9XG5cbmxldCBoYXNoIHJlcSA9IEhhc2h0YmwuaGFzaCAocmVxLnNyY192aWV3cywgcmVxLmZpbHRlcnMpXG4iLCJvcGVuISBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgQXBpID0gRFMuQXBpXG5cbnR5cGUgc2VydmVyID0gc3RyaW5nICogRFMuY29ubmV4aW9uXG5cbm1vZHVsZSBRdWVyaWVzID0gc3RydWN0XG4gIHR5cGUgJ2EgcXVlcnkgPVxuICAgIHwgU2V0X3Nlc3Npb25fdXVpZCA6IHN0cmluZyAtPiB1bml0IHF1ZXJ5XG4gICAgfCBBZGRfc2VydmVycyA6IHNlcnZlciBsaXN0IC0+IHVuaXQgcXVlcnlcbiAgICB8IEdldF9hbGwgOiB1bml0IC0+IEFwaS5JdGVtLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X2xpYnJhcmllcyA6IHVuaXQgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgR2V0X3NlcnZlcl9saWJyYXJpZXMgOiBzdHJpbmcgLT4gU3RvcmVzLkl0ZW1zLnQgbGlzdCBxdWVyeVxuICAgIHwgQ3JlYXRlX3ZpZXcgOiBWaWV3LnJlcSAtPiBWaWV3LnQgcXVlcnlcbiAgICB8IEdldCA6XG4gICAgICAgIFZpZXcudCAqIFZpZXcuT3JkZXIudCAqIGludCBhcnJheVxuICAgICAgICAtPiBTdG9yZXMuSXRlbXMudCBvcHRpb24gYXJyYXkgcXVlcnlcblxuICB0eXBlICdhIGV2ZW50ID0gU2VydmVyc19zdGF0dXNfdXBkYXRlIDogKHN0cmluZyAqIFN5bmMucmVwb3J0KSBldmVudFxuZW5kXG5cbmluY2x1ZGUgV29ya2VyX2FwaS5NYWtlIChRdWVyaWVzKVxuIiwiaW5jbHVkZSBTdGRcbm1vZHVsZSBEUyA9IERhdGFfc291cmNlLkplbGx5ZmluXG5tb2R1bGUgRWx3ZCA9IEJycl9sd2QuRWx3ZFxubW9kdWxlIFVpX3V0aWxzID0gQnJyX2x3ZF91aS5VdGlsc1xubW9kdWxlIFZpZXcgPSBEYi5WaWV3XG5tb2R1bGUgQXR0cnMgPSBCcnJfbHdkX3VpLkF0dHJzXG5cbm1vZHVsZSBTdHJpbmcgPSBzdHJ1Y3RcbiAgaW5jbHVkZSBTdHJpbmdcbiAgbW9kdWxlIE1NYXAgPSBDQ011bHRpTWFwLk1ha2UgKFN0cmluZylcbiAgbW9kdWxlIEl0ZW1zX011bHRpTWFwID0gTU1hcCAoRGIuU3RvcmVzLkl0ZW1zKVxuZW5kXG5cbm1vZHVsZSBVdGlscyA9IHN0cnVjdFxuICBsZXQgd2l0aF90aW1pbmcgPyhuYW1lID0gXCJcIikgZiA9XG4gICAgbGV0IHQgPSBCcnIuUGVyZm9ybWFuY2Uubm93X21zIEJyci5HLnBlcmZvcm1hbmNlIGluXG4gICAgbGV0IHJlcyA9IGYgKCkgaW5cbiAgICBCcnIuQ29uc29sZS5sb2dcbiAgICAgIFsgbmFtZTsgXCJ0b29rXCI7IEJyci5QZXJmb3JtYW5jZS5ub3dfbXMgQnJyLkcucGVyZm9ybWFuY2UgLS4gdCBdO1xuICAgIHJlc1xuZW5kXG4iLCJvcGVuIEltcG9ydFxuXG50eXBlIGxheW91dCA9IE1haW4gfCBLaW9za1xuXG5sZXQgYWN0aXZlX2xheW91dCA9IEx3ZC52YXIgTWFpblxuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyZXJcbm9wZW4gQnJyX2x3ZF91aVxuXG5tb2R1bGUgVHdvX3N0YXRlX2J1dHRvbiA9IHN0cnVjdFxuICBsZXQgYmFzZSA9IEF0dHJzLmNsYXNzZXMgWyBcImJ1dHRvblwiIF1cblxuICBsZXQgYXQgPSBmdW5jdGlvblxuICAgIHwgQnV0dG9uLk9uIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9uXCIgXVxuICAgIHwgT2ZmIC0+IEF0dHJzLmNsYXNzZXMgWyBcIm9mZlwiIF1cblxuICBsZXQgbWFrZSB+b25fY2xpY2sgPVxuICAgIGxldCBvbl9jbGljayA9IEJ1dHRvbi5oYW5kbGVyIEJyci5Fdi5jbGljayBvbl9jbGljayBpblxuICAgIEJ1dHRvbi50d29fc3RhdGUgfmJhc2UgfmF0IH5ldjpbIGBQIG9uX2NsaWNrIF1cbmVuZFxuXG5vcGVuIEJycmVyLkJyclxub3BlbiEgQnJyX2x3ZFxuXG5tb2R1bGUgRHJhZ2dhYmxlX3RhYmxlID0gc3RydWN0XG4gIG1vZHVsZSB0eXBlIFJvdyA9IHNpZ1xuICAgIHR5cGUgdFxuXG4gICAgdmFsIHJlbmRlciA6IHQgLT4gRWwudCBsaXN0XG4gIGVuZFxuXG4gICgqKiBDb2x1bW5zIGRlY2xhcmF0aW9uICopXG4gIG1vZHVsZSBDb2x1bW5zID0gc3RydWN0XG4gICAgdHlwZSBjb2x1bW4gPSB7IG5hbWUgOiBzdHJpbmc7IGNzc19zaXplIDogc3RyaW5nIH1cbiAgICB0eXBlIHQgPSBjb2x1bW4gYXJyYXlcblxuICAgIGxldCBjb2x1bW4gbmFtZSBjc3Nfc2l6ZSA9IHsgbmFtZTsgY3NzX3NpemUgfVxuXG4gICAgbGV0IHRvX3N0eWxlIHQgPVxuICAgICAgQXJyYXkudG9fc3RyaW5nIH5zZXA6XCIgXCIgKGZ1biB7IGNzc19zaXplOyBfIH0gLT4gY3NzX3NpemUpIHRcblxuICAgIGxldCB0b19oZWFkZXIgdCA9XG4gICAgICBsZXQgY2VsbHMgPVxuICAgICAgICBBcnJheS5mb2xkX3JpZ2h0IHQgfmluaXQ6W10gfmY6KGZ1biB7IG5hbWU7IF8gfSBhY2MgLT5cbiAgICAgICAgICAgIEVsLmRpdiBbIEVsLnR4dCcgbmFtZSBdIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBFbC5kaXYgY2VsbHNcblxuICAgIGxldCBzZXQgZWx0IHQgPVxuICAgICAgbGV0IHZhbHVlID0gSnN0ci52IEBAIHRvX3N0eWxlIHQgaW5cbiAgICAgIEVsLnNldF9pbmxpbmVfc3R5bGUgRWwuU3R5bGUuZ3JpZF90ZW1wbGF0ZV9jb2x1bW5zIHZhbHVlIGVsdFxuICBlbmRcblxuICBsZXQgZ3JpZCA9IEF0dHJzLmNsYXNzZXMgWyBcImRyYWdnYWJsZS10YWJsZVwiIF1cblxuICBsZXQgcmVuZGVyX3JvdyAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5zaGFyZWRfZHJhZ19kYXRhXG4gICAgICB+biAodF9yb3cgOiB0IEx3ZF90YWJsZS5yb3cpIHJvdyA9XG4gICAgbGV0IGFkZF9oaW50IH50b3AgZWwgPVxuICAgICAgbGV0IGMgPSBpZiB0b3AgdGhlbiBcImhvdmVyLXRvcFwiIGVsc2UgXCJob3Zlci1ib3R0b21cIiBpblxuICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgdHJ1ZSBlbFxuICAgIGluXG4gICAgbGV0IHJlbW92ZV9oaW50cyBlbCA9XG4gICAgICBMaXN0Lml0ZXIgWyBcImhvdmVyLXRvcFwiOyBcImhvdmVyLWJvdHRvbVwiIF0gfmY6KGZ1biBjIC0+XG4gICAgICAgICAgRWwuc2V0X2NsYXNzIChKc3RyLnYgYykgZmFsc2UgZWwpXG4gICAgaW5cbiAgICBsZXQgaXNfb25fdG9wIGUgPVxuICAgICAgbGV0IG1vdXNlX2V2ID0gRXYuRHJhZy5hc19tb3VzZSBAQCBFdi5hc190eXBlIGUgaW5cbiAgICAgIGxldCBvZmZzZXRfeSA9IEV2Lk1vdXNlLm9mZnNldF95IG1vdXNlX2V2IGluXG4gICAgICBsZXQgdGFyZ2V0ID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICAgIGxldCBzaXplX2ggPSBFbC5pbm5lcl9oIHRhcmdldCBpblxuICAgICAgb2Zmc2V0X3kgPC4gc2l6ZV9oIC8uIDIuXG4gICAgaW5cbiAgICBsZXQgZ2V0X2V2X3RhcmdldCBlID0gRXYuY3VycmVudF90YXJnZXQgZSB8PiBFdi50YXJnZXRfdG9fanYgfD4gRWwub2ZfanYgaW5cbiAgICBMd2Rfc2VxLmVsZW1lbnRcbiAgICBAQFxuICAgIGxldCBjZWxscyA9IFJvdy5yZW5kZXIgcm93IGluXG4gICAgYXNzZXJ0IChMaXN0Lmxlbmd0aCBjZWxscyA9IG4pO1xuICAgIGxldCBvbl9kcmFnX3N0YXJ0ID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcmFnc3RhcnQgKGZ1biBfIC0+XG4gICAgICAgICAgRG9jdW1lbnQuYm9keSBHLmRvY3VtZW50IHw+IEVsLnNldF9jbGFzcyAoSnN0ci52IFwiZHJhZ2dpbmdcIikgdHJ1ZTtcbiAgICAgICAgICBMd2Quc2V0IHNoYXJlZF9kcmFnX2RhdGEgQEAgU29tZSB0X3JvdylcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX292ZXIgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdvdmVyIChmdW4gZSAtPlxuICAgICAgICAgIGxldCB0YXJnZXQgPSBnZXRfZXZfdGFyZ2V0IGUgaW5cbiAgICAgICAgICByZW1vdmVfaGludHMgdGFyZ2V0O1xuICAgICAgICAgIGxldCB0b3AgPSBpc19vbl90b3AgZSBpblxuICAgICAgICAgIGxldCBub29wID1cbiAgICAgICAgICAgIGxldCBvcGVuIE9wdGlvbiBpblxuICAgICAgICAgICAgbGV0KyByb3cgPSBMd2QucGVlayBzaGFyZWRfZHJhZ19kYXRhIGluXG4gICAgICAgICAgICBsZXQgZXF1YWxfcHJldiByb3cgPVxuICAgICAgICAgICAgICBPcHRpb24ubWFwX29yIH5kZWZhdWx0OmZhbHNlIChFcXVhbC5waHlzaWNhbCByb3cpXG4gICAgICAgICAgICAgICAgKEx3ZF90YWJsZS5wcmV2IHRfcm93KVxuICAgICAgICAgICAgaW5cbiAgICAgICAgICAgIGxldCBlcXVhbF9uZXh0IHJvdyA9XG4gICAgICAgICAgICAgIE9wdGlvbi5tYXBfb3IgfmRlZmF1bHQ6ZmFsc2UgKEVxdWFsLnBoeXNpY2FsIHJvdylcbiAgICAgICAgICAgICAgICAoTHdkX3RhYmxlLm5leHQgdF9yb3cpXG4gICAgICAgICAgICBpblxuICAgICAgICAgICAgRXF1YWwucGh5c2ljYWwgdF9yb3cgcm93XG4gICAgICAgICAgICB8fCAodG9wICYmIGVxdWFsX3ByZXYgcm93KVxuICAgICAgICAgICAgfHwgKChub3QgdG9wKSAmJiBlcXVhbF9uZXh0IHJvdylcbiAgICAgICAgICBpblxuICAgICAgICAgIGlmIG5vdCAoT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmZhbHNlIG5vb3ApIHRoZW4gKFxuICAgICAgICAgICAgYWRkX2hpbnQgfnRvcCB0YXJnZXQ7XG4gICAgICAgICAgICAoKiA+IElmIHRoZSBtb3VzZSBpcyByZWxlYXNlZCBvdmVyIGFuIGVsZW1lbnQgdGhhdCBpcyBhIHZhbGlkIGRyb3AgdGFyZ2V0LFxuICAgICAgICAgICAgICAgPiB0aGF0IGlzLCBvbmUgdGhhdCBjYW5jZWxsZWQgdGhlIGxhc3QgZHJhZ2VudGVyIG9yIGRyYWdvdmVyIGV2ZW50LFxuICAgICAgICAgICAgICAgPiB0aGVuIHRoZSBkcm9wIHdpbGwgYmUgc3VjY2Vzc2Z1bC5cbiAgICAgICAgICAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MX0RyYWdfYW5kX0Ryb3BfQVBJL0RyYWdfb3BlcmF0aW9ucyNzcGVjaWZ5aW5nX2Ryb3BfdGFyZ2V0cyAqKVxuICAgICAgICAgICAgRXYucHJldmVudF9kZWZhdWx0IGUpKVxuICAgIGluXG4gICAgbGV0IG9uX2RyYWdfbGVhdmUgPVxuICAgICAgRWx3ZC5oYW5kbGVyIEV2LmRyYWdsZWF2ZSAoZnVuIGUgLT4gcmVtb3ZlX2hpbnRzIEBAIGdldF9ldl90YXJnZXQgZSlcbiAgICBpblxuICAgIGxldCBvbl9kcmFnX2VuZCA9XG4gICAgICBFbHdkLmhhbmRsZXIgRXYuZHJhZ2VuZCAoZnVuIF8gLT5cbiAgICAgICAgICBEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQgfD4gRWwuc2V0X2NsYXNzIChKc3RyLnYgXCJkcmFnZ2luZ1wiKSBmYWxzZSlcbiAgICBpblxuICAgIGxldCBvbl9kcm9wID1cbiAgICAgIEVsd2QuaGFuZGxlciBFdi5kcm9wIChmdW4gZSAtPlxuICAgICAgICAgIHJlbW92ZV9oaW50cyBAQCBnZXRfZXZfdGFyZ2V0IGU7XG4gICAgICAgICAgbGV0IF8gPVxuICAgICAgICAgICAgbGV0IG9wZW4gT3B0aW9uIGluXG4gICAgICAgICAgICBsZXQqIHJvdyA9IEx3ZC5wZWVrIHNoYXJlZF9kcmFnX2RhdGEgaW5cbiAgICAgICAgICAgIGxldCsgc2V0ID0gTHdkX3RhYmxlLmdldCByb3cgaW5cbiAgICAgICAgICAgIGlmIGlzX29uX3RvcCBlIHRoZW4gaWdub3JlIEBAIEx3ZF90YWJsZS5iZWZvcmUgfnNldCB0X3Jvd1xuICAgICAgICAgICAgZWxzZSBpZ25vcmUgQEAgTHdkX3RhYmxlLmFmdGVyIH5zZXQgdF9yb3c7XG4gICAgICAgICAgICBMd2RfdGFibGUucmVtb3ZlIHJvd1xuICAgICAgICAgIGluXG4gICAgICAgICAgTHdkLnNldCBzaGFyZWRfZHJhZ19kYXRhIE5vbmUpXG4gICAgaW5cbiAgICBFbHdkLmRpdlxuICAgICAgfmF0OlsgYFAgKEF0LmRyYWdnYWJsZSBAQCBKc3RyLnYgXCJ0cnVlXCIpIF1cbiAgICAgIH5ldjpcbiAgICAgICAgW1xuICAgICAgICAgIGBQIG9uX2RyYWdfc3RhcnQ7XG4gICAgICAgICAgYFAgb25fZHJhZ19vdmVyO1xuICAgICAgICAgIGBQIG9uX2RyYWdfbGVhdmU7XG4gICAgICAgICAgYFAgb25fZHJhZ19lbmQ7XG4gICAgICAgICAgYFAgb25fZHJvcDtcbiAgICAgICAgXVxuICAgICAgKExpc3QubWFwIGNlbGxzIH5mOihmdW4gYyAtPiBgUCBjKSlcblxuICBsZXQgbWFrZSAodHlwZSB0KSAobW9kdWxlIFJvdyA6IFJvdyB3aXRoIHR5cGUgdCA9IHQpIH5jb2x1bW5zXG4gICAgICA/KHRhYmxlIDogdCBMd2RfdGFibGUudCA9IEx3ZF90YWJsZS5tYWtlICgpKVxuICAgICAgPyhzaGFyZWRfZHJhZ19kYXRhIDogdCBMd2RfdGFibGUucm93IG9wdGlvbiBMd2QudmFyID0gTHdkLnZhciBOb25lKSAoKSA9XG4gICAgbGV0IGF0ID0gQXR0cnMudG9fYXQgZ3JpZCBpblxuICAgIGxldCB0YWJsZV9oZWFkZXIgPSBDb2x1bW5zLnRvX2hlYWRlciBjb2x1bW5zIGluXG4gICAgbGV0IHRhYmxlX2JvZHkgPVxuICAgICAgTHdkX3RhYmxlLm1hcF9yZWR1Y2VcbiAgICAgICAgKHJlbmRlcl9yb3cgKG1vZHVsZSBSb3cpIH5zaGFyZWRfZHJhZ19kYXRhIH5uOihBcnJheS5sZW5ndGggY29sdW1ucykpXG4gICAgICAgIEx3ZF9zZXEubW9ub2lkIHRhYmxlXG4gICAgaW5cbiAgICBsZXQgZWx0ID1cbiAgICAgIGxldCBvcGVuIEx3ZF9pbmZpeCBpblxuICAgICAgbGV0JCBlbHQgPVxuICAgICAgICBFbHdkLmRpdiB+YXQgWyBgUCB0YWJsZV9oZWFkZXI7IGBTIChMd2Rfc2VxLmxpZnQgdGFibGVfYm9keSkgXVxuICAgICAgaW5cbiAgICAgIGxldCAoKSA9IENvbHVtbnMuc2V0IGVsdCBjb2x1bW5zIGluXG4gICAgICBlbHRcbiAgICBpblxuICAgIChlbHQsIHRhYmxlKVxuZW5kXG5cbmxldCBwbGF5bGlzdF9jb2x1bW5zID1cbiAgRHJhZ2dhYmxlX3RhYmxlLkNvbHVtbnMuXG4gICAgW3wgY29sdW1uIFwiRmlyc3RDT2xcIiBcIjI1NnB4XCI7IGNvbHVtbiBcIlNlY29uZFwiIFwiMjU2cHhcIiB8XVxuXG5tb2R1bGUgUGxheWxpc3Rfcm93ID0gc3RydWN0XG4gIHR5cGUgdCA9IHN0cmluZyAqIHN0cmluZ1xuXG4gIGxldCByZW5kZXIgKGwsIHIpID0gWyBFbC5kaXYgWyBFbC50eHQnIGwgXTsgRWwuZGl2IFsgRWwudHh0JyByIF0gXVxuZW5kXG5cbmxldCBtYWtlX3RhYmxlIHJvd3MgPVxuICBsZXQgdGFibGUgPSBMd2RfdGFibGUubWFrZSAoKSBpblxuICBMaXN0Lml0ZXIgcm93cyB+ZjooZnVuIHNldCAtPiBpZ25vcmUgQEAgTHdkX3RhYmxlLmFwcGVuZCB+c2V0IHRhYmxlKTtcbiAgdGFibGVcblxubGV0IGRyYWdnYWJsZV90YWJsZSA/c2hhcmVkX2RyYWdfZGF0YSAoKSA9XG4gIERyYWdnYWJsZV90YWJsZS5tYWtlXG4gICAgKG1vZHVsZSBQbGF5bGlzdF9yb3cpXG4gICAgfmNvbHVtbnM6cGxheWxpc3RfY29sdW1ucyA/c2hhcmVkX2RyYWdfZGF0YVxuICAgIH50YWJsZTpcbiAgICAgIChtYWtlX3RhYmxlXG4gICAgICAgICBbXG4gICAgICAgICAgIChcInRvdG9cIiwgXCJyMVwiKTtcbiAgICAgICAgICAgKFwidGF0YVwiLCBcInIyXCIpO1xuICAgICAgICAgICAoXCJ0aXRpXCIsIFwicjNcIik7XG4gICAgICAgICAgIChcInRhXCIsIFwicjRcIik7XG4gICAgICAgICAgIChcInR1XCIsIFwicjVcIik7XG4gICAgICAgICBdKVxuICAgICgpXG4iLCJvcGVuIEltcG9ydFxub3BlbiBCcnJlclxub3BlbiBCcnJlci5CcnJcbm9wZW4hIEJycl9sd2RfdWlcbm9wZW4hIEJycl9sd2Rcbm1vZHVsZSBBcGkgPSBEUy5BcGlcblxuKCoqIEFwcGxpY2F0aW9uIHBhcnQgKilcblxuKCoqIENvbHVtbnMgZGVjbGFyYXRpb24gKilcbmxldCBjb2x1bW5zICgpID1cbiAgVGFibGUuQ29sdW1ucy5cbiAgICBbfFxuICAgICAgdiBcIk9yZGVyXCIgXCI1cmVtXCIgQEAgWyBgUCAoRWwudHh0JyBcIiNcIikgXTtcbiAgICAgIHYgXCJDb3ZlclwiIFwiNXJlbVwiIEBAIFsgYFAgKEVsLnR4dCcgXCJDb3ZlclwiKSBdO1xuICAgICAgdiBcIlRpdGxlXCIgXCIxZnJcIiBAQCBbIGBQIChFbC50eHQnIFwiVGl0bGVcIikgXTtcbiAgICB8XVxuXG5sZXQgbWFrZSB+cmVzZXRfcGxheWxpc3QgfmZldGNoID9zY3JvbGxfdGFyZ2V0XG4gICAgKHJhbmdlZF92aWV3IDogKFZpZXcucmFuZ2VkLCBEYi5Xb3JrZXJfYXBpLmVycm9yKSByZXN1bHQgb3B0aW9uIEx3ZC50KSA9XG4gIGxldCBpbWdfdXJsIHNlcnZlcl9pZCBpdGVtX2lkID1cbiAgICBsZXQgc2VydmVycyA9XG4gICAgICAoKiBzaG91bGQgdGhpcyBiZSByZWFjdGl2ZSA/ICopXG4gICAgICBMd2QucGVlayBTZXJ2ZXJzLmNvbm5leGlvbnMgfD4gTHdkX3NlcS50b19saXN0XG4gICAgaW5cbiAgICBsZXQgdXJsID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9NTBcIiBjb25uZXhpb24uYmFzZV91cmxcbiAgICAgICAgICBpdGVtX2lkXG4gICAgICB3aXRoIE5vdF9mb3VuZCAtPiBcInNlcnZlci1lcnJvci5wbmdcIlxuICAgIGluXG4gICAgQXQuc3JjIChKc3RyLnYgdXJsKVxuICBpblxuICBsZXQgcmVuZGVyIHZpZXcgc3RhcnRfaW5kZXhcbiAgICAgIHtcbiAgICAgICAgRGIuU3RvcmVzLkl0ZW1zLml0ZW0gPVxuICAgICAgICAgIHsgQXBpLkl0ZW0uaWQ7IG5hbWU7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IGltYWdlX2JsdXJfaGFzaGVzOyBfIH07XG4gICAgICAgIF87XG4gICAgICB9ID1cbiAgICBsZXQgcGxheV9mcm9tIHZpZXcgXyA9XG4gICAgICBpZ25vcmVcbiAgICAgICAgKGxldCBvcGVuIE9wdGlvbi5JbmZpeCBpblxuICAgICAgICAgbGV0KyB2aWV3ID0gdmlldyBpblxuICAgICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICAgICBsZXQrICh2aWV3IDogRGIuVmlldy5yYW5nZWQpID0gdmlldyBpblxuICAgICAgICAgcmVzZXRfcGxheWxpc3RcbiAgICAgICAgICAge1xuICAgICAgICAgICAgIHZpZXcgd2l0aFxuICAgICAgICAgICAgIHZpZXcgPVxuICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICB2aWV3LnZpZXcgd2l0aFxuICAgICAgICAgICAgICAgICBzdGFydF9vZmZzZXQgPSB2aWV3LnZpZXcuc3RhcnRfb2Zmc2V0ICsgc3RhcnRfaW5kZXg7XG4gICAgICAgICAgICAgICB9O1xuICAgICAgICAgICB9KVxuICAgIGluXG4gICAgbGV0IHBsYXlfb25fY2xpY2sgPVxuICAgICAgTHdkLm1hcCB2aWV3IH5mOihmdW4gdmlldyAtPiBFbHdkLmhhbmRsZXIgRXYuY2xpY2sgKHBsYXlfZnJvbSB2aWV3KSlcbiAgICBpblxuICAgIGxldCBpbWdfdXJsID1cbiAgICAgIG1hdGNoIChpbWFnZV9ibHVyX2hhc2hlcywgYWxidW1faWQpIHdpdGhcbiAgICAgIHwgeyBwcmltYXJ5ID0gTm9uZSB9LCBfIHwgXywgTm9uZSAtPlxuICAgICAgICAgIEx3ZC5yZXR1cm4gKEF0LnNyYyAoSnN0ci52IFwidHJhY2sucG5nXCIpKVxuICAgICAgfCBfLCBTb21lIGlkIC0+IEx3ZC5yZXR1cm4gKGltZ191cmwgc2VydmVyX2lkIGlkKVxuICAgIGluXG4gICAgbGV0IHN0YXR1cyA9XG4gICAgICBMd2QubWFwIChMd2QuZ2V0IFBsYXllci5ub3dfcGxheWluZykgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgU29tZSB7IGl0ZW0gPSB7IGlkID0gaXRlbV9pZDsgXyB9OyBfIH0gd2hlbiBTdHJpbmcuZXF1YWwgaXRlbV9pZCBpZCAtPlxuICAgICAgICAgICAgRWwuZGl2IH5hdDpbIEF0LmNsYXNzJyAoSnN0ci52IFwicGxheWluZ1wiKSBdIFsgRWwudHh0JyBcInw+XCIgXVxuICAgICAgICB8IFNvbWUgXyB8IE5vbmUgLT4gRWwuZGl2IFsgRWwudHh0JyAoc3RyaW5nX29mX2ludCAoc3RhcnRfaW5kZXggKyAxKSkgXSlcbiAgICBpblxuICAgIFtcbiAgICAgIGBSIHN0YXR1cztcbiAgICAgIGBSXG4gICAgICAgIChFbHdkLmRpdlxuICAgICAgICAgICB+ZXY6WyBgUiBwbGF5X29uX2NsaWNrIF1cbiAgICAgICAgICAgWyBgUiAoRWx3ZC5pbWcgfmF0OlsgYFIgaW1nX3VybDsgYFAgKEF0LndpZHRoIDUwKSBdICgpKSBdKTtcbiAgICAgIGBQIChFbC5kaXYgWyBFbC5zcGFuIFsgRWwudHh0JyBuYW1lIF0gXSk7XG4gICAgXVxuICBpblxuICBsZXQgcGxhY2Vob2xkZXIgX2kgPSBbXSBpblxuICBsZXQgdWlfdGFibGUgPVxuICAgIHsgVGFibGUudGFibGUgPSB7IGNvbHVtbnMgPSBjb2x1bW5zICgpIH07IHJvd19oZWlnaHQgPSBFbSA0LiB9XG4gIGluXG4gIGxldCBkYXRhX3NvdXJjZSA9XG4gICAgbGV0IHRvdGFsX2l0ZW1zID1cbiAgICAgIEx3ZC5tYXAgcmFuZ2VkX3ZpZXcgfmY6KGZ1bmN0aW9uXG4gICAgICAgIHwgU29tZSAoT2sgcmFuZ2VkKSAtPiBEYi5WaWV3Lml0ZW1fY291bnQgcmFuZ2VkLnZpZXdcbiAgICAgICAgfCBfIC0+IDApXG4gICAgaW5cblxuICAgIGxldCBmZXRjaCA9XG4gICAgICBMd2QubWFwIHJhbmdlZF92aWV3IH5mOihmdW4gdmlldyBpIC0+XG4gICAgICAgICAgbWF0Y2ggdmlldyB3aXRoXG4gICAgICAgICAgfCBTb21lIChPayB2aWV3KSAtPiBmZXRjaCB2aWV3IGlcbiAgICAgICAgICB8IF8gLT4gRnV0LmVycm9yIChgTXNnIFwiTm8gdmlldyAhXCIpKVxuICAgIGluXG4gICAgbGV0IHJlbmRlciA9IEx3ZC5wdXJlIChyZW5kZXIgcmFuZ2VkX3ZpZXcpIGluXG4gICAgeyBUYWJsZS5WaXJ0dWFsLnRvdGFsX2l0ZW1zOyBmZXRjaDsgcmVuZGVyIH1cbiAgaW5cbiAgVGFibGUuVmlydHVhbC5tYWtlIH51aV90YWJsZSB+cGxhY2Vob2xkZXIgP3Njcm9sbF90YXJnZXQgZGF0YV9zb3VyY2VcblxubGV0IG1ha2Vfbm93X3BsYXlpbmcgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaFxuICAgIChyYW5nZWRfdmlldyA6IChWaWV3LnJhbmdlZCwgRGIuV29ya2VyX2FwaS5lcnJvcikgcmVzdWx0IG9wdGlvbiBMd2QudCkgPVxuICBsZXQgc2Nyb2xsX3RhcmdldCA9IEx3ZC5nZXQgUGxheWVyLnBsYXlzdGF0ZS5jdXJyZW50X2luZGV4IGluXG4gIG1ha2UgfnNjcm9sbF90YXJnZXQgfnJlc2V0X3BsYXlsaXN0IH5mZXRjaCByYW5nZWRfdmlld1xuIiwib3BlbiBJbXBvcnRcbm9wZW4gQnJyXG5cbigqIFRoZSBzZXNzaW9uIHV1aWQgaXMgc3RvcmVkIHRvIHRoZSBsb2NhbCBzdG9yYWdlIGFuZCB1c2VkIHRvIGlkZW50aWZ5IGEgdXNlclxuICAgc2Vzc2lvbi4gVGhpcyBpcyByZXF1aXJlZCBieSBKZWxseWZpbiBhdXRob3JpemF0aW9uIHNjaGVtZS4gKilcbigqIFRoZSBvZmZpY2lhbCBjbGllbnQgZG9lcyBpdCBsaWtlIHRoaXM6XG5cbiAgIGZ1bmN0aW9uIGdlbmVyYXRlRGV2aWNlSWQoKSB7XG4gICAgICAgY29uc3Qga2V5cyA9IFtdO1xuXG4gICAgICAga2V5cy5wdXNoKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgIGtleXMucHVzaChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgaWYgKHdpbmRvdy5idG9hKSB7XG4gICAgICAgICAgIHJldHVybiBidG9hKGtleXMuam9pbignfCcpKS5yZXBsYWNlQWxsKCc9JywgJzEnKTtcbiAgICAgICB9XG5cbiAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICB9XG4qKVxubGV0IHNlc3Npb25fdXVpZCA9XG4gICgqIFdlIG5ldmVyIHJlYWN0IHRvIHRoaXMgdmFyIHdlIGNvdWxkIHJlcGxhY2UgaXQgKilcbiAgQnJyX2x3ZF91aS5QZXJzaXN0ZW50LnZhcl9mIH5rZXk6XCJzZXNzaW9uX3V1aWRcIiAoZnVuICgpIC0+XG4gICAgICBTdGQubmV3X3V1aWRfdjQgKCkgfD4gVXVpZG0udG9fc3RyaW5nKVxuXG5sZXQgXyA9XG4gIGxldCB1dWlkID0gTHdkLnBlZWsgc2Vzc2lvbl91dWlkIGluXG4gIERhdGFfc291cmNlLkplbGx5ZmluX2FwaS5zZXRfc2Vzc2lvbl91dWlkIHV1aWQ7XG4gIFdvcmtlcl9jbGllbnQucXVlcnkgKFNldF9zZXNzaW9uX3V1aWQgKEx3ZC5wZWVrIHNlc3Npb25fdXVpZCkpXG5cbmxldCBmZXRjaCByYW5nZWRfdmlldyBpID1cbiAgV29ya2VyX2NsaWVudC4ocXVlcnkgKEdldCAocmFuZ2VkX3ZpZXcuVmlldy52aWV3LCByYW5nZWRfdmlldy5vcmRlciwgaSkpKVxuXG5tb2R1bGUgUCA9IFBsYXllci5QbGF5YmFja19jb250cm9sbGVyIChzdHJ1Y3RcbiAgbGV0IGZldGNoID0gZmV0Y2hcbmVuZClcblxubGV0IGFwcCA9XG4gIGxldCBwbGF5bGlzdCA9IEJycl9sd2RfdWkuUGVyc2lzdGVudC52YXIgfmtleTpcInRvdG8xXCIgMCBpblxuICBsZXQgb25fY2xpY2sgXyBfID1cbiAgICBMd2Quc2V0IHBsYXlsaXN0IChMd2QucGVlayBwbGF5bGlzdCArIDEpO1xuICAgIExhbmcuc2V0IExhbmcuRW47XG4gICAgQnJyX2x3ZF91aS5CdXR0b24uTmV4dFxuICBpblxuICBsZXQgX2J0bl9taXgsIF8sIF8gPVxuICAgIFVpLlR3b19zdGF0ZV9idXR0b24ubWFrZSB+b25fY2xpY2sgKGZ1biBfIC0+XG4gICAgICAgIFtcbiAgICAgICAgICBgUlxuICAgICAgICAgICAgKEx3ZC5tYXAgKEx3ZC5nZXQgcGxheWxpc3QpIH5mOihmdW4gcGwgLT5cbiAgICAgICAgICAgICAgICAgRWwudHh0JyAoXCJjbGlja1wiIF4gc3RyaW5nX29mX2ludCBwbCkpKTtcbiAgICAgICAgXSlcbiAgaW5cbiAgbGV0IHN0YXR1cyA9XG4gICAgRWx3ZC5kaXZcbiAgICAgIH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXVxuICAgICAgWyBgUCAoRWwuaDEgWyBFbC50eHQnIFwiV2VsY29tZSB0byBPQ0FNSVhcIiBdKTsgYFIgKFNlcnZlcnMudWkgKCkpIF1cbiAgaW5cbiAgbGV0IHBsYXllcl91aSA9XG4gICAgbGV0IHBsYXllciA9IFAubWFrZSAoKSBpblxuICAgIEVsd2QuZGl2IH5hdDpbIGBQIChBdC5zdHlsZSAoSnN0ci52IFwiZ3JpZC1jb2x1bW46MS8tMVwiKSkgXSBbIGBSIHBsYXllciBdXG4gIGluXG4gIGxldCBmX3NlYXJjaCA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF90ZXh0aW5wdXQgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwicG91ZXRcIjsgZGVmYXVsdCA9IE5vbmU7IGxhYmVsID0gW10gfVxuICBpblxuICBsZXQgZl9zb3J0ID1cbiAgICBsZXQgb3BlbiBCcnJfbHdkX3VpLkZpZWxkX3NlbGVjdCBpblxuICAgIGxldCBvcHRpb25zID1cbiAgICAgIEx3ZC5wdXJlXG4gICAgICAgIChMd2Rfc2VxLm9mX2xpc3QgWyAoXCJkYXRlX2FkZGVkXCIsIFwiRGF0ZSBhZGRlZFwiKTsgKFwibmFtZVwiLCBcIk5hbWVcIikgXSlcbiAgICBpblxuICAgIG1ha2UgeyBuYW1lID0gXCJ2aWV3LXNvcnRcIjsgZGVmYXVsdCA9IFwiZGF0ZV9hZGRlZFwiOyBsYWJlbCA9IFtdIH0gb3B0aW9uc1xuICBpblxuICBsZXQgZl9vcmRlciA9XG4gICAgbGV0IG9wZW4gQnJyX2x3ZF91aS5GaWVsZF9zZWxlY3QgaW5cbiAgICBsZXQgb3B0aW9ucyA9XG4gICAgICBMd2QucHVyZVxuICAgICAgICAoTHdkX3NlcS5vZl9saXN0XG4gICAgICAgICAgIFsgKFwiYXNjXCIsIFwiQXNjXCIpOyAoXCJkZXNjXCIsIFwiRGVzY1wiKTsgKFwicmFuZG9tXCIsIFwiUmFuZG9tXCIpIF0pXG4gICAgaW5cbiAgICBtYWtlIHsgbmFtZSA9IFwidmlldy1vcmRlclwiOyBkZWZhdWx0ID0gXCJkZXNjXCI7IGxhYmVsID0gW10gfSBvcHRpb25zXG4gIGluXG4gIGxldCBmX3NvcnRfb3JkZXIgPSBMd2QucGFpciBmX3NvcnQudmFsdWUgZl9vcmRlci52YWx1ZSBpblxuICBsZXQgZmlsdGVycywgZl92YWx1ZSA9XG4gICAgbGV0IGZfbGlicmFyaWVzID1cbiAgICAgIGxldCBvcGVuIEJycl9sd2RfdWkuRmllbGRfY2hlY2tib3hlcyBpblxuICAgICAgbGV0IGNob2ljZXMgPVxuICAgICAgICBMd2Rfc2VxLmZvbGRfbW9ub2lkXG4gICAgICAgICAgKGZ1biAoXywgbCkgLT5cbiAgICAgICAgICAgIEx3ZF9zZXEubWFwXG4gICAgICAgICAgICAgIChmdW4gKGwgOiBEYi5TdG9yZXMuSXRlbXMudCkgLT5cbiAgICAgICAgICAgICAgICBDaGVjayAobC5pdGVtLmlkLCBbIGBQIChFbC50eHQnIGwuaXRlbS5uYW1lKSBdLCB0cnVlKSlcbiAgICAgICAgICAgICAgbClcbiAgICAgICAgICAoTHdkLnJldHVybiBMd2Rfc2VxLmVtcHR5LCBMd2QubWFwMiB+ZjpMd2Rfc2VxLmNvbmNhdClcbiAgICAgICAgICBTZXJ2ZXJzLnNlcnZlcnNfbGlicmFyaWVzXG4gICAgICBpblxuICAgICAgbWFrZSB7IG5hbWUgPSBcInBvdWV0XCI7IGRlc2MgPSBMd2Quam9pbiBjaG9pY2VzIH1cbiAgICBpblxuICAgIGxldCBmaWx0ZXJzID1cbiAgICAgIEVsd2QuZGl2XG4gICAgICAgIFtcbiAgICAgICAgICBgUiBmX3NvcnQuZmllbGQ7XG4gICAgICAgICAgYFIgZl9vcmRlci5maWVsZDtcbiAgICAgICAgICBgUiBmX3NlYXJjaC5maWVsZDtcbiAgICAgICAgICBgUiBmX2xpYnJhcmllcy5maWVsZDtcbiAgICAgICAgXVxuICAgIGluXG4gICAgKGZpbHRlcnMsIGZfbGlicmFyaWVzLnZhbHVlKVxuICBpblxuICBsZXQgbWFpbl92aWV3ID1cbiAgICBsZXQgdmlldyA9XG4gICAgICBVaV91dGlscy5tYXAzIGZfdmFsdWUgZl9zZWFyY2gudmFsdWUgZl9zb3J0X29yZGVyIH5mOihmdW4gbCB0IChzLCBvKSAtPlxuICAgICAgICAgIGxldCBmaWx0ZXJzID0gT3B0aW9uLm1hcCAoZnVuIHMgLT4gWyBEYi5WaWV3LlNlYXJjaCBzIF0pIHQgaW5cbiAgICAgICAgICBDb25zb2xlLmxvZ1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBcIlVwZGF0aW5nIG1haW4gdmlldzpcIjtcbiAgICAgICAgICAgICAgSnYub2Zfb3B0aW9uIH5ub25lOihKdi5vZl9zdHJpbmcgXCJcXFwiXFxcIlwiKSBKdi5vZl9zdHJpbmcgdDtcbiAgICAgICAgICAgICAgSnYub2ZfbGlzdCBKdi5vZl9zdHJpbmcgbDtcbiAgICAgICAgICAgICAgSnYub2Zfc3RyaW5nIHM7XG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGxldCBvcGVuIEZ1dC5SZXN1bHRfc3ludGF4IGluXG4gICAgICAgICAgbGV0IHNvcnQgPSBEYi5WaWV3LlNvcnQub2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgICBsZXQgb3BlbiBGdXQuUmVzdWx0X3N5bnRheCBpblxuICAgICAgICAgIFdvcmtlcl9jbGllbnQuY3JlYXRlX3ZpZXdcbiAgICAgICAgICAgIERiLlZpZXcuKHJlcSBBdWRpbyB+c3JjX3ZpZXdzOihPbmx5IGwpIH5zb3J0ID9maWx0ZXJzICgpKSlcbiAgICBpblxuICAgICgqIEZJWE1FICopXG4gICAgbGV0IHZpZXcgPSBMd2Quam9pbiB2aWV3IGluXG4gICAgTHdkLm1hcDIgdmlldyBmX3NvcnRfb3JkZXIgfmY6KGZ1biB2aWV3IChfLCBvcmRlcikgLT5cbiAgICAgICAgT3B0aW9uLm1hcFxuICAgICAgICAgIChmdW4gdmlldyAtPlxuICAgICAgICAgICAgbGV0IG9wZW4gUmVzdWx0IGluXG4gICAgICAgICAgICBsZXQrICh2aWV3IDogVmlldy50KSA9IHZpZXcgaW5cbiAgICAgICAgICAgIGxldCBzaXplID0gdmlldy5pdGVtX2NvdW50IGluXG4gICAgICAgICAgICBsZXQgb3JkZXIgPSBWaWV3Lk9yZGVyLm9mX3N0cmluZyB+c2l6ZSBvcmRlciBpblxuICAgICAgICAgICAgeyBWaWV3LnZpZXc7IGZpcnN0ID0gMDsgbGFzdCA9IDA7IG9yZGVyIH0pXG4gICAgICAgICAgdmlldylcbiAgaW5cblxuICBsZXQgbWFpbl9saXN0ID1cbiAgICBVaV9wbGF5bGlzdC5tYWtlIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaCBtYWluX3ZpZXdcbiAgaW5cbiAgbGV0IG5vd19wbGF5aW5nID1cbiAgICBsZXQgcGxheWxpc3QgPVxuICAgICAgTHdkLm1hcCAoTHdkLmdldCBQbGF5ZXIucGxheXN0YXRlLnBsYXlsaXN0KSB+ZjooZnVuY3Rpb25cbiAgICAgICAgfCBOb25lIC0+IEVsd2Quc3BhbiBbIGBQIChFbC50eHQnIFwiTm90aGluZyBwbGF5aW5nXCIpIF1cbiAgICAgICAgfCBTb21lIHBsYXlsaXN0IC0+XG4gICAgICAgICAgICBVaV9wbGF5bGlzdC5tYWtlX25vd19wbGF5aW5nIH5yZXNldF9wbGF5bGlzdDpQLnJlc2V0X3BsYXlsaXN0IH5mZXRjaFxuICAgICAgICAgICAgICAoTHdkLnB1cmUgKFNvbWUgKFJlc3VsdC5yZXR1cm4gcGxheWxpc3QpKSkpXG4gICAgaW5cbiAgICAoKnRvZG86IGRvIHdlIG5lZWQgdGhhdCBqb2luID8qKVxuICAgIEx3ZC5qb2luIHBsYXlsaXN0XG4gIGluXG4gIGxldCBiaWdfY292ZXIgPVxuICAgIGxldCBvcGVuIEF0dHJzLk8gaW5cbiAgICBsZXQgZGlzcGxheV9ub25lID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgQXBwX3N0YXRlLmFjdGl2ZV9sYXlvdXQpIH5mOihmdW5jdGlvblxuICAgICAgICB8IE1haW4gLT4gQXQuY2xhc3MnIChKc3RyLnYgXCJkaXNwbGF5LW5vbmVcIilcbiAgICAgICAgfCBLaW9zayAtPiBBdC52b2lkKVxuICAgIGluXG4gICAgbGV0IHN0eWxlID1cbiAgICAgIEx3ZC5tYXAgKEx3ZC5nZXQgUGxheWVyLm5vd19wbGF5aW5nKSB+ZjooZnVuIG5wIC0+XG4gICAgICAgICAgbGV0IHNyYyA9XG4gICAgICAgICAgICBtYXRjaCBucCB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gXCJ0cmFjay5wbmdcIlxuICAgICAgICAgICAgfCBTb21lIHsgaXRlbSA9IHsgaWQ7IGFsYnVtX2lkOyBzZXJ2ZXJfaWQ7IF8gfTsgXyB9IC0+XG4gICAgICAgICAgICAgICAgbGV0IGltYWdlX2lkID0gT3B0aW9uLnZhbHVlIH5kZWZhdWx0OmlkIGFsYnVtX2lkIGluXG4gICAgICAgICAgICAgICAgbGV0IHNlcnZlcnMgPSBMd2Rfc2VxLnRvX2xpc3QgKEx3ZC5wZWVrIFNlcnZlcnMuY29ubmV4aW9ucykgaW5cbiAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uIDogRFMuY29ubmV4aW9uID0gTGlzdC5hc3NxIHNlcnZlcl9pZCBzZXJ2ZXJzIGluXG4gICAgICAgICAgICAgICAgKCogdG9kbzogdGhpcyBpcyBkb25lIGluIG11bHRpcGxlIHBsYWNlcywgd2Ugc2hvdWxkIGZhY3RvclxuICAgICAgICAgICAgICAgICAgIHRoYXQgb3V0LiAqKVxuICAgICAgICAgICAgICAgIFByaW50Zi5zcHJpbnRmIFwiJXMvSXRlbXMvJXMvSW1hZ2VzL1ByaW1hcnk/d2lkdGg9ODAwJmZvcm1hdD1KcGdcIlxuICAgICAgICAgICAgICAgICAgY29ubmV4aW9uLmJhc2VfdXJsIGltYWdlX2lkXG4gICAgICAgICAgaW5cbiAgICAgICAgICBBdC5zdHlsZSAoSnN0ci52IChQcmludGYuc3ByaW50ZiBcImJhY2tncm91bmQtaW1hZ2U6IHVybCglUylcIiBzcmMpKSlcbiAgICBpblxuICAgIGxldCBhdCA9IFsgYFIgZGlzcGxheV9ub25lOyBgUCAoQXQuY2xhc3MnIChKc3RyLnYgXCJiaWctY292ZXJcIikpIF0gaW5cbiAgICBFbHdkLmRpdiB+YXQgWyBgUiAoRWx3ZC5kaXYgfmF0OlsgYFIgc3R5bGUgXSBbXSkgXVxuICBpblxuICBFbHdkLmRpdlxuICAgIH5hdDpCcnJfbHdkX3VpLkF0dHJzLih0b19hdCB+aWQ6XCJtYWluLWxheW91dFwiIEBAIGNsYXNzZXMgW10pXG4gICAgW1xuICAgICAgYFIgc3RhdHVzO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2XG4gICAgICAgICAgIH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcIml0ZW0tbGlzdFwiKSkgXVxuICAgICAgICAgICBbIGBSIGJpZ19jb3ZlcjsgYFIgZmlsdGVyczsgYFIgbWFpbl9saXN0IF0pO1xuICAgICAgYFJcbiAgICAgICAgKEVsd2QuZGl2IH5hdDpbIGBQIChBdC5jbGFzcycgKEpzdHIudiBcInBsYXlsaXN0XCIpKSBdIFsgYFIgbm93X3BsYXlpbmcgXSk7XG4gICAgICBgUiBwbGF5ZXJfdWk7XG4gICAgXVxuXG5sZXQgaXNfc3RvcmFnZV9wZXJzaXN0ZW50ID1cbiAgQnJyX2lvLlN0b3JhZ2UuKG1hbmFnZXIgRy5uYXZpZ2F0b3IgfD4gTWFuYWdlci5wZXJzaXN0KVxuXG5sZXQgXyA9XG4gIGxldCBvbl9sb2FkIF8gPVxuICAgIENvbnNvbGUubG9nIFsgXCJQZXJzaXN0ID9cIjsgaXNfc3RvcmFnZV9wZXJzaXN0ZW50IF07XG4gICAgbGV0IGFwcCA9IEx3ZC5vYnNlcnZlIEBAIGFwcCBpblxuICAgIGxldCBvbl9pbnZhbGlkYXRlIF8gPVxuICAgICAgaWdub3JlIEBAIEcucmVxdWVzdF9hbmltYXRpb25fZnJhbWVcbiAgICAgIEBAIGZ1biBfIC0+IGlnbm9yZSBAQCBMd2QucXVpY2tfc2FtcGxlIGFwcFxuICAgIGluXG4gICAgRWwuYXBwZW5kX2NoaWxkcmVuIChEb2N1bWVudC5ib2R5IEcuZG9jdW1lbnQpIFsgTHdkLnF1aWNrX3NhbXBsZSBhcHAgXTtcbiAgICBMd2Quc2V0X29uX2ludmFsaWRhdGUgYXBwIG9uX2ludmFsaWRhdGVcbiAgaW5cbiAgRXYubGlzdGVuIEV2LmRvbV9jb250ZW50X2xvYWRlZCBvbl9sb2FkIChXaW5kb3cuYXNfdGFyZ2V0IEcud2luZG93KVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFbnN1cmUgdGhhdCBbYXRfZXhpdF0gZnVuY3Rpb25zIGFyZSBjYWxsZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBwcm9ncmFtICopXG5cbmxldCBfID0gZG9fYXRfZXhpdCgpXG4iXX0=